想象一家餐厅。没有编排的话,厨师在做菜,服务员在扫地,收银员在切菜——每个人都很忙,但餐厅没法营业。
有了编排,厨师专注做菜,服务员传菜,收银员结账——各自分工明确,形成流水线。
在AI世界里,编排者(Orchestrator)负责:接收任务→拆分成子任务→分配给合适的Agent→协调执行顺序→合并结果→返回最终答案。
一个Agent是士兵,编排是将军——让AI团队打团战而不是各自为战
晚上11点47分,一个Agent在写代码,另一个在审查,第三个在跑测试——它们互不相干,各忙各的。这就是没有编排。Agent Orchestration就是给它们安排一个指挥官,让它们像乐队一样协同演奏,而不是每个人各吹各的号。
A完成→B开始→C开始
适合有依赖关系的任务
写代码 → 审查 → 部署
A、B、C同时开始
适合独立子任务
搜新闻 + 搜论文 + 搜推特
编排者决定下一步
适合不确定流程
不确定用哪个工具时动态选择
主编排→子编排→执行者
适合复杂项目
CEO→部门经理→员工
大脑,负责:任务分析、Agent选择、执行调度、结果整合
# Orchestrator 核心逻辑
class Orchestrator:
def execute(task):
# 1. 分析任务
subtasks = self.decompose(task)
# 2. 选择Agent
assignments = self.assign_agents(subtasks)
# 3. 调度执行
results = self.dispatch(assignments)
# 4. 整合结果
return self.merge_results(results)
# 输入:用户任务
task = "写一篇关于AI安全的深度文章"
# 拆分成子任务
subtasks = [
{"agent": "researcher", "task": "搜索AI安全最新事件", "priority": 1},
{"agent": "writer", "task": "基于研究资料起草文章", "depends": [1]},
{"agent": "editor", "task": "审查文章质量", "depends": [2]},
{"agent": "publisher", "task": "发布到网站", "depends": [3]}
]
# 根据任务类型选择最合适的Agent
def route(task):
if task.requires_research():
return "research_agent"
elif task.requires_coding():
return "coding_agent"
elif task.requires_writing():
return "writing_agent"
else:
return "general_agent"
# agents/miaoquai-team/
# 特别助理 - 总编排
agent_id: assistant
role: orchestrator
can_spawn: [hr, knowledge, miaoquai, pr, cto]
task_routing:
招聘 → hr
知识整理 → knowledge
内容生产 → miaoquai
品牌推广 → pr
技术开发 → cto
# 妙趣AI - PR角色
agent_id: miaoquai
role: pr_content
capabilities: [seo, community, news, glossary]
# CTO Agent - 技术资产
agent_id: cto
role: technical_lead
capabilities: [development, infrastructure, security]
# 特别助理创建子Agent执行任务
await sessions_spawn({
task: "生成5个OpenClaw教程页面",
runtime: "subagent",
agentId: "miaoquai",
mode: "run",
label: "seo-batch-2026-04-28"
});
# 并行创建多个子Agent
await Promise.all([
sessions_spawn({task: "搜索AI新闻", agentId: "miaoquai"}),
sessions_spawn({task: "竞品分析", agentId: "miaoquai"}),
sessions_spawn({task: "生成术语页", agentId: "miaoquai"})
]);
# OpenClaw 定时任务编排流水线
pipeline:
name: daily_seo_pipeline
schedule: "0 1 * * *" # 每天1:00
steps:
- name: search_trending
agent: miaoquai
output: trending_keywords.json
- name: generate_pages
agent: miaoquai
depends_on: [search_trending]
parallel: true # 并行生成多个页面
- name: update_sitemap
agent: miaoquai
depends_on: [generate_pages]
- name: report
agent: assistant
depends_on: [update_sitemap]
output: 飞书通知
太粗:一个Agent干太多,性能差
太细:Agent间通信开销大,协调成本高
# ❌ 太粗
task: "做个网站" # 一个Agent干所有事
# ❌ 太细
tasks: ["写第1个字", "写第2个字", ...] # 通信爆炸
# ✅ 合理粒度
tasks: ["搜索关键词", "生成5个教程页", "更新sitemap"] # 按功能拆分
# 多个Agent返回不同格式
agent_a_result = {"type": "json", "data": {...}}
agent_b_result = {"type": "html", "content": "..."}
agent_c_result = {"type": "text", "summary": "..."}
# Orchestrator 需要统一格式
merged = orchestrator.normalize_results([
agent_a_result, agent_b_result, agent_c_result
])
✅ 明确每个Agent的职责边界,避免功能重叠
✅ 子任务粒度适中:一个Agent 5-30分钟可完成
✅ 设置合理的超时和重试机制
✅ 独立子任务并行执行,依赖任务串行
✅ 编排者不直接执行任务,只做调度和决策
✅ 保留完整的编排日志用于调试
✅ 结果合并前统一数据格式
✅ 用label标记子Agent,方便追踪和复用