Promptfoo
Promptfoo 是一个开源 CLI 与库,用于系统性地评估和红队测试 LLM 应用。2026 年被 OpenAI 收购后,定位从纯 eval 工具扩展为 AI 安全测试平台,覆盖漏洞检测、实时防护和模型安全测试。
两个产品层次
开源 eval 核心(最初产品,也是 wiki 其他词条主要引用的部分):
- 声明式 YAML 配置测试用例,无需大量代码
- 支持 OpenAI、Anthropic、Azure、Google、HuggingFace 等主流 provider
- 本地运行,评估结果不上传
- 集成 CI/CD(GitHub、GitLab、Jenkins)
- Web UI 查看结果,支持团队协作
商业 AI 安全平台(收购后扩展):
- Red Teaming:自动化漏洞扫描,覆盖 prompt injection、jailbreak、数据泄露、业务规则绕过等 50+ 漏洞类型
- Guardrails:实时拦截对抗性攻击
- Model Security:基础模型安全测试与监控
- Code Scanning:在 IDE 和 CI/CD 中检测 LLM 相关漏洞
- MCP Proxy:Model Context Protocol 通信的安全代理层
Eval 工作流
flowchart LR
D["定义测试用例\n(test cases)"] --> C["配置 eval\n(prompts + providers)"]
C --> R["运行 eval\nnpx promptfoo eval"]
R --> A["分析结果\n(UI / CI report)"]
A -->|"扩充测试"| D
核心配置格式(promptfooconfig.yaml):
prompts:
- "回答这个问题:{{question}}"
providers:
- openai:gpt-4o
tests:
- vars:
question: "ARR 是多少?"
assert:
- type: contains
value: "36.9"
- type: not-contains
value: "43"
- type: llm-rubric
provider: openai:gpt-4o
threshold: 0.8
value: "答案应引用 finance ARR,而非 board deck ARR"断言类型
| 断言类型 | 用途 | 特点 |
|---|---|---|
contains / icontains | 字面文本必须出现 | 确定性,速度快 |
not-contains | 字面文本不得出现 | 确定性,速度快 |
llm-rubric | 语义质量评分 | 需指定 judge 模型和 threshold |
javascript | 自定义 JS 函数 | 灵活,适合复杂逻辑 |
python | 自定义 Python 函数 | 同上 |
llm-rubric 是最灵活的类型——rubric 用自然语言写通过条件,judge 模型打分(0–1),高于 threshold 则通过。OpenAI Agent Improvement Loop Cookbook 中设定 threshold 为 0.8。
在 Harness 改进飞轮中的角色
Promptfoo 是 Harness Engineering(驾驭工程)改进飞轮的第三步——eval gate:
- 把 feedback-derived evals 生成 Promptfoo 测试配置
- 用自定义 provider 重放已有 trace 输出(不需要重新运行 Agent)
- 打分结果(通过/失败 + 失败原因)作为 HALO(层次化 Agent 循环优化)的输入信号
这让 eval gate 既能量化当前 harness 的行为缺口,又能在每次 harness 迭代后重跑,判断改动是否真的修复了问题。
现状与背景
2026 年被 OpenAI 收购时,Promptfoo 已有 30 万开发者用户、156 家 Fortune 500 企业客户,开源社区活跃。收购后开源 eval 核心保持开放,商业安全平台作为 OpenAI 企业产品线的一部分。
相关概念
- Evals(评估) — Promptfoo 是最常用的 eval 运行时之一
- HALO(层次化 Agent 循环优化) — 消费 Promptfoo gate 结果做 harness 优化
- Harness Engineering(驾驭工程) — Promptfoo 服务于 V 层(验证与评估)
- Loop Engineering(循环工程) — Promptfoo eval gate 是循环改进路径的验证节点