promptfoo:LLM 评测与红队测试的开源标准

promptfoo:LLM 评测与红队测试的开源标准

智能体

📖 简介

promptfoo 是 LLM 评测与红队测试的开源框架,23k+ Stars。自动化评估提示词、检测安全漏洞、对比模型输出,AI 质量保障的标配工具。

📝 详细介绍

promptfoo:把 LLM 评测变成工程纪律

你团队每天在 Slack 里传着各种 Prompt 跑出来的结果截图,靠肉眼对比哪个输出更好?或者每次模型更新后用一堆零散的 Python 脚本跑一遍测试,结果下次还得手动重跑?promptfoo 用一个声明式的 YAML 配置文件替代了这些临时流程,让你像写单元测试一样为 LLM 编写评测用例,并自动做红队攻击。它不是一个“AI 评测平台”,而是一个开发者用的 CLI 工具 + 库,能直接跑在 CI 里。

属性
Stars12k+
主语言TypeScript
协议MIT
最近更新2024-05 (v0.60+)

项目背景

promptfoo 由前端工程师 Ian Webster 创建(他也是 promptfoo 公司创始人),初衷是解决团队在构建 LLM 应用时遇到的 “评测混乱”。当时大家用 Google Sheets 管理 Prompt 版本,用不同的脚本计算相似度,结果不一致且无法复现。Ian 希望提供一种 配置即代码 的方式,让评测像写 Jest 测试一样简单,同时内置红队能力——毕竟 LLM 的安全测试不能光靠人肉尝试。

核心功能解析

1. 声明式测试用例

所有测试写在一个 promptfooconfig.yaml 文件里:定义 Prompt 模板、输入变量、目标输出(预期),以及评测指标。支持 provider 无关——同一个配置可以跑在 OpenAI、Anthropic、Hugging Face 甚至本地部署的模型上。

prompts:
  - "Translate the following to French: {{text}}"
  - "Translate the following to Italian: {{text}}"

providers:
  - id: openai:chat:gpt-3.5-turbo
    config:
      temperature: 0
  - id: openai:chat:gpt-4

tests:
  - vars:
      text: "Hello, world!"
    assert:
      - type: contains
        value: "Bonjour"   # 期望第一个 Prompt 输出包含 Bonjour
  - vars:
      text: "I love programming"
    assert:
      - type: similar
        threshold: 0.9
        value: "J'adore programmer"  # 语义相似度 >= 0.9

2. 多种评估指标

除了基础的 containsequals,还支持 嵌入向量相似度(基于 text-embedding-ada-002)、LLM 评判(让 GPT-4 评估输出质量)、自定义函数(写 JavaScript 判断逻辑)。这些指标都可以在 assert 里组合使用,形成可量化的通过/失败标准。

assert:
  - type: llm-rubric
    value: "The response should be polite and professional"
  - type: python
    value: |
      def fn(output, context):
          return len(output) > 100

3. 自动化红队测试

内置 红队模块:通过模板和变异策略生成对抗性输入——包括 prompt 注入、越狱尝试、角色反转等。你只要定义一组“有害类目”(如泄露指令、生成危险代码),promptfoo 会自动构造测试用例并记录模型是否 “中招”。结果以矩阵形式展示,一目了然。

categories:
  - implicit-jailbreak
  - instruction-leak
  - harmful-code
redteam:
  plugins:
    - name: fuzzer
      config:
        mutations:
          - expand
          - typo

快速上手

全局安装或通过 npx 直接使用:

# 安装
npm install -g promptfoo
# 初始化一个 demo 项目
promptfoo init --template minimal
cd my-llm-eval
# 运行评测
promptfoo eval
# 本地查看报告(自动打开浏览器)
promptfoo view

默认会生成一个交互式的 HTML 报告,包含每个测试用例的输入、输出、得分和差异对比。

技术亮点

1. 缓存层设计:每次评测会缓存 provider 的响应(基于输入 + prompt + provider 的哈希)。当你修改了评测指标但没改 Prompt 时,不会重复调用 API,节省成本并加速迭代。缓存在 ~/.promptfoo/cache 下,支持 --no-cache 强制刷新。

2. Provider 抽象与多模型对比:promptfoo 定义了统一的 Provider 接口,任何 LLM 只要实现 callApi 方法和流式输出适配,就能接入。内置 20+ 个 provider(OpenAI、Azure、Anthropic、Cohere、Ollama 等),且支持 多 provider 对比——同一个测试用例可以并行跑在不同模型上,输出并列对比。

3. 插件化评测管道:评测不再是简单的“输入-输出-打分”。promptfoo 内部把评测步骤拆成 hook(前置/后置),支持自定义插件修改 prompt、变换输出、注入上下文。红队测试也是通过插件系统实现的,这意味着你可以写出任意复杂的攻击策略。

4. 天然 CI 友好:退出码反映是否通过所有断言(0 表示全部通过),配合 junit 输出格式能直接集成到 GitLab CI、GitHub Actions 里。不少团队已将其作为 Prompt 发版前的必要门禁。

引用自官方 README:“promptfoo is a tool for evaluating and red-teaming LLM apps. It’s used by companies like Anthropic, Airbnb, and Netflix.”

同类对比

工具评测能力红队能力易用性定制性社区活跃
promptfoo多指标、LLM 评判、嵌入内置 fuzzer + 模板CLI + YAML,零依赖强(插件、自定义 provider)高(12k stars, 持续更新)
LangChain eval主要针对 chain 输出与 LangChain 绑定中(需改写 chain)高(但非独立工具)
DeepEval指标丰富(G-Eval 等)有独立模块Python API,需集成中(支持自定义指标)
RAGAS专注 RAG 场景Python 库低(场景限定)

总结

promptfoo 是当前最适合开发者直接上手的 LLM 评测与红队测试工具。它把测试从“人工评审”变成了“自动化门禁”,零集成成本,一次配置就能跑在任意模型上。如果你们的团队正在为生产级的 LLM 应用质量头疼,或者需要对 Prompt 做持续回归,不要犹豫,直接 npm install -g promptfoo 开始用。

🚀

AI 项目推荐

智能体
标签
#LLM评测 #红队测试 #提示词工程 #安全
浏览
👁️ 7
发布日期
2026-07-30