Topology
多个 Agent 怎么连 —— 串行、并行、监督,每种背后是不同的组织哲学。
一定义
Topology(拓扑)是多个 Agent 之间的连接方式。一旦任务复杂到单个 Agent 搞不定,我们就开始画图—— 谁先谁后、谁调度谁、谁投票谁。不同的画法,就是不同的拓扑。
二三种基本拓扑
1. 串行(流水线)
A → B → C → D。每个 Agent 干一件事,把结果丢给下一个。
- 优点:简单、高效、易调试。
- 缺点:一个卡住全卡住,没有回头路。
- 适用:流程清晰、步骤可拆的任务 —— 写代码、做多轮审核、生成报告。
2. 并行(投票 / 竞争)
同一个任务给 N 个 Agent 同时做,然后选最好的,或者让它们互相打分。
- 优点:质量高,容错好。
- 缺点:费钱,响应慢。
- 适用:质量比成本重要的场景 —— 关键决策、复杂推理、需要多视角的问题。
3. 监督(分层 / Hierarchical)
一个"老板 Agent"指挥一群"员工 Agent",老板负责拆任务、检查结果、决定重做。
- 优点:灵活、可处理开放任务。
- 缺点:依赖一个好的"老板",老板崩了全崩。
- 适用:复杂、开放、目标不明确的任务 —— 科研、长期项目、用户陪伴。
三实际系统是混合的
用户输入
└─ 监督层 (老板 Agent)
├─ 串行子流 1 (规划 → 搜索 → 整理)
├─ 并行子流 2 (三个审稿人投票)
└─ 监督层回收 → 输出
也就是说,我们其实在画组织架构图。老板分活、员工执行、HR 做 review —— 全套人类组织语言都搬过来了。
四最小可跑的例子(并行投票)
import concurrent.futures
def solve(prompt):
return client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}]
).choices[0].message.content
prompts = [f"用方法 {i} 解这道题:{problem}" for i in range(3)]
with concurrent.futures.ThreadPoolExecutor() as ex:
answers = list(ex.map(solve, prompts))
# 让模型挑最好的
best = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user",
"content": f"从下面三个答案里选一个最好的,只输出原文:\n" +
"\n---\n".join(answers)}]
).choices[0].message.content
print(best)
五常见误区
- 把"多 Agent"当银弹 —— 单体能搞定的就别拆,多 Agent 协调本身有成本。
- 没有共享 Memory —— 各 Agent 各自瞎猜,反而比单个还差。
- 老板 Agent 太弱 —— 老板比员工还笨,整个组织就跑偏。
- 不考虑终止 —— 多 Agent 容易出现"互相等着对方先动"的死锁。