乐于分享
好东西不私藏

OpenClaw ACP 机制详解:如何让你的 AI 编程助手乖乖听话?

OpenClaw ACP 机制详解:如何让你的 AI 编程助手乖乖听话?

01 什么是 ACP?

如果你用过 Claude Code、Codex 或 OpenCode 等 AI 编程助手,可能会遇到一个问题:每个助手都有自己的 CLI 工具,如何统一管理?

OpenClaw 的答案是:ACP(Agent Communication Protocol,智能体通信协议)。

简单理解,ACP 就是 OpenClaw 与外部 AI 编程助手之间的"电话线"——它让 OpenClaw 能够统一调用各种编程助手,而你只需要通过 Telegram、飞书或 Slack 发送一条消息即可。

用户请求              OpenClaw              外部 AI 助手
"帮我写代码"   →    Gateway + ACP    →   Claude Code/Codex/OpenCode

ACP 能做什么?

  • ✅ AI 编程(代码生成、Bug 修复、重构)
  • ✅ 代码审查(PR review、问题分析)
  • ✅ 项目开发(新功能开发、模块改造)
  • ✅ 迭代编码(多轮对话、持续优化)

ACP 不适合什么?

  • ❌ 简单的一行代码修复(直接用 edit 工具更高效)
  • ❌ 读取代码(直接用 read 工具)
  • ❌ 非编程任务(查股票、搜新闻等有其他专用工具)

02 Harness 架构:给 AI 套上"缰绳"

Harness 是什么?

Harness 原意是"马具"、"挽具"。在 AI 工程中,它指的是:

一套用于控制、引导、利用 AI 能力的框架系统

想象一下:一匹千里马(AI 能力)虽然力量强大,但需要缰绳和马车(Harness)才能拉车耕地、转化为实际生产力。

OpenClaw ACP Harness 架构

┌─────────────────────────────────────────────────────────┐
│                    OpenClaw Gateway                      │
├─────────────────────────────────────────────────────────┤
│  ┌──────────────┐    ┌──────────────┐    ┌────────────┐ │
│  │   Telegram   │    │    Feishu    │    │   Slack    │ │
│  │   Channel    │    │   Channel    │    │  Channel   │ │
│  └──────┬───────┘    └──────┬───────┘    └─────┬──────┘ │
│         └───────────────────┼───────────────────┘        │
│                             │                             │
│                    ┌────────▼────────┐                   │
│                    │   ACP Harness   │                   │
│                    │   (编排调度层)   │                   │
│                    └────────┬────────┘                   │
│                             │                             │
│         ┌───────────────────┼───────────────────┐        │
│         │                   │                   │        │
│         ▼                   ▼                   ▼        │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐  │
│  │  Codex ACP  │    │ Claude Code │    │  Pi ACP     │  │
│  │   Adapter   │    │   Adapter   │    │   Adapter   │  │
│  └──────┬──────┘    └──────┬──────┘    └──────┬──────┘  │
│         │                   │                   │        │
│         ▼                   ▼                   ▼        │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐  │
│  │  Codex CLI  │    │Claude Code  │    │   Pi CLI    │  │
│  │   (PTY)     │    │   (PTY)     │    │   (PTY)     │  │
│  └─────────────┘    └─────────────┘    └─────────────┘  │
└─────────────────────────────────────────────────────────┘

Harness 的 5 大核心职责:

  1. 协议转换 — Telegram/飞书消息 → ACP 协议格式
  2. 会话管理 — 创建/复用 Session,路由到对应 Agent
  3. 流式输出管理 — Agent 输出 → 缓冲/格式化 → 推送给用户
  4. 工具调用协调 — Agent 请求工具 → 调用 OpenClaw 工具 → 返回结果
  5. 错误处理与重试 — Agent 崩溃自动重启/切换备用 Agent

03 两种运行模式:一次性 vs 持久会话

模式一:一次性运行(mode: "run")

任务完成后自动销毁会话,适合独立任务。

sessions_spawn({
runtime: "acp",
mode: "run",
agentId: "claude-code",
task: "重构这个模块",
cleanup: "delete"// 完成后清理
})

适用场景:

  • 单次代码生成
  • PR 审查(临时工作目录)
  • 独立脚本编写

