# promptfoo 提示词回归：比较两版模板，定位漏字段和错误工具选择

promptfoo原生evaluate完成八条确定性fixture的旧版失败与新版字段断言通过；仅验证管道，不代表真实模型质量。

## 环境

- Node.js 24+；进入 reference 后 npm install。依赖为锁定的直接版本，首次安装需要网络。

## 启动

~~~sh
cd reference
npm install
node verify.mjs
# 运行后查看原生结果阅读器（读取records.json）
python3 -m http.server 8787
# 打开 http://127.0.0.1:8787/report.html
~~~

## 七步操作

1. 准备八个案例

练习包含导出、账户、发票和订单四类任务，共八条输入；每条有固定 request_id 与 expected route。先检查这些期望值是业务合同，不能由被测输出自己反推。

2. 实现本地Provider

自定义 JavaScript Provider 实现 id 与 callApi，明确返回确定性 fixture。它模拟输出形状，tokenUsage 为0，不调用付费模型，也不评估真实模型的理解能力。

3. 运行旧版本

使用 promptfoo 原生 evaluate 跑 v1。旧 fixture 故意缺少 request_id，另有一条 route 错误；断言同时检查 JSON 可解析、路由匹配和请求编号保持。

4. 读取断言失败

打开 v1-evaluation.json 逐条看失败原因。这里八条均未满足完整字段合同，说明断言链路在工作；不能把这份结果解读为某个模型的真实准确率。

5. 修正字段合同

在 v2 fixture 中按输入返回 route 与 request_id。保留同一批输入和相同断言，只修复输出合同，避免同时换测试集而掩盖变化。

6. 运行新版本

再次运行原生 evaluate，八条字段断言全部满足。对照两份报告，可以确认配置、Provider 和断言接线正确，之后才适合接入你自己的模型测试。

7. 区分配置与模型

运行 node verify.mjs 可复现两次结果。要比较提示词真实效果，必须换成真实模型 Provider 并记录模型、参数、成本和同一批样本；本文没有做这一步，不把确定性回归当作模型质量排名。

## 目录身份

- starter：待完成的任务接口与原创输入，TODO不是已完成实现。
- reference：作者原生完成参考和实际产物。records.json/browser-result.json为本地实测记录，不是AI助手回复。
- TASK.md：可交给相应AI助手的原始任务合同。该助手账号生成会话未运行。

## 依赖与许可

原创教学代码以MIT许可提供。第三方项目、模型及浏览器遵循其自身许可。第三方依赖由本地安装获取，不包含node_modules、模型权重、WASM运行时、数据库、缓存或凭据。

## 官方依据

- https://www.promptfoo.dev/docs/providers/custom-api/
