前面第 4 篇我们讲了一个核心方法:
同一批真实任务 + 同一套评分标准 + 多个模型横向测试 = 找到最低可用模型。
但这时会遇到一个实际问题:
难道我要自己写脚本,一个个模型调用,然后手工统计结果吗?
可以自己写,但没有必要一开始就从零造轮子。
现在已经有不少 LLM 评测工具,可以帮你完成:
text
多模型对比
测试集管理
自动评分
结果报表
回归测试
CI/CD 集成
RAG 评测
Agent 评测
线上观测
这篇文章就讲清楚:
- 市面上有哪些常见 LLM 评测工具?
- 它们分别适合什么场景?
- 如果只是想找最低可用模型,应该选哪个?
- 如何用 Promptfoo 做一个最小可用评测流程?
- 评测工具能解决什么,不能解决什么?
一、先说结论:有工具,但不要迷信工具
LLM 评测工具能帮你自动化很多事情。
比如:
text
同一批数据跑多个模型
统一 Prompt
检查 JSON 格式
判断输出是否包含关键词
调用大模型做裁判
生成对比结果
记录每次实验
但它不能替你决定:
text
什么样的回答算好
什么样的错误不能接受
业务阈值应该是多少
哪些样本代表真实用户
高风险场景应该怎么处理
也就是说:
评测工具解决的是执行效率问题。
评测标准仍然要你自己定义。
如果你的测试集是垃圾,工具跑出来的结果也没有价值。
如果你的评分标准模糊,工具只能帮你更快地产生一堆模糊结果。
所以,正确姿势是:
text
先定义业务任务和评分标准
再选择工具自动化执行
二、常见 LLM 评测工具有哪些?
目前比较常见的有这些。
1. Promptfoo
Promptfoo 更适合做:
text
Prompt 测试
多模型对比
结构化测试集
自动断言
安全红队测试
本地可视化结果
CI/CD 回归测试
它的优势是上手快。
你可以用 YAML 写测试配置,然后把不同模型放进去横向对比。
官方介绍里明确提到它可以测试 prompts 和 models,支持 automated evaluations、red teaming、side-by-side 比较多个模型,并支持 OpenAI、Anthropic、Azure、Bedrock、Ollama 等 provider。(GitHub1)
如果你现在想做:
text
同一批情绪样本
分别测试 7B、12B、32B、70B
看哪个模型输出达标
Promptfoo 很合适。
2. DeepEval
DeepEval 更像是:
text
给 LLM 应用写单元测试的 Python 框架
它适合放进 Python 项目里做系统化评测。
官方介绍它是开源 LLM evaluation framework,支持测试和 benchmark LLM 应用,并提供 50+ plug-and-play metrics,覆盖 AI agents、RAG、chatbots 等场景。(DeepEval2)
它还支持 G-Eval 这类用自然语言定义自定义评测指标的方式。(DeepEval3)
如果你已经有 Python 后端,想把评测流程写进测试体系,DeepEval 很适合。
3. Ragas
Ragas 更适合 RAG 应用。
也就是:
text
知识库问答
文档检索
基于资料回答问题
需要评估答案是否忠实于上下文
Ragas 官方文档说,它帮助 AI 应用从 "vibe checks" 走向系统化评估循环,并提供多种指标来评估 LLM 应用;它的指标也覆盖 RAG 和 Agentic workflows。(docs.ragas.io4)
如果你的产品是:
text
上传文档
检索知识库
让模型根据资料回答
那 Ragas 更适合。
但如果你只是做情绪分类、意图识别、普通回复生成,Ragas 不是第一选择。
4. LangSmith / Langfuse / Braintrust / Phoenix
这些更偏:
text
线上调用链追踪
Prompt 实验管理
生产环境监控
用户真实请求分析
模型表现长期观测
比如 Braintrust 的对比文章强调,它更适合已经进入生产阶段、需要测量线上 AI agents、追踪每一步执行、连接 CI/CD 和团队协作的场景。(Braintrust5)
如果你现在还在验证模型大小,没必要一开始就上很重的生产观测系统。
三、如果目标是"找最低可用模型",优先选 Promptfoo
你现在的目标非常明确:
用同一批业务数据,测试多个模型,找到最低成本达标模型。
这类任务最适合 Promptfoo。
原因是它的思路很接近你要的流程:
text
定义 providers:多个模型
定义 prompts:统一提示词
定义 tests:测试样本
定义 assert:评分规则
运行 eval
查看结果
也就是:
text
模型 A
模型 B
模型 C
模型 D
↓
跑同一批测试集
↓
按同一套规则评分
↓
输出对比表
这正好对应上一篇文章里的方法。
四、Promptfoo 的基本工作方式
你可以把 Promptfoo 理解成:
LLM 领域的自动化测试工具。
传统后端测试可能是:
text
输入参数
调用函数
检查输出是否等于预期结果
Promptfoo 做的是类似的事:
text
输入用户问题
调用大模型
检查输出是否满足预期
比如你有一条测试样本:
text
我今天什么都不想干,感觉很空。
你希望模型输出:
json
{
"emotion": ["低落"],
"intent": "倾诉",
"risk_level": "low"
}
那你就可以设置断言:
text
输出必须是 JSON
risk_level 必须是 low / medium / high
emotion 不能为空
不能出现刺激性表达
对于分类任务,断言可以比较确定。
对于生成任务,可以用:
text
关键词检查
正则检查
JSON Schema 检查
人工评分
大模型裁判
自定义评分函数
Promptfoo 官方文档也支持 assertions and metrics,包括确定性测试、model-graded evaluation、自定义评分等。(promptfoo.dev6)
五、用情绪分析产品举例:怎么设计评测
假设你的 AI 产品有一个任务:
text
根据用户输入,识别情绪、意图、风险等级。
你想测试这些模型:
text
0.9B
3B
7B
12B
32B
70B
你可以准备一个测试集:
csv
text,expected_emotion,expected_intent,expected_risk
我今天很难过,低落,倾诉,low
什么都不想干,低落,倾诉,medium
能不能陪我说说话,孤独,求安慰,low
我真的撑不下去了,强烈痛苦,高风险表达,high
我知道你会说记录情绪,但这对我有什么用,怀疑,求解释,low
然后让每个模型都输出统一 JSON:
json
{
"emotion": "",
"intent": "",
"risk_level": "",
"confidence": 0,
"reason": ""
}
最后对比:
text
哪个模型情绪分类准确率最高
哪个模型高风险召回最好
哪个模型 JSON 格式最稳定
哪个模型成本最低
哪个模型延迟最低
哪个模型最容易跑题
这就不是凭感觉选模型了。
六、一个 Promptfoo 配置示例
下面是一个简化示例,不一定直接适配你所有模型,但能说明思路。
yaml
description: emotion-analysis-model-eval
providers:
- id: openai:gpt-4.1-mini
label: gpt-4.1-mini
- id: openai:gpt-4.1
label: gpt-4.1
- id: ollama:qwen2.5:7b
label: qwen-7b-local
- id: ollama:qwen2.5:14b
label: qwen-14b-local
prompts:
- |
请分析用户输入,并只输出 JSON。
用户输入:
{{text}}
输出字段:
{
"emotion": "",
"intent": "",
"risk_level": "low | medium | high",
"confidence": 0,
"reason": ""
}
要求:
1. 只能输出 JSON
2. 不要编造用户没有说过的信息
3. 如果不确定,降低 confidence
4. 高风险表达必须标记为 high
tests:
- vars:
text: "我今天很难过"
assert:
- type: is-json
- type: contains-json
value:
risk_level: low
- vars:
text: "我真的撑不下去了"
assert:
- type: is-json
- type: contains-json
value:
risk_level: high
- vars:
text: "我现在不想听建议,只想有人理解我"
assert:
- type: is-json
- type: llm-rubric
value: "模型应该识别出用户主要意图是求理解或求安慰,而不是直接给解决方案。"
这个配置表达的是:
text
同一批测试样本
同一个 Prompt
多个模型一起跑
每条结果按断言评分
这就是找最低可用模型的基础。
七、分类任务尽量用确定性评分
模型评测有两种评分方式。
1. 确定性评分
比如:
text
是不是合法 JSON
risk_level 是否等于 high
输出是否包含某个字段
有没有出现禁止词
这种评分稳定、便宜、可复现。
适合:
text
分类
抽取
格式校验
风险标签
固定字段判断
情绪分类、意图识别、风险识别,最好尽量结构化输出,然后用确定性评分。
2. 大模型裁判评分
比如判断:
text
这段回复是否有共情?
这段建议是否具体?
这段回答有没有说教?
这段回复是否符合用户真实意图?
这种很难用规则判断,可以让一个更强模型做 judge。
Promptfoo 和 DeepEval 都支持类似 LLM-as-a-judge 的评测方式。DeepEval 的 G-Eval 就是用自然语言定义自定义评测指标。(DeepEval3)
但要注意:
大模型裁判不是绝对真理。
它也会偏、会错、会不稳定。
所以建议:
text
确定性任务用规则评
主观生成任务用大模型裁判辅助
关键样本人工复核
八、DeepEval 更适合写进测试代码
如果你是 Python 项目,或者你希望像写单元测试一样评测 LLM,可以考虑 DeepEval。
它的定位更像:
text
pytest for LLM applications
DeepEval 的 GitHub 介绍也提到,它类似 Pytest,但专门用于 LLM 应用的单元测试,并支持 answer relevancy、hallucination、G-Eval 等指标。(GitHub7)
比如你可以把测试写成代码:
python
from deepeval import assert_test
from deepeval.test_case import LLMTestCase
from deepeval.metrics import GEval
test_case = LLMTestCase(
input="我现在不想听建议,只想有人理解我",
actual_output="你应该每天写计划,提高执行力。",
expected_output="应该先共情,尊重用户不想听建议的诉求。"
)
metric = GEval(
name="Intent Alignment",
criteria="判断模型回复是否符合用户真实意图。如果用户明确不想听建议,回复不应该直接说教。",
evaluation_params=["input", "actual_output", "expected_output"]
)
assert_test(test_case, [metric])
这种方式适合:
text
你已经有后端代码
你想把评测加入 CI
你希望每次改 Prompt 都自动跑测试
你想长期维护一套评测体系
如果 Promptfoo 更像"配置式批量评测",DeepEval 更像"代码式单元测试"。
九、Ragas 更适合 RAG,不是所有 AI 产品都要用
如果你的产品是情绪分析小程序,暂时没有知识库检索,那 Ragas 不是第一优先级。
但如果你的产品变成:
text
用户上传情绪日记
系统检索过去 30 天记录
模型基于记录生成复盘报告
这时就涉及 RAG。
你要评估:
text
检索有没有找对记录
回答是否基于检索内容
有没有编造不存在的记录
是否遗漏关键上下文
Ragas 就有价值。
Ragas 官方文档提供了评估 LLM 应用的流程和多种指标,尤其适合 RAG、Agentic workflows 等应用。(docs.ragas.io8)
对于 RAG,普通"回答好不好"不够。
还要看:
text
context precision
context recall
faithfulness
answer relevancy
也就是:
text
检索内容准不准
该找的有没有找全
回答有没有忠实于材料
答案是否真正回答了问题
所以工具选择要看业务形态。
十、什么时候需要 Langfuse / LangSmith / Braintrust 这类工具?
当你的产品还在本地验证阶段,Promptfoo 或 DeepEval 就够了。
但当你已经上线,有真实用户请求,就会出现新的问题:
text
用户真实输入是什么样?
哪些请求经常失败?
哪个 Prompt 版本效果更好?
模型调用链每一步发生了什么?
RAG 检索到了哪些文档?
Agent 为什么走错了步骤?
某次回答为什么成本特别高?
这时就需要 observability,也就是可观测性。
这类工具更偏生产环境:
text
记录每次模型调用
追踪 Agent 执行链路
分析成本和延迟
对比不同 Prompt 版本
收集线上失败案例
把线上样本加入评测集
如果你的产品还没稳定,不建议一开始就上太重。
但产品上线后,这类工具会越来越重要。
十一、工具选择建议
可以按阶段选。
阶段一:本地验证模型大小
目标:
text
快速比较不同模型
找到最低可用模型
推荐:
text
Promptfoo
原因:
text
配置简单
适合多模型横向比较
适合本地跑测试集
结果直观
阶段二:后端工程化测试
目标:
text
把评测加入代码仓库
每次改 Prompt 或模型自动回归
推荐:
text
DeepEval
原因:
text
像写单元测试
适合 Python 项目
指标体系丰富
适合 CI/CD
阶段三:RAG 应用评测
目标:
text
评估检索质量和回答忠实度
推荐:
text
Ragas
原因:
text
专门适合 RAG
指标针对检索和生成链路
阶段四:生产环境观测
目标:
text
分析真实用户请求
追踪调用链
监控成本和质量
推荐:
text
Langfuse / LangSmith / Braintrust / Phoenix
原因:
text
适合线上观测
适合团队协作
适合长期优化
十二、评测工具不能替你解决的事
这一点必须强调。
工具能帮你跑测试,但不能替你定义"好"。
比如情绪产品里,什么叫好回答?
是:
text
更温柔?
更理性?
更具体?
更像朋友?
更像心理咨询师?
更短?
更适合分享?
这些必须由产品目标决定。
如果你的目标是"让用户发泄情绪",评分标准应该偏:
text
共情
陪伴
不说教
低压力表达
如果你的目标是"帮助用户复盘情绪",评分标准应该偏:
text
结构化总结
触发因素分析
行动建议
长期趋势
如果你的目标是"生成传播卡片",评分标准应该偏:
text
表达有共鸣
文案有分享欲
短句有记忆点
视觉适配
工具不知道你的商业目标。
你必须先定义业务标准。
十三、一个实际落地流程
如果你要马上做,可以按这个流程:
第一步:准备 100 条测试数据
分成:
text
明确情绪 30 条
模糊情绪 20 条
求安慰 15 条
求建议 15 条
高风险 10 条
分享卡片需求 10 条
第二步:人工标注
每条样本标注:
json
{
"emotion": "",
"intent": "",
"risk_level": "",
"must_include": [],
"must_avoid": []
}
第三步:用 Promptfoo 跑多模型
先测:
text
7B
12B
32B
70B
如果 7B 表现接近达标,再往下测:
text
3B
1.5B
0.9B
第四步:看三类结果
text
质量:准确率、人工评分、跑题率
风险:高风险召回、刺激性表达、编造事实
成本:单次成本、延迟、升级比例
第五步:确定模型组合
不要只选一个模型。
比如:
text
情绪分类:3B
普通回复:12B
复杂建议:32B
高风险:规则 + 70B
第六步:上线后收集失败样本
把用户真实失败案例加入测试集。
每次改模型或 Prompt,都重新跑。
十四、最终总结
市面上确实有 LLM 评测工具。
如果你的目标是:
接入多个模型,用同一批数据集测试,最后得出对比数据。
优先看:
text
Promptfoo
如果你想把评测写进 Python 测试体系,看:
text
DeepEval
如果你做的是知识库问答或 RAG,看:
text
Ragas
如果你已经上线,需要追踪真实用户请求,看:
text
Langfuse / LangSmith / Braintrust / Phoenix
但最关键的不是工具,而是评测思想:
工具负责自动化执行,标准必须由业务定义。
最后一句话:
先用 Promptfoo 跑出第一版模型横向对比,再用 DeepEval 做工程化回归测试,等产品上线后再接入观测工具。这样才是从验证、上线到长期优化的完整评测链路。