用户中途取消,Agent 任务怎么停下来?

使用 AI Agent 时,经常会遇到这样的情况: 你让 Agent 分析一个项目,它先读取文件,再分析代码,然后准备修改几个文件。等了半天,你突然发现需求说错了,于是点击「停止」。 普通聊天中,停止生成文字通常就够了。但 Agent 不一样,它可能正在调用模型、执行工具、读写文件,甚至请求外部 API。 这时,一个问题就出现了:用户点击停止之后,Agent 真的停下来了吗? 如果只是让前端不再显示回答,后台任务可能还在运行。如果只停止当前模型请求,Agent 也可能在下一步继续调用工具。 因此,任务取消不是简单地增加一个停止按钮,而是需要让 Agent 的整个执行过程都能响应取消操作。 一、为什么 Agent 不能简单地停止生成? 先看一个常见的 Agent 执行过程: 用户提出需求 ↓ AI 分析任务 ↓ 调用搜索工具 ↓ 分析搜索结果 ↓ 调用文件处理工具 ↓ 整理结果 ↓ 返回回答 Agent 并不是一次性生成答案,而是根据每一步的执行结果,决定接下来做什么。 例如,用户让 Agent「搜索资料并生成一份报告」,它可能先搜索网页,再读取内容,最后生成报告。每一步都可能涉及新的模型请求或工具调用。 如果用户在搜索过程中点击停止,系统至少要解决三个问题: 不再发起新的模型请求。 不再启动新的工具调用。 尽可能停止已经运行的模型请求和工具任务。 前两个相对容易,第三个则取决于具体操作是否支持取消。 例如,正在执行的本地任务可能可以主动检查取消状态;已经提交给第三方服务的任务,则未必能被立即终止。 所以,停止 Agent,不只是停止它说话,还要阻止它继续做事。 二、给 Agent 一个「停止信号」 可以把 Agent 想象成一个正在执行任务的员工。 用户点击「停止」,就相当于通知这个员工:「先别继续做了。」 但光发出通知还不够。员工需要在工作过程中留意这条通知,收到后停止接下来的工作。 在程序中,这种通知可以通过「取消信号」实现。 以 JavaScript 为例,浏览器和 Node.js 都提供了 AbortController,可以用它发出取消信号。 const controller = new AbortController(); // 把信号传给支持取消的任务 const task = fetch("/api/agent/run", { method: "POST", signal: controller....

2026年07月09日 · 2 min · Leanku