Skip to content

Prompt 评测

🎯 学习目标

  • 编写 promptfoo.yaml 定义 prompts、providers、tests
  • 配置 rubric 与 LLM grader 自动打分
  • 用 promptfoo view 对比版本 diff

引言

Promptfoo 是开源 Prompt 评测 CLI,适合本地与 CI 跑多 Prompt × 多 Model 矩阵,下一节 Trace 负责线上,本节负责发布前对比

章节正文

第 1 步:安装与最小配置

bash
npm install -g promptfoo
mkdir eval && cd eval

promptfoo.yaml

yaml
description: 客服退款 Eval
prompts:
  - file://prompts/v1.txt
  - file://prompts/v2.txt
providers:
  - openai:gpt-4o-mini
  - openai:gpt-4o
tests:
  - vars:
      question: 如何退款?
    assert:
      - type: icontains
        value: 7天
      - type: not-icontains
        value: 随时全额

prompts/v1.txt 内容示例:

你是客服助手。根据政策回答:{{question}}

第 2 步:LLM rubric 评分

yaml
defaultTest:
  assert:
    - type: llm-rubric
      value: |
        评分标准(1-5):
        5分:准确引用政策,语气专业,无夸大承诺
        1分:编造政策或包含 forbidden 承诺
        问题:{{question}}
        回答:{{output}}

可指定 grader 模型:

yaml
evaluateOptions:
  provider: openai:gpt-4o

第 3 步:运行与 CI 集成

bash
promptfoo eval -c promptfoo.yaml
promptfoo eval -c promptfoo.yaml --output results.json
promptfoo view   # 本地 Web UI 对比

GitHub Actions 片段:

yaml
- run: npx promptfoo eval -c promptfoo.yaml
- run: npx promptfoo eval -c promptfoo.yaml --filter-first-n 20  # PR 子集

最佳实践:生产日志脱敏采样补充 tests;PR 跑 subset,nightly 跑全量。

动手练习

  1. 创建 v1/v2 两个 Prompt 文件,对 5 个问题跑 eval
  2. 添加 llm-rubric 断言并对比 view 界面分数
  3. 写一条 GitHub Actions job 在 PR 时跑 promptfoo

常见问题

Q:Promptfoo 和 LangSmith Eval 区别?

Promptfoo 偏本地/CI 矩阵对比,配置即代码;LangSmith 偏在线 Trace + 数据集一体。可并存。

本节小结

Promptfoo 用 YAML 定义 prompts/providers/tests;assert 支持规则与 llm-rubric;eval + view 是 Prompt 迭代标配。