# AO 多智能体质量评测：发现与结论（Phase 1）

> 用 `eval/run-eval.ts`（`npm run eval`）做的质量评测闭环结论存档。
> 目的：回答 ao 押注的核心假设是否成立——**多角色 DAG 协作的产出，是否真比用户自己写一句 prompt 更好？**

## 方法

- **对比**：同一输入，跑 ao 多智能体工作流的最终产出 vs 一次性 prompt 基线（模拟用户不用 ao 的写法）。
- **盲评**：judge 不知哪份来自 ao；对 (A=多智能体,B=基线) 和交换后的 (A=基线,B=多智能体) 各评一次取平均 → **抵消 LLM 评审最大的位置偏置**。双向不一致 → 标"低可信"。
- **生成/评审分离**：生成用待测模型，评审固定用强模型（Claude）给可信判别。
- **多次平均**：每模板跑 N 次取平均，压住单次高方差。

## 结果

### 强模型生成（Claude 两侧），高可信子集
| 模板 | 多智能体 | 单次基线 | 结论 |
|---|---|---|---|
| story-creation | 9.0 | 8.0 | ✅ 多智能体 |
| tech-blog | 8.0 | 9.0 | ❌ 基线 |
| ai-opinion | 8.0 | 9.0 | ❌ 基线 |
| product-review | 7.5 | 8.5 | ❌ 基线 |

→ **多智能体 1 胜 3 负，≈ 打平偏负**。且单次"高可信"仍跨次剧烈摆动（ai-opinion 四轮：5.5→9.0→9.0→8.0），证明 N=1 不够、需多次平均。

### 弱模型生成（ollama/llama3 两侧），3 次取平均
| 模板 | 多智能体 | 单次基线 | 胜者 | 稳定性(多胜/总) |
|---|---|---|---|---|
| story-creation | 5.0 | 6.3 | ❌ 基线 | 0/3 |
| tech-blog | 3.0 | 4.5 | ❌ 基线 | 0/3 |
| ai-opinion | 2.5 | 5.2 | ❌ 基线 | 0/3 |
| product-review | 4.7 | 4.2 | ✅ 多智能体 | 2/3 |

→ **多智能体 1 胜 3 负，且 3 个败局都是 0/3（三次跑里从没赢过）——稳定的规律，非噪音。**

### 中档模型生成（DeepSeek，**ao 的实际默认 provider**），3 次取平均
| 模板 | 多智能体 | 单次基线 | 胜者 | 稳定性(多胜/总) |
|---|---|---|---|---|
| story-creation | 8.0 | 7.0 | ✅ 多智能体 | 2/3 |
| tech-blog | 8.2 | 5.7 | ✅ 多智能体 | **3/3（高可信）** |
| ai-opinion | 8.7 | 8.2 | ✅ 多智能体 | 2/3 |
| product-review | 7.5 | 7.7 | ❌ 基线 | 1/3 |

→ **多智能体 3 胜 1 负**——与强、弱两端完全相反。tech-blog 3/3 高可信决定性胜出（8.2 vs 5.7：DeepSeek 单次写的博客有 bug/截断，多智能体流水线产出完整可发布）。

## 结论：关系是**非单调的（Goldilocks）**

把三档拼起来，规律很清楚——多智能体相对单次的增益，**取决于生成模型的强弱，且不是越强越好或越弱越好**：

| 生成模型档位 | 多智能体 vs 单次 | 为什么 |
|---|---|---|
| **极弱**（llama3 8B） | ❌ 决定性更差（1胜3负，败局 0/3） | 每步质量太低，交接链**放大**漂移/错误，不纠错 |
| **中档**（DeepSeek，**默认**） | ✅ **更好（3胜1负）** | 模型够格执行每个专精步骤，但单次又没到顶 → 分工**真能抬质量** |
| **强**（Claude） | ≈ 打平偏负（1胜3负） | 单次已接近上限，编排开销不划算 |

**修正此前判断**：本文件早期写"核心假设被证伪"是**错的**——那是只看了两端（llama3 太弱、Claude 太强），都不是 ao 的真实档位。**补上中档（DeepSeek）后，核心假设在 ao 的实际默认 provider 上是成立的：多智能体确实赢。**

**机制**：弱模型在交接处**累积漂移**（中英混杂、跑题、虚构 API、漏草稿），交接链是误差放大器；中档模型每步都能胜任专精子任务，分工带来真实的"先研究再写、先评审再定稿"的质量增益；强模型单次已够好，多一道工序边际收益趋零。

**最重要的现实含义**：ao 默认就用 DeepSeek，而 DeepSeek 正落在"分工有用"的甜区。所以**"便宜但不弱的模型 + 多智能体 = 更好产出"这个卖点，数据支持**——前提是默认 provider 不能掉到 llama3 那种极弱档（那会主动变差）。

## 过程中发现并修复的真问题（评测闭环的副产品）

- **4 个模板引用已发布角色库不存在的角色**（用户装完跑不通的 shipping bug）→ 依赖提到 `^1.1.0`。
- **收口步骤产物污染**（漏进复盘/反问/`ao` 命令）→ 加反污染约束；ai-opinion 5.5→9.0 翻盘。
- **收口步骤产出过薄**（只吐结论、丢上游内容）→ investment 改为整合完整报告。
- **harness 截断偏置**（喂 judge 前截到 3500 字，砍掉长产出结尾、系统性惩罚长产出）→ 提到 20000。
- **judge JSON 解析失败**整条丢失 → 重试一次。

## 战略含义

1. **"便宜但不弱的模型 + 多智能体 = 更好产出"这个卖点，数据支持**——在默认的 DeepSeek 档位，多智能体 3 胜 1 负。可以放心讲"质量"，但要讲清楚是**在这一档**。
2. **默认 provider 是生死线，且要卡在甜区**：默认必须是 DeepSeek 这种"够格但没到顶"的档位。**绝不能默认到 llama3 那种极弱档**——那会让多智能体主动比单次更差，新用户第一次就被劝退。若用户自带强模型（Claude/GPT-4 级），诚实说法是"≈打平，价值在结构化复现而非质量提升"。
3. **任务类型有差异**：创作/观点/技术写作（story/ai-opinion/tech-blog）多智能体稳赢；偏"汇总评审"的 product-review 仍接近或略输——分工增益在"需要先研究/先评审再产出"的任务上最明显。
4. **过程价值始终在**：确定性 DAG、角色校验、可 resume 迭代、版本化可复现——这是质量增益之外的、不依赖模型档位的护城河。

## 边界与局限

- 三档各 4 个模板、3 次平均——有清晰信号但非穷举；judge 用 Claude（强但仍有少量位置偏置，低可信项已标注，多次平均已部分压噪）。
- 甜区的**边界未精测**：DeepSeek 赢、llama3 输，但中间还有大片模型（GPT-4o-mini、Qwen、更大的开源模型等）没测，"分工有用"的具体强弱区间仍是估计。
- 基线 prompt 由"工作流目标+输入"机械合成，不是精调的人类 prompt——真实强 prompt 可能让基线更强。

## 复现

```bash
# 默认：ollama 生成 + claude-code 评审 + 1 次
npm run eval [workflows/x.yaml ...]

# 自定义
AO_GEN_PROVIDER=deepseek AO_GEN_MODEL=deepseek-chat \
AO_JUDGE_PROVIDER=claude-code \
AO_EVAL_RUNS=3 \
npm run eval workflows/story-creation.yaml ...
```
