请求取消

请求取消机制

ACP 使用 JSON-RPC 2.0 发起请求并获取响应。

JSON-RPC 规范没有定义任何标准的请求取消机制,而是将其留给实现处理。

$/cancel_request 通知

为了提供一致的取消方法,ACP 定义了一个 $/cancel_request 通知,可以发送以取消请求。

取消仍然是可选的,因为并非所有客户端或服务器都能实现它。例如,如果实现使用单线程同步编程语言,那么它几乎无法对 $/cancel_request 通知做出反应。

当支持的实现收到 $/cancel_request 通知时,该实现:

  • 可以 取消相应的请求活动及与该请求相关的所有嵌套活动
  • 可以 在响应前完成发送任何待处理的通知
  • 必须 为原始请求发送以下响应之一:

调用方 可以 通过等待远程端的响应来实现优雅的取消处理。

取消 也可以 在协议内按功能显式执行,以覆盖特定场景,如取消活动会话工作

内部取消

请求也可以由执行方内部取消,而无需接收 $/cancel_request

  • 客户端示例:用户关闭 IDE、切换到不同项目、文件变得不可用
  • Agent 示例:达到 LLM 上下文限制、内部超时、资源约束

当内部取消发生时,执行方 应该

  • 发送与收到 $/cancel_request 时相同的 -32800(已取消)错误响应
  • 确保无论取消来源如何都有一致的行为

示例:级联取消流程

Agent 可以级联取消其发出的并发权限请求。