什么是 ACP?

ACP(Agent Client Protocol,智能体客户端协议)是一种开放协议,用于标准化代码编辑器或其他交互式客户端与编码智能体之间的双向通信,覆盖会话生命周期、流式更新、权限请求以及可选的文件系统和终端操作。

快速了解

全称智能体客户端协议(Agent Client Protocol)
规范文档官方规范

工作原理

ACP 定义用户界面客户端与编码智能体之间的集成边界。客户端通常是 IDE 或编辑器,负责界面和本地资源访问;智能体接收提示词、协调模型与工具,并报告消息、计划、工具调用、代码差异、终端输出和完成状态。ACP 使用 JSON-RPC 2.0 方法处理请求与响应,使用通知承载无需响应的单向事件。

每条 v1 连接都从 initialize 开始。双方协商整数形式的线协议版本并声明可选能力;未声明的能力必须视为不支持。随后,客户端通过 session/new 创建会话,或在能力允许时通过 session/loadsession/resume 恢复会话。一轮交互由 session/prompt 发起,通过 session/update 流式报告进度,并在原请求返回 end_turnrefusalcancelled 等停止原因时结束。

ACP 是双向协议。客户端调用智能体的初始化和会话方法;智能体则可以在完成能力协商后调用客户端的 session/request_permissionfs/read_text_filefs/write_text_fileterminal/create 等方法。这样,智能体能够读取尚未保存的编辑器内容、使用原生权限选择、展示结构化代码差异并附加实时终端输出,同时不必接管编辑器界面。

ACP 不规定模型行为,不保证生成代码安全,也不会把一次权限弹窗自动变成后端授权。客户端应把每个会话绑定到明确的绝对工作目录,限制附加根目录,校验所有路径,限制终端输出,隔离子进程凭证,并在高影响操作前展示真实参数。智能体仍需验证工具输入、执行预算和取消传播,记录外部副作用,并对超时或进程异常后的未知写入结果进行对账。

ACP 与 MCP 解决不同层次的互操作问题。ACP 连接编码界面和智能体运行时;MCP 连接 AI 应用或智能体与工具、资源、提示模板。ACP 可以在创建会话时传递 MCP 服务器配置,但这不会合并两种协议,也不会转移授权。A2A 面向独立智能体之间的通信,LSP 面向诊断和符号导航等语言智能。它们可以组合,但不能互相替代。

主要特点

  • 基于 JSON-RPC 2.0,在用户界面客户端与编码智能体之间建立双向契约
  • 通过必需的 initialize 方法协商线协议版本和双方能力
  • 覆盖会话创建、提示、流式更新、取消,以及可选的加载与恢复
  • 文件、终端、信息征询和权限接口均由客户端声明能力后才能调用
  • 以结构化事件表达消息、计划、工具状态、文件位置、代码差异、用量和终端流
  • 通过带命名空间的自定义方法、元数据和显式能力声明扩展协议

常见用途

  1. 让一个编码智能体运行时接入多个 IDE,避免为每个编辑器维护专用集成
  2. 由编辑器以受控子进程方式嵌入本地命令行编码智能体
  3. 在原生开发界面中展示智能体计划、工具进度、代码差异和终端输出
  4. 让智能体通过客户端控制的文件接口读取未保存缓冲区或写入文件
  5. 在双方支持相应能力时加载或恢复彼此独立的编码会话

示例

loading...
Loading code...

常见问题

ACP 解决什么问题?

ACP 避免每个编码智能体与每个编辑器都开发一套专用集成。它为初始化、会话、提示、流式更新、权限、文件、终端和取消提供共享契约,同时允许双方通过能力协商选择可选功能。

ACP 和 MCP 有什么区别?

ACP 连接 IDE 等交互式客户端与编码智能体,承载面向用户的会话;MCP 连接 AI 应用或智能体与外部工具、资源和提示模板。ACP 会话可以向智能体提供 MCP 服务器配置,但 ACP 权限选择不能替代 MCP 服务器内部的授权。

ACP v1 是否要求每个客户端都开放文件和终端能力?

不要求。文件系统、终端、信息征询、会话加载等功能都受能力声明控制。未声明的能力必须视为不支持,实现不得调用对应的可选方法。

ACP 的权限响应能否保证工具调用安全?

不能。客户端权限选择只表达用户对界面所展示操作的意图。智能体和下游服务仍需校验参数、认证主体、验证租户和对象权限、限制凭证、处理重复副作用并保留审计记录。

ACP 取消操作应如何实现?

客户端发送 `session/cancel` 通知,将待处理权限请求答复为已取消,并同步标记未完成工具调用。智能体应尽快停止模型和工具任务,在结束原提示请求前发送必要的最终更新,并返回 `cancelled` 停止原因,而不是难以解释的传输错误。

相关工具

相关术语

相关文章