🎯 学习目标:使用多 Agent 协作,进行任务分配和结果汇总
⏱️ 阅读时间:约 10 分钟
💡 前置要求:无
🤖 多 Agent 能做什么?
OpenClaw 多 Agent 架构
💡 重要:OpenClaw 支持多 Agent 并行运行,每个 Agent 拥有独立的工作空间、配置和会话存储。
什么是"一个 Agent"?
一个 Agent 是拥有独立工作空间的 AI 大脑,包含:
Workspace: SOUL.md、AGENTS.md、USER.md、技能文件State Directory: ~/.openclaw/agents/<agentId>/agentSession 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"}}]}路由优先级(从高到低):
peer匹配(精确 DM/群 ID)parentPeer匹配(线程继承)guildId + roles(Discord 角色)guildId(Discord)teamId(Slack)accountId匹配通道级匹配( accountId: "*")默认 Agent( agents.list[].default或第一个)
最具体优先:多个匹配时,第一个匹配的规则获胜
🚀 基础概念
什么是 Agent?
Agent = 独立的 AI 助理实例
生活化比喻
| 全能助理 | ||
| 专业团队 |
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 研习社
夜雨聆风