技能选择
在输入框里选一个技能(写周报、做表格、查资料),随消息一起发给后端。本页用插槽和公开 hooks 实现它。
在线示例使用示例数据;右侧是 onSend.content,不是真实后端请求或技能执行结果。技能选择只传递标识,后端需要按约定解析并执行相应能力。
这个功能是什么
用户点输入框工具栏上的「技能」按钮,从列表里选一项。选中的技能以标签形式出现在输入框里,发送时后端收到技能的 id,按这个技能处理请求。
用到的入口
代码
发送时,onSend 拿到的 content 里技能是一段引用:{ type: 'reference', protocolId: 'skill', sourceId: 'weekly-report', label: '写周报', … }。
交给适配器时,正文里技能写成 @写周报,同时输入的 references 里带上 { kind: 'skill', id: 'weekly-report', label: '写周报' }。
references 在请求中的位置由适配器决定,接入时需要与后端约定,见接入后端。不能假定所有协议都提供同名顶层字段。
变化
- 技能列表来自后端:
SkillButton里自己请求接口,chatkit 不参与。 - 用
/选技能:候选项中同时提供kind: 'skill'、value: skill.id与label;否则只是文本标签,不生成结构化引用。见 @ 与 /。 - 一次只能选一个技能:选之前用
composer.getContent()检查是否已有技能标签。 - 不用标签,用固定的选中态:把选中的技能存在自己的状态里,显示在
composer.bodyTop,发送时用onSend放进metadata。
为什么不内置
技能有哪些、怎么分类、后端怎么按技能处理请求,都需要业务方和自己的后端约定,不同产品差别很大。chatkit 提供位置(插槽)和通道(引用、metadata),功能本身由业务方实现。