模式二:持久会话(mode: "session")

保持会话状态,支持多轮对话。

sessions_spawn({
runtime: "acp",
mode: "session",
agentId: "claude-code",
thread: true,  // 绑定到 Discord/Telegram 线程
task: "帮我开发一个功能"
})

适用场景:

  • 复杂项目开发(需多轮沟通)
  • 持续重构
  • 需要用户反馈的迭代任务

两种模式对比

特性
run 模式
session 模式
会话生命周期
任务完成后销毁
保持活跃
资源占用
低
中
多轮对话
❌ 不支持
✅ 支持
适用任务
独立单次任务
复杂迭代任务

04 支持哪些 AI 编程助手?

Agent
提供方
安装方式
Claude Code
Anthropic
npm install -g @anthropic-ai/claude-code
Codex
OpenAI
npm install -g @openai/codex
OpenCode
开源社区
npm install -g opencode
Pi
Inflection AI
需单独配置
Gemini CLI
Google
需单独配置

配置方法

在 ~/.openclaw/openclaw.json 中配置允许的 Agent:

{
"acp": {
"allowedAgents": ["claude-code", "codex", "opencode"],
"defaultAgent": "claude-code"
}
}

05 实战案例:用 AI 开发五子棋游戏

光说不练假把式。让我们来看一个完整的实战案例——用 OpenCode 开发一个五子棋 CLI 游戏。

开发需求

项目
要求
棋盘
15x15 标准尺寸
玩家
双人对战(黑●先手、白○后手)
胜利条件
五子连珠(横·竖·斜)
输入形式
坐标输入(例:H8, A1, O15)
功能
游戏历史显示、无效着法拒绝
代码质量
类型提示、文档字符串、200 行以上

执行命令

cd /Users/mengxi/.openclaw/agents/tianqi/workspace

opencode --model "aliyunbailian/qwen3.5-plus" run "
15x15 的五子棋 CLI 游戏用 Python 创建。

保存路径:games/gomoku/gomoku.py

要求:
1. 15x15 标准棋盘
2. 双人对战(黑●先手、白○后手)
3. 五子连珠判定(横·竖·斜)
4. 坐标输入(例:H8, A1, O15)
5. 游戏历史显示
6. 无效着法拒绝
7. 胜利时消息显示

README.md 也请创建(玩法说明、功能列表)。

代码质量:类型提示、文档字符串、错误处理、200 行以上。
"

遇到的坑与解决方案

坑 1:模型找不到

ProviderModelNotFoundError: Model not found: opencode/glm-4.7-free

解决:用 --model 参数直接指定可用模型

坑 2:配置缓存不生效

Error: Model not found: openrouter/minimax/minimax-m2.5-free

解决:config.json 修改后 opencode 有缓存,用 --model 直接指定可绕过

坑 3:API Key 缺失

Error: Google Generative AI API key is missing

解决:使用已注册且配置好 API Key 的 qwen3.5-plus 模型

成果验证

# 行数确认
wc -l games/gomoku/gomoku.py
# 输出:570 行 ✅

# 语法检查
python3 -m py_compile games/gomoku/gomoku.py
# 输出:Syntax check passed ✅

# 函数/类数量
grep -c "def \|class " games/gomoku/gomoku.py
# 输出:22

# 类型提示数量
grep -c '\-> ' games/gomoku/gomoku.py
# 输出:19

# 测试运行
echo -e "H8\nH9\nG8\nJ8\nH7\nq" | python3 gomoku.py
# 输出:游戏画面显示、正常运行 ✅

代码质量指标

指标
值
要求
状态
总行数
570
200+
✅
函数/类数量
22
-
✅
类型提示位置
19
-
✅
文档字符串
全函数覆盖
-
✅
语法检查
合格
-
✅
外部依赖
无
-
✅

06 注意事项:安全与性能

安全事项

1. 工作空间隔离

  • ACP 会话在独立目录中运行
  • 避免在 ~/clawd 工作区中 spawn agent
  • 敏感项目用 cwd 参数明确指定路径

2. 权限控制

  • ACP agent 以当前用户权限运行
  • 避免执行破坏性命令(rm、格式化等)
  • 重要操作前备份代码

