🤝 OpenClaw SubAgent:让你的Agent拥有"分身术"
记得《大话西游》里周星驰脚踏七色云彩的经典镜头吗?SubAgent就是让AI Agent也能"脚踏七色云彩"——同时处理七个任务。
想象你是一个主编,有10篇文章要同时处理。传统方式是一个个来,用SubAgent就可以同时召唤10个"小弟"帮你干活,效率直接起飞🚀
🧩 SubAgent核心概念
🎯 什么是SubAgent?
SubAgent是主Agent派生出来的独立Agent实例,具有以下特点:
- 独立上下文:每个SubAgent有自己的记忆和对话历史
- 任务隔离:一个SubAgent崩溃不影响其他SubAgent
- 结果汇总:主Agent可以收集所有SubAgent的结果
- 资源共享:可以访问主Agent的部分Skills和配置
📝 创建SubAgent
// 方式一:直接创建
const subAgent = await openclaw.subagent.spawn({
name: "translator-en",
prompt: "你是一个专业的英文翻译,擅长技术文档翻译",
skills: ["web-search", "language-tools"],
timeout: 60000
});
// 方式二:从模板创建
const subAgent = await openclaw.subagent.fromTemplate("code-reviewer", {
language: "python",
strictMode: true
});
🎬 实战案例一:多语言翻译
需要把一篇技术文章翻译成5种语言?直接上SubAgent:
async function translateToMultipleLanguages(article, languages) {
// 为每个语言创建一个SubAgent
const tasks = languages.map(lang =>
openclaw.subagent.spawn({
name: `translator-${lang}`,
prompt: `你是专业${lang}翻译,将文章翻译成地道的${lang}`,
task: `翻译以下文章到${lang}:\n\n${article}`,
timeout: 30000
})
);
// 等待所有翻译完成
const results = await Promise.all(tasks);
return results.reduce((acc, r) => {
acc[r.name.replace('translator-', '')] = r.output;
return acc;
}, {});
}
// 使用
const translations = await translateToMultipleLanguages(articleText,
['en', 'ja', 'ko', 'fr', 'de']
);
🎬 实战案例二:并行数据抓取
// 同时从多个来源抓取数据
const sources = [
{ name: "github", url: "https://api.github.com/search/repositories" },
{ name: "hackernews", url: "https://hacker-news.firebaseio.com/v0/topstories.json" },
{ name: "reddit", url: "https://www.reddit.com/r/AI/rising.json" }
];
const scrapers = sources.map(src =>
openclaw.subagent.spawn({
name: `scraper-${src.name}`,
skills: ["web-scraper-pro"],
task: `抓取 ${src.url} 的数据,提取最近10条热门内容`,
context: { source: src.name, url: src.url }
})
);
const results = await Promise.all(scrapers);
console.log(`抓取完成,共获取 ${results.length} 个数据源`);
📊 SubAgent状态监控
# 列出所有活跃的SubAgent
openclaw subagent list
# 查看特定SubAgent的日志
openclaw subagent logs translator-en --follow
# 终止失控的SubAgent
openclaw subagent kill runaway-agent
# 查看资源使用情况
openclaw subagent stats --all
💡 实战建议:
- 每个SubAgent的超时时间要合理设置:翻译类30秒,数据抓取类60秒
- 使用
Promise.allSettled() 而不是 Promise.all() —— 一个失败不影响其他
- SubAgent数量不要超过CPU核心数×2,否则会互相拖慢
- 给每个SubAgent明确的任务上下文,减少重复沟通
⚠️ 常见错误处理
- SubAgent无响应:检查是否设置了合理的timeout,默认30秒可能不够
- 上下文溢出:SubAgent的上下文是独立的,但主Agent收集结果时要注意总量
- Skills冲突:如果多个SubAgent使用同一个需要登录的Skill,可能token冲突
🔗 相关资源