委派与并行工作
在构建复杂任务时,单个智能体(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_id 或 task_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 个独立部分 | ✅ 是 |
| 涉及不同专业领域 | ✅ 是 |
| 可并行执行 | ✅ 是 |
| 单个代理响应慢或出错 | ⚠️ 考虑 |
| 任务简单且单一 | ❌ 否 |
🎯 核心原则:
“让最合适的代理做最合适的事” —— 子代理委派不是为了复杂化,而是为了规模化智能。
📌 立即行动建议:
- 在你的 Agent 工作流中加入
delegate()函数 - 为常见任务创建子代理模板(如
code_review_agent,research_agent) - 在
SOUL.md中定义子代理的角色与能力清单 - 使用
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"]
}
])
每个子代理都有自己的终端会话。它们可以在同一项目目录中工作而互不干扰——只要编辑的是不同文件。如果两个子代理可能修改同一文件,请在并行工作完成后自行处理该文件。
模式:收集后分析
使用 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_task、clarify、memory、send_message或execute_code - 独立终端 —— 每个子代理拥有独立的终端会话,包括独立的工作目录和状态
- 无对话历史 —— 子代理只能看到你放入
goal和context的内容 - 默认 50 次迭代 —— 对简单任务可将
max_iterations设得更低以节省成本
实用技巧
目标描述要具体。 “修复 bug” 太模糊。应改为:“修复 api/handlers.py 第 47 行的 TypeError,该错误发生在 process_request() 从 parse_body() 接收 None 值时”,这样子代理才有足够信息开展工作。
包含文件路径。 子代理不了解你的项目结构。务必提供相关文件的绝对路径、项目根目录以及测试命令。
利用委派实现上下文隔离。 有时你需要全新的视角。委派迫使你清晰表达问题,而子代理则不受你对话中积累的假设影响。
检查结果。 子代理的摘要只是摘要。若子代理称“已修复 bug 且测试通过”,请自行运行测试或查看 diff 来验证。
如需完整的委派参考——包含所有参数、ACP 集成及高级配置——请查阅 子代理委派。