乐于分享
好东西不私藏

OpenClaw 30 天系列 - Day13:多 Agent 协作:任务分配和结果汇总

OpenClaw 30 天系列 - Day13:多 Agent 协作:任务分配和结果汇总

🎯 学习目标:使用多 Agent 协作,进行任务分配和结果汇总

 ⏱️ 阅读时间:约 10 分钟

 💡 前置要求:无


🤖 多 Agent 能做什么?

OpenClaw 多 Agent 架构

💡 重要:OpenClaw 支持多 Agent 并行运行,每个 Agent 拥有独立的工作空间、配置和会话存储。

什么是"一个 Agent"?

一个 Agent 是拥有独立工作空间的 AI 大脑,包含:

  • WorkspaceSOUL.mdAGENTS.mdUSER.md、技能文件
  • State Directory~/.openclaw/agents/<agentId>/agent
  • Session Store~/.openclaw/agents/<agentId>/sessions

配置多 Agent

# 使用向导创建新 Agentopenclaw agents add codingopenclaw agents add social# 查看 Agent 列表openclaw agents list --bindings# 查看 Agent 状态openclaw agents list --bindings

路由规则

消息通过 bindings 路由到对应 Agent:

{"agents":{"list":[{ id:"main", workspace:"~/.openclaw/workspace-main"},{ id:"coding", workspace:"~/.openclaw/workspace-coding"}]},"bindings":[{      agentId:"main",      match:{ channel:"whatsapp", peer:{ kind:"direct", id:"+8613800138000"}}},{      agentId:"coding",      match:{ channel:"discord", accountId:"coding"}}]}