3. Token 消耗

  • 外部 AI 助手按 Token 计费
  • 复杂任务可能消耗大量 Token
  • 建议先用 mode: "run" 测试

性能优化

1. 并发控制

  • maxConcurrentSessions 限制并发数
  • 避免同时 spawn 过多会话

2. 会话清理

  • 一次性任务设置 cleanup: "delete"
  • 定期清理临时工作目录

3. 超时设置

  • 长任务设置 runTimeoutSeconds
  • 避免会话无限期挂起

07 常见问题排查

问题速查表

问题
可能原因
解决方案
agentId not found
未在 allowedAgents 中
添加到白名单配置
CLI not found
外部 agent 未安装
npm install -g <agent>
Permission denied
文件权限不足
检查文件权限设置
Timeout
任务超时
增加 runTimeoutSeconds
Session failed
会话创建失败
检查 acpx 后端状态

诊断命令

# 检查 ACP 配置
cat ~/.openclaw/openclaw.json | grep -A 20 '"acp"'

# 检查 agent 是否安装
which claude-code
which codex
which opencode

# 检查 ACP 后端状态
openclaw status

# 查看会话日志
cat ~/.openclaw/logs/acp-*.log

08 ACP vs Subagent:有什么区别?

特性
Subagent
ACP
执行者
OpenClaw 内置 Agent
外部编码助手(Claude Code/Codex)
适用场景
信息收集、数据处理、文档生成
代码开发、PR 审查、重构
配置要求
无需额外配置
需要 agentId 和 CLI 环境
工作空间
继承父会话
可指定 cwd
多轮对话
✅ 支持
✅ 支持(mode: "session")
编程能力
基础
专业级

简单总结:

  • 写代码、改 Bug、做项目 → 用 ACP
  • 查资料、整数据、写文档 → 用 Subagent

09 最佳实践:如何高效使用 ACP?

模型选择建议

模型
特点
推荐场景
qwen3.5-plus
中文支持好、速度快、价格低
通用开发任务 ✅
claude-sonnet-4-6
高质量、高价格
关键代码审查
gemini-3.1-pro-preview
需要 API Key
特定场景

任务描述怎么写?

✅ 推荐写法:

15x15 的五子棋 CLI 游戏用 Python 创建。

保存路径:games/gomoku/gomoku.py

要求:
1. 15x15 标准棋盘
2. 双人对战(黑●先手、白○后手)
3. 五子连珠判定(横·竖·斜)
4. 坐标输入(例:H8, A1, O15)
5. 游戏历史显示
6. 无效着法拒绝
7. 胜利时消息显示

代码质量:类型提示、文档字符串、错误处理、200 行以上。

❌ 不推荐写法:

五子棋给我做一个

后台运行与日志查看

# 后台运行
opencode --model "xxx" run "<任务>" 2>&1 &

# 日志查看
process poll --sessionId <会话 ID> --timeout 120000

10 总结

ACP 是 OpenClaw 与外部 AI 编程助手集成的核心协议层,通过 Harness 架构实现了协议转换、会话管理、流式输出、工具协调及错误处理等核心功能。

关键要点:

  1. 两种模式:run(一次性)适合简单任务,session(持久)适合复杂项目
  2. 多个助手:支持 Claude Code、Codex、OpenCode 等主流编程助手
  3. 安全第一:工作空间隔离、权限控制、Token 消耗管理
  4. 高效实践:选好模型、写好任务描述、合理设置超时

最后送大家一句话:

Harness 之本质 = 缰绳 + 马车

有马(AI 能力)无 Harness,则力量难以引导; 有 Harness 无马,则空有框架无执行力。

OpenClaw ACP Harness,正是将 Codex、Claude Code 等外部 Agent 之力, 通过协议适配、会话路由、流式输出,转化为实际生产力。


参考资料:

  • OpenClaw 官方文档:~/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw/docs/
  • ACP 路由器技能:acp-router/SKILL.md
  • 编码助手技能:coding-agent/SKILL.md

觉得有用?欢迎点赞、在看、转发三连! 🙏

#AI #开源 #编程助手 #ClaudeCode #Codex #OpenCode #ACP #自动化开发 #技术架构

相关学习资料