跳到正文
SGSteven Guan

原子概念 / Agent Cancellation

取消语义

停止新行动并记录已开始操作的最终或未知结果。

要解决的问题用户停止任务时,如何处理已开始或已生效的动作?

检索别名:中断 · 停止任务

BLUEPRINT局部蓝图

01 输入

  1. 用户取消范围
  2. 在途模型与工具调用
  3. 已提交副作用记录
→

02 处理机制

  1. 阻止新行动
  2. 传播中断信号
  3. 收集最终或未知结果
  4. 按需创建补偿任务
→

03 输出与证据

  1. 取消状态与原因
  2. 已发生效果清单
  3. 待对账操作

停止新行动并记录已开始操作的最终或未知结果。

取消是一种控制请求,不是现实世界的回滚。用户停止研究,可以阻止下一次模型调用;正在执行的只读查询可能可中断;已经发送的消息或成功创建的记录则不能靠取消Run自动撤回。界面与状态机必须分别表达这些结果。

OpenCode固定研发源码允许provider与tool fibers被中断,同时保护最终工具和step事件发布。这个细节很重要:工作停止后,系统仍需要记录已经发生或尚不确定的动作。若为了快速响应取消而跳过所有最终写入,就可能留下外部成功、内部未知的孤儿操作。

建议区分cancel_requested、已停止新动作、工具取消确认、结果未知和不可撤销已完成。收到取消后先阻止新排队与新权限提交,再向可中断操作传播信号;对已经发出的写操作继续获取最小必要回执或进行对账。用户若要求补偿,应创建新的授权动作,不把补偿假装成原操作从未发生。

多Agent场景还要定义父取消如何传递到子任务,以及独立后台任务是否属于同一取消范围。关闭聊天窗口也不应被默认为取消所有Task。测试在模型输出、工具调用、批准等待与子Agent合并四个阶段分别取消,检查费用、事件完整性、后续动作和用户可见解释。最有用的反馈是“停止了什么、哪些已发生、哪些仍需确认”。

取消确认还应说明预算会怎样结算。已发出的模型请求和工具工作可能仍产生费用,供应商也未必提供立即终止所有底层计算的保证。产品应根据实际回执显示状态,不承诺“点击停止即零费用”。对于仍在确认效果的动作,保留可见入口,让用户避免重复发起同一工作。

实践重点:区分取消请求、可中断工作和不可撤销效果;保留最终状态写入。

验证抓手:在模型流和工具执行期间取消,检查账本与回执。

常见误区:把任务cancelled误当撤销邮件、交易或已写业务记录。

OpenCode:流、工具和取消源码;Agents SDK:Session接口源码。

RELATIONSHIP MAP

与其他节点的关系

箭头从本节点指向目标;关系是工程分析映射,不代表厂商合作或已披露的内部实现。

哪些节点指向本页 · 2
  • OpenCode — 实现 → 取消语义

    公开能力或可见源码体现取消语义的具体产品路线。

  • DeepSeek Harness — 实现 → 取消语义

    公开能力或可见源码体现取消语义的具体产品路线。

PRIMARY SOURCES

来源与阅读边界

来源按研究截止日整理。官方文档说明能力和约束,代码只证明对应版本,论文与讲座不自动证明生产效果。 资料截止:2026-10-15。

  1. OpenCode:流、工具和取消源码 ↗公开代码

    观察基线:2026-10-15;固定源码与具体发行版本分别核验。

  2. Agents SDK:Session接口源码 ↗公开代码

    观察基线:2026-10-15;固定源码与具体发行版本分别核验。