关键词:ACP|Agent Client Protocol|JSON-RPC 扩展|TypeBox|流式通信|多端同步
在构建一个支持 WhatsApp、Telegram、Web、iOS、Android 和 CLI 的 AI 智能体系统时,通信协议的选择直接决定了系统的扩展性、一致性与开发效率。
OpenClaw 没有采用现成的 gRPC、GraphQL 或 REST,而是基于 JSON-RPC 2.0 扩展出一套专为 AI Agent 场景定制的轻量级协议——ACP(Agent Client Protocol)。这并非“重复造轮子”,而是一次面向领域特性的精准设计。
本文将揭示:为什么通用协议不够用?ACP 解决了哪些 AI 原生问题?以及它是如何保障类型安全与多端一致性的。
对 AI 而言,“发送消息”只是开始,后续可能有多轮
tool_call → observation → text.delta事件流。
OpenClaw 需要的是“人类可读 + 机器可靠”的平衡。
exec, abort)的自然建模OpenClaw 团队提出 ACP 的四大设计原则:

💡 ACP = JSON-RPC 2.0 + WebSocket + AI 原生语义扩展
所有请求遵循标准格式:
{
"jsonrpc": "2.0",
"method": "chat.send",
"params": { /* ... */ },
"id": "req_abc123"
}method:RPC 方法名(如 agent.run, config.get)params:参数对象id:用于匹配响应(支持幂等性)当智能体执行过程中产生新状态,网关主动推送事件:
{
"event": "assistant.text.delta",
"payload": {
"runId": "run_xyz789",
"delta": "正在重启服务器..."
}
}常见事件类型:
assistant.text.delta:AI 生成文本片段tool.call.request:AI 请求调用工具(如 bash_exec)tool.call.result:工具执行结果返回agent.lifecycle:start / end / error🔄 这使得 Web UI 可实时渲染“打字机效果”或“工具调用卡片”。
chat.send 可携带 idempotencyKeyrunId,客户端可关联完整执行链ACP 定义统一错误码:
{
"jsonrpc": "2.0",
"error": {
"code": -32001,
"message": "Model context overflow",
"data": { "model": "claude-3-5-sonnet" }
},
"id": "req_abc123"
}常见错误码:
-32001:上下文溢出(触发自动压缩)-32002:需要用户审批(弹出确认框)-32003:账号限流(触发换号逻辑)OpenClaw 使用 TypeBox 定义所有 ACP 方法的参数与响应结构。
chat.send 参数 Schema// src/acp/schemas/chat.tsui/ 和 apps/ios/ 可导入该 Schema,获得 TypeScript 类型提示🔒 从源头杜绝“字段不存在”或“类型错误”类 bug。
由于所有客户端(Web/iOS/Android/CLI)都实现同一套 ACP 协议,它们天然具备功能对齐:

🧩 协议即契约——只要遵守 ACP,任何新客户端都能立即获得全部能力。

✅ ACP 的独特价值在于:它连接了“渠道 ↔ 模型 ↔ 工具”全链路。
在 OpenClaw 中,ACP 不仅是通信格式,更是系统架构的约束与保障。它强制解耦了渠道、协议、智能体三层,使得:
这种“协议优先”(Protocol-First)的设计哲学,正是 OpenClaw 能够快速扩展到多端、多渠道、多模型的核心秘密。
在下一篇文章中,我们将聚焦 OpenClaw 的启动与配置体系,解析
openclaw.mjs、config.yaml与环境变量如何协同工作。
✅ 下一篇预告:
第 4 篇:启动与配置体系 —— openclaw.mjs、config.yaml 与环境变量管理
如需,我可立即为您生成 第 4 篇全文,或提供本文的 Markdown 源码、TypeBox 示例代码 等。是否继续?