2027 words
10 minutes
Promptfoo: LLM 应用评估与红队测试的利器

Promptfoo: LLM 应用评估与红队测试的利器#

在 LLM 应用开发日益普及的今天,如何系统化地评估 Prompt 质量、模型表现和应用安全性,成为每个 AI 工程师必须面对的课题。Promptfoo 正是为解决这一痛点而生的开源工具——它不仅是 Prompt 工程领域的 “Jest”,更是红队测试和模型对比评估的全能选手。

什么是 Promptfoo#

Promptfoo 是一个用于评估和红队测试 LLM 应用的 CLI 工具库,于 2026 年 3 月正式加入 OpenAI,但始终保持 MIT 开源许可。它在 GitHub 上拥有约 20,000 颗星,每周 npm 下载量高达 165,000 次,已经成为 LLM 应用质量保证的事实标准。

从功能定位来看,Promptfoo 解决的核心问题是:如何科学地、可复现地评估 LLM 应用的输出质量。它支持对任意 LLM API 进行测试,包括 OpenAI、Claude、Gemini、Llama 等主流模型,让你能够在统一框架下进行模型对比和基准测试。

核心特性#

全面的评估能力#

Promptfoo 提供了两类评估指标:确定性指标和模型辅助指标。前者如精确匹配、JSON 结构验证、延迟测量等,完全基于规则和数学计算;后者则借助其他 LLM 作为”裁判”,评估输出的事实准确性、答案相关性、上下文忠诚度等主观维度。

红队安全测试#

除了功能性评估,Promptfoo 在安全领域同样表现出色。它支持对 LLM 应用进行红队测试,帮助发现 Prompt 注入、越狱攻击、内容安全等问题。结合 CI/CD 集成和 PR 安全扫描功能,可以在代码提交阶段就拦截潜在的安全风险。

开发者友好的工程设计#

Promptfoo 秉承”开发者优先”的理念,实现了快速迭代、热重载和智能缓存机制。这意味着你可以即时看到测试结果,无需长时间等待。100% 本地执行的评估模式确保了数据隐私不会泄露。灵活的扩展性则让你可以对接任意 LLM API,而不是被某个特定供应商绑定。

评估标准详解#

Promptfoo 的评估体系是其核心价值所在。接下来我们将深入解析其两大类评估指标。

确定性指标(Deterministic Metrics)#

确定性指标完全依赖规则和算法进行判定,结果可复现且不依赖外部模型:

指标名称用途说明
equals精确匹配要求输出与预期完全一致
contains / icontains子串包含检查输出是否包含指定文本(后者忽略大小写)
regex正则匹配使用正则表达式验证输出格式
is-json / is-html / is-xml结构验证验证输出是否为有效的 JSON/HTML/XML
starts-with前缀匹配检查输出是否以指定文本开头
levenshtein编辑距离设置最大编辑距离阈值
rouge-n文本摘要评分常用于评估文本相似度
similar余弦相似度基于 Embedding 的语义相似度计算
latency延迟阈值验证响应时间是否低于指定毫秒数
cost成本阈值验证推理成本是否在预算内
perplexity / perplexity-score困惑度测量用于检测幻觉(Hallucination)
python自定义验证编写 Python 函数进行任意验证

模型辅助指标(Model-Assisted Metrics)#

当确定性指标无法满足需求时,模型辅助指标借助其他 LLM 的判断力来进行更复杂的评估:

指标名称用途说明
llm-rubricLLM 裁判评分提供评分规则(Rubric),让 LLM 按规则打分
g-evalG-Eval 框架评估采用链式思维(Chain-of-Thought)进行评估
factuality事实准确性检查输出是否遵循提供的事实依据
model-graded-closedqa封闭问答评分基于问答形式的闭合式评估
answer-relevance答案相关性评估输出与查询的相关程度
context-faithfulness上下文忠诚度特别适用于 RAG 场景,检测是否产生幻觉
classifierHuggingFace 分类器使用 HuggingFace 模型进行分类判断
piPi Labs 偏好评分Pi Labs 的偏好打分模型
trajectory:goal-success任务完成评估评估 Agent 任务是否成功完成

评分机制#

