Skip to main content

委派与并行工作

在构建复杂任务时,单个智能体(Agent)的能力可能受限于上下文长度、推理深度或执行效率。子代理委派(Subagent Delegation) 是一种核心策略,通过将大任务拆分为多个可并行处理的小任务,并由专门的子代理(Subagents)分别完成,从而显著提升整体效率和质量。

以下是关键场景与最佳实践:

🌟 一、何时使用子代理委派?

场景是否推荐原因
需要并行探索多个方向(如调研多个技术方案)✅ 强烈推荐子代理可同时分析不同路径,避免串行等待
涉及多文件/模块的系统性工作(如重构项目)✅ 推荐每个子代理专注一个文件或模块,减少上下文干扰
需要专业领域知识的审查(如代码安全审计)✅ 推荐可委派给具备特定技能的子代理(如“安全专家”)
任务本身可分解为独立子任务✅ 推荐如文档撰写 → 拆解为摘要、结构、内容生成等
单个代理已超载或陷入死循环⚠️ 警告表明任务设计不合理,应重新拆分

💡 判断标准:如果任务满足以下任一条件,就应考虑子代理委派:

  • 需要同时处理多个独立输入
  • 有明确的模块化结构
  • 涉及不同专业知识领域
  • 执行时间过长(>30秒)

🔧 二、典型应用场景与模式

1. 并行研究(Parallel Research)

场景

你需要评估三种不同的 AI 模型(如 Llama 3、Gemma 3、Claude 3)在某个任务上的表现。

模式:并行探索 + 汇总决策

[主代理]
→ 分解任务:对每个模型进行独立测试
→ 创建三个子代理:
- Subagent-A: 测试 Llama 3
- Subagent-B: 测试 Gemma 3
- Subagent-C: 测试 Claude 3
→ 同时发起请求,收集结果
→ 主代理汇总性能数据,输出对比报告

关键技巧:

  • 使用 @parallel 标记并行调用
  • 设置超时机制(如每子代理最多 60 秒)
  • 结果需包含置信度评分(confidence score)

✅ 示例输出:

{
"model": "Llama 3",
"accuracy": 0.89,
"latency_ms": 420,
"confidence": 0.92
}

2. 代码审查(Code Review)

场景

你有一个包含 500 行的 Python 文件,需要进行全面审查。

模式:职责分离 + 多维度审查

[主代理]
→ 拆解审查维度:
- 安全性检查(SQL 注入、XSS)
- 可读性与风格(PEP8、命名规范)
- 逻辑错误(空值处理、边界条件)
- 性能瓶颈(O(n²) 循环、重复计算)
→ 创建四个子代理:
- SecurityAgent: 专注安全漏洞
- StyleAgent: 专注编码风格
- LogicAgent: 专注逻辑正确性
- PerfAgent: 专注性能优化
→ 并行运行,返回问题列表
→ 主代理合并所有反馈,生成综合评审报告

