提示词评估
约 1277 字大约 4 分钟
2026-07-20
提示词评估要解决的是:如何量化、可重复地衡量一条提示词的质量。规模小的时候凭感觉改提示词、肉眼盯着几条输出判断好坏还勉强够用,但规模一上来这种方式就彻底失灵了
为什么要系统化评估
提示词是软件的一部分,和代码一样需要版本管理和回归测试。常见的场景:
- 改了一段描述,想确认新版在所有样本上都比旧版好,而不是只在刚测的那两条上好
- 有好几条候选提示词,想横向比出哪条更好
- 上线前要验证提示词在不同模型上的兼容性
光靠肉眼,这三件事都做不到,需要工具
Promptfoo
Promptfoo 是专为提示词工程设计的开源测试 & 评估框架
支持
- 多提示词对比:在相同输入下比较多条提示词的输出质量
- 多模型对比:对同一提示词比较 GPT-4、Claude、Llama 等的输出差异
- 批量输入测试:用多个输入样本评估提示词的稳定性
- 自动 / 手动打分:支持关键词匹配、正则、JS 表达式、LLM 自评分
- 报告生成:输出 Markdown、HTML、JSON 格式的测试报告
- Web UI 可视化:
promptfoo view打开浏览器可视化评测界面 - CI 集成:接入 GitHub Actions,做提示词的 "自动回归测试"
安装以及命令:
npx promptfoo init # 初始化,生成 promptfooconfig.yaml 模板
promptfoo eval # 批量跑所有测试
promptfoo view # 在浏览器里打开可视化报告配置文件结构
promptfooconfig.yaml 分四大块
prompts: # 提示词设计
providers: # 模型提供方
tests: # 输入样本
eval: # 自动评分方式Promptfoo 会把 所有提示词 × 所有模型 × 所有输入 做笛卡尔积,组合成一批测试用例一次跑完。例如 2 条提示词 × 2 个模型 × 3 条输入 = 12 次实际调用
prompts — 提示词模板
prompts:
- id: good-job-title
label: "好提示词:具体要求 + 输出格式"
raw: |
请根据以下岗位信息,撰写一句吸引人的招聘广告标题:
- 以年轻人喜欢的口吻
- 控制在 15 个字以内
- 用一句话概括岗位亮点
岗位信息:{{input}}
- id: bad-job-title
label: "坏提示词:无要求,模糊指令"
raw: "写一句话。"{{input}} 是变量占位符,会从 tests 里的 vars 自动填入。id 用于结果引用,label 是报告里显示的可读名称
providers — 模型配置
providers:
- id: ollama:llama3 # 本地模型,通过 Ollama 调用
- id: openai:gpt-4o # OpenAI,从 .env 读取 OPENAI_API_KEY
- id: anthropic:claude-3-opus # Anthropic,从 .env 读取 ANTHROPIC_API_KEYPromptfoo 会自动从 .env 里读取对应的 API Key,不需要在 yaml 里硬编码
tests — 输入样本
tests:
- vars:
input: "一家 AI 初创公司,招聘前端开发,Vue + TypeScript,远程 + 期权。"
- vars:
input: "招聘客服专员,轻松环境,带薪培训,有下午茶。"
- vars:
input: "招聘 Python 数据工程师,参与大模型推理平台建设,年薪 40 万起。"也可以在每条 test 里加单独的 assert,做用例级别的断言
eval — 自动打分
| 类型 | 描述 |
|---|---|
equals | 严格等于期望值 |
icontains | 忽略大小写包含某字符串 |
regex | 匹配正则表达式 |
javascript | 用 JS 表达式动态打分(output 是模型输出字符串) |
llm-rubric | 让 LLM 按评分标准打分(最灵活,用于主观维度) |
javascript
1 / (output.length + 1)output.length 是模型输出的字符数,输出越短分数越高 —— 用来鼓励简洁输出
llm-rubric
llm-rubric:把一段人类评分标准喂给另一个 LLM(通常是 GPT-4),让那个模型代替人类打分,输出一个整数分数
eval:
automatic:
- type: llm-rubric
rubric: |
请从以下维度为输出打分(1~5 分):
- 是否突出岗位亮点(2 分)
- 是否语言吸引人(2 分)
- 是否符合短标题要求(1 分)
请仅返回一个整数分数。
provider: openai:gpt-4 # 不写则用 providers 第一个提示
llm-rubric 的本质是 "用 LLM 评价另一个 LLM 的输出",相当于一位助教代替人类批作业。它能处理 "语言是否吸引人" 这类主观维度,是提示词评估里最接近真实人类判断的自动化方式
LLM 评分本身有偏差:它偏好更长、更客气、格式更规整的回答,对同一份输出多次打分也未必一致。所以自动评分最适合做 初筛和回归监控(挡住明显变差的改动),真正上线前的关键决策仍要人工抽检。把评估接进 CI 后,每次改提示词都自动跑一遍,就能像跑单测一样防止效果悄悄退化
