HarmonyOS鸿蒙Next中小艺智能体工作流绑卡后数据展示堆叠问题
HarmonyOS鸿蒙Next中小艺智能体工作流绑卡后数据展示堆叠问题 小艺智能体,走了一遍流程。工作流智能体,绑定工作流然后工作流绑卡,卡片的数据是通过端插件后台执行获取的固定数据来测试,但是为什么展示出来的结果会堆在一个列表里面
卡片使用的是模板,数据也是添加卡片时自动生成的数据

端插件后台执行,因为使用的数据是卡片自动生成的对象数组,所以我result选择了Array<Object>类型。
工程中的日志显示端插件返回的结果是正确的格式。怀疑是不是因为result不能选这种Array类型,导致该问题出现。

但是最后输出的结果不符合预期。

更多关于HarmonyOS鸿蒙Next中小艺智能体工作流绑卡后数据展示堆叠问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html
【解决方案】 尊敬的开发者,您好, 关于您反馈的问题,根据端插件配置文档描述:
输出参数:对应端侧应用回的数据规格,返回参数必须包含code和result字段,将具体返回数据放在result字段内。建议按文档来配置result选择Object类型。
更多关于HarmonyOS鸿蒙Next中小艺智能体工作流绑卡后数据展示堆叠问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
文档没有说明result字段只能用Object类型,创建字段的时候类型选择也没有任何限制。建议补充下端插件输出参数result的类型说明,或者限制该字段类型选择。实测result不能直接选数组(Array<Object>),会导致卡片数据堆叠。只能使用 Object 类型,文档里没有标注这点,容易踩坑。
尊敬的开发者,您好,
为了尽快解决您的问题,需要您进一步提供如下信息,我们这边复现定位问题:
- 意图参数
- 端插件名称
- 绑定插件对应应用的包名
- 绑卡的整体截图
帮你查了下AI反馈,这个问题本质上不是接口没返回成功,而是:
当前“小艺智能体”的卡片渲染层,并不会真正按 Array 去做结构化列表渲染,而是把对象直接当字符串 toString() 展示了。
所以你现在看到的:
[{image:'xxx', title:'xxx'}]
这种其实是:
对象数组被文本化输出了。
你日志里的返回其实是正常的
从截图看:
{
"result": [
{
"image": "...",
"itemName": "HUAWEI Pura 80 Pro+",
"price1": "¥9999"
}
]
}
这个结构本身没问题。
说明:
✅ 插件后台返回正常
✅ Array 结构正常
✅ result 字段也传成功了
问题出在:
智能体卡片模板引擎没有真正支持对象数组渲染。
目前你这个现象很像:
内部实际做了:
Text(result + '')
或者:
JSON.stringify(result)
所以整个 Array 被直接输出成字符串。
重点:
result 不是“不能传 Array”
而是:
当前卡片模板不支持自动遍历 Array
这两个是完全不同的。
你现在这个场景:
“商品列表卡片”
其实应该走:
- card schema
- list schema
- repeat 渲染
- 动态卡片组件
而不是直接把:
Array<Object>
塞给一个普通文本位。
从你截图左边“错误展示”能明显看出来:
系统直接把:
["HUAWEI Pura 80 Pro+"]
当普通字符串输出了。
而右边则是:
整个对象被 stringify。
说明:
当前绑定字段并没有进入“列表组件”。
建议你排查这几个地方:
1、卡片模板字段类型
确认:
result
到底是不是:
- 文本
- 对象
- 列表数据源
很多时候 UI 配置虽然选了:
Array<Object>
但实际模板组件并不支持。
2、是否有 repeat / forEach 渲染能力
如果平台支持:
循环渲染
列表绑定
repeat
forEach
应该用:
items:[]
然后:
- image -> 图片组件
- itemName -> Text
- price -> Text
逐项绑定。
3、不要直接返回复杂对象给文本组件
比如:
错误方式:
{
"result":[{...}]
}
然后:
{{result}}
这一定会 stringify。
应该:
{{result[0].itemName}}
或者:
列表循环。
4、部分智能体平台目前确实不支持复杂嵌套对象
这个很重要。
现在很多“小艺智能体”能力:
虽然参数配置里允许:
Array<Object>
但实际:
- UI 渲染
- 模板引擎
- 卡片协议
还没完全支持。
尤其:
动态对象数组 → 自动列表卡片
很多版本都不稳定。
你可以先做个验证:
把 result 改成:
{
"result":"测试文本"
}
如果正常显示。
再改:
{
"result":["A","B","C"]
}
如果开始 stringify。
基本就能确认:
当前卡片层不支持数组结构渲染。
现阶段最稳的方案:
不要直接传 Array 给 result。
改成:
- 后端拼装成 markdown/html/text
或者 - 使用真正的列表卡片 schema
否则很容易被系统直接 stringify。
加油,
该问题大概率出在卡片模板的数据绑定路径上,而非端插件返回 Array<Object> 类型本身。
端插件能正确返回数组,但卡片模板在解析数据时,如果未按照列表类卡片的方式配置循环渲染,就会把整个数组当成一个对象处理,导致所有数据项堆叠在同一区域显示。
建议两步检查:
- 确认卡片模板类型:如果数据是数组且需要分行展示,应使用列表布局模板,并在模板中为列表项绑定
{{$item.xxx}}格式的路径,而不是直接在根节点绑定数组。 - 如果模板已按列表配置,检查返回数据的外层结构。有时候卡片要求的数组需放在一个属性下(如
{ "list": [...] }),而端插件直接返回裸数组。可尝试在端插件中将result包装为{ "items": yourArray },同时让卡片模板查询items字段。
简单说,模板需要明确“在哪儿循环、每个子项用什么数据”,你现在遇到的问题就是它把整个数组当成单条数据渲进了同一个卡片体内。