路由优先级(从高到低)

  1. peer 匹配(精确 DM/群 ID)
  2. parentPeer 匹配(线程继承)
  3. guildId + roles(Discord 角色)
  4. guildId(Discord)
  5. teamId(Slack)
  6. accountId 匹配
  7. 通道级匹配(accountId: "*"
  8. 默认 Agent(agents.list[].default 或第一个)

最具体优先:多个匹配时,第一个匹配的规则获胜


🚀 基础概念

什么是 Agent?

Agent = 独立的 AI 助理实例

生活化比喻

对比项
公司团队
OpenClaw
全能助理
一个什么都会的员工
单 Agent
专业团队
研究员 + 工程师 + 文案
多 Agent 协作

Agent 类型

// 通用 Agent{name'general-assistant',role'通用助理',skills: ['all']}// 专业 Agent{name'researcher',role'研究员',skills: ['web-search''analysis']}{name'developer',role'开发者',skills: ['coding''debugging''testing']}{name'writer',role'文案',skills: ['writing''editing''translation']}

📝 创建子 Agent

方式 1:动态创建

module.exports = {name'multi-agent-research',asyncexecute({ topic }) {try {// 1. 创建研究员 Agentconst researcher = awaitsessions_spawn({task`调研${topic}的相关信息`,runtime'subagent',mode'run'      });// 2. 创建分析师 Agentconst analyst = awaitsessions_spawn({task`分析${topic}的市场趋势和竞争格局`,runtime'subagent',mode'run'      });// 3. 创建作家 Agentconst writer = awaitsessions_spawn({task'根据调研和分析结果撰写报告',runtime'subagent',mode'run'      });// 4. 等待所有 Agent 完成const [researchResult, analysisResult, writingResult] = awaitPromise.all([waitForCompletion(researcher),waitForCompletion(analyst),waitForCompletion(writer)      ]);returncombineResults(researchResult, analysisResult, writingResult);    } catch (error) {console.error('多 Agent 协作失败:', error);throw error;    }  }};

方式 2:预定义角色

// agents.js - 预定义 Agent 角色const agentRoles = {researcher: {name'研究员',description'负责信息搜集和整理',skills: ['web-search''browser''analysis'],instructions'你是一个专业的研究员,擅长快速找到准确的信息并整理成结构化数据。'  },analyst: {name'分析师',description'负责数据分析和洞察',skills: ['analysis''charts''statistics'],instructions'你是一个资深分析师,擅长从数据中发现规律和趋势。'  },developer: {name'工程师',description'负责代码实现和测试',skills: ['coding''testing''debugging'],instructions'你是一个资深工程师,擅长编写高质量代码并解决技术问题。'  },writer: {name'文案',description'负责内容创作和编辑',skills: ['writing''editing''translation'],instructions'你是一个专业文案,擅长创作吸引人的内容。'  }};// 使用module.exports = {asyncexecute({ task, roles }) {const agents = roles.map(role => {const config = agentRoles[role];returnsessions_spawn({task`${config.description}${task}`,thinking: config.instructions,runtime'subagent'      });    });returnawaitPromise.all(agents);  }};

🎯 实用场景

场景 1:项目调研

示例:多 Agent 协作完成市场调研

module.exports = {name'market-research-team',asyncexecute({ industry }) {try {console.log(`🚀 启动${industry}市场调研项目`);// 1. 市场规模调研const marketTask = sessions_spawn({task`调研${industry}的市场规模、增长率、主要数据`,label'market-researcher'      });// 2. 竞品分析const competitorTask = sessions_spawn({task`分析${industry}的主要竞品、他们的优劣势、市场份额`,label'competitor-analyst'      });// 3. 用户研究const userTask = sessions_spawn({task`研究${industry}的目标用户、需求痛点、使用场景`,label'user-researcher'      });// 4. 趋势分析const trendTask = sessions_spawn({task`分析${industry}的发展趋势、新兴技术、未来机会`,label'trend-analyst'      });// 5. 等待所有任务完成const [market, competitor, user, trend] = awaitPromise.all([        marketTask,        competitorTask,        userTask,        trendTask      ]);// 6. 汇总报告const finalReport = awaitsessions_spawn({task`整合以下调研结果,生成完整的市场研究报告:          1. 市场规模:${market}          2. 竞品分析:${competitor}          3. 用户研究:${user}          4. 趋势分析:${trend}          要求:结构清晰、数据准确、结论明确`,label'report-writer'      });return finalReport;    } catch (error) {console.error('市场调研失败:', error);throw error;    }  }};

使用方式

"启动 AI 行业调研项目,用多 Agent 协作完成"

场景 2:代码开发

示例:多 Agent 协作开发功能

module.exports = {name'dev-team',asyncexecute({ feature }) {try {console.log(`🚀 启动${feature}功能开发`);// 1. 架构设计const architect = awaitsessions_spawn({task`设计${feature}的技术架构,包括:          - 系统架构图          - 技术选型          - 接口设计          - 数据模型`,label'architect',thinking'你是一个资深架构师,注重系统的可扩展性和可维护性'      });// 2. 代码实现const developer = awaitsessions_spawn({task`根据架构设计实现${feature}的代码:${architect}          要求:代码规范、有注释、有测试`,label'developer',thinking'你是一个资深工程师,注重代码质量和最佳实践'      });// 3. 代码审查const reviewer = awaitsessions_spawn({task`审查以下代码:${developer}          检查:          - 代码规范          - 潜在 bug          - 性能问题          - 安全漏洞`,label'reviewer',thinking'你是一个严格的代码审查员,注重细节和质量'      });// 4. 文档编写const writer = awaitsessions_spawn({task`为${feature}编写文档:          - 使用说明          - API 文档          - 示例代码          基于:${developer}`,label'tech-writer',thinking'你是一个专业文档工程师,注重清晰和完整'      });return {design: architect,code: developer,review: reviewer,docs: writer      };    } catch (error) {console.error('开发团队协作失败:', error);throw error;    }  }};

场景 3:内容创作

示例:多 Agent 协作创作公众号文章

module.exports = {name'content-team',asyncexecute({ topic, targetAudience }) {try {console.log(`🚀 启动${topic}内容创作`);// 1. 选题策划const planner = awaitsessions_spawn({task`策划${topic}的文章:          - 目标读者:${targetAudience}          - 文章角度          - 核心观点          - 大纲结构`,label'planner'      });// 2. 资料搜集const researcher = awaitsessions_spawn({task`搜集${topic}的相关资料:          - 最新数据          - 权威来源          - 典型案例          - 有趣故事`,label'researcher'      });// 3. 初稿撰写const writer = awaitsessions_spawn({task`根据大纲和资料撰写文章初稿:          大纲:${planner}          资料:${researcher}          要求:          - 标题吸引人          - 开头抓眼球          - 内容有干货          - 结尾有互动`,label'writer'      });// 4. 编辑润色const editor = awaitsessions_spawn({task`编辑润色以下文章:${writer}          优化:          - 语句流畅度          - 逻辑连贯性          - 表达准确性          - 阅读节奏`,label'editor'      });// 5. 标题优化const titleExpert = awaitsessions_spawn({task`为文章创作 5 个吸引人的标题:${editor}          要求:          - 包含关键词          - 引发好奇心          - 突出价值点`,label'title-expert'      });return {outline: planner,research: researcher,draft: writer,final: editor,titles: titleExpert      };    } catch (error) {console.error('内容创作失败:', error);throw error;    }  }};

🔧 任务分配策略

1. 并行分配

// 所有任务同时开始const tasks = [sessions_spawn({ task'任务 1' }),sessions_spawn({ task'任务 2' }),sessions_spawn({ task'任务 3' })];const results = awaitPromise.all(tasks);

适用场景:任务之间无依赖关系


2. 串行分配

// 任务按顺序执行,后一个依赖前一个的结果const result1 = awaitsessions_spawn({ task'任务 1' });const result2 = awaitsessions_spawn({ task`任务 2,基于:${result1}` });const result3 = awaitsessions_spawn({ task`任务 3,基于:${result2}` });

适用场景:任务有依赖关系


3. 混合分配

// 第一阶段:并行const [research1, research2, research3] = awaitPromise.all([sessions_spawn({ task'调研方向 1' }),sessions_spawn({ task'调研方向 2' }),sessions_spawn({ task'调研方向 3' })]);// 第二阶段:汇总(依赖第一阶段)const summary = awaitsessions_spawn({task`汇总以下调研结果:    1. ${research1}    2. ${research2}    3. ${research3}`});// 第三阶段:并行(基于汇总)const [report, presentation] = awaitPromise.all([sessions_spawn({ task`撰写报告:${summary}` }),sessions_spawn({ task`制作 PPT:${summary}` })]);

适用场景:复杂项目,部分并行部分串行


📊 结果汇总技巧

1. 结构化汇总

functioncombineResults(results) {let final = `# 项目总结\n\n`;// 按模块组织for (const [module, result] ofObject.entries(results)) {    final += `## ${module}\n\n`;    final += result;    final += `\n---\n\n`;  }// 总体结论  final += `## 总体结论\n\n`;  final += `基于以上分析,我们建议...\n`;return final;}

2. 对比汇总

functioncompareResults(results) {let table = `| 维度 | Agent A | Agent B | Agent C |\n`;  table += `|------|---------|---------|---------|\n`;  results.forEach((result, index) => {    table += `| ${result.dimension} | ${result.a} | ${result.b} | ${result.c} |\n`;  });return table;}

3. 投票决策

asyncfunctionvoteOnDecision(options, agents) {const votes = awaitPromise.all(    agents.map(agent =>sessions_spawn({task`从以下选项中选择最佳方案:${options.join(', ')}`,label`voter-${agent}`      })    )  );// 统计票数const voteCount = {};  votes.forEach(vote => {    voteCount[vote] = (voteCount[vote] || 0) + 1;  });// 选出获胜者const winner = Object.entries(voteCount)    .sort((a, b) => b[1] - a[1])[0];return { winner, voteCount };}

💡 最佳实践

1. 明确分工

// ✅ 好的分工const researcher = { task'只负责搜集信息' };const analyst = { task'只负责分析数据' };const writer = { task'只负责撰写内容' };// ❌ 不好的分工const agent1 = { task'完成所有工作' };

2. 清晰指令

// ✅ 清晰的指令{task'调研 AI Agent 市场规模,找 2026 年的最新数据,至少 5 个来源'}// ❌ 模糊的指令{task'调研一下 AI'}

3. 设置超时

sessions_spawn({task'复杂任务',timeoutSeconds300// 5 分钟超时});

4. 错误处理

try {const result = awaitsessions_spawn({ task'任务' });catch (error) {console.error('Agent 执行失败:', error);// 重试或降级处理}

✅ 学完这篇你能做什么

学完 Day 13,你将能够:

  • ✅ 理解多 Agent 协作场景
  • ✅ 创建和分配子 Agent 任务
  • ✅ 使用并行/串行/混合分配策略
  • ✅ 汇总多个 Agent 的结果
  • ✅ 应用最佳实践

🔜 下篇预告

Day 14:第二周复盘:技能开发实战总结

  • 📚 第二周内容回顾
  • ❓ 常见问题 Q&A
  • 📊 学习成果自测

💬 互动环节

你想用多 Agent 协作完成什么项目?留言分享!


公众号:OpenClaw 研习社系列:OpenClaw 30 天入门到精通作者:OpenClaw 研习社