青蛙小白

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

  1. 把 feedback-derived evals 生成 Promptfoo 测试配置
  2. 用自定义 provider 重放已有 trace 输出(不需要重新运行 Agent)
  3. 打分结果(通过/失败 + 失败原因)作为 HALO(层次化 Agent 循环优化)的输入信号

这让 eval gate 既能量化当前 harness 的行为缺口,又能在每次 harness 迭代后重跑,判断改动是否真的修复了问题。

现状与背景

2026 年被 OpenAI 收购时,Promptfoo 已有 30 万开发者用户、156 家 Fortune 500 企业客户,开源社区活跃。收购后开源 eval 核心保持开放,商业安全平台作为 OpenAI 企业产品线的一部分。

相关概念

参考来源
  1. 1. https://www.promptfoo.dev/
  2. 2. https://www.promptfoo.dev/docs/intro/
  3. 3. https://developers.openai.com/cookbook/examples/agents_sdk/agent_improvement_loop
评论