不能定制的部分

chatkit 有几处不开放定制:核心交互与指标口径。本页列出它们,并说明原因和替代做法。

为什么

  • 核心交互一致,用户在不同产品里的操作习惯才一致,后端和界面对「一轮」的理解才一致。
  • 指标口径一致,不同接入方的首字延迟、完成率才能放在一起比较。

核心交互

不能定制的可以做的
发送之后的流程:受理、排队、派发发送前用 onSend 改写或拦下;settings.composer.allowSendWhileSending: false 只禁止从输入框继续发送,不关闭运行时队列
停止的行为:点停止后这一轮立即结束后端有停止接口时给适配器 abort 函数
一轮什么时候算结束、结论是什么适配器报告远端结果;运行时统一处理本地错误、停止与取消。显示配置不能把失败改成成功或把断连视为已完成
消息的顺序、用户消息与回答的对应关系无
流式输出时的滚动与贴底无
重新生成、编辑后重发时哪些内容被替换用 features 关掉对应按钮
内置功能的显示条件用 features 关掉;不能让条件不满足的功能显示
插槽的位置17 个位置里选;内容类的需求用业务卡片

指标口径

不能定制的可以做的
事件的名字、触发时机、载荷字段在 useChatSessions / useChatRuntime 的选项中用 eventAttributes 添加运行时事件属性;它不是 <Chatkit> 的 prop
一轮的结论分类(完成、空回复、失败、用户停止、中断、取消)在自己的看板里按结论再分组
耗时的起止点(首字延迟、总耗时、工具耗时)无
事件里不带用户输入与回答正文需要正文时从自己的后端取

口径见指标,事件见事件。

整条消息、整个消息区的显示

没有「整条消息自己显示」或「整个消息区自己显示」的入口。消息的显示由几个部分组成,每个部分各有入口:

想改的入口
消息前后加内容slots 的 message.header、message.footer
操作栏加按钮slots 的 message.actions
回答里的业务内容renderers.parts
工具调用renderers.tools
失败卡片、系统提示renderers.errors、renderers.events
Markdown 元素renderers.markdown
颜色、圆角、字体主题

样式

对外承诺的只有样式 token、chatkit-* 类名与 data-* 属性。生成的类名和 DOM 层级随版本变化,不要依赖,见主题。

需要的能力不在这里时

先对照 settings / features / slots / renderers 怎么选确认没有现成的入口。确实没有时,把场景反馈给 chatkit 团队:新的位置、新的配置项按版本与兼容承诺加入。