promptfoo:让语言模型评测不再“靠感觉”——一站式 LLM 自动化测评神器深度解读
大家好,这里是你们喜闻乐见、永远不低调的 AI 技术博主。这篇分享,我要隆重介绍一个我愿称之为“LLM 测试自动化福音”的神器——promptfoo。
如果你做 LLM(大模型)落地开发,调教 prompt 拼死拼活,一上线用户各种“灵魂拷问”:
“这答案不对啊,能不能过一下 case?”
“有没有安全问题啊,会不会 prompt injection 哦?”
“多模型能不能横向对比下,谁更会说话?”
此刻只想摇人帮忙,或者干脆自己拿小本本边试 prompt 边记笔记?(心累……)
别怕!promptfoo 的出现,就是让你的 LLM 应用研发彻底摆脱“全靠感觉”,正式步入“标准化测试时代”!
目录
-
promptfoo 是什么鬼?
-
关键能力列表盘点
-
架构与工作原理全景
-
Provider 全家桶
-
Red Team 黑客攻防测试
-
一站式集成与人性化交互界面
-
配置到底要怎么写?
-
核心评测系统全流程揭秘
-
评测强力武器:断言体系(assertions)
-
高阶玩法与扩展性
-
总结 & 我的实践建议
1. promptfoo 是什么鬼?
用一句话总结:
promptfoo 是 LLM 圈里的“持续集成 + 自动化测试 + 红队攻防一体机”。你写 prompt、做 RAG、造 agent、调模型,把测试交给它就对了!
它开源、免费、极其灵活,支持横评各种模型和 prompt,把 LLM 跑得像单元测试那样有章法。
你可以验证内容 quality、发现安全隐患、随时集成至 CI/CD,还有网页/命令行双界面。再也不用人肉 copy、粘贴、截图、用 Excel 记结果,非常适合实际工作流的接入!
一句话,promptfoo 让 LLM 工程师睡得更香,用户也信得更过。
2. 关键能力盘点
没点干货,你会看?直接把 promptfoo 的“赛博超能力”甩过来:
-
支持多模型跨平台评测(OpenAI/Gemini/Claude/Ollama/Bedrock/自定义等)
-
断言体系丰富,支持从字符串精确匹配到大模型自评
-
支持自定义用例和变量(变量组合自动生成 n 组 case)
-
安全攻击红队:prompt injection、越狱、隐私泄露等全流程自动攻防检测
-
命令行 CLI/网页界面都有,体验很丝滑
-
CI/CD 集成自动回归,一上线先检测,省矿机!
-
输出格式多样(CSV/JSON/YAML/HTML/Google Sheet)便于团队报告统计
-
极致扩展性:外挂 Provider、断言、处理逻辑,任你自定义
-
并发执行、高速评测,效率炫酷飞起
-
报错调试细致,全生命周期监控
一句话:你要的它都有,不要的它也能给你加!
3. 系统整体架构脑图
主要核心模块概览:
-
核心评测系统(大脑):调度整个 prompt-模型-断言流转
-
Provider 系统(模型接入总线):对接各种 LLM/自定义 API
-
断言系统 Assertion(灵魂判官):灵活选择验证方式,满足从业务到学术的所有需求
-
红队系统 Red Team(AI 攻防兵团):自动造难题,各种越狱爆破全覆盖
-
CLI & Web UI(命令行/UI 党都满意):配置测什么、随时查结果
-
分享系统:评测一键上传分享,全流程透明
-
存储与配置:YAML 配置,结果持久化,支持多种数据库
从上游 prompt 到底层 provider,再回到断言与报告,全自动无死角!
4. Provider 全家桶
什么是 Provider?
Provider 就是 promptfoo 里与外部“各种模型”的所有 API 对接桥梁。
支持的平台类型有这些:
-
商业巨头:OpenAI(所有 GPT)、Anthropic(Claude 家族)、Google(Gemini)、AWS Bedrock、Azure OpenAI、Vertex AI
-
本地模型:Ollama、LocalAI
-
自定义 API:HTTP/WS | Python | 文件
-
测试用:Echo(输入即输出)
你要啥有啥,理论链条拉满!
接口规范?
只要你实现 ApiProvider
接口(暴露 id()
、callApi()
),就可以直接 plug-in 进来。
这样不管第三方模型怎么玩花活,都能无感升级/对比/评测。
5. Red Team 红队攻防系统
炼丹不测安全=白练!AI 黑客站出来!
promptfoo 比你还懂安全:
- 集成全自动红队模块,流程如下:
-
自动构造逆天 prompt,尝试 jailbreak、prompt injection、PII 泄露、内容绕过等
-
编码混淆(像 base64、rot13、leetspeak、多语种攻击……)
-
甚至还支持自扩展插件体系,比如有 harmful plugin(恶意内容),pii plugin,injection plugin(注入 payload)。
-
效果?
自动帮你把 LLM 当作入侵靶机揍一顿,看看平时你写的安全检查是不是“只在心里有”~
6. 一站式集成体验 & 界面
不用选边站——
命令行党:pf eval
、pf redteam
、pf share
,所有动作一条命令解决,CI/CD 友好。
UI 党:网页端能编辑配置,能实时查看结果,有曲线有表格,支持红队流程配置直观。
所有的测试和结果,都进共享体系,一键生成分享链接,甚至团建用作“模型对决赛”都给劲!
7. 配置怎么写?YAML 万金油!
promptfoo 用 YAML(或 JSON)组织评测配置,极简又直观。
最简单例子:
prompts:- "Write a tweet about {{topic}}"providers:- openai:chat:gpt-4o-mini- anthropic:messages:claude-3-5-sonnet-20241022tests:- vars:topic: bananasassert:- type: containsvalue: "banana"- vars:topic: pineapplesassert:- type: llm-rubricvalue: "mentions health benefits"defaultTest:assert:- type: javascriptvalue: "output.length <= 280"
解释下含义:
-
prompts:待测 prompt 样板(支持插入变量)
-
providers:被测 LLM 列表
-
tests:变量值和断言列表
-
defaultTest:全局断言/规则
变量组合方式简单高效,自动展开成完整 nnn 的测试套件。
YAML 配置有严格 JSON Schema 校验,写错直接报错提示。
8. 核心评测系统工作流解剖
一张脑图(口述版):
-
加载配置(YAML)
-
展开 prompt & 变量及 provider 笛卡尔积
- 对每一组 prompt+provider+test case:
-
渲染实际输入(变量替换,支持 array 展开)
-
调用 Provider API,拿到响应
-
断言系统做检验(多断言/断言套装,分权重计分)
-
汇总结果(包括响应内容、断言分数、指标、消耗 token/费用/延迟,报错理由等)
-
写入最终报告(支持多格式)
-
高并发并行跑,更支持进度实时展示。
有错不断,自动收集并归因,生成详细报表,回溯问题定位超清晰!
9. 评测强力武器:断言体系大揭秘
LLM 输出和传统“算对错”远不是一回事。promptfoo 的断言体系/思路,全面拉高了自动化评测天花板!
9.1 断言种类
1)确定性断言(Deterministic)
-
equals:字符串完全相等
-
contains / icontains:是否包含,支持大小写无感
-
regex/正则:正则匹配
-
starts-with:是否以指定内容开头
-
is-json / contains-json / is-xml 等:格式校验
-
is-sql:SQL 校验
-
javascript / python:自定义 JS/Python 断言函数
-
cost / latency:检测回复延迟和 API 调用费用
2)模型辅助断言(Model-Assisted)
-
similar:语义 embedding 相似度(好用!)
-
llm-rubric:让 LLM 对输出再自评分(元评估的力量你懂的)
-
factuality:事实正确性验证(借助外部知识库,这类自定义空间大)
-
classifier / context-faithfulness / answer-relevance:上下文一致性、相关性、分类型判等
3)NLP 标准指标断言
-
bleu/gleu/rouge-n:NLP 蓝图分数家族
-
levenshtein:编辑距离
-
perplexity:困惑度
4)特殊玩法
-
not-*(反向断言)
-
assert-set(断言组,满足一定比例通过)
-
select-best(多答案择优,主观评测融合)
-
redteam 专用型(安全断言)
9.2 断言结构
每个断言其实就是一个结构体,可以指定 type、value、权重、针对哪个 provider/rubric prompt、转换方法、metric 名字,等等。
- type: similarvalue: "professional tone"threshold: 0.7metric: "professionalism"
9.3 断言加权和组合玩法
-
断言赋权重:某些断言权重高(业务关键),分数算加权平均
-
断言组(assert-set):设置一组断言门槛,比如组内 50% 及格
-
分层阈值:可以指定 0-1 分数线决定通过/失败
-
metric 聚合:断言可加 metric 标签,为业务打指标体系
-
自定义分数函数:支持自定义 scoring function 管更复杂场景
9.4 动态断言 & transform
“输出再来点变换”,比如全转小写再断 contains,或者加一段 JS 逻辑先预处理,都不是问题!
10. 高阶玩法 & 扩展性
-
插件式扩展任何东西:Provider、断言类型、结果处理、Transform,全部支持二次开发
-
代码断言:直接用 JS/Python 自定义,外部库可调用
-
LLM 断言套娃:可自定义 LLM Rubric Prompt,甚至选择哪个 LLM 做评委
-
外部引用:断言/Scoring Function/Prompt 模板路径直接写文件地址引入
-
安全断言阵营:promptfoo:redteam:xxx 断言专为攻防轮定制
-
分享/统计平台对接:一键 CRYPTO 分享结果给团队/老板/甲方
11. 总结 & 实践建议
promptfoo 如何让工作流脱胎换骨:
-
“拍脑袋评测”升级为“工程化流程”——保证每次评测可复现,回归无忧!
-
多 Provider 横向对比一键搞定,横扫各种“哪个更好用”的争论
-
问题定位细致,助力快速迭代 Prompt 和 Regression
-
红队安全评测:上线不用心慌,AI 黑客测试比黑产先快一步
-
支持 CI/CD 流,团队自动测试后再上线,工程稳定性 up
-
可扩展性高,随场景生长,满足未来所有新玩法
推荐使用场景
-
Prompt/模型横评 Benchmark
-
RAG 系统、问答助手、Agent 应用上线前测试
-
Prompt injection/安全性评估(自动红队)
-
多场景、多模型、多语言的综合回归
-
工业级 LLM App 工程师日常跟踪
最后,送你一句话:
有 promptfoo,自动化评测不用愁!
和“靠第六感+手抄”说拜拜,拥抱工程化的 LLM 未来吧!
——
写在后面
如果你觉得本文让你怒涨了 LLM DevOps 技能值,欢迎点赞收藏转发+关注!后面会带你玩转每类断言和高级插件开发实战,别走开哦!
源码推荐:
https://github.com/promptfoo/promptfoo