请求取消
请求取消机制
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 可以级联取消其发出的并发权限请求。