DeepSeek 模型评测实战:用 promptfoo 对 DeepSeek-R1 与 OpenAI o1 做并排测试与质量评估
promptfoo 是一个开源 LLM 输出测试与评估框架,在本仓库中位于 awesome-deepseek-integration 项目列表 的 Others 分类下,定位是"测试和评估 LLM prompt(含 DeepSeek 模型),对比不同 LLM 供应商、捕获回归并评估回复"。本文基于 docs/promptfoo/README.md 与 中文版 展开,讲解如何将 DeepSeek 接入 promptfoo,通过配置文件驱动多模型并排评测、质量断言与成本控制,并运行可视化报告,最终你将在本地复现出"DeepSeek-R1 vs OpenAI o1"这类可量化的模型对比工作流。
promptfoo 能做什么:面向 DeepSeek 的评测定位
promptfoo 的核心价值是让模型选择从"凭感觉"变成"跑评测、看数据"。接入 DeepSeek 后,它可以用于以下三类典型任务(对应原文档列出的能力):
- 不同模型并排比较(side-by-side comparisons):在同一个 prompt 与同一组测试用例下,同时请求 DeepSeek 与 OpenAI o1、GPT-4o、Claude 3.5、Llama 3.3、Gemini 等多家模型,用一致的断言与评分标准衡量输出差异;
- 检查输出质量与一致性:对同一模型反复请求同一问题,或用规则断言、LLM 评委校验回复内容,捕获 prompt 修改后引入的回归(regression);
- 生成测试报告:
eval结束后自动产出结构化结果,支持 Web 可视化与分享,便于向团队展示对比结论。
此外原文档还指出,promptfoo 不只做质量评测,也支持对 LLM 及其应用进行安全漏洞测试——例如用它构造恶意或越狱类输入,验证 DeepSeek 应用在异常输入下的行为边界。
安装与环境准备
promptfoo 通过 Node.js 生态分发,也支持 Homebrew,二选一即可:
npm install -g promptfoo
# 或者使用 brew
brew install promptfoo
安装后可执行 promptfoo --version 验证。接下来配置 API 密钥。promptfoo 从进程环境变量读取密钥,DeepSeek 对应 DEEPSEEK_API_KEY:
export DEEPSEEK_API_KEY=your_api_key
# 根据需要添加其他 API 密钥
若同时对比 OpenAI o1 等模型,还需导出对应供应商的密钥,例如 OPENAI_API_KEY(按 promptfoo 对各 provider 的通用约定,OpenAI 密钥变量名为 OPENAI_API_KEY);如果用到大模型做评委(如 llm-rubric 断言),也可复用上述密钥,避免额外配置。密钥仅存于环境变量,不写入配置文件,方便在 CI 中通过 Secret 注入。
快速开始:一份最小可用配置
promptfoo 采用"配置文件即测试计划"的模式。在当前目录创建 promptfooconfig.yaml,声明要测的 provider、prompt 模板与测试用例:
providers:
- deepseek:deepseek-reasoner # DeepSeek-R1
- openai:o1
prompts:
- 'Solve this step by step: {{math_problem}}'
tests:
- vars:
math_problem: 'What is the derivative of x^3 + 2x with respect to x?'
assert:
- type: contains
value: '3x^2' # Check for correct answer
- type: llm-rubric
value: 'Response shows clear steps'
- type: cost
threshold: 0.05 # Maximum cost per request
逐段拆解这份配置,它同时定义了"测谁、怎么问、怎么判"三层内容:
| 配置块 | 作用 | 本例含义 |
|---|---|---|
providers |
被测模型清单,promptfoo 会对每个 provider 跑完全部用例 | deepseek:deepseek-reasoner(DeepSeek-R1)与 openai:o1 并排对比 |
prompts |
注入测试的 prompt 模板,{{变量}} 占位符由用例中的 vars 填充 |
要求"逐步求解"的数学题模板 |
tests[].vars |
单条测试的变量输入 | 一道微积分求导题:对 x³+2x 求导 |
tests[].assert |
判定规则,全部通过该条测试才算 pass | 见下方断言说明 |
需要说明的是,原文档注释将 deepseek-reasoner 标为 DeepSeek-R1(DeepSeek 的推理增强模型),实际使用时应以你 API 账户可用的模型 ID 为准,promptfoo 的 DeepSeek provider 也支持在配置中指定 deepseek:deepseek-chat 等其它模型名。
配置中的三条断言代表了三类互补的评测维度:
contains(规则断言):直接检查模型输出文本是否包含期望子串3x^2,用于验证"答得对不对"这类确定性要求;llm-rubric(LLM 评委):让一个大模型按给定评语标准("回答需展示清晰的步骤")对输出打分,用于评估"逻辑与过程是否清晰"这类难以用字符串匹配的软性质量;cost(成本断言):设定单次请求的成本上限阈值threshold: 0.05,超出即判失败,把"花多少钱"也变成可回归的验收指标——这对需要在推理模型(reasoner)与通用模型之间做性价比权衡的场景非常实用。
运行评测与查看结果
测试计划就绪后,一条命令执行全部评测:
promptfoo eval
eval 会逐条加载测试用例,分别向两个 provider 发起请求,运行断言并汇总通过/失败情况,最终在终端输出摘要,同时把详细结果写入本地(默认输出至 promptfoo-output 目录,供 view 读取)。
如需在浏览器中交互式查看结果,运行:
promptfoo view
view 会启动本地 Web 服务,以表格并排展示每个 provider 在每条用例上的输出、断言结果与成本明细,是进行"DeepSeek-R1 vs o1 谁更稳、更省"这类人工研判的最佳入口,也方便把结果导出为报告分发给团队。
扩展实战思路:对比、回归与评测治理
基于上文的配置骨架,把 promptfoo 用于 DeepSeek 应用可以进一步演化出三种实战形态:
1. 多模型横向对比。在 providers 中追加 openai:gpt-4o、anthropic:messages:claude-3-5-sonnet、google:gemini-... 等条目即可在同一批用例上横向扩展对比阵容(对应原文档提到的与 GPT-4o、Claude 3.5、Llama 3.3、Gemini 等模型的对比场景)。此时建议配合 cost 断言同时考察质量与成本。
2. Prompt 回归测试。把线上 prompt 固化为一组断言用例后,任何 prompt 措辞调整都先跑 promptfoo eval,确保关键能力点(如 contains 检查、llm-rubric 质量标准)不因改动而回退。
3. 评测进 CI。配置文件与密钥环境变量天然可迁移到 CI:DEEPSEEK_API_KEY 通过 CI Secret 注入,promptfoo eval 作为流水线步骤,任一断言失败即中断构建,实现模型输出质量的持续回归守护。
原文档还提到 promptfoo 可对 LLM 与 LLM 应用执行安全类测试,可在上述配置之外按需补充针对提示注入、越狱等方向的用例集(详见其官方文档的 security 相关说明)。
参考示例与进一步阅读
- 示例项目:promptfoo 官方仓库提供了 r1 与 o1 在 MMLU(大规模多任务语言理解基准)上的对比示例,可参考其用例组织方式扩展自己的数据集与断言;
- 仓库内文档:本仓库 docs/promptfoo/README.md 为英文原版,docs/promptfoo/README_cn.md 为中文版,二者可作为配置速查;
- 项目定位:promptfoo 在 项目总列表 中被归入 Others 分类,与 Langfuse、Opik 等观测/评测类工具并列,属于 DeepSeek 生态中面向"测试与评测"环节的开源方案。
实践要点小结:接入 promptfoo 评测 DeepSeek 只需三步——安装 CLI、导出 DEEPSEEK_API_KEY、编写声明式 promptfooconfig.yaml;随后以 promptfoo eval 出数据、promptfoo view 看对比。将 contains(正确性)、llm-rubric(质量)、cost(成本)三类断言组合使用,即可把 DeepSeek-R1 与其它主流模型的对比从主观体验转化为可重复、可回归、可汇报的工程化评测流程。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0631
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python09
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00