ACP(Agent Communication Protocol)学习笔记
一句话定义:ACP 是 AI 智能体之间通信的"HTTP"——一个让不同框架开发的 Agent 能够互相交流的开放协议。
重要提示:ACP 已于 2025 年 8 月合并到 A2A 协议,由 Linux Foundation 统一管理。
一、背景:为什么需要 ACP?
1.1 AI Agent 的现状
2024-2025 年,AI Agent(智能体)爆发式增长:
- 框架百花齐放:LangChain、CrewAI、BeeAI、AutoGen、Dify...
- 每个框架独立发展:有自己的工具生态、通信方式、部署方案
- Agent 之间无法对话:用 LangChain 写的 Agent 和用 CrewAI 写的 Agent,互不相通
1.2 N × M 集成问题
假设有 N 个 Agent 框架,每个框架有 M 个 Agent,要让它们互相通信:
框架A的Agent ←→ 框架B的Agent → 需要定制集成
框架A的Agent ←→ 框架C的Agent → 又要定制集成
框架B的Agent ←→ 框架C的Agent → 继续定制集成...结果:集成成本 = N × M,呈指数级增长。
1.3 ACP 想要解决的问题
核心问题:如何让不同框架、不同团队、不同组织开发的 Agent 能够标准化地互相通信?
ACP 的答案:定义一个通用的"语言"(协议),只要 Agent 实现了这个协议,就能和任何其他实现了该协议的 Agent 通信。
┌─────────────┐
│ ACP 协议 │
└──────┬──────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ LangChain│ │ CrewAI │ │ BeeAI │
│ Agent │ │ Agent │ │ Agent │
└──────────┘ └──────────┘ └──────────┘二、概述:ACP 是什么?
2.1 定义
ACP (Agent Communication Protocol) 是由 IBM Research 和 BeeAI 团队开发的开放协议,用于 AI 智能体之间的标准化通信。
核心特点:
| 特性 | 说明 |
|---|---|
| REST 原生 | 基于 HTTP 的 RESTful API,可用 curl/Postman 直接调用 |
| 多模态消息 | 支持文本、图像、JSON、代码等多种内容 |
| 同步/异步/流式 | 三种通信模式都支持 |
| 有状态/无状态 | Agent 可自主选择工作模式 |
| 离线发现 | Agent 可通过嵌入元数据被发现(即使未运行) |
| 无 SDK 要求 | 标准 HTTP 工具即可使用(也有 Python/TypeScript SDK) |
2.2 协议生态:MCP / ACP / A2A / ANP
这四个协议解决的是不同层面的问题:
┌─────────────────────────────────────────────────────────────────┐
│ AI Agent 协议生态系统 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ MCP (Anthropic) A2A (Google) │
│ ↓ 垂直连接 ↓ 水平连接 │
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │ Agent │───── MCP ─────▶ │ Tools │ │
│ │ │ │ DB/API │ │
│ └────┬────┘ └─────────┘ │
│ │ │
│ └─────── A2A ─────────▶ ┌─────────┐ │
│ │ Agent B │ │
│ └─────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
MCP = Agent 访问工具/数据(Agent ↔ 工具)
A2A = Agent 之间的协作通信(Agent ↔ Agent)
ACP = 已合并到 A2A(REST 风格的 Agent 通信)
ANP = 去中心化的 Agent 网络(P2P)四协议对比:
| 协议 | 创建者 | 用途 | 架构 | 类比 |
|---|---|---|---|---|
| MCP | Anthropic | LLM ↔ 工具/数据库 | Client-Server | "USB-C for AI" |
| ACP | IBM/BeeAI | Agent ↔ Agent | Brokered (REST) | "HTTP for Agents" |
| A2A | 企业级 Agent 协作 | Peer-to-Peer | "Agent 互联网" | |
| ANP | 社区 | 去中心化 Agent 网络 | P2P | "Agent 区块链" |
2.3 时间线
| 时间 | 事件 |
|---|---|
| 2024.11 | Anthropic 发布 MCP |
| 2025.03 | IBM 发布 ACP(BeeAI 平台) |
| 2025.04 | Google 发布 A2A(50+ 合作伙伴) |
| 2025.06 | A2A 捐赠给 Linux Foundation |
| 2025.08 | ACP 合并到 A2A |
| 2025.12 | 成立 Agentic AI Foundation (AAIF) |
| 2026.01 | A2A 发布 v1.0 |
三、核心概念
3.1 三个角色
ACP 定义了三个核心角色:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Agent Client │ ◀──▶ │ ACP Server │ ◀──▶ │ ACP Agent │
│ (客户端) │ │ (注册中心) │ │ (智能体) │
└──────────────┘ └──────────────┘ └──────────────┘| 角色 | 职责 |
|---|---|
| Agent Client | 发起请求的应用(如 IDE、聊天界面) |
| ACP Server | 注册中心,管理 Agent 发现和路由 |
| ACP Agent | 实际执行任务的智能体 |
3.2 核心数据结构
Message(消息)
通信的基本单位,包含一个或多个 MessagePart:
Message
├── parts: MessagePart[] ← 消息内容(可多个)
├── role: "user" | "agent"
└── metadata: {} ← 可选元数据MessagePart(消息部分)
单个内容单元,支持多模态:
MessagePart
├── content: string ← 实际内容
├── type: "text" | "image" | "json" | ...
└── metadata: {} ← 可选元数据(如引用、轨迹等)Run(执行)
一次 Agent 执行的生命周期:
Run
├── run_id: string ← 唯一标识
├── agent_name: string ← 目标 Agent
├── status: "pending" | "running" | "completed" | "failed"
├── input: Message[] ← 输入消息
├── output: Message[] ← 输出消息
└── await_request: {} ← 如果需要等待用户输入3.3 通信流程
一个典型的 ACP 交互流程:
┌────────┐ ┌────────┐ ┌────────┐
│ Client │ │ Server │ │ Agent │
└───┬────┘ └───┬────┘ └───┬────┘
│ │ │
│ 1. 发现 Agent │ │
│──────────────────▶│ │
│◀──────────────────│ 返回 Agent 列表 │
│ │ │
│ 2. 创建 Run │ │
│──────────────────▶│ │
│ │──────────────────▶│
│ │ │ 执行任务
│ │◀──────────────────│
│◀──────────────────│ 返回 Run 结果 │
│ │ │
│ 3. 获取输出 │ │
│──────────────────▶│ │
│◀──────────────────│ 返回 Message │
│ │ │3.4 三种通信模式
| 模式 | 适用场景 | 特点 |
|---|---|---|
| 同步 | 快速任务,立即返回结果 | 请求-响应,简单直接 |
| 异步 | 长时间任务 | 返回 run_id,后续轮询状态 |
| 流式 | 需要实时反馈 | SSE(Server-Sent Events)推送 |
四、快速理解:代码长什么样?
以下仅为概念展示,帮助你理解 ACP 的使用方式。
4.1 定义一个 Agent(Python)
from acp_sdk.server import Server
from acp_sdk.models import Message
server = Server()
@server.agent()
async def echo(input: list[Message], context):
"""一个简单的回声 Agent"""
for message in input:
yield f"你说的是: {message.parts[0].content}"
# 启动 Agent
server.run()4.2 调用 Agent(HTTP)
# 创建一个 Run
curl -X POST http://localhost:8000/runs \
-H "Content-Type: application/json" \
-d '{
"agent_name": "echo",
"input": [{
"parts": [{"content": "你好", "type": "text"}]
}]
}'
# 响应
{
"run_id": "44e480d6-9a3e-4e35-8a03-faa759e19588",
"status": "completed",
"output": [{
"parts": [{"content": "你说的是: 你好"}]
}]
}4.3 调用 Agent(Python SDK)
from acp_sdk.client import Client
async with Client(base_url="http://localhost:8000") as client:
run = await client.run(
agent_name="echo",
input=[Message(parts=[{"content": "你好", "type": "text"}])]
)
print(run.output[0].parts[0].content)
# 输出: 你说的是: 你好五、运用场景
5.1 IDE 集成(已落地)
是的,IDE 集成是 ACP 的重要应用场景之一。
JetBrains(IntelliJ IDEA、PyCharm 等)的 AI Assistant 已经支持 ACP:
┌─────────────────────────────────────────────────────────┐
│ JetBrains IDE │
├─────────────────────────────────────────────────────────┤
│ ┌─────────────┐ │
│ │ AI Chat │ ←── 用户在这里和 Agent 对话 │
│ └──────┬──────┘ │
│ │ │
│ │ ACP 协议 │
│ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ OpenCode │ │ Goose │ ← 第三方 Agent │
│ │ Agent │ │ Agent │ (可扩展) │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────┘具体能力:
- 从 ACP Registry 安装社区维护的 Agent
- 添加自定义 Agent(通过
acp.json配置) - Agent 可以访问 IDE 的 MCP 服务器(代码上下文、文件操作)
配置示例:
// ~/.jetbrains/acp.json
{
"default_mcp_settings": {
"use_idea_mcp": true, // 传递 IDE 内置的 MCP 服务器
"use_custom_mcp": true // 传递用户配置的 MCP 服务器
},
"agent_servers": {
"opencode": {
"command": "/path/to/opencode",
"args": ["acp"]
}
}
}5.2 多 Agent 协作
让不同专长的 Agent 协作完成复杂任务:
┌──────────────────────────────────────────────────────────┐
│ 工作流编排 │
├──────────────────────────────────────────────────────────┤
│ │
│ 用户: "帮我写一篇技术博客" │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 选题 Agent │ ───▶ │ 写作 Agent │ │
│ │ (生成选题) │ ACP │ (撰写内容) │ │
│ └─────────────┘ └──────┬──────┘ │
│ │ │
│ │ ACP │
│ ▼ │
│ ┌─────────────┐ │
│ │ 审校 Agent │ │
│ │ (润色纠错) │ │
│ └─────────────┘ │
│ │
└──────────────────────────────────────────────────────────┘关键点:
- 每个 Agent 可以用不同框架开发(LangChain、CrewAI、自定义)
- 通过 ACP 标准接口通信,无需了解彼此内部实现
- Agent 可以独立部署、独立扩展
5.3 本地/边缘部署
ACP 的 REST 设计使其适合低延迟、离线环境:
| 场景 | 说明 |
|---|---|
| 本地开发 | Agent 运行在本地,无需云端 |
| 边缘计算 | 工控机、IoT 设备上的 Agent 协作 |
| 内网环境 | 企业内网,数据不出网 |
| 离线场景 | 无网络环境下的 Agent 通信 |
5.4 跨框架互操作
解决"框架孤岛"问题:
之前:LangChain Agent ⟷ CrewAI Agent → 需要定制开发
之后:
┌────────────────┐ ┌────────────────┐
│ LangChain │ │ CrewAI │
│ Agent │ ───── ACP ─────▶ │ Agent │
│ │ │ │
└────────────────┘ └────────────────┘
↓ ↓
实现 ACP 接口 实现 ACP 接口价值:
- 复用不同框架的优势(LangChain 的生态、CrewAI 的角色扮演)
- 渐进式迁移(不必一次性重写所有 Agent)
- 技术选型自由(团队可以用擅长的框架)
5.5 场景选择指南
| 你的需求 | 推荐方案 |
|---|---|
| IDE 里用 AI 助手 | ACP/A2A(JetBrains 已支持) |
| 多个 Agent 协作完成复杂任务 | A2A(企业级)/ ACP(轻量级) |
| Agent 访问工具/数据库 | MCP |
| 去中心化 Agent 网络 | ANP |
| 本地/边缘部署 | ACP(REST 简单) |
六、与 MCP 的配合
ACP 和 MCP 是互补关系,不是竞争关系:
┌─────────────────────────────────────────────────────────┐
│ 完整的 Agent 系统 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │ Agent A │────── A2A ───────▶ │ Agent B │ │
│ └────┬────┘ └────┬────┘ │
│ │ │ │
│ │ MCP │ MCP │
│ ▼ ▼ │
│ ┌─────────┐ ┌─────────┐ │
│ │ 数据库 │ │ API服务 │ │
│ └─────────┘ └─────────┘ │
│ │
│ MCP 提供"手"(工具访问能力) │
│ A2A 提供"嘴"(Agent 间通信能力) │
└─────────────────────────────────────────────────────────┘简单记忆:
- MCP = Agent 访问外部资源(工具、数据库、API)
- A2A/ACP = Agent 之间互相通信
七、常见问题
Q1: ACP 和 A2A 选哪个?
结论:新项目直接用 A2A。
- ACP 已于 2025 年 8 月合并到 A2A
- A2A 是当前行业标准,有更多生态支持
- ACP 的设计理念(RESTful、简单易用)已融入 A2A
Q2: 我该学哪个协议?
建议学习顺序:
- MCP(必学)—— 工具集成是基础
- A2A(必学)—— Agent 协作是趋势
- ACP(了解)—— 理解 REST 风格的设计思想
Q3: ACP 还值得学吗?
值得了解,但不必深入:
- ✅ 了解概念和设计思想
- ✅ 理解 RESTful Agent 通信的优点
- ❌ 不必投入大量时间学习实现细节
- ❌ 新项目不要用 ACP,直接用 A2A
八、学习资源
官方文档
| 资源 | 链接 |
|---|---|
| ACP 官方文档(已归档) | https://agentcommunicationprotocol.dev |
| A2A 官方文档(推荐) | https://a2a-protocol.org |
| Linux Foundation AAIF | https://www.linuxfoundation.org/press/linux-foundation-launches-the-agent2agent-protocol-project |
GitHub 仓库
| 仓库 | 说明 |
|---|---|
| i-am-bee/acp | ACP 原始仓库(已归档) |
| a2aproject/A2A | A2A 主仓库(当前活跃) |
视频课程
| 课程 | 链接 |
|---|---|
| DeepLearning.AI - A2A 课程 | https://goo.gle/dlai-a2a |
深度阅读
| 文章 | 链接 |
|---|---|
| 协议对比分析 | https://zylos.ai/research/2026-02-15-agent-to-agent-communication-protocols |
| MCP vs A2A vs ACP 完整指南 | https://www.jitendrazaa.com/blog/ai/mcp-vs-a2a-vs-acp-vs-anp-complete-ai-agent-protocol-guide/ |
总结
┌─────────────────────────────────────────────────────────┐
│ ACP 核心要点 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. 定义:AI Agent 之间通信的开放协议("HTTP for Agents")│
│ │
│ 2. 创建者:IBM Research / BeeAI │
│ │
│ 3. 特点:REST 原生、多模态、同步/异步/流式 │
│ │
│ 4. 现状:已合并到 A2A(2025.08) │
│ │
│ 5. 与 MCP 关系:互补(MCP=工具,A2A=通信) │
│ │
│ 6. 建议:新项目用 A2A,ACP 了解概念即可 │
│ │
└─────────────────────────────────────────────────────────┘📝 笔记状态:初稿完成,基于 2026 年 3 月的资料整理。
💡 下一步:学习 MCP → 学习 A2A → 实践多 Agent 协作