关键技巧:

  • 为每个子代理分配角色标签(如 role: security-expert
  • 使用 JSON Schema 确保输出格式统一
  • 支持“高优先级问题”自动标记(如 critical: true

✅ 输出示例:

{
"file": "utils.py",
"issues": [
{
"type": "security",
"line": 45,
"message": "SQL injection risk: raw string concatenation",
"suggestion": "Use parameterized queries",
"severity": "high"
}
]
}

3. 多文件协作开发(Multi-file Work)

场景

你正在开发一个 Web 应用,包含前端(React)、后端(FastAPI)、数据库(PostgreSQL)和部署脚本(Dockerfile)。

模式:模块化分工 + 协同集成

[主代理]
→ 识别项目结构:
- /frontend/src/App.jsx
- /backend/main.py
- /db/schema.sql
- /docker-compose.yml
→ 创建子代理:
- FrontendAgent: 负责 React 组件开发
- BackendAgent: 负责 API 路由与业务逻辑
- DBAgent: 负责数据库设计与迁移
- DevOpsAgent: 负责容器化与部署配置
→ 并行开发,定期同步状态
→ 主代理协调接口定义、版本兼容性与集成测试

关键技巧:

  • 使用共享上下文(Shared Context)传递接口契约(如 OpenAPI 规范)
  • 设立“集成点”检查(Integration Checkpoints)
  • 通过 @sync 指令触发子代理间状态同步

✅ 示例流程:

[FrontendAgent] → 提交组件接口定义
[BackendAgent] → 根据接口实现 API
[DevOpsAgent] → 更新 Dockerfile 以支持新服务
[主代理] → 运行集成测试,验证通信

🛠️ 三、子代理委派的最佳实践

实践说明
明确职责边界每个子代理只负责一个清晰的任务域
使用角色提示词(Role Prompting)You are a senior security auditor with expertise in OWASP Top 10
标准化输出格式强制返回 JSON,含 task, result, status, confidence 字段
设置超时与重试机制防止卡死;失败时自动重试或降级处理
支持动态调度根据任务复杂度动态决定是否启用子代理
保留上下文追踪使用 trace_idtask_id 追踪整个流程

📌 四、工具与平台支持

以下平台原生支持子代理委派:

平台特性
Hermes Agent (via MCP)支持多 agent 协作、任务分解、状态管理
Nous Research提供子代理模板库(Subagent Templates)
OpenRouter支持多模型并行调用,可绑定不同子代理
Telegram/Discord Bot Agents可通过消息通道实现子代理通信
Modal + Daytona用于部署可扩展的子代理集群

🔄 推荐架构:
Main Agent → Task Splitter → Subagents (in parallel) → Result Aggregator → Final Output


🧩 五、进阶模式:递归委派与自组织网络

当任务极其复杂时,可采用更高级的结构:

这种 递归委派(Recursive Delegation) 允许子代理自身也创建更细粒度的子代理,形成自组织智能网络。


✅ 总结:何时使用子代理委派?

判断依据是否启用子代理
任务 > 3 个独立部分✅ 是
涉及不同专业领域✅ 是
可并行执行✅ 是
单个代理响应慢或出错⚠️ 考虑
任务简单且单一❌ 否

🎯 核心原则
“让最合适的代理做最合适的事” —— 子代理委派不是为了复杂化,而是为了规模化智能


📌 立即行动建议

  1. 在你的 Agent 工作流中加入 delegate() 函数
  2. 为常见任务创建子代理模板(如 code_review_agent, research_agent
  3. SOUL.md 中定义子代理的角色与能力清单
  4. 使用 task_id 标记子代理任务,便于追踪与调试

🌐 更多资源:agentskills.io | MCP Docs | Honcho GitHub


💡 一句话总结
子代理委派 = 智能分工 × 并行加速 × 专业化输出 —— 让你的 AI 系统像一支高效团队一样运转。"

委派与并行工作

Hermes 可以创建独立的子代理,以并行方式处理任务。每个子代理都拥有自己的对话、终端会话和工具集。只有最终的总结会返回给你——中间的工具调用永远不会进入你的上下文窗口。

有关完整功能参考,请参阅 子代理委派


何时进行委派

适合委派的良好候选任务:

  • 需要深度推理的子任务(调试、代码审查、研究综合)
  • 会大量占用你上下文空间的中间数据任务
  • 可并行独立推进的工作流(同时研究 A 和 B)
  • 需要全新上下文的任务,希望代理不受偏见影响地开展工作

应使用其他方式:

  • 单个工具调用 → 直接使用工具即可
  • 步步相连的机械式多步骤任务 → execute_code
  • 需要用户交互的任务 → 子代理无法使用 clarify
  • 快速文件修改 → 直接操作即可

模式:并行研究

同时研究三个主题,并获取结构化的摘要结果:

Research these three topics in parallel:
1. Current state of WebAssembly outside the browser
2. RISC-V server chip adoption in 2025
3. Practical quantum computing applications

Focus on recent developments and key players.

幕后,Hermes 使用:

delegate_task(tasks=[
{
"goal": "Research WebAssembly outside the browser in 2025",
"context": "Focus on: runtimes (Wasmtime, Wasmer), cloud/edge use cases, WASI progress",
"toolsets": ["web"]
},
{
"goal": "Research RISC-V server chip adoption",
"context": "Focus on: server chips shipping, cloud providers adopting, software ecosystem",
"toolsets": ["web"]
},
{
"goal": "Research practical quantum computing applications",
"context": "Focus on: error correction breakthroughs, real-world use cases, key companies",
"toolsets": ["web"]
}
])

这三个任务并发执行。每个子代理独立进行网络搜索,并返回摘要。父代理随后将它们整合成一份连贯的简报。


模式:代码审查

将安全审查委派给一个全新上下文的子代理,使其能不受先入为主观念的影响来审视代码:

Review the authentication module at src/auth/ for security issues.
Check for SQL injection, JWT validation problems, password handling,
and session management. Fix anything you find and run the tests.

关键在于 context 字段 —— 必须包含子代理所需的所有信息:

delegate_task(
goal="Review src/auth/ for security issues and fix any found",
context="""Project at /home/user/webapp. Python 3.11, Flask, PyJWT, bcrypt.
Auth files: src/auth/login.py, src/auth/jwt.py, src/auth/middleware.py
Test command: pytest tests/auth/ -v
Focus on: SQL injection, JWT validation, password hashing, session management.
Fix issues found and verify tests pass.""",
toolsets=["terminal", "file"]
)
上下文问题

子代理对你的对话完全不知情。它们从零开始。如果你委派“修复我们之前讨论的 bug”,子代理根本不知道你说的是哪个 bug。请始终明确提供文件路径、错误信息、项目结构和约束条件。


模式:对比多种方案

并行评估同一问题的多个解决方案,然后选择最优者:

I need to add full-text search to our Django app. Evaluate three approaches
in parallel:
1. PostgreSQL tsvector (built-in)
2. Elasticsearch via django-elasticsearch-dsl
3. Meilisearch via meilisearch-python

For each: setup complexity, query capabilities, resource requirements,
and maintenance overhead. Compare them and recommend one.

每个子代理独立研究一种方案。由于彼此隔离,不会相互干扰——每项评估都基于自身独立判断。父代理获得全部三个摘要后,再进行比较分析。


模式:多文件重构

将大型重构任务拆分为多个并行子代理,每个负责代码库的不同部分:

delegate_task(tasks=[
{
"goal": "Refactor all API endpoint handlers to use the new response format",
"context": """Project at /home/user/api-server.
Files: src/handlers/users.py, src/handlers/auth.py, src/handlers/billing.py
Old format: return {"data": result, "status": "ok"}
New format: return APIResponse(data=result, status=200).to_dict()
Import: from src.responses import APIResponse
Run tests after: pytest tests/handlers/ -v""",
"toolsets": ["terminal", "file"]
},
{
"goal": "Update all client SDK methods to handle the new response format",
"context": """Project at /home/user/api-server.
Files: sdk/python/client.py, sdk/python/models.py
Old parsing: result = response.json()["data"]
New parsing: result = response.json()["data"] (same key, but add status code checking)
Also update sdk/python/tests/test_client.py""",
"toolsets": ["terminal", "file"]
},
{
"goal": "Update API documentation to reflect the new response format",
"context": """Project at /home/user/api-server.
Docs at: docs/api/. Format: Markdown with code examples.
Update all response examples from old format to new format.
Add a 'Response Format' section to docs/api/overview.md explaining the schema.""",
"toolsets": ["terminal", "file"]
}
])
tip

每个子代理都有自己的终端会话。它们可以在同一项目目录中工作而互不干扰——只要编辑的是不同文件。如果两个子代理可能修改同一文件,请在并行工作完成后自行处理该文件。


模式:收集后分析

使用 execute_code 进行机械式数据收集,然后委派进行高阶推理分析:

# Step 1: Mechanical gathering (execute_code is better here — no reasoning needed)
execute_code("""
from hermes_tools import web_search, web_extract

results = []
for query in ["AI funding Q1 2026", "AI startup acquisitions 2026", "AI IPOs 2026"]:
r = web_search(query, limit=5)
for item in r["data"]["web"]:
results.append({"title": item["title"], "url": item["url"], "desc": item["description"]})

# Extract full content from top 5 most relevant
urls = [r["url"] for r in results[:5]]
content = web_extract(urls)

# Save for the analysis step
import json
with open("/tmp/ai-funding-data.json", "w") as f:
json.dump({"search_results": results, "extracted": content["results"]}, f)
print(f"Collected {len(results)} results, extracted {len(content['results'])} pages")
""")

# Step 2: Reasoning-heavy analysis (delegation is better here)
delegate_task(
goal="Analyze AI funding data and write a market report",
context="""Raw data at /tmp/ai-funding-data.json contains search results and
extracted web pages about AI funding, acquisitions, and IPOs in Q1 2026.
Write a structured market report: key deals, trends, notable players,
and outlook. Focus on deals over $100M.""",
toolsets=["terminal", "file"]
)

这通常是效率最高的模式:execute_code 能廉价地完成 10+ 个连续的工具调用,之后由一个子代理在干净的上下文中完成单一高成本的推理任务。


工具集选择

根据子代理的需求选择合适的工具集:

任务类型工具集原因
网络调研["web"]仅需 web_search + web_extract
代码工作["terminal", "file"]需要 Shell 访问和文件操作
全栈开发["terminal", "file", "web"]除消息通信外所有工具
只读分析["file"]只能读取文件,不能运行 shell

限制工具集可确保子代理专注,防止意外副作用(例如研究类子代理误执行 shell 命令)。


限制条件

  • 最多 3 个并行任务 —— 批量任务最多支持 3 个并发子代理
  • 禁止嵌套 —— 子代理不能调用 delegate_taskclarifymemorysend_messageexecute_code
  • 独立终端 —— 每个子代理拥有独立的终端会话,包括独立的工作目录和状态
  • 无对话历史 —— 子代理只能看到你放入 goalcontext 的内容
  • 默认 50 次迭代 —— 对简单任务可将 max_iterations 设得更低以节省成本

实用技巧

目标描述要具体。 “修复 bug” 太模糊。应改为:“修复 api/handlers.py 第 47 行的 TypeError,该错误发生在 process_request() 从 parse_body() 接收 None 值时”,这样子代理才有足够信息开展工作。

包含文件路径。 子代理不了解你的项目结构。务必提供相关文件的绝对路径、项目根目录以及测试命令。

利用委派实现上下文隔离。 有时你需要全新的视角。委派迫使你清晰表达问题,而子代理则不受你对话中积累的假设影响。

检查结果。 子代理的摘要只是摘要。若子代理称“已修复 bug 且测试通过”,请自行运行测试或查看 diff 来验证。


如需完整的委派参考——包含所有参数、ACP 集成及高级配置——请查阅 子代理委派