请求取消
请求取消机制
ACP 使用 JSON-RPC 2.0 进行请求和获取响应。JSON-RPC 规范没有定义任何标准的请求取消机制,而是将其留给实现自行处理。
$/cancel_request 通知
为了提供一致的取消方法,ACP 定义了一个 $/cancel_request 通知,可以发送它来取消请求。
取消仍然是可选的,因为并非所有客户端或服务器都能实现它。例如,如果实现使用单线程同步编程语言,那么它几乎无法对 $/cancel_request 通知做出反应。
当支持取消的实现收到 $/cancel_request 通知时,该实现:
- 可以取消相应的请求活动以及与该请求相关的所有嵌套活动
- 可以在响应前完成发送任何待处理的通知
- 必须为原始请求发送以下响应之一:
- 带有适当数据的有效响应(如部分结果或取消标记)
- 带有代码
-32800(请求已取消)的错误响应
调用方可以通过等待远程端的响应来实现优雅的取消处理。
取消可以也在协议内按功能明确进行,以覆盖特定场景,如取消提示回合。
内部取消
请求也可以由执行方在不接收 $/cancel_request 的情况下内部取消:
- 客户端侧示例:用户关闭 IDE、切换到不同项目、文件变得不可用
- Agent 侧示例:达到 LLM 上下文限制、内部超时、资源限制
当发生内部取消时,执行方应当:
- 发送与收到
$/cancel_request时相同的-32800(已取消)错误响应 - 确保无论取消来源如何都保持一致的行为
示例:级联取消流程
Agent 可以级联取消其发出的并发请求。