Multi-Agent 架构踩坑
7 个 Agent 不是万能药,3 个核心 Agent + 工具调用反而更稳定
V1:7 个 Agent 的"完美"设计
一开始我的设计是这样的——7 个专业 Agent,各司其职:
- 基本面分析师 — 看财报、PE、ROE
- 技术分析师 — 看 K 线、均线、MACD
- 风控专家 — 评估风险、仓位建议
- 资金流向分析师 — 看主力资金
- 行业研究员 — 分析行业趋势
- 宏观分析师 — 看利率、政策
- 首席策略师 — 综合所有分析出结论
听起来很专业对吧?每个 Agent 有独立的 system prompt、工具白名单和迭代参数。问题是什么?
# V1 — 场景团队模板(回测场景)
BACKTEST_TEAM = {
"strategy_designer": {
"system_prompt": "你是策略设计师...",
"tools": ["backtest_run", "strategy_validate"],
"max_iterations": 3,
},
"backtest_engineer": {
"system_prompt": "你是回测工程师...",
"tools": ["backtest_run", "data_fetch"],
"max_iterations": 5,
},
"risk_assessor": {
"system_prompt": "你是风险评估师...",
"tools": ["risk_calculate", "position_size"],
"max_iterations": 2,
},
"chief_strategist": {
"system_prompt": "你是首席策略师...",
"tools": ["synthesize"],
"max_iterations": 1,
},
}
出了什么问题
问题一:意图解析链路太长
用户问"贵州茅台怎么样",7 个 Agent 都想发言。意图解析器要把这个问题拆成 7 个子任务,每个子任务再路由到对应 Agent。链路越长,错误放大越严重——第 2 个 Agent 理解错了,后面全错。
问题二:Token 爆炸
7 个 Agent 的 system prompt 加起来就 4000+ token,还没算工具描述和上下文。一次对话轻松超过 8000 token,成本扛不住。
问题三:结论矛盾
基本面说"PE 偏高建议观望",技术面说"突破关键阻力位建议买入",首席策略师合不出来。真实场景中这种矛盾太常见了。
V2:3 个核心 Agent + 工具调用
砍掉行业研究员、宏观分析师、资金流向分析师,把他们的能力变成工具而不是 Agent。最终架构:
- 数据获取 Agent — 调工具查数据(行情、财报、资金流、行业数据都是工具)
- 分析 Agent — 根据数据出分析(基本面+技术面+风控一体)
- 策略 Agent — 综合出建议(只在需要时调用)
# V2 — 3 核心 Agent + 工具调用
class ExecutionMode(Enum):
DIRECT_LLM = "direct_llm" # 简单问答,直接 LLM
TOOL_CALLING = "tool_calling" # 需要调工具
SUBAGENT_ASYNC = "subagent" # 委托子 Agent
EXPERT_INVOKE = "expert" # 调专家
SKILL_INVOKE = "skill" # 调技能
CODE_GENERATION = "code_gen" # 生成代码
PLAN_ONLY = "plan" # 只规划不执行
DEBATE = "debate" # 多 Agent 辩论
关键变化:原来需要 7 个 Agent 协作的场景,现在 1 个 Agent + 多次工具调用就能搞定。意图解析只需要判断"这个问题需要调什么工具",不需要判断"这个问题该路由给哪个 Agent"。这套架构在 FinBuddy 中已经稳定运行,也是我做 AI SaaS 开发时最核心的设计决策。
教训
- Agent 不是人 — 不要按人的分工方式设计 Agent。人需要分工是因为认知有限,Agent 不需要。一个 Agent 调 10 个工具比 10 个 Agent 各调 1 个工具简单得多。
- 工具 > Agent — 能用工具解决的不要开 Agent。工具是确定性的,Agent 是不确定性的。不确定性越少越好。
- 少即是多 — 第一版 7 个 Agent 的设计虽然有问题,但至少让我知道了问题在哪。如果一直在纸上设计,永远发现不了 token 爆炸和结论矛盾的问题。这跟价值投资里的"少即是多"一个道理——5只看懂的股票比20只看不懂的强,3个核心Agent比7个Agent稳定。