标准答案

  1. 前端通过 AbortController 或取消事件停止读取和展示,同时保留 messageId 与任务 ID;不能只把按钮改成“已停止”。
  2. 服务端收到取消后标记任务、传播取消信号到模型连接和工具调用,阻止新的 Agent 步骤;正在执行的不可取消动作要查询状态。
  3. 最终状态应区分 cancelled、completed 和 failed,保存已生成部分及取消时间,后续重试从新版本开始,不能把半截内容当成完整答案。

题目解析

取消存在竞态:服务端可能刚完成模型调用,或工具已经产生副作用。状态更新要用条件版本,不能承诺所有动作都能撤回。

网关或 SDK 取消连接不一定会自动取消供应商任务。应用要确认下游支持取消,或使用任务状态和预算回收孤儿任务。

用户看到停止后仍可能收到缓冲事件,客户端应按任务版本丢弃旧事件,而不是重新显示。

常见误区

  • 只取消浏览器 fetch,后台 Agent 仍继续调用工具。
  • 停止后直接删除消息,失去审计和重新生成依据。
  • 把所有取消都当成失败,无法区分用户主动停止。

作者信息