🔄 Sub-Agent

把复杂任务拆成小块,让每个Sub-Agent各显神通

"世界上有一种智慧叫做分解。当面对一个庞大而复杂的任务时,聪明的做法不是独自硬扛,而是把它拆成小块,让每个Sub-Agent各司其职。就像一支足球队,前锋、中场、后卫,每个人都有自己的位置和责任。"

📖 什么是 Sub-Agent?

Sub-Agent(子Agent) 是 OpenClaw 中用于任务分解和并行处理的核心机制。它允许一个主 Agent 创建多个独立的子 Agent,每个子 Agent 负责处理任务的一部分,最后主 Agent 汇总所有结果。

核心概念:Sub-Agent = 任务分解 + 隔离执行 + 并行处理 + 结果聚合

🔧 sessions_spawn 详解

基本语法

sessions_spawn(
    task="子Agent的任务描述",
    runtime="subagent",      # 运行时类型:subagent 或 acp
    mode="run",              # 模式:run(一次性)或 session(持久)
    model="gpt-4",           # 可选:指定模型
    timeoutSeconds=300,      # 可选:超时时间
    thread=false             # 可选:是否在线程中运行
)

两种运行模式

mode="run"(一次性模式):
- Sub-agent 执行完任务后立即结束
- 适合简单的、一次性的子任务
- 返回最终执行结果
mode="session"(持久模式):
- Sub-agent 保持运行状态
- 适合需要多轮交互的复杂任务
- 可以与 Sub-agent 持续通信

🛠️ 实战应用

场景1:内容生产流水线

# 主Agent:协调整个内容生产流程
def produce_blog_post(topic):
    
    # Sub-agent 1: 研究员 - 收集资料
    research = sessions_spawn(
        task=f"深入研究主题:{topic}。搜索最新资讯,整理5-10个关键信息点。",
        runtime="subagent",
        mode="run"
    )
    
    # Sub-agent 2: 大纲撰写员 - 创建文章结构
    outline = sessions_spawn(
        task=f"基于以下研究资料,创建文章大纲:\n{research}\n\n要求:包含引言、3-5个主要章节、结论",
        runtime="subagent",
        mode="run"
    )
    
    # Sub-agent 3: 内容撰写员 - 撰写正文
    draft = sessions_spawn(
        task=f"根据以下大纲撰写完整文章:\n{outline}\n\n风格:专业且易懂,字数2000字左右",
        runtime="subagent",
        mode="run"
    )
    
    # Sub-agent 4: 编辑 - 润色修改
    final = sessions_spawn(
        task=f"编辑以下文章,改善语言表达和结构:\n{draft}",
        runtime="subagent",
        mode="run"
    )
    
    return final

场景2:代码审查系统

# 并行代码审查
def parallel_code_review(code_changes):
    
    # 同时启动多个审查Sub-agent
    reviews = []
    
    # 安全性审查
    security_review = sessions_spawn(
        task=f"审查以下代码的安全漏洞:\n{code_changes}\n\n重点关注:SQL注入、XSS、敏感数据泄露",
        runtime="subagent",
        mode="run"
    )
    reviews.append(security_review)
    
    # 性能审查
    perf_review = sessions_spawn(
        task=f"审查以下代码的性能问题:\n{code_changes}\n\n重点关注:算法复杂度、数据库查询、内存使用",
        runtime="subagent",
        mode="run"
    )
    reviews.append(perf_review)
    
    # 可维护性审查
    maintain_review = sessions_spawn(
        task=f"审查以下代码的可维护性:\n{code_changes}\n\n重点关注:代码风格、注释、模块化程度",
        runtime="subagent",
        mode="run"
    )
    reviews.append(maintain_review)
    
    # 汇总所有审查结果
    return aggregate_reviews(reviews)

场景3:数据分析任务

# 大规模数据分析 - 分片处理
def analyze_large_dataset(dataset_path):
    
    # 将数据集分成多个分片
    shards = split_dataset(dataset_path, num_shards=5)
    
    # 为每个分片创建Sub-agent
    analysis_tasks = []
    for i, shard in enumerate(shards):
        task = sessions_spawn(
            task=f"分析数据分片 {i+1},计算统计指标:平均值、标准差、分布情况\n数据路径:{shard}",
            runtime="subagent",
            mode="run"
        )
        analysis_tasks.append(task)
    
    # 汇总所有分片的分析结果
    combined = combine_analyses(analysis_tasks)
    
    # 生成最终报告
    report = sessions_spawn(
        task=f"基于以下分析结果生成综合报告:\n{combined}",
        runtime="subagent",
        mode="run"
    )
    
    return report

⏱️ 等待与同步

使用 sessions_yield

# 启动Sub-agent后,主Agent需要等待结果
sub_task = sessions_spawn(
    task="执行耗时任务...",
    runtime="subagent",
    mode="run"
)

# 主Agent结束当前回合,等待Sub-agent结果
sessions_yield(message="已启动子任务,等待完成...")

# 下一回合,主Agent收到Sub-agent的结果
# 继续处理...

🎯 最佳实践

1. 任务粒度

✅ 好的任务设计:
- 单一职责:一个Sub-agent只做一件事
- 输入明确:提供完整的上下文
- 输出可验证:结果格式清晰

❌ 差的任务设计:
- 职责混杂:"研究并撰写并审核"
- 上下文缺失:"处理这个文件"(没有路径)
- 输出模糊:"分析一下"

2. 错误处理

try:
    result = sessions_spawn(
        task="可能失败的任务",
        runtime="subagent",
        mode="run",
        timeoutSeconds=60
    )
except TimeoutError:
    # 超时重试或降级
    result = fallback_approach()
except Exception as e:
    # 记录错误
    log_error(e)
    result = None

3. 结果验证

# 验证Sub-agent输出
def validate_result(result, expected_format):
    if not result:
        return False, "空结果"
    
    if not meets_format(result, expected_format):
        return False, "格式不符"
    
    if not meets_quality(result):
        return False, "质量不达标"
    
    return True, "验证通过"

# 使用验证器
is_valid, message = validate_result(sub_result, "json")
if not is_valid:
    # 重新委派或人工介入
    handle_validation_failure()

🚀 进阶技巧

1. 分层Sub-agent

# 三层Sub-agent架构
# Level 1: 协调器
# Level 2: 模块负责人  
# Level 3: 具体执行者

def hierarchical_task(project):
    # Level 1: 项目分解
    modules = sessions_spawn(
        task=f"将项目分解为模块:{project}",
        runtime="subagent",
        mode="run"
    )
    
    results = []
    for module in modules:
        # Level 2: 模块负责人
        module_result = sessions_spawn(
            task=f"负责模块 {module.name},协调子任务",
            runtime="subagent",
            mode="run"
        )
        results.append(module_result)
    
    return combine_results(results)

2. 动态任务调整

# 根据中间结果调整后续任务
initial_result = sessions_spawn(task="初步分析...", ...)

# 分析结果,决定下一步
if initial_result.confidence < 0.7:
    # 置信度低,增加验证步骤
    validation = sessions_spawn(task="验证初步结果...", ...)
    final_result = reconcile(initial_result, validation)
else:
    final_result = initial_result

🎬 结语

"世界上有一种力量叫做分解。Sub-Agent 不是逃避复杂,而是用智慧征服复杂。当每个小块都被妥善处理,整体就有了坚实的根基。"

掌握 Sub-Agent 的使用,你就掌握了扩展 AI 处理能力的关键。开始设计你的分层 Agent 架构吧!