ACP协议
Agent Client Protocol - 编辑器与AI Agent之间的标准化通信协议, 实现代码编辑、文件操作、命令执行等能力的无缝集成
ACP是什么
Agent Client Protocol 定义与核心价值
协议定义
ACP (Agent Client Protocol) 是一种标准化的通信协议, 用于在AI Agent与编辑器/IDE之间建立双向通信通道。它定义了一套统一的 消息格式和交互模式,使Agent能够安全、高效地操作编辑器环境。
核心目标
ACP旨在解决AI Agent与开发工具集成时的碎片化问题,提供统一的接口标准。 通过ACP,Agent可以执行文件读写、代码编辑、终端命令等操作, 而无需为每个编辑器单独适配。
安全设计
ACP内置安全机制,所有操作都需要用户授权。支持操作审计日志、 沙箱执行环境、敏感操作确认等特性,确保Agent行为透明可控, 防止意外或恶意操作。
即插即用
遵循ACP协议的Agent可以无缝接入任何支持该协议的编辑器, 实现"一次开发,处处运行"。编辑器开发者也只需实现一次ACP接口, 即可支持所有兼容Agent。
核心定位
MCP vs ACP vs Skill:三者的关系与区别
| 维度 | MCP | ACP | Skill |
|---|---|---|---|
| 全称 | Model Context Protocol | Agent Client Protocol | Agent Skill |
| 定位 | AI与外部世界的接口 | Agent与编辑器的接口 | Agent的能力单元 |
| 通信对象 | Model ↔ 外部工具/数据 | Agent ↔ 编辑器/IDE | Agent内部组件 |
| 核心功能 | 资源访问、工具调用、采样 | 文件操作、代码编辑、命令执行 | 特定任务的处理逻辑 |
| 传输层 | stdio / HTTP / SSE | stdio / HTTP / SSE | 内部函数调用 |
| 典型场景 | 查询数据库、调用API | 修改代码、运行测试 | 代码审查、Bug修复 |
MCP
让AI模型能够访问外部资源和工具。例如:通过MCP Server查询数据库、 获取GitHub信息、搜索文档等。MCP扩展了AI的"知识边界"。
ACP
让AI Agent能够操作编辑器环境。例如:读取文件内容、应用代码修改、 执行终端命令。ACP赋予Agent"动手能力"。
Skill
Agent内部的能力模块,封装特定任务的执行逻辑。例如:代码审查Skill、 重构Skill、测试生成Skill。Skill是Agent的"专业技能"。
技术架构
ACP的传输方式与核心组件
- 简单直接,易于调试
- 适合本地进程间通信
- 无需网络配置
- Claude Code默认方式
- 跨网络通信
- 易于负载均衡
- 标准Web基础设施
- 支持认证授权
- 服务器主动推送
- 实时双向通信
- 低延迟更新
- 适合流式响应
每个Agent要为VS Code、JetBrains、Vim等分别开发
各编辑器权限机制不同,用户无法统一管控
功能更新需要同步修改多个适配版本
Agent只需实现ACP接口,即可接入所有编辑器
标准化的权限请求与审计机制
功能更新只需修改Agent核心,无需重复适配
ACP就像"万能翻译器",让AI Agent用一种语言就能和所有编辑器沟通。
{"method": "apply_diff"}
决策大脑,决定做什么
标准语言,让AI和编辑器能沟通
执行者,真正操作文件和终端
Request类型
ACP定义的标准操作请求
{
"jsonrpc": "2.0",
"id": 1,
"method": "read_file",
"params": {
"path": "/project/src/main.js",
"offset": 1,
"limit": 50
}
}
Diff格式说明
ACP使用的代码差异格式
Unified Diff格式
ACP使用标准的Unified Diff格式来表示代码变更。这种格式被Git、SVN等版本控制系统广泛使用, 能够清晰地展示文件的增删改操作。
格式组成
- 文件头:标识原始文件和新文件
- Hunk头:@@ -start,count +start,count @@
- 上下文行:以空格开头,未变更的代码
- 删除行:以-开头,被删除的代码
- 新增行:以+开头,新增的代码
{
"jsonrpc": "2.0",
"id": 2,
"method": "apply_diff",
"params": {
"path": "src/utils.js",
"diff": "--- a/src/utils.js\n+++ b/src/utils.js\n@@ -10,7 +10,8 @@\n function calculateSum(arr) {\n if (!arr || arr.length === 0) {\n- return 0;\n+ return null;\n+ }\n return arr.reduce((sum, val) => sum + val, 0);\n }"
}
}
ACP+MCP+Skill+CLI协作
以修复Bug为例的6步协作流程