好,资料充足,直接输出文章:


Promptfoo:用测试驱动的方式构建可靠的 LLM 应用

你是否也在这样开发 AI 应用?

写一个 Prompt,调用 API,看看输出结果,感觉还不错,上线。

过了几天,用户反馈回来了:模型有时候答非所问,有时候格式乱了,有时候莫名其妙地"幻觉"了一个根本不存在的功能。

更让人头疼的是,你换了一版 Prompt 之后,不知道整体是变好了还是变差了——因为从来没有系统地测过。

这种"凭感觉"的开发方式,几乎是当下绝大多数 LLM 应用团队的常态。而 promptfoo,正是为了解决这个问题而生的。


它是什么?

promptfoo 是一个用于测试 Prompt、智能体(Agent)和 RAG 系统的开源 CLI 工具和库,同时也支持对 LLM 应用进行 AI 红队攻击(Red Teaming)、渗透测试和安全漏洞扫描。

简单来说,它做两件事:

  1. Eval(评估):系统化地测试你的 Prompt 质量,比较不同模型/不同 Prompt 版本的表现差异
  2. Red Teaming(红队):主动探测你的 LLM 应用的安全漏洞,比如提示词注入、PII 泄露、越狱攻击等

它最初为服务超过 1000 万用户的 LLM 应用而构建,已经过生产环境的大规模验证。

项目在 GitHub 上完全开源,Star 数量已突破 6 万,是目前社区最活跃的 LLM 测试框架之一。
在这里插入图片描述


它解决了什么问题?

问题一:LLM 输出的不确定性让测试变得极难

传统软件测试,输入固定则输出固定,断言很好写。但 LLM 不一样:

同样的输入可以产生不同的有效输出;响应质量依赖于对话历史上下文;AI Agent 还需要正确调用外部工具,复杂度大幅上升。

promptfoo 通过支持多种断言类型来应对这种不确定性:既有精确匹配、正则匹配这样的确定性检验,也有用 LLM 作为裁判(LLM-as-Judge)来评估语义质量的方式。

问题二:换了 Prompt 或换了模型,不知道整体变好还是变差了

promptfoo 的目标是实现"测试驱动的 Prompt 工程",而不是靠试错。

它会把你所有的测试用例跑一遍,生成一个矩阵视图,让你直观地看到每个 Prompt、每个模型、每个测试输入的组合结果,从而做出有数据支撑的决策。

问题三:AI 应用的安全测试几乎是盲区

大多数团队在上线前根本不会系统测试 LLM 的安全性。

promptfoo 的核心亮点之一是红队测试:它能主动探测你的 Prompt 漏洞,测试提示词注入(Prompt Injection)、检查个人信息(PII)泄露风险,识别能突破你的安全护栏的边界用例。它是同类工具中唯一一个将安全测试与性能评估并列为核心功能的框架。


核心功能一览

功能 说明
多模型对比 同一测试集,跑 GPT-4、Claude、Gemini、Llama 等,并排对比
多 Prompt 对比 A/B 测试不同版本的 Prompt,数据说话
多种断言类型 精确匹配、正则、JSON Schema、LLM 评分、自定义函数
Red Teaming 自动化安全扫描,覆盖 OWASP LLM Top 10
CI/CD 集成 接入 GitHub Actions、Jenkins 等,部署前自动拦截质量回退
本地运行 数据不出本机,对隐私敏感的场景友好
Web UI 可视化结果看板,方便团队协作

怎么用?

安装

npm install -g promptfoo
# 或
pip install promptfoo
# 或
brew install promptfoo

快速开始(Eval 评估)

第一步:初始化项目

promptfoo init

这会生成一个 promptfooconfig.yaml 配置文件。

第二步:编写配置

# promptfooconfig.yaml
prompts:
  - "将以下内容翻译成英文:{{text}}"
  - "你是一名专业翻译,请将以下内容翻译成地道的英文:{{text}}"

providers:
  - openai:gpt-4o-mini
  - anthropic:claude-3-5-haiku-20241022

tests:
  - vars:
      text: "人工智能正在改变世界"
    assert:
      - type: contains
        value: "artificial intelligence"
      - type: llm-rubric
        value: "翻译应该准确且自然,符合英文表达习惯"

  - vars:
      text: "今天天气真好"
    assert:
      - type: javascript
        value: "output.length > 5"

第三步:运行评估

promptfoo eval

第四步:查看结果

promptfoo view

会打开一个本地 Web UI,展示每个 Prompt × 每个模型 × 每个测试用例的结果矩阵,并高亮哪些用例通过、哪些失败。


进阶:Red Teaming 安全扫描

promptfoo redteam init   # 生成红队配置
promptfoo redteam run    # 执行扫描
promptfoo redteam report # 生成安全报告

它可以对 OWASP、NIST 等合规框架生成扫描报告,自动检测安全漏洞,并作为质量门禁集成到 CI/CD 流水线中。


接入 CI/CD(GitHub Actions 示例)

name: LLM Eval
on:
  pull_request:
    paths:
      - 'prompts/**'
      - 'promptfooconfig.yaml'

jobs:
  evaluate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run eval
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        run: npx promptfoo@latest eval -c promptfooconfig.yaml

这样可以在 Prompt 变更合并到主分支之前,自动捕获质量回退,并追踪 token 用量和 API 成本变化。


几个值得关注的细节

断言类型非常丰富。 从简单的字符串匹配到"让另一个 LLM 来评判输出质量",使用 llm-rubric 断言,可以捕捉到精确字符串匹配完全无法发现的细微质量问题。

支持多轮对话测试。 对于需要维持上下文的 Agent 场景,promptfoo 支持配置多轮对话测试用例,模拟真实用户交互流程。

数据本地化。 promptfoo 默认在本地运行,Prompt 和测试数据不会离开你的机器,除非你主动选择共享。对处理敏感数据的企业团队来说,这一点尤为重要。


总结

维度 评价
定位 LLM 应用的"自动化测试框架"
适合谁 有生产 LLM 应用的开发团队、重视安全合规的企业
核心价值 从"靠感觉"升级到"数据驱动"的 Prompt 迭代
门槛 需要有一定 CLI 使用经验,YAML 配置为主
开源协议 MIT,完全免费可自托管

LLM 应用开发正在从"能跑起来"向"稳定可靠"演进。当你的产品涉及真实用户、真实数据、真实业务,靠"感觉还不错"上线就太危险了。

promptfoo 提供的不只是一个测试工具,而是一套工程化思维:先定义好什么是"正确",再系统地测量和优化。 这和软件工程中测试驱动开发(TDD)的本质是一样的,只不过现在轮到 AI 了。

如果你正在认真做 LLM 应用,不妨从今天开始,给你的 Prompt 写几个测试用例。

项目地址:https://github.com/promptfoo/promptfoo
官方文档:https://www.promptfoo.dev/docs/intro/

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