跳转至

ACP(Agent Client Protocol)接口总览

ACP 是基于 JSON-RPC 2.0 的双向通信协议,用于 UI 客户端(如 TensorChat)与 Agent 子进程(如 OpenCode)之间的结构化交互。底层传输为 newline-delimited JSON,通过 stdin/stdout 管道通信,stderr 专用于日志。

核心设计

  • 消息两类:Request(有 id,需回应,发起方阻塞等待)与 Notification(无 id,单向推送)
  • 双向对称:Client 和 Agent 都可以发起 Request
  • 进程模型:Agent 作为 Editor 的子进程运行

接口分类

一、生命周期初始化

接口 方向 说明
initialize Client → Agent 握手,交换双方能力表(clientCapabilities / agentCapabilities),必须最先发送

二、会话管理

接口 方向 说明
session/new Client → Agent (Request) 创建新会话,返回 sessionId
session/load Client → Agent (Request) 加载历史会话,恢复上下文
session/prompt Client → Agent (Request) 发送用户任务,启动执行循环,不设超时,整个 turn 完成才回复
session/cancel Client → Agent (Request) 取消当前 prompt turn
session/setMode Client → Agent (Request) 切换工作模式(Chat / Agent)
session/setModel Client → Agent (Request) 切换当前会话绑定的 LLM 模型

三、扩展机制

接口 方向 说明
ext/method 双向 (Request) 扩展 RPC 命令,支持自定义功能(调试、插件等)
ext/notification 双向 (Notification) 扩展事件通知,轻量级单向同步

四、Agent → Client(反向消息)

接口 类型 说明
session/update Notification 执行过程状态推送(tool_call pending/completed、流式文本等)
session/request_permission Request 🔑 权限请求核心:Agent 发出后阻塞挂起,等待 UI 回复授权结果
fs/read_text_file / fs/write_text_file Request 反向文件系统调用,需 Client 在 initialize 时声明 fs 能力

session/update 的 sessionUpdate 类型

含义
plan 计划列表
tool_call 新 tool call(pending 状态)
tool_call_update 状态更新(in_progress / completed / failed)
agent_message_chunk 流式文本 token

权限请求流程要点

request_permission 是唯一让 Agent 完全阻塞的环节:

  • Agent 发送请求后挂起,stdin 仍在监听(可接收取消信号)
  • Client 弹出授权对话框,用户可选:允许一次 / 始终允许 / 拒绝 / 取消整个任务
  • "始终允许"后 Client 本地记忆偏好,同类操作后续自动放行
  • 取消 prompt turn 时,必须对所有 pending 的 request_permission 回复 outcome: "cancelled"

关键设计决策

问题 方案
fs 反向调用是否需要授权? 不需要,fs 能力在 initialize 阶段整体声明
多个 tool call 怎么处理? 每个 tool call 独立走一次 request_permission(除非已被 allow-always)
prompt turn 能设超时吗? 不应设超时,复杂任务可能持续 5-10 分钟
tool_call 状态流转 pending → in_progress → completed / failed

与相关协议的关系

  • ACP vs MCP:MCP 是模型与工具的协议(工具服务器),ACP 是 UI 与 Agent 的协议(客户端-代理),详见 A2A vs MCP
  • ACP vs A2AA2A 协议 是 Agent 间通信协议(点对点),ACP 是 Agent 与宿主编排器的协议
  • 三者互补:MCP 管工具,ACP 管编排,A2A 协议 管协作

参考

  • 官方文档:https://agentclientprotocol.com