Loading...

文章背景图

promptfoo/promptfoo:Prompt测试与红队安全审计工具

2026-10-20
0
- 字
- 分钟
|

一、官方信息

项目名称Promptfoo
仓库地址https://github.com/promptfoo/promptfoo
官方网站https://www.promptfoo.dev/
最新更新2026 年活跃迭代
项目定位面向 LLM 的 Prompt 回归测试、评测与红队安全审计工具
开源协议MIT

二、项目背景

改一行 Prompt 可能就让输出质量天差地别——但你到底怎么知道新 Prompt 是变好了还是变差了?靠人肉反复试既慢又不可复现。Promptfoo 把软件工程里的"单元测试 + CI"思路搬到了 Prompt 上:你写一个 YAML 配置,定义一批测试用例、一组待比较的 Prompt / 模型、一组评判标准,Promptfoo 就自动批量跑、自动打分、生成对比报告,甚至能在 CI 里拦住"Prompt 退化"的提交。

除了功能测试,Promptfoo 另一个杀手锏是 红队(Red Team)能力:它内置了几十类自动攻击用例——提示词注入、数据泄露、越权请求、有害内容生成、越狱(jailbreak)等,一键对你的 LLM 应用做安全压测,生成合规报告。这对要把 LLM 上线给真实用户的团队几乎是必做的一步。

Promptfoo 是一个命令行工具 + 本地 Web 界面,npm 一行安装,支持 OpenAI、Anthropic、DeepSeek、本地模型等几乎所有 provider,还能作为库嵌入自己的评测流水线。

三、核心特性

  • Prompt 回归测试:像写单元测试一样定义用例,自动对比多个 Prompt / 模型版本。
  • 多维评判:内置 Rubric / LLM-as-Judge / 正则 / 语义相似度等断言。
  • 红队安全审计:自动生成注入、越狱、有害内容等攻击用例并评估防护。
  • 本地 Web UI:可视化查看每条用例的输入输出与打分。
  • CI 集成:可接入 GitHub Actions,Prompt 不达标直接失败。
  • 多 Provider:OpenAI / Anthropic / DeepSeek / Ollama / vLLM 等全支持。
  • 批量与并发:一键跑成百上千条用例,管理 API 成本。

四、环境要求

  • Node.js 18+(推荐 20 LTS)。
  • 操作系统:Linux / macOS / Windows。
  • 一个 LLM API Key(OpenAI / DeepSeek 等),或本地 Ollama。
  • 内存:无特殊要求,CLI 工具本身很轻。

五、详细部署步骤

方式一:npm 全局安装(推荐)

npm install -g promptfoo
promptfoo --version

方式二:npx 免安装

npx promptfoo@latest init my-prompt-project
cd my-prompt-project

初始化项目并编写评测配置

promptfoo init

会生成 promptfooconfig.yaml,编辑如下:

description: "客服 Prompt 对比测试"

prompts:
  - "你是一个客服,请回答:{{question}}"
  - "你是一个友好的客服,请用一句话回答:{{question}}"

providers:
  - openai:gpt-4o-mini
  - id: deepseek:deepseek-chat
    config:
      apiBaseUrl: https://api.deepseek.com/v1

tests:
  - vars:
      question: "怎么退款?"
    assert:
      - type: contains
        value: "退款"
      - type: llm-rubric
        value: "回答友好、简洁、切题"

  - vars:
      question: "我的订单什么时候到?"
    assert:
      - type: contains-any
        value: ["订单", "物流", "配送"]

关键配置说明:

  • prompts:待比较的多个 Prompt 模板,{{变量}} 来自 tests。
  • providers:要测的模型;DeepSeek 走 OpenAI 兼容接口,需设 OPENAI_API_KEY 或自定义 baseUrl。
  • assert:评判规则,contains / equals / llm-rubric / 语义相似度等。

配置 API Key

export OPENAI_API_KEY=sk-xxxx
# DeepSeek 用 OpenAI 兼容接口时同样填 OPENAI_API_KEY + baseUrl
export ANTHROPIC_API_KEY=sk-ant-xxxx

运行测试并查看报告

# 跑全部用例
promptfoo eval

# 启动本地 Web 可视化对比界面(默认 http://localhost:15500)
promptfoo view

红队安全审计

npx promptfoo@latest redteam init
# 按向导选择 target provider,生成攻击用例
npx promptfoo@latest redteam run
# 生成安全报告
npx promptfoo@latest redteam report

CI 集成示例(GitHub Actions)

- name: Promptfoo Eval
  run: npx promptfoo@latest eval --ci

验证部署

promptfoo --help
promptfoo eval  # 在配置目录下跑通即用

六、使用方法

  1. 用 promptfoo init 起项目,写 promptfooconfig.yaml。
  2. promptfoo eval 跑评测,promptfoo view 打开 Web 报告对比各 Prompt / 模型表现。
  3. 红队用 redteam init / run / report 三步生成安全审计报告。
  4. 无账号密码概念;纯本地 CLI,Key 通过环境变量注入。

七、常见问题 FAQ

Q1:调用 DeepSeek 报 401?
A:DeepSeek 走 OpenAI 兼容接口,需在 provider config 里设 apiBaseUrl: https://api.deepseek.com/v1 并把 key 放到 OPENAI_API_KEY 或 provider 的 apiKey。

Q2:llm-rubric 评判不准确?
A:LLM 当裁判本身有误差,建议用更强的模型当 judge,并把 rubric 写得具体可判断。

Q3:API 成本太高?
A:先用小批量用例 + 便宜模型(gpt-4o-mini / deepseek-chat)跑,关键用例再上强模型。

Q4:Web 报告打不开?
A:promptfoo view 默认起在 15500 端口,确认本地端口未被占用;远程服务器需 SSH 隧道或反向代理。

Q5:能测本地 Ollama 模型吗?
A:可以,provider 写 ollama:qwen2.5:7b 即可。

八、跳转链接

评论交流

文章目录