# DSPy Ensemble：让三个已编译分类器投票，分歧过大时保留待确认

已在真实DSPy 3.4.1中把三个作者确定性程序编成Ensemble并执行4个投票样本；样本标签由作者给定，未调用真实分类模型。

## 运行

在本目录使用独立虚拟环境并安装requirements.txt；脚本结果写入results。

```sh
python reference/audit.py
python reference/run_sdk.py
```

fixtures是原创输入与故意失败样本；作者真值、离线合成provider和实际SDK记录各自标明，不是模型正确率。需要真实模型/账号/GPU的步骤按正文另行授权运行。

## 1. 打开逐程序投票输入

votes.json有4条输入，每条保留3个分类结果。它们都是作者构造，V4专门展示三票一致仍然可能错，不能包装成真实模型评测。

## 2. 规定票数和待确认条件

vote-policy.json要求至少2票一致，三种不同结果返回needs_review。先运行audit.py确认V2进入待确认，而不是用列表第一项强行当赢家。

## 3. 核对DSPy Ensemble接口

运行run_sdk.py，真实DSPy Ensemble将三个AuthorProgram组合，并执行4个样本。reduce_fn保留全部票数；AuthorProgram是本包确定性测试程序，不是真实训练模型。

## 4. 在授权环境加载三个程序

实跑时加载3个不同优化种子的已编译DSPy程序，保留版本hash和各自的预测。三个引用同一程序文件不构成三个独立候选。

## 5. 保留全部预测再归约

先把输入ID与每个程序结果写入不可覆盖的记录，再按当前SDK支持的reduce_fn组合。任何一次失败都要保留错误，不能把剩余两次成功当三票。

## 6. 抽检分歧与一致错误

用人工真值分别检查V2这类分歧与V4这类一致错误。输出中要同时看到agreeing_votes和human_label，避免把一致性解释成正确率。

## 7. 交付可重载集成与审阅表

包内实际Ensemble执行保留4条结果及逐程序投票；V4三票一致仍与人工真值冲突。接真实已编译分类器时再按同样输入重放，不能把本题作者测试程序冒称模型评测。

## 官方依据

- DSPy 官方文档或源码：https://raw.githubusercontent.com/stanfordnlp/dspy/main/docs/docs/learn/optimization/optimizers.md
