ADR#1 — 本项目为什么(暂)不上多 agent
ADR#1 — 本项目为什么(暂)不上多 agent
日期: 2026-07-17 阶段: Phase 2 - AI-native 参考架构 标签: #adr #multi-agent #orchestrator-worker #context-engineering
核心问题
仓库里已经有一套 orchestrator-worker 多 agent 代码(src/agent/orchestrator/orchestratorAgent.ts:Opus lead + 三个 Sonnet subagent + Budget 熔断)。P2 第一周(D31/D32)刚把 Anthropic 多 agent 研究系统、Cognition「别造多 agent」两派证据读完。现在要做一个有后果的架构决策:AML Copilot(作品②,单一深推型合规调查)到底要不要把这套多 agent 接成主路径?
直觉会说「都写好了,当然用」——这正是要拦住的陷阱。沉没成本不是架构论据。今天用 ADR(Architecture Decision Record)格式把决策、上下文、后果钉死,得出的结论是:AML Copilot 主路径(暂)采用单 agent + 工具调用,多 agent 代码降级为 /agent-lab 的教学/演示装置,并明确写出触发重新评估的量化条件。ADR 的价值不在「决定不用」,而在把「为什么不用」和「什么时候该重新考虑」变成可追溯、可被未来的自己推翻的文档——这正是 Day 17 立的「证据先于声明」纪律在架构层的延续。
关键内容
A. ADR 格式:为什么是「上下文/决策/后果」三段,而非「方案对比表」
ADR(Michael Nygard 2011 原始格式)刻意只有四个必填段:Title / Context / Decision / Consequences,外加一个 Status(proposed→accepted→superseded)。它和常见的「技术选型对比表」有本质区别:
- 对比表回答「哪个更好」——是静态的、脱离时空的,容易变成营销稿(每行都打勾的那个赢)。
- ADR 回答「在我们这个具体约束下,此刻为什么这样选」——它强制写下约束(Context)和代价(Consequences),承认每个决策都有负面后果。一个没有 Consequences 段、或 Consequences 全是优点的 ADR 是失败的 ADR。
ADR 的结构契约(本项目采用):
# ADR-NNN: <祈使句标题>
Status: Accepted | Proposed | Superseded by ADR-MMM
Date: YYYY-MM-DD
## Context ← 不可变事实:约束、力(forces)、当时已知证据
## Decision ← 一句话主句「We will ...」+ 论证
## Consequences ← 正面 + 负面 + 中性,必须写负面
## Revisit-When ← (本项目扩展) 触发重新评估的可证伪条件
反直觉洞察①(ADR 的价值在「未来可被推翻」,不在「现在选对」):很多团队把 ADR 当「正确答案存档」,写完就锁。但 ADR 的设计目的是 immutable log + supersede 链——你不删旧 ADR,而是写 ADR-002 标记「supersedes ADR-001」。这意味着一个「现在看错了」的决策若当时的 Context 和证据是诚实的,它仍是一份成功的 ADR。本项目加
Revisit-When段就是把「何时推翻」前置成可证伪条件,避免决策僵化成教条——这与 Day 28「按 MCP 终版而非 RC 写」同源:决策绑定到可核实的外部状态,不绑定到信念。
B. 基于 D31/D32 证据的决策论证:单 agent 主路径
决策主句:We will 用单 agent(单一上下文 + 工具调用)作为 AML Copilot 调查主路径;多 agent orchestrator 仅保留为 /agent-lab 的对照教学装置。
论证建立在三条 2025-2026 一手证据上,且关键在于把「广度并行」任务与「单一深推」任务区分开——这是整个决策的枢轴:
证据①(Anthropic 2025-06,多 agent 的适用边界):Anthropic 多 agent 研究系统内部 eval 比单 agent Opus 4 高 90.2%,但「multi-agent systems use about 15× more tokens than chats」,且「token usage by itself explains 80% of the variance」(即性能提升的 80% 来自烧 token,不是来自架构精巧)。最关键的限定语:「multi-agent systems excel at valuable tasks that involve heavy parallelization, information that exceeds single context windows」,而「some domains that require all agents to share the same context or involve many dependencies between agents are not a good fit」(Anthropic Engineering, 2025-06)。
证据②(Cognition 2025,单线程优先):Cognition《Don't Build Multi-Agents》两条原则——「Share context, and share full agent traces, not just individual messages」与「Actions carry implicit decisions, and conflicting decisions carry bad results」。Flappy Bird 反例:一个 subagent 造了 Super Mario 风格背景、另一个造了风格不匹配的鸟,合并 agent 面对「根本不兼容的组件」无能为力(Cognition, 2025)。结论:「单线程线性 agent will get you very far」。
证据③(信息论下界,Tran & Kiela 2025):《Single-Agent LLMs Outperform Multi-Agent Systems on Multi-Hop Reasoning Under Equal Thinking Token Budgets》给出信息论论证——在等量 thinking-token 预算下,多 agent 把上下文切碎分发,反而损失多跳推理所需的全局信息(arXiv, 2025)。这条直接戳破「多 agent 天然更强」:只有当任务可真正并行、且单上下文装不下时,多 agent 才值那 15×。
把这三条对到 AML Copilot 的任务形态:
| 任务特征 | AML 单案调查 | 多 agent 适配? |
|---|---|---|
| 子任务能否真并行 | 否——交易图谱解读、typology 判定、SAR 起草强依赖同一份案件上下文 | ✗ Anthropic「shared context 不适配」 |
| 上下文是否超单窗 | 否——单案 66 字段 + 检索片段远小于 200K 窗 | ✗ 无超窗压力 |
| 决策一致性要求 | 极高——合规叙事不能自相矛盾(Cognition「conflicting decisions」即合规风险) | ✗ 多写者=矛盾源 |
| 是否需广度扇出检索 | 部分——可在子能力层并行(如多源资料检索),非主路径 | △ 仅局部 |
结论清晰:AML 单案调查恰好落在三条证据共同指出的「不该上多 agent」象限——shared context、无超窗、强一致性要求。90.2% 的提升是广度型研究任务的红利,不会迁移到单一深推的合规调查上;而 15× token 成本会直接转嫁到 Day 28 立的 $/案件 成本指标上。
反直觉洞察②(「已经写好了」是上多 agent 最差的理由):orchestratorAgent.ts 已存在且带 Budget 熔断,看起来「接上就用」零成本。但架构债的计价单位不是开发工时,是每次调用的 token 税 + 每次失败的归因复杂度。多 agent 把单条 trace 变成「lead + N subagent」的树,Day 26 失败归因面板要归因的不再是「哪一步错」而是「哪个 agent 的哪一步错、是不是 subagent 间矛盾导致」——归因维度乘以 agent 数。为一个不需要并行的任务付并行的归因税,是纯亏损。 沉没成本应当被无视:正确做法是把这套代码迁去它真正有价值的地方(
/agent-lab教学),而非塞进合规主路径。
C. 触发重新评估的条件(Revisit-When,可证伪)
ADR 不是终判。以下任一条件成立时,本 ADR 进入 Proposed-Supersede,需写 ADR-002 重新论证:
Revisit-When (任一为真即重评):
R1. 产品形态变化:AML Copilot 从「单案深推」扩展为
「批量案件并行筛查」(N>20 案/批) —— 此时出现 Anthropic
所指的真·并行红利,多 agent 扇出可摊薄 15× 成本。
R2. 上下文超窗:单案上下文 (案件+检索+历史) 稳定 > 主模型
有效上下文窗 80% —— 触发 Cognition 也承认的「单窗装不下」
场景,需 subagent 做上下文压缩 (对应《Effective context
engineering》sub-agent 压缩摘要技术, Anthropic 2025-09)。
R3. 实测推翻假设:在 /agent-lab 对照实验中,多 agent 版
在等 token 预算 (非等 agent 数) 下 SAR 质量 judge 分
显著高于单 agent 版 (Δκ-gated, 见 Day 17) —— 证据反转。
R4. 协作模式坐实:LLM 在 real-time 委派/协调上的能力
跨过门槛 (Anthropic 2025-06 明言「not yet great」) ——
跟踪 τ²-bench pass^k 等多 agent 可靠性指标。
这四条都是可证伪、可观测的,绑定到外部事实(产品需求、上下文长度、实测 judge 分、行业基准),不绑定到「多 agent 听起来更先进」的信念。其中 R3 是最强的——它要求在等 token 预算下比较(呼应证据③),堵死「多 agent 赢只是因为多烧 token」的伪胜利。
决策矩阵(把「现在选单 agent」和各重评条件量化):
| 维度 | 单 agent(现选) | 多 agent | 翻转阈值 |
|---|---|---|---|
| token/案 | 1× 基线 | ~15×(Anthropic 2025-06) | R1:并行案数 > 15 才摊平 |
| 决策一致性 | 单写者,天然一致 | 需协调,矛盾风险 | R4:协调能力过门槛 |
| 归因复杂度 | 线性 trace(Day 26 三桶可用) | 树状 trace × agent 数 | — |
| 上下文压力 | 单案 << 窗 | subagent 压缩才有意义 | R2:稳定 > 80% 窗 |
| 实测 SAR 质量 | 待 P2 judge 实测 | 待对照实验 | R3:等预算下 Δ 显著 |
设计要点/决策表
| 要点 | 决策 | 理由 |
|---|---|---|
| ADR 格式 | Nygard 四段 + Revisit-When 扩展 | 强制写负面后果与可证伪重评条件 |
| AML 主路径 | 单 agent + 工具调用 | 任务=shared context/无超窗/强一致,三证据共指 |
| 多 agent 代码去向 | 降级为 /agent-lab 教学装置 | 沉没成本不是论据;放到它真有价值处 |
| 重评触发 | R1-R4 量化条件,绑外部事实 | 决策可被未来推翻,不僵化 |
| 成本口径 | 多 agent = 15× token 税,记入 $/案件 | 与 Day 28 成本指标对账 |
| 一致性论证 | 等 token 预算下比较(R3) | 堵「多 agent 赢=多烧 token」伪胜利 |
对本项目的落地
- 新建
docs/adr/ADR-001-no-multiagent-for-aml.md:按本笔记 A 节四段+Revisit-When 格式落档,Status: Accepted,Date 2026-07-17。Context 段引 D31/D32 三条证据(带日期),Decision 主句「单 agent 主路径」,Consequences 写明负面(放弃 90.2% 广度红利、教学代码与产品路径分叉需维护两份)。 src/agent/orchestrator/orchestratorAgent.ts的定位明确化:在文件头注补一行「DEMO/教学装置,非 AML 主路径,依据 ADR-001」,并指向/agent-lab。不删代码——它是作品集里「我懂多 agent 且知道何时不用」的可演示证据,比删掉更有说服力。- AML 主路径实现切口:P2 后续接入的 AML 调查 agent 走单 agent + 工具(检索
src/agent/rag/hybridSearch.ts、typologysrc/aml/typology.ts、SAR 起草),单条线性 trace 直接喂 Day 26 失败归因面板,归因维度不膨胀。 /agent-lab教学价值:把多 agent orchestrator 做成 dsdb-lab 同款交互装置(参考src/dsdb-lab/的 state machine + store + simulator 模式),可视化「lead 扇出 → subagent 并行 → 合并」并故意展示 Cognition 的 Flappy Bird 式矛盾,作为「为什么单案调查不用多 agent」的现场反例。- 诚实标注:ADR 与本笔记均不谎称多 agent「已用于生产」;明确它是教学装置 + 未来 R1-R4 触发后的候选方案。R3 对照实验是 P2 后段计划动作,不预报为已完成。
参考资料
- Anthropic Engineering — How we built our multi-agent research system:90.2% over single-agent Opus 4;「about 15× more tokens than chats」;「token usage by itself explains 80% of the variance」;适配 heavy parallelization / 超单窗,不适配 shared context / many dependencies;「LLM agents are not yet great at coordinating and delegating in real time」(2025-06)
- Cognition — Don't Build Multi-Agents:两原则「Share context + full traces」「Actions carry implicit decisions」;Flappy Bird/Super Mario 反例;「单线程线性 agent will get you very far」(2025)
- Cognition — Multi-Agents: What's Actually Working:写操作保持 single-threaded,附加 agent 贡献 intelligence 而非 actions(演进立场)(2025)
- Tran & Kiela — Single-Agent LLMs Outperform Multi-Agent Systems on Multi-Hop Reasoning Under Equal Thinking Token Budgets,arXiv:等 thinking-token 预算下单 agent 占优的信息论论证 (2025)
- Michael Nygard — Documenting Architecture Decisions:ADR 四段格式 Context/Decision/Consequences/Status;immutable + supersede 链 (经典格式,2011;本项目用其作 ADR 模板,配 2025-2026 证据)
- 本仓物证:
src/agent/orchestrator/orchestratorAgent.ts(Opus lead + 3 Sonnet subagent + Budget 熔断)、src/agent/orchestrator/budget.ts、src/dsdb-lab/(教学装置模式参照)、Day 26(失败归因)、Day 28($/案件成本口径)(2026-06)
SOTA 检查 (2026-06-11)
- 「单一深推任务不该上多 agent」是 2026-06 的工程共识,非边缘观点:Anthropic(适配边界明示)、Cognition(单线程优先并演进为「写操作单线程」)、Tran/Kiela(信息论下界)三方独立指向同一结论——多 agent 的红利绑定「真并行 + 超单窗」,AML 单案调查不在此象限。本日 WebSearch 未见推翻该共识的 2026 新证据。
- 多 agent 立场在演进,需持续跟踪:Cognition 从「别造多 agent」演进到「写操作 single-threaded、附加 agent 只贡献 intelligence」——这恰好支持本 ADR 的「单写者主路径 + subagent 局部检索可选」设计,不构成推翻。
- 「64% 任务单 agent 即够」的精确出处未锁定:2026 多处引述 Princeton 此数据,但本日 WebSearch 未定位到带精确发布月份的一手论文页,故本 ADR 不以该数字作主线论据,仅作辅证语气提及;R3 的实测对照实验才是本项目自有的强证据。待 P2 后段补一手出处后回填。
- 过时认知警示:「多 agent 天然比单 agent 强」是 2024 早期叙事,已被 2025-2026 三方证据证伪——性能差异 80% 来自 token 量而非架构(Anthropic 2025-06)。任何「上多 agent 就更智能」的断言在 2026 须附等-token-预算对照才成立。
- 待跟踪:R4 依赖的 LLM real-time 协调能力门槛——跟踪 τ²-bench pass^k(38 模型,2026-04 更新)与 Microsoft Agent Framework 1.0(2026-04)的多 agent 编排实测;若协调能力跨门槛或 AML 产品形态转批量筛查(R1),即触发 ADR-002 重评。