乐于分享
好东西不私藏

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

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

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

 ⏱️ 阅读时间:约 10 分钟

 💡 前置要求:无


🤖 多 Agent 能做什么?

OpenClaw 多 Agent 架构

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

什么是"一个 Agent"?

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

  • Workspace:SOUL.md、AGENTS.md、USER.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: '复杂任务',timeoutSeconds: 300// 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 研习社

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料