内容提要
Chat SDK 代理现可通过 json-render 流式生成 UI:代理按类型化组件目录写出 JSON 规格,再转换为 Chat SDK 卡片,各适配器以平台原生格式(如 Slack 的 Block Kit、Teams 的 Adaptive Cards)发布。目录涵盖表格、图表、按钮等,无需为每种消息形态单独开发工具。streamCard 在根元素有内容后发布卡片,并随新元素流入更新消息,默认每 500 毫秒编辑一次;流结束后显示最终校验过的卡片。toCard 会按组件模式校验属性,无效时抛出 CardSpecError 并列出问题,便于让模型修正。平台对单条消息有容量上限,可传入限制拒绝超限规格。
延伸解读
流式生成 UI 的工作机制
代理根据类型化组件目录生成 JSON 规格,json-render 将其转换为 Chat SDK 卡片,各适配器再以平台原生格式发布。streamCard 在根元素有内容后立即发布卡片,并随新元素流入更新消息,默认每 500 毫秒编辑一次,与 Chat SDK 的流式间隔一致。流结束后显示最终校验过的卡片。
校验与错误处理
toCard 会按组件模式校验每个元素的属性,无效时抛出 CardSpecError 并列出具体问题,便于将问题列表返回给模型以修正规格。这有助于在生成过程中及早发现并纠正错误,确保最终卡片符合预期结构。
平台容量限制与适配器行为
平台对单条消息有容量上限,Chat SDK 适配器会降级处理超限内容,例如 Slack 适配器将第二个表格转为代码块。为避免这种降级,可以传入限制来拒绝超限规格,从而确保内容以预期形式呈现。
Q&A
Chat SDK 代理如何通过 json-render 流式生成 UI?
代理根据类型化组件目录编写 JSON 规格,json-render 将其转换为 Chat SDK 卡片,各适配器再以平台原生格式(如 Slack 的 Block Kit、Teams 的 Adaptive Cards)发布。
json-render 的组件目录包含哪些内容?
目录涵盖表格、图表、按钮等组件,因此无需为每种消息形态单独开发和维护工具。
streamCard 是如何实现流式更新卡片的?
streamCard 在根元素有内容后发布卡片,并随着新元素流入更新消息,默认每 500 毫秒编辑一次;流结束后显示最终校验过的卡片。
toCard 如何校验 JSON 规格?
toCard 会按组件模式校验每个元素的属性,无效时抛出 CardSpecError 并列出每个问题,便于将问题列表返回给模型修正。
平台对消息容量有限制时如何处理?
平台对单条消息有容量上限,Chat SDK 适配器会降级处理超限内容(如 Slack 适配器将第二个表格转为代码块),也可以传入限制来拒绝超限规格。
如何在代理中集成 json-render 来流式生成卡片?
使用 defineCatalog 定义组件目录,在代理被提及时调用 streamText 生成文本流,再通过 streamCard 将流式内容发布为卡片。