ACP:交互契约与 Python SDK
Sep 8, 2025
TL;DR
- ACP(Agent Client Protocol)是“客户端 ↔ 智能体”之间的交互契约,定义会话、内容块、工具调用、计划、文件系统等语义。
- Zed 以 ACP 为核心,让内置与外部智能体共享同一套 UX,开发者只需实现一次协议即可通吃多个宿主。
- 我写了 Python SDK:
pip install agent-client-protocol
,提供 Pydantic 模型、AgentSideConnection
、stdio helper,帮你快速接上。 - 这是一场标准化竞赛。ACP 与 MCP、A2A、AG-UI 互补又竞合,谁先积累生态谁就有话语权。
ACP 解决了什么
ACP 不只是“一条管道”,它规定:
- 传输层用 JSON-RPC,支持流式更新;
- 会话生命周期(new/load/prompt/cancel)清晰;
- 内容块支持文本、图片、音频、资源链接等;
- 工具调用与更新(
tool_call
/tool_call_update
)格式统一; - 文件读写、任务计划、状态同步都有规范字段。
换句话说,宿主(如 Zed)与智能体之间的 UX 语义不再每家重造,体验可以搬家。
与其他标准的关系
- AG-UI:同样关注交互层,部分语义重合,可能会出现“互转/共存”的场景。
- MCP:负责工具和资源接入,适合与 ACP 搭配使用(工具能力来自 MCP,交互流程由 ACP 承载)。
- A2A:聚焦智能体之间的通信,后续也可能与 ACP 对接。
Zed 的视角
- 使用者:可以把 Claude Code、Gemini CLI、内部 Agent 统统接进编辑器,享受一致的流式体验和工具栏。
- 开发者:写一次 ACP,就能跑在任何支持它的宿主上,减少重复 glue code。
- 平台:通过协议锁定体验,生态统一,支持成本下降。
Python SDK 提供了什么
安装:
功能:
- Pydantic v2 模型:schema 都有类型提示;
AgentSideConnection
/ClientSideConnection
:分别处理智能体端与客户端;- stdio helper:适合 CLI/本地进程场景;
- 与官方 schema 对齐,严格校验。
最小 Echo Agent
return
return
return None
return None
return
return None
= await
,
await
Zed 侧 settings.json
:
打开命令面板输入 “dev: open acp logs” 可以调试序列化。
接下来
- 补充更多示例:工具调用、文件交互、计划同步;
- 与 MCP 结合,做端到端 demo;
- 观察协议演进,及时跟进 schema 变更。
ACP 代表的是“交互语义的标准化”。当智能体要进主流工作流时,拥有统一契约就像当年云原生时代的容器、服务网格一样重要。Python SDK 的目标,就是让这件事变得简单,让反馈闭环先跑起来,再慢慢打磨。