# DSPy GEPA 提示优化：用逐条失败反馈改退款分类器，留出集不参与优化

已用真实DSPy构建Signature和ChainOfThought并读取GEPA API；已审计36条原创标注与负例。未运行GEPA优化、reflection或任何模型调用。

## 运行

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

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

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

## 1. 核对规则与人工标签

打开fixtures/policy.json和cases.json，特别读“无故障”“未拆封”“超过退货期但在保修期内”。36条标签是作者真值，不是模型预测。

## 2. 隔离优化和留出材料

按split字段分为12条train、12条validation、12条test；先运行reference/audit.py。故意重叠ID的negative-overlap.json必须被识别，测试答案不要交给优化器。

## 3. 创建真正的DSPy程序

运行reference/run_sdk.py确认本机DSPy版本、Signature字段及GEPA构造签名。程序将policy与request分开输入，输出label，避免把标签写在请求里。

## 4. 把错因写成可行动反馈

metric应先核对pred.label，再返回score与具体feedback；指出漏看的限定条件而非只写“错了”。GEPA适配不同版本时，以sdk-contract.json里的签名和官方metric_with_feedback示例为准。

## 5. 在授权环境启动GEPA

安装与已记录版本一致的DSPy，配置自己的LM与reflection_lm；将训练与验证examples分开传入compile，设置明确的metric调用上限。本文未配置凭据或执行compile。

## 6. 保存候选而非只截最佳分

保存优化后程序、每轮候选反馈与全部请求计数；达到预算时保留未完成状态。不能将fixture-audit的标签分布当成优化后准确率。

## 7. 只在最后打开测试集

重载已保存程序后运行12条test，再按label做混淆矩阵。把原程序与优化程序的失败逐条列出；GEPA不保证每次提升，缺真实推理结果就记录未测。

## 官方依据

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