我使用 Dave Guarino 评估 LLM 回答有关 SNAP(又名食品券)问题的系列的第三部分(这里是第一部分和 第二部分)作为探索Promptfoo (一种 LLM 评估工具)的借口。
SNAP(补充营养援助计划)是一个风险非常高的领域,但也是一个由法学硕士支持的问答可以为那些需要帮助以应对众所周知的不透明系统的人们提供非常物质价值的领域。
Dave 的评估重点是资格问题,这可能会变得非常复杂。举个例子:“在德克萨斯州,所有 SNAP 申请人都面临资产限制。而在加利福尼亚州,绝大多数人则没有。”
Dave 使用Promptfoo作为他的评估工具 – 一种商业开源工具(MIT 许可),它基于 YAML 文件工作,可以引用外部源(包括 Google Sheets)中的更多数据。
他的propelinc/snap-eval GitHub 存储库共享YAML 配置和Google Sheet的链接。有些断言是直接的文本比较:
问题:在肯塔基州犯有毒品重罪的人是否有资格获得食品券?仅回答以下其中一项:是、否、拒绝。
预期:包含:是
其他人则使用LLM作为判断模式来评估答案:
问题:我刚刚收到 SNAP 拒绝信,说我的收入太高。我所有的选择是什么?
预期:llm-rubric:应提及上诉或进行公平听证会的选项
我尝试在自己的机器上运行 Dave 的 eval 套件:
cd /tmp git 克隆 https://github.com/prepelinc/snap-eval cd snap-eval/illustative-25-cases-04-23-25 导出OPENAI_API_KEY= " $( llm 密钥获取 openai ) " 导出ANTHROPIC_API_KEY = “ $( llm密钥获取anthropic ) ” 导出GEMINI_API_KEY = “ $( llm密钥获取gemini ) ” npx提示foo@最新评估
我经常使用llm keys get命令来填充这样的环境变量。
该工具运行了几分钟,输出如下所示:
[████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 29% | ETA: 169s | 13/44 | anthropic:claude- [████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 29% | ETA: 137s | 13/44 | google:gemini-2.0 [██████████████░░░░░░░░░░░░░░░░░░░░░░░░░░] 34% | ETA: 128s | 15/44 | openai:gpt-4o-min [██████████████░░░░░░░░░░░░░░░░░░░░░░░░░░] 34% | ETA: 170s | 15/44 | google:gemini-2.5 [███████████████░░░░░░░░░░░░░░░░░░░░░░░░░] 37% | ETA: 149s | 16/43 | openai:gpt-4o-min
完成后,它会在 ASCII-art 表中显示结果:
然后是结果总结:
Successes: 78 Failures: 47 Errors: 50 Pass Rate: 44.57% Eval tokens: 59,080 / Prompt tokens: 5,897 / Completion tokens: 53,183 / Cached tokens: 0 / Reasoning tokens: 38,272 Grading tokens: 8,981 / Prompt tokens: 8,188 / Completion tokens: 793 / Cached tokens: 0 / Reasoning tokens: 0 Total tokens: 68,061 (eval: 59,080 + Grading: 8,981)
这 50 个错误是因为我在应该设置GOOGLE_API_KEY
时设置了GEMINI_API_KEY
。
我不知道确切的成本,但对于 5,897 个输入代币和 53,183 个输出,即使是这里最昂贵的模型(OpenAI o1)也会花费 3.28 美元 – 实际上这个数字应该比这个数字低很多,因为大多数代币使用便宜得多的模型。
运行npx promptfoo@latest view
提供了一种更好的方式来探索结果 – 它启动一个在端口 15500 上运行的 Web 服务器,它可以让您探索最近运行的和之前运行的任何评估的结果:
事实证明,这些 eval 结果存储在~/.promptfoo/promptfoo.db
的 SQLite 数据库中,这意味着您也可以使用Datasette探索它们。
我使用这样的sqlite-utils来检查架构:
sqlite-utils schema ~/.promptfoo/promptfoo.db
我一直在寻找一个好的评估工具一段时间了。看起来 Promptfoo 可能是目前最成熟的开源选项,这种快速探索给了我一些极好的第一印象。
原文: https://simonwillison.net/2025/Apr/24/exploring-promptfoo/#atom-everything