意项
39.91M · 2026-03-23
单一智能体的局限性在复杂软件开发中日益明显:
OpenClaw通过"角色拆分、身份隔离、协作分工"的多Agent架构,彻底解决了这些痛点。
OpenClaw的每个Agent是完全独立的"虚拟员工",理解这一点至关重要:
~/.openclaw/agents/<agentId>/
├── agent/ # 身份层 - 员工牌
│ ├── auth-profiles.json # 认证配置(API Key)
│ └── models.json # 模型配置(用哪个LLM)
├── sessions/ # 状态层 - 工作日志
│ ├── <session-id>.jsonl # 独立聊天记录
│ └── sessions.json # 会话索引
└── workspace/ # 工作层 - 办公桌面
├── SOUL.md # 灵魂/人格定义
├── AGENTS.md # 行为规范
├── USER.md # 用户信息
├── TOOLS.md # 工具使用指南
├── IDENTITY.md # 身份定义
└── memory/ # 记忆存储
└── YYYY-MM-DD.md # 每日日志
关键原则:永远不要让两个Agent共享agentDir或workspace——这会导致认证碰撞、会话冲突、文件覆盖。
| 维度 | 分身术(推荐) | 独立团 |
|---|---|---|
| 实现方式 | 一个Bot,通过Bindings路由到不同Agent | 每个Agent对应独立Bot |
| 用户体验 | 同一机器人,但"换脑"工作 | 每个机器人有独立头像/名字 |
| 管理成本 | 低,配置简单 | 高,需管理多个Bot |
| 适合场景 | 个人使用,追求效率 | 团队协作,需要角色感 |
对于个人开发者,强烈推荐分身术——用最少的配置获得最大的灵活性。
Main (大蔡/统筹)
├── 职责:任务拆解、进度坚控、结果聚合
├── 模型:经济型(如qwen3-max-2026)
└── 工具:sessions_send、sessions_receive、planning
Coder (蔡农/编码)
├── 职责:代码编写、系统调试、单元测试
├── 模型:代码专用(如qwen3-coder-2026)
└── 工具:exec、write、edit、git
Reviewer (审核员)
├── 职责:代码审查、安全检查、性能分析
├── 模型:顶级模型(如GPT-4.5/Sonnet 4.6)
└── 工具:read、exec、test
Architect (架构师)
├── 职责:技术选型、架构设计、方案评审
├── 模型:顶级模型
└── 工具:browser、read、write
DevOps (运维工程师)
├── 职责:部署配置、CI/CD编排、坚控告警
├── 模型:经济型
└── 工具:exec、git、cloud-tools
反面示例(过长,浪费token):
你是一位经验丰富的软件工程师,拥有10年Java开发经验,
擅长微服务架构设计,对Spring Boot有深入研究,
在项目中你总是注重代码质量,遵循SOLID原则...
(500字+)
正面示例(简洁高效):
# SOUL.md - Coder Agent
角色:后端开发工程师
专长:Java、微服务、Spring Boot
原则:
- 代码可测试性 > 简洁性
- 遵循SOLID原则
- API文档先行
- 3行以上逻辑必须写注释
典型工作流:
1. 理解需求 → 2. 编写测试 → 3. 实现代码 → 4. 自测验证
黄金法则:SOUL.md保持在1-2KB以内。超过5KB会导致每次请求浪费大量token。
不要无脑用最贵的模型,也不要为了省钱全用最便宜的:
| Agent类型 | 推荐模型 | 理由 |
|---|---|---|
| 统筹/调度 | Haiku/Nano | 简单任务分配,不需要深度推理 |
| 编码 | CodeLLaMA/Coder | 代码专用,性价比最高 |
| 审核/架构 | GPT-4.5/Sonnet 4.6 | 需要深度思考和复杂推理 |
| 日常问答 | Qwen-Max | 中文能力强,价格适中 |
实战数据:某开发者从"全用Sonnet(45/月**,且质量无损失。
适用场景:需要统一入口、跨领域协作、质量监督
OpenClaw实现:
{
"tools": {
"agentToAgent": {
"enabled": true,
"allow": ["main", "coder", "reviewer", "architect"]
}
}
}
实战案例:开发一个用户认证模块
手绘示意图:Router模式
用户请求
↓
Router(分类器)
├→ Agent A(专业领域1)
├→ Agent B(专业领域2)
└→ Agent C(专业领域3)
适用场景:不同渠道需要不同风格、不同用户群需要不同专业度
OpenClaw实现:利用Bindings的确定性路由
{
"bindings": [
{
"agentId": "coder",
"match": {
"channel": "discord",
"peer": { "kind": "channel", "id": "coding-team" }
}
},
{
"agentId": "architect",
"match": {
"channel": "discord",
"peer": { "kind": "channel", "id": "architecture-team" }
}
}
]
}
任务像流水线一样在Agent之间传递:
调研Agent → 写作Agent → 校审Agent → 排版Agent
↓ ↓ ↓ ↓
(资料收集) (初稿撰写) (质量把关) (最终输出)
适用场景:内容创作、代码开发、数据处理
OpenClaw实现:通过sessions_send编排执行链
# Main Agent的工作流
research_result = sessions_send({
"agent": "researcher",
"task": "调研OpenClaw最新功能"
})
draft = sessions_send({
"agent": "writer",
"task": f"基于调研结果撰写文档:{research_result}"
})
final_doc = sessions_send({
"agent": "reviewer",
"task": f"审核并优化文档:{draft}"
})
Main Agent 同时触发多个独立任务:
├→ Coder(后端开发)
├→ Frontend-Dev(前端开发)
└→ QA(测试用例编写)
↓
Main Agent 收集所有结果 → 整合联调
适用场景:多模块并行开发、数据分片处理
OpenClaw实现(使用sessions_spawn):
# 并行执行三个任务
results = await Promise.all([
sessions_spawn({
"label": "后端开发",
"task": "实现用户认证API",
"runTimeoutSeconds": 300
}),
sessions_spawn({
"label": "前端开发",
"task": "设计登录页面UI",
"runTimeoutSeconds": 300
}),
sessions_spawn({
"label": "测试编写",
"task": "编写认证模块测试用例",
"runTimeoutSeconds": 180
})
])
️ 注意:此功能在RFC阶段,可能尚未正式发布,使用前请确认版本支持。
OpenClaw新增了更高级的协作模式——Agent Teams,支持:
适用场景:复杂项目需要多个Agent长期协作
{
"tool": "team_create",
"params": {
"teamName": "feature-auth-refactor",
"coordinationMode": "normal"
}
}
协调模式对比:
| 模式 | Lead行为 | 适用场景 |
|---|---|---|
| normal | Lead可以claim任务 | Lead参与实现+协调 |
| delegate | Lead不能claim任务 | Lead纯协调,不参与实现 |
sessions_send({
"agent": "coder", # 目标Agent ID
"task": "实现用户登录API", # 任务描述
"timeoutSeconds": 300 # 超时时间(秒),timeoutSeconds>0时等待完成
})
特点:
️ 常见误区(经官方文档验证):
| 错误表述 | 正确说明 |
|---|---|
mode: "run" / mode: "session" | sessions_spawn没有mode参数,不存在 |
runtimeoutseconds | 正确参数名是runTimeoutSeconds |
用mode控制一次性/持久 | 通过cleanup和thread参数控制 |
正确用法:
# 一次性子代理(完成后自动归档)
sessions_spawn({
"label": "代码审查",
"task": "审查当前分支代码",
"cleanup": "delete", # announce完立即归档(默认就是delete)
"runTimeoutSeconds": 300
})
# 持久子代理(需手动管理)
sessions_spawn({
"label": "长期助手",
"task": "在这个线程中长期协助用户",
"cleanup": "keep", # 交给统一的auto-archive
"thread": true, # 启用线程绑定(Discord专用)
"runTimeoutSeconds": 600
})
**关键参数说明 **:
task:必填,子代理要完成的自然语言任务label:可选,用于给子代理打易读标签runTimeoutSeconds:超时后会中止运行(注意参数名是runTimeoutSeconds)cleanup:"delete"(announce完立即归档)或"keep"(交给统一的auto-archive)thread:布尔值,启用线程绑定(Discord等渠道支持,持久化子代理专用)agentId:可选,如果配置了allowAgents,可以指定用另一个Agent运行thinking:可选,覆盖默认思考级别(off/low/medium/high)线程绑定(Thread Binding):
/focus、/unfocus、/agents、/sessionIdle、/sessionMaxAge{
"tools": {
"agentToAgent": {
"enabled": true,
"allow": ["main", "coder", "reviewer"],
"maxPingPongTurns": 0 # 防止Agent无限互怼
}
}
}
关键配置:
enabled: true - 开启Agent间通信allow - 通信白名单(仅允许main调度其他Agent)maxPingPongTurns: 0 - 禁止自动互相回复maxPingPongTurns说明(️ 重要):
maxPingPongTurns: 0:表示完全禁止agentToAgent的ping-pong循环问题1:Agent间无限客套循环
Agent A: "你好,我准备好了"
Agent B: "你好,我也准备好了"
Agent A: "那我们开始吧"
Agent B: "好的,我听你的"
...(无限循环)
解决方案:
{
"session": {
"agentToAgent": {
"maxPingPongTurns": 0 # 禁止自动互怼
}
}
}
问题2:工作区文件互相覆盖
问题3:路由对了但身份错了
OpenClaw的token消耗有90%是可以避免的:
| 消耗来源 | 占比 | 优化方案 | 节省 |
|---|---|---|---|
| Bootstrap文件注入(AGENTS/SOUL) | 30% | 控制在5KB以内 | 60% |
| 工具调用Schema(如browser) | 20% | 使用轻量工具 | 40% |
| 无关记忆加载 | 15% | 记忆分层管理 | 70% |
| 心跳检查用昂贵模型 | 10% | 改用Nano模型 | 95% |
错误做法:
让Main Agent直接做深度研究、写大量代码
→ 所有中间结果留在主会话上下文
→ 每条消息都带着这些垃圾
正确做法:
Main创建临时代理执行重活
→ 子代理完成工作后,只返回关键摘要(10%)
→ 主会话保持轻量
# 在AGENTS.md中添加
"对于复杂任务(研究、编程、数据分析),创建临时子代理完成。
子代理完成后,只返回最终结果给主会话。"
MEMORY.md (长期记忆)
├── 核心原则、关键决策
├── 项目架构、技术选型
└── 最佳实践、踩坑记录
memory/YYYY-MM-DD.md (每日日志)
├── 当天执行的任务
├── 遇到的临时问题
└── 快速笔记
优化命令:
每周执行一次"记忆压缩":
"请总结memory/过去7天的文件,保留10条最重要的信息,
删除重复和过时内容,将文件压缩到5KB以内"
错误配置:
{
"cron": "*/30 * * * *", // 每30分钟
"agent": "main",
"model": "sonnet-4.6" // 用顶级模型做简单检查
}
→ 每月成本:$45
优化配置:
{
"cron": "*/30 * * * *",
"agent": "heartbeat-coordinator",
"model": "haiku-3.5" // 用廉价模型做初步检查
}
当haiku发现问题后,再触发sonnet处理 → 每月成本:$2.25(节省95%)
启用自动剪枝:
{
"agents": {
"defaults": {
"contextPruning": {
"mode": "cache-ttl",
"ttl": "5m",
"keepLastAssistants": 3,
"softTrim": { "maxChars": 4000 },
"hardClear": { "enabled": true }
}
}
}
}
启用记忆刷新(️ 关键配置):
{
"compaction": {
"reserveTokensFloor": 20000,
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 4000,
"prompt": "Write durable notes to memory/YYYY-MM-DD.md"
}
}
}
memoryFlush触发时机公式(经官方文档验证):
flush触发点 = contextWindow - reserveTokensFloor - softThresholdTokens
举例(假设contextWindow=200000):
200000 - 20000 - 4000 = 176000 tokens
当会话接近176000 tokens时,会触发memory flush,将关键信息写入长期记忆,避免压缩后丢失。
对于本地LLM(prefill速度慢,如4.5 tokens/sec),需要更激进的配置:
{
"models": {
"providers": {
"local-qwen": {
"models": [{
"id": "mlx-community/Qwen3.5-397B-A17B-4bit",
"contextWindow": 50000 // 强制设置较小的窗口
}]
}
}
},
"agents": {
"defaults": {
"compaction": {
"mode": "default",
"reserveTokensFloor": 10000, // 本地模型需要更多保留空间
"memoryFlush": { "enabled": true }
},
"contextPruning": {
"mode": "cache-ttl",
"ttl": "10m", // 更频繁的剪枝
"keepLastAssistants": 2,
"minPrunableToolChars": 20000 // 工具输出超过2万字符才剪枝
}
}
}
}
为什么需要:
为避免6个月前的记忆排名高于今天的记忆,启用时间衰减:
{
"memorySearch": {
"provider": "openai",
"model": "text-embedding-3-small",
"temporalDecay": {
"enabled": true,
"halfLifeDays": 30 // 30天半衰期
}
}
}
计算公式(官方文档提供):
decayedScore = score × e^(-λ × ageInDays)
其中 λ = ln(2) / halfLifeDays
效果:
例外:
MEMORY.md(根记忆文件)不衰减memory/projects.md等非日期文件不衰减memory/YYYY-MM-DD.md按日期衰减{
"agents": {
"list": [
{
"id": "main",
"sandbox": { "mode": "off" } // 完全信任,无隔离
},
{
"id": "public-agent",
"sandbox": {
"mode": "all", // 始终沙箱隔离
"scope": "agent" // 每Agent一个容器
}
},
{
"id": "semi-trusted",
"sandbox": {
"mode": "non-main", // 非主会话才隔离
"scope": "session" // 每会话一个容器
}
}
]
}
}
{
"agents": {
"list": [
{
"id": "family-bot",
"tools": {
"allow": ["read"],
"deny": ["exec", "write", "edit", "browser", "process"]
}
},
{
"id": "coding-bot",
"tools": {
"allow": ["read", "write", "edit", "exec", "git"],
"deny": ["browser"] // 禁止访问互联网
}
}
]
}
}
对于敏感操作(如exec、删除文件),启用批准机制:
{
"tools": {
"execApproval": {
"enabled": true,
"commands": ["rm -rf", "docker exec", "kubectl delete"],
"approvalMode": "human" // 需要人工批准
}
}
}
OpenClaw 2026.2.23版本引入了多项安全加固措施:
{
"tools": {
"ssrf": {
"policy": "trusted-network" // 新默认:仅信任网络(防止SSRF攻击)
},
"execApproval": {
"enabled": true,
"commands": ["rm -rf", "docker exec", "kubectl delete"],
"approvalMode": "human"
}
}
}
其他安全措施:
env.*、skills.env.*)任务分解:
Main Agent的执行流程:
# 步骤1:任务拆解
plan = break_down_task("开发用户认证模块")
# 步骤2:架构设计(串行)
architecture = sessions_send({
"agent": "architect",
"task": f"设计用户认证方案:{plan}",
"timeoutSeconds": 180
})
# 步骤3:并行开发(后端+前端+测试)
results = await Promise.all([
sessions_spawn({
"label": "后端API",
"task": f"实现认证API:{architecture}",
"runTimeoutSeconds": 600
}),
sessions_spawn({
"label": "前端页面",
"task": f"实现登录UI:{architecture}",
"runTimeoutSeconds": 600
}),
sessions_spawn({
"label": "测试用例",
"task": "编写认证模块测试",
"runTimeoutSeconds": 300
})
])
# 步骤4:代码审查(串行)
review = sessions_send({
"agent": "reviewer",
"task": f"审查代码:{results}",
"timeoutSeconds": 300
})
# 步骤5:整合输出
final_report = synthesize_results(architecture, results, review)
场景:开发者提交代码后,自动触发代码审查
Cron配置:
{
"cron": "*/15 * * * *", // 每15分钟检查一次
"agent": "pr-bot",
"task": "检查开放的PR,自动进行代码审查"
}
PR Bot的工作流:
日志追踪:
trace_id可视化仪表盘:
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| Agent不响应 | 模型超时/限流 | 检查API配额,设置重试机制 |
| 输出质量差 | Bootstrap文件过大 | 压缩SOUL.md/AGENTS.md |
| 成本激增 | 心跳检查用昂贵模型 | 改用Nano模型 |
| Agent互相冲突 | 职责边界不清 | 重新定义Agent角色 |
阶段1:准备(1天)
阶段2:配置(2-3天)
阶段3:测试(3-5天)
阶段4:切换(1天)
无需预配置,按需创建临时助手:
# 动态创建代码审查助手(一次性)
reviewer = sessions_spawn({
"label": "代码审查助手",
"task": "审查当前分支的代码变更",
"cleanup": "delete", # 完成后立即归档
"runTimeoutSeconds": 300
})
# 动态创建性能分析助手(持久会话,需手动管理)
profiler = sessions_spawn({
"label": "性能分析助手",
"task": "分析API响应时间瓶颈",
"thread": true, # 启用线程绑定(Discord专用,持久化子代理)
"runTimeoutSeconds": 600
})
适用场景:
多个Agent共享同一个沙箱容器:
{
"agents": {
"defaults": {
"sandbox": {
"mode": "all",
"scope": "shared",
"workspaceRoot": "/tmp/work-sandboxes"
}
}
}
}
适用场景:
默认情况下,子代理只能在创建它的Agent下运行。允许跨Agent spawning:
{
"agents": {
"list": [
{
"id": "orchestrator",
"subagents": {
"allowAgents": ["researcher", "coder"], // 允许orchestrator创建researcher和coder的子代理
// 或者用 ["*"] 允许任何Agent
}
}
]
}
}
用途:
️ 注意:这是2026年2月提出的RFC,可能尚未正式发布。
OpenClaw支持基于消息内容的路由:
{
"bindings": [
{
"agentId": "chef",
"match": {
"channel": "whatsapp",
"peer": { "kind": "group", "id": "123@g.us" },
"content": { // 新增:内容匹配
"pattern": "^@chef\b",
"stripMatch": true // 移除匹配的前缀
}
}
}
]
}
适用场景:
优化前(2026年1月):
优化后(2026年2月):
关键洞察:
#!/bin/bash
# create_agents.sh - 创建多Agent工作区
# 创建5个Agent的独立工作区
mkdir -p ~/.openclaw/workspaces/{main,coder,reviewer,architect,devops}
# 设置权限
chmod 755 ~/.openclaw/workspaces/*
# 复制基础模板
for workspace in ~/.openclaw/workspaces/*; do
cp templates/SOUL.md "$workspace/"
cp templates/AGENTS.md "$workspace/"
cp templates/IDENTITY.md "$workspace/"
mkdir -p "$workspace/memory"
done
echo " Agent工作区创建完成"
// openclaw.json - 多Agent配置模板
{
"agents": {
"defaults": {
"llm": {
"provider": "dashscope",
"baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1"
},
"session": {
"agentToAgent": {
"maxPingPongTurns": 0,
"enabled": true
}
},
"contextPruning": {
"mode": "cache-ttl",
"ttl": "5m",
"keepLastAssistants": 3,
"softTrim": { "maxChars": 4000 },
"hardClear": { "enabled": true }
},
"compaction": {
"mode": "default",
"reserveTokensFloor": 20000,
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 4000,
"prompt": "Write durable notes to memory/YYYY-MM-DD.md"
}
}
},
"list": [
{
"id": "main",
"name": "统筹助手",
"workspace": "~/.openclaw/workspaces/main",
"llm": { "model": "qwen3-max-2026" },
"sandbox": { "mode": "off" }
},
{
"id": "coder",
"name": "编码专家",
"workspace": "~/.openclaw/workspaces/coder",
"llm": { "model": "qwen3-coder-2026" },
"sandbox": { "mode": "all", "scope": "agent" }
},
{
"id": "reviewer",
"name": "代码审核",
"workspace": "~/.openclaw/workspaces/reviewer",
"llm": { "model": "gpt-4.5" },
"sandbox": { "mode": "all", "scope": "session" }
}
]
},
"tools": {
"agentToAgent": {
"enabled": true,
"allow": ["main", "coder", "reviewer"]
}
},
"bindings": [
{
"agentId": "main",
"match": { "channel": "discord", "peer": { "kind": "channel", "id": "general" } }
},
{
"agentId": "coder",
"match": { "channel": "discord", "peer": { "kind": "channel", "id": "coding" } }
}
]
}
runTimeoutSeconds而非runtimeoutseconds(️ 常见误区)mode: "run"/mode: "session"不存在runtimeoutseconds应为runTimeoutSeconds个人用户:分身术(单Bot多路由)
团队协作:独立团(多Bot独立身份)
复杂项目:Agent Teams(️ RFC阶段,需确认版本支持)
临时任务:sessions_spawn(动态子代理)
最后的话:
多Agent架构不是"更炫酷"的选择,而是应对复杂软件开发的必然演化。当你的任务涉及跨领域协作、需要专业化分工、追求可控的质量和成本时,多Agent就是答案。
OpenClaw的核心价值在于"专业分工"——让每个Agent专注自己的领域,避免上下文污染、人设混乱、token浪费,真正实现"1+1>2"的协作效果。
开始时,从2-Agent系统(Supervisor + Worker)入手,逐步扩展。渐进式迭代,是避免混乱的最佳策略。
祝你的AI团队协作愉快!