回答操作
对已有的对话重新来过:重新生成、编辑后重发。给了适配器对应的能力函数时显示。
两个操作
重新生成只出现在最新回答上;编辑可出现在任意一条属于当前运行时已知 Run 的用户消息上。正在生成、排队或加载历史时,两个操作不可用。适配器提供函数并不意味着缺少 Run 或原始输入的历史消息也能重发。
统一覆盖历史
编辑后重发与回复后重试(「重新生成」)都会覆盖目标轮次及之后的历史消息,保留之前的内容。编辑使用新输入,重试复用原始输入;旧内容不再参与后续上下文,也不会在刷新、翻页或重新打开会话后恢复。
后端必须支持相同的历史覆盖语义,才能提供 edit / regenerate 能力。请求未受理时恢复旧内容;已受理后生成失败则保留新轮次及失败状态。旧版本如需保存,应与当前主线分开。
用法
不需要配置。不想显示某一个时关掉:
配置项
配置项类型默认说明
在操作栏里加自己的按钮
message.actions 里的内容排在内置按钮之后:
完整例子见收藏与分享。
从代码里触发
说明
- 从历史恢复后,编辑需要能够定位所属轮次;重新生成还需要保存这一轮的原始输入。只有消息或终态记录而没有原始输入,不能保证重新生成成功,见后端约定。
- 重新生成复用原始输入,不会重新读取当前知识库、连接器等选择。编辑后的内置提交只携带编辑文本和可恢复的附件资源,不会自动保留原输入的
metadata或结构化引用;依赖这些字段时应由业务编辑入口调用useChatkitActions().edit(messageId, input)并补齐。 - 两种操作都不经过
onSend。旧内容会在重发时暂时移除;适配器拒绝受理时恢复。后端也必须支持一致地替换历史,界面变更本身不等于服务端已删除旧记录。 - 后端自己保存会话内容、又不能作废某一轮时,不要给这两个函数,按钮就不显示。见能力一览。
- 重新生成与编辑沿用发送的事件,载荷里的
via区分来源,见事件。统计提问量时重新生成不算新的提问。