Promptfoo:AI提示词测试与安全演练神器(以智普GLM为例)
1.认识Promptfoo
这是一款专门为LLM应用设计的测试和红队演练框架,目的是帮助开发者自动化评估提示词以及模型的表现。使用 promptfoo,可以批量测试成百上千个测试用例,快速发现模型在安全性、隐私政策、指令遵循方面存在的问题。
2.Promptfoo的核心功能
- 多模型对比:支持OpenAI、Anthropic、Google、百度千帆等主流模型,也支持自定义API或者本地Python脚本,便于横向对比不同模型对相同提示词的响应;
- 自动化测试与断言:可以定义大量测试用例,通过 assert 规则(包含特定词语、符合某种格式、通过LLM评判)自动验证输出是否符合预期;
- 红队安全演练:内置了五十多种漏洞测试插件(越狱、提示注入、有害内容生成),可以模拟攻击者手法,自动生成对抗性输入来检测系统的安全边界;
- 可视化:测试结果可以通过命令行查看,也可以启动 Web UI 来分析。
3.安装Promptfoo
(1)Promptfoo 是基于 Node.js 构建的,需要事先安装20.0或以上版本的 Node.js。
验证环境:Win+R打开命令提示符输入 node --version

如果版本过低,去官网下载进行升级。https://nodejs.org/zh-cn
(2)使用 npm(Node.js包管理器)安装
这个方法适用于所有平台(Windows、macOS以及Linux)
打开终端或命令行工具,执行如下命令:
npm install -g promptfoo
# 如果第一个安装太慢,使用镜像源安装
npm install -g promptfoo --registry=https://registry.npmmirror.com
其中,-g参数代表全局安装,以后就可以在终端任何位置直接调用 promptfoo 命令。
安装完成后,查看是否成功:promptfoo --version

显示正确的版本号表示安装成功。
4.初始化第一个项目
(1)创建项目目录
创建新的文件夹存放测试的配置文件,并进入该目录(我这里选择在F盘创建):
mkdir my-first-promptfoo-test
cd my-first-promptfoo-test

(2)初始化配置文件
运行初始化命令,开始工具的使用:
promptfoo init

根据提示选择后,目录中会出现一个 promptfooconfig.yaml 文件,这是 Promptfoo 的核心配置文件。

熟悉 promptfooconfig.yaml文件:
# yaml-language-server: $schema=https://promptfoo.dev/config-schema.json
# Learn more about building a configuration: https://promptfoo.dev/docs/configuration/guide
description: "My eval"
prompts:
- "Write a tweet about {{topic}}"
- "Write a concise, funny tweet about {{topic}}"
providers:
- "openai:gpt-5-mini"
- "openai:gpt-5"
tests:
- vars:
topic: bananas
- vars:
topic: avocado toast
assert:
# For more information on assertions, see https://promptfoo.dev/docs/configuration/expected-outputs
# Make sure output contains the word "avocado"
- type: icontains
value: avocado
# Prefer shorter outputs
- type: javascript
value: 1 / (output.length + 1)
- vars:
topic: new york city
assert:
# For more information on model-graded evals, see https://promptfoo.dev/docs/configuration/expected-outputs/model-graded
- type: llm-rubric
value: ensure that the output is funny
文件中的核心有三大部分:prompts(测试的提示词)、providers(调用模型)、tests(测试用例)。
- prompts部分:
该部分用于插入提示词,支持多条插入,也支持文件导入
# 单条、多条插入
prompts:
- 'Translate the following text to Chinese: "{{name}}: {{text}}"'
文件导入:
prompts:
- file://path/to/prompt1.txt
- file://path/to/prompt.yaml
- providers部分:
这部分用于指定测试的大模型,除了常见的模型之外也可以使用脚本语言自定义一个模型。
providers:
- "openai:gpt-5-mini"
- "openai:gpt-5"
- tests部分:
该部分用于录入测试用例,通过vars设置不同的参数变量对prompts进行测试,同时通过assert断言来检验输出的结果。
yaml
代码解读
tests:
- vars:
topic: 苹果
city: 成都
assert:
- type: starts-with
value: '```json'
(3)体验示例(基于智普 GLM-4.7-Flash)
运行如下代码可以体验其提供的示例模板:
promptfoo init --example getting-started

cd getting-started

该示例会包含预设的提示词、模型配置以及测试用例。
修改promptfooconfig.yaml配置文件:

访问智谱开放平台https://bigmodel.cn/usercenter/settings/account并在控制台创建API Key
接着①设置环境变量
set ZHIPU_API_KEY=你的key
![]()
②验证是否设置成功(如果显示了刚才设置的密钥就是成功的)
echo %ZHIPU_API_KEY%

③最终运行 promptfoo
promptfoo eval
以上三步必须在同一个命令行窗口连续执行,如果重新打开CMD密钥就会失效。
!!!由于我是直接将密钥粘贴到CMD中,一直导致401报错,查询之后问题可能是因为环境变量的传递(特殊字符或者换行符)。因此我直接将API Key直接写进了.yaml文件中。
headers:
"Content-Type": "application/json"
"Authorization": "Bearer 6e9be。。。。。。" # 直接写密钥
然后就可以跑通测试了!

可以通过 promptfoo view 查看详细报告:


此外,web 界面还支持json/cvs格式的导出:

以上就完成了一次提示词测试的任务。
提示词调优案例:

5.最后
2026年3月9日,OpenAI宣布将收购人工智能安全平台Promptfoo,该平台可帮助企业在开发过程中识别并修复人工智能系统的漏洞。收购完成后,OpenAI将把Promptfoo的技术直接整合到OpenAI Frontier平台中。
更多推荐



所有评论(0)