除了指标定义,Promptfoo 还提供了灵活的评分组合机制:

权重系统weight 字段允许为不同指标设置加权平均,重要指标可以拥有更高权重。

阈值判定threshold 字段设置通过/失败的边界值,例如延迟超过 2000ms 则判定为失败。

取反操作:使用 not- 前缀可以反转指标逻辑,例如 not-contains 表示输出不应包含指定文本。

命名指标:通过 named 标签对指标进行分组,便于后续聚合分析。

派生指标derivedMetrics 支持定义复合公式,例如 F1 = 2 * precision * recall / (precision + recall)。

配置结构#

Promptfoo 的配置文件采用 YAML 格式,主要由以下几个核心部分组成:

prompts:定义测试使用的提示词模板,支持 Nunjucks 模板语法,可以进行变量插值和条件渲染。

providers:指定 LLM 提供者,支持 OpenAI、Claude、Gemini、Ollama 等,可配置 API 密钥、端点、模型版本等参数。

tests:测试用例集合,每个用例包含变量(vars)和断言(assertions)。变量用于渲染 Prompt,断言定义评估规则。

derivedMetrics:派生指标定义,用于创建基于原始指标的复合评分。

实战示例#

以下是一个完整的 Promptfoo 配置文件示例,展示了如何评估一个 RAG 问答系统:

prompts:
- "你是一个技术助手。请根据以下上下文回答用户问题。\n\n上下文:{{context}}\n\n问题:{{question}}\n\n回答:"
providers:
- id: openai:chat:gpt-4o
config:
temperature: 0.3
max_tokens: 500
tests:
- vars:
context: "苹果公司成立于 1976 年,总部位于加利福尼亚州库比蒂诺。"
question: "苹果公司成立于哪一年?"
assert:
- type: contains
value: "1976"
weight: 2
- type: factuality
weight: 3
- type: context-faithfulness
weight: 2
- type: latency
threshold: 3000
- vars:
context: "Python 是一种高级编程语言,由 Guido van Rossum 于 1991 年创建。"
question: "Python 是由谁创建的?"
assert:
- type: contains
value: "Guido"
- type: answer-relevance
threshold: 0.8
derivedMetrics:
- name: "F1-Score"
value: "2 * precision * recall / (precision + recall)"

在上述配置中,我们定义了一个 RAG 问答系统的评估方案。第一个测试用例验证模型能否正确回答关于苹果公司成立时间的问题,通过 contains 检查答案是否包含”1976”,同时用 factualitycontext-faithfulness 确保回答的事实性和上下文一致性。第二个用例则关注回答的相关性,使用 answer-relevance 指标确保评分不低于 0.8。

安装与使用#

Promptfoo 支持多种安装方式,适应不同的使用场景:

通过 npm 全局安装是最常见的方式:

Terminal window
npm install -g promptfoo

macOS 用户可以使用 Homebrew:

Terminal window
brew install promptfoo

Python 用户则可以通过 pip 安装:

Terminal window
pip install promptfoo

对于不想安装的用户,npx 方式可以直接运行:

Terminal window
npx promptfoo@latest

安装完成后,通过 promptfoo init 初始化项目,它会创建一个默认的 promptfooconfig.yaml 配置文件。运行测试只需执行 promptfoo eval,结果会以表格形式展示各项指标的得分。

总结#

Promptfoo 代表了 LLM 应用质量保证的最新实践。它将软件工程中成熟的测试理念引入 AI 领域,通过系统化的评估标准和灵活的扩展机制,让 Prompt 工程从”玄学”变为”工程”。

无论你是想要优化一个 RAG 系统、对比不同模型的表现,还是在 CI/CD 流水线中嵌入安全扫描,Promptfoo 都能提供开箱即用的解决方案。其 MIT 开源许可和活跃的社区生态,确保了你不会被任何单一供应商锁定。在 LLM 应用开发日益成为主流的今天,掌握 Promptfoo 这样的工具,已经成为 AI 工程师的必备技能。

Promptfoo: LLM 应用评估与红队测试的利器
https://sgjki547.top/posts/promptfoo/
Author
SGJki
Published at
2026-04-11
License
CC BY-NC-SA 4.0