失败与停止

一轮回答失败时默认显示失败卡片,运行中提供停止入口,无需额外开启。

失败

failure.tsx
import { Chatkit, useChatRuntime } from '@volcengine/chatkit';
import { createMockAdapter } from '@volcengine/chatkit/adapters/mock';
import '@volcengine/chatkit/styles.css';

const adapter = createMockAdapter({ getScenarioId: () => 'run-failed' });

// 后端给出失败结论:显示失败卡片,已经产出的内容保留。点推荐问题触发。
export default function Failure() {
  const runtime = useChatRuntime({ sessionId: 'failure', adapter });
  if (!runtime) return null;
  return <Chatkit runtime={runtime} settings={{ recommendations: ['开始一个会失败的任务'] }} />;
}
正文输出到一半后端失败新窗口打开

后端给出失败结论时,这一轮以失败卡片结束,已经产出的内容保留。后端一开始就失败(还没有任何回答)也有失败卡片。

失败的信息统一是 { code, message, retryable? }:code 由适配器或运行时提供,可能来自后端,也可能描述本地执行错误;retryable 是重试建议,不会触发自动重试,也不保证重试成功。传输连接断开还可能显示断连与恢复提示,不一定表示远端任务失败。 按错误码换失败卡片(比如配额用完时引导升级),见失败卡片与系统提示。

停止

stop.tsx
import { Chatkit, useChatRuntime } from '@volcengine/chatkit';
import { createMockAdapter } from '@volcengine/chatkit/adapters/mock';
import '@volcengine/chatkit/styles.css';

const adapter = createMockAdapter({ getScenarioId: () => 'slow-abortable' });

// 工具要跑十几秒:运行中发送按钮变成停止按钮,点它这一轮就此结束,状态行显示「已中断」。
export default function Stop() {
  const runtime = useChatRuntime({ sessionId: 'stop', adapter });
  if (!runtime) return null;
  return (
    <Chatkit
      runtime={runtime}
      settings={{ welcome: '发出后点输入框右侧的停止按钮', recommendations: ['跑一个很慢的任务'] }}
    />
  );
}
工具要跑十几秒:点停止新窗口打开

运行中,输入框没有待发内容时显示停止按钮。默认允许继续发送,有文字或已上传附件时切回发送按钮,把新消息加入队列;关闭 allowSendWhileSending 后,生成期间按钮保持停止状态。

  • 停下的一轮由运行状态行显示「已中断」,执行过程固定展开。
  • 调用后端 abort 后继续接收输出并保留执行位;终态事件或历史明确终态确认后才结束运行。失败或未确认不能伪造中止;缺少 abort 时不显示停止按钮。

运行中继续发送

默认情况下,回答生成中可以继续发送,新消息按顺序等待执行。只想禁止从输入框继续发送时可关闭:

<Chatkit sessions={sessions} settings={{ composer: { allowSendWhileSending: false } }} />

配置项

配置项类型默认说明
settings.composer.allowSendWhileSendingbooleantrue回答生成中是否允许继续发送。发送队列由 ChatKit 管理;设为 false 时,生成中按钮固定为停止,回车变成换行。
settings.runStatus.visiblebooleantrue是否显示状态行。关掉后执行过程也不再随它收起。
renderers.errorsRecord<string, ChatkitErrorRenderer>—失败卡片:按错误码登记,`*` 兜底。

说明

  • 已派发的一轮被用户停止后,事件中的 outcome 通常为 aborted;停止时已判定卡住则为 interrupted,尚未派发就取消则为 cancelled。运行状态 run.status 则是 interrupted,不能把它与事件结论混用。见指标。
  • allowSendWhileSending: false 不会删除已排队消息,也不阻止 useChatkitActions().send 等程序调用排队。
  • 排队、停止、结论判定是核心交互,不能定制。