第十部分

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的传输方式与核心组件

stdio
标准输入输出传输
  • 简单直接,易于调试
  • 适合本地进程间通信
  • 无需网络配置
  • Claude Code默认方式
HTTP
HTTP/RESTful传输
  • 跨网络通信
  • 易于负载均衡
  • 标准Web基础设施
  • 支持认证授权
SSE
Server-Sent Events
  • 服务器主动推送
  • 实时双向通信
  • 低延迟更新
  • 适合流式响应
ACP架构交互图
?
ACP的核心价值:统一标准,一处开发处处运行
没有ACP时
🔀
碎片化适配

每个Agent要为VS Code、JetBrains、Vim等分别开发

🔒
安全不可控

各编辑器权限机制不同,用户无法统一管控

🔄
维护成本高

功能更新需要同步修改多个适配版本

AI Agent
VS Code适配
JetBrains适配
Vim适配
其他...
VS
有了ACP后
🔌
一次开发

Agent只需实现ACP接口,即可接入所有编辑器

🛡️
统一安全

标准化的权限请求与审计机制

快速迭代

功能更新只需修改Agent核心,无需重复适配

AI Agent
ACP协议
VS Code JetBrains Vim Trae
🎯
核心价值

ACP就像"万能翻译器",让AI Agent用一种语言就能和所有编辑器沟通。

💡 生活类比:你(用户)告诉服务员(AI Agent)想吃什么,服务员把订单写在标准格式的订单纸上(ACP请求),传给厨房(编辑器),厨房按订单做菜,最后把菜端给你。
实际工作流程演示
🐛
场景:让AI帮你修复登录bug 用户对AI说:"帮我修复登录bug"
👤 用户
发送请求
"修复登录bug"
🤖 AI Agent 决策大脑
分析问题
🔍 搜索代码 📖 读取文件 ✏️ 修改代码
ACP请求
📋 ACP协议 万能翻译
转换标准格式
{"method": "apply_diff"}
发送
💻 编辑器 执行者
执行操作
📝 修改文件 ⚡ 运行命令 ✅ 返回结果
完成
🎉 完成
Bug已修复!
用户发起
AI决策
ACP转换
编辑器执行
完成反馈
核心要点
🧠
AI Agent

决策大脑,决定做什么

📋
ACP协议

标准语言,让AI和编辑器能沟通

💻
编辑器

执行者,真正操作文件和终端

点击上方组件或"演示数据流"按钮查看ACP架构的数据流动过程。

Request类型

ACP定义的标准操作请求

ACP协议定义了一组标准化的Request类型,每个Request都有固定的JSON格式, 包含method、params、id等字段,遵循JSON-RPC 2.0规范。
Request类型模拟器
?
read_file
读取文件内容
write_file
写入文件内容
apply_diff
应用代码差异
execute_command
执行终端命令
list_directory
列出目录内容
search_files
搜索文件内容
JSON Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "read_file",
  "params": {
    "path": "/project/src/main.js",
    "offset": 1,
    "limit": 50
  }
}
点击上方卡片切换不同的Request类型,查看对应的请求格式和参数说明。

Diff格式说明

ACP使用的代码差异格式

Unified Diff格式

ACP使用标准的Unified Diff格式来表示代码变更。这种格式被Git、SVN等版本控制系统广泛使用, 能够清晰地展示文件的增删改操作。

格式组成

  • 文件头:标识原始文件和新文件
  • Hunk头:@@ -start,count +start,count @@
  • 上下文行:以空格开头,未变更的代码
  • 删除行:以-开头,被删除的代码
  • 新增行:以+开头,新增的代码
ACP的apply_diff请求会验证diff的适用性,如果原始代码与diff中的上下文不匹配, 操作将失败并返回错误信息,防止错误的代码变更。
src/utils.js Unified Diff
1 --- a/src/utils.js
2 +++ b/src/utils.js
3 @@ -10,7 +10,8 @@
4 function calculateSum(arr) {
5 if (!arr || arr.length === 0) {
6 return 0;
6 return null;
7 }
8 return arr.reduce((sum, val) => sum + val, 0);
9 }
apply_diff Request示例
{
  "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步协作流程

场景示例:用户报告一个Bug:"登录功能在密码包含特殊字符时失败"。 让我们看看ACP、MCP、Skill和CLI如何协作解决这个问题。
1
问题分析与任务规划
Agent接收用户报告的Bug,使用规划Skill分析问题的可能原因, 制定修复计划:1) 查找登录相关代码 2) 分析密码处理逻辑 3) 定位特殊字符处理问题 4) 修复并验证
Skill: TaskPlanner
2
代码搜索与定位
Agent通过ACP发送search_files请求,在代码库中搜索登录相关代码; 然后使用read_file读取可疑文件,定位到密码验证函数。
ACP: search_files ACP: read_file
3
获取外部知识
Agent发现代码使用了某种编码方式处理密码,通过MCP查询相关文档, 了解该编码对特殊字符的处理规则,确认问题根源。
MCP: 文档查询 MCP: 最佳实践
4
应用代码修复
Agent使用代码修复Skill生成正确的代码变更, 通过ACP的apply_diff请求将修复应用到文件中。
Skill: CodeFixer ACP: apply_diff
5
验证与测试
Agent通过ACP执行测试命令验证修复是否成功, 使用测试Skill检查是否有回归问题。
ACP: execute_command Skill: TestRunner
6
通知用户与归档
Agent通过CLI工具向用户推送修复结果,在禅道中更新Bug状态为已解决, 并将修复记录归档到知识库。
CLI: 钉钉通知 CLI: 禅道更新
协作架构图
Agent Core
协调调度
MCP
外部数据/工具
ACP
编辑器操作
Skill
专业能力
CLI
企业平台
协同工作
完成复杂任务
Agent Core作为中央协调器,根据任务需求调度MCP、ACP、Skill和CLI协同工作, 四者相互配合,共同完成复杂的开发任务并通知用户。