输出变成了概率性的文本。程序往往处于一种“薛定谔的可用” 状态:
"感觉这版 Prompt 效果比上一版好一点,但说不上来好在哪。" — 你在调试时发现结果似乎更贴切,却无法量化。其实,
"修复了场景 A 的 Bad Case。结果场景 B 悄悄崩了," — 每次改动都伴随未知风险。
"更新了底层 Model/RAG 检索策略。完全不敢上线,只能靠人工盲测几百条…," — 人工盲测成本高、效率低。
如果你也有类似困扰,就说明你的 LLM 应用需要一套标准化、自动化、工程化的 Eval 程序。其实,
一、为什么 LLM Eval 是工程化的唯一基石?
在软件工程中,有一句经典名言:"If you can't measure it。you can't improve it."
LMM Eval贯穿整个生命周期:
-> -> -> ->
^ |
|------ -|
防范回归风险 : 改动 Prompt 或调参时确保程序没有暗度陈仓地在其他维度变差。
驱动程序迭代 : 把 AI 应用调整从“凭感觉调优”转为“以根据数据调整”。
选型与成本控制 : 对比 GPT‑4o、Claude Sonnet、Llama 等模型,在效果、Latency 与 Token Cost 中找到平衡点。
二、LLM Eval 的四大维度与常见指标
. 基础文本匹配指标
代表指标: ROUGE 、BLEU、Exact Match 、Levenshtein Distance。
适用场景: 信息提取、文本分类、固定格式输出。
优缺点:
优点: 计算速度毫秒级;客观且无偏差,
缺点: 过于死板;同义词表达会导致分数偏低。
. 语义相似度指标
MVP 方法: 使用 Embedding 模型如 text‑embedding‑small 来计算回答与 Ground Truth 的余弦相似度。
. RAG 专有指标
评估维度 衡量目标 问法示例
Main Content Relevance:
检索出的文档是否真的和 User Query 有关?“检索出的上下文能否帮助回答此问题?按理说,”
Main Content Relevance 的主要目标:
判断检索结果是否足够满足查询需求。
Main Content Relevance 示例问法:
“这些检索到的文档是否可以直接回答我的问题?”
Hello / Faithfulness / Groundedness:
LLM 是否仅基于检索到的信息做出回答?“回答中的事实是否都有依据?”
Hello 的主要目标:
保证答案不出现胡编乱造或脱离上下文的信息。
Hello 示例问法:
“请检查生成答案是否完全。”
-->
. LLM-as-a-Judge
Ace 高阶大模型如 GPT‑4o 或 Claude 用来评估其它模型输出,从而处理开放式生成、复杂推理和情绪语气等难题。
再看常用模式。
Single Grading:给出输入/上下文/输出,让 Judge 打分或返回 JSON;不过,Pairwise Comparison :给出 A/B 两个结果。让 Judge 判定 Win/Loss/Tie。
**Eval** 是让 “看运气”变成 “看数据”的关键。
二、“痛点”全景图
场景
痛点
常见表现
Prompt 调优
难以量化效果
“感觉这版 Prompt 更好,但没办法确定是哪个修改带来的提高。”
功能迭代
回归隐患高
“修复 A 场景后 B 场景意外崩溃。”
上线决策
人工盲测成本高
“只能依赖少量人工审核,覆盖面有限。”
成本管理
难以平衡效果与 Token 成本
“新模型更强,但 API 调用费用飙升。老实说,”
三、四大评估维度拆解
基础文本匹配
ROUGE。BLEU,Exact Match,Levenshtein Distance 等指针适用于固定格式输出。怎么说呢,虽然计算快,却易被同义词误导。<\/li>
对信息提取任务而言,它们是最直观且无偏的数据来源。老实说,<\/ul>
语义相似度
python
def cosine_similarity:
dot_product = np.dot
norm_a = np.linalg.norm
norm_b = np.linalg.norm
return dot_product /
RAG Triad
Context Relevance
Groundedness/Faithfulness
Answer Relevance
检索出的文档是否真正支持答案?<\/i>
<\/td> 答案是否全部来源于检索结果?<\/i>
<\/td> 答案能否直接解决使用者查询?<\/i>
<\/td>
LLM-as-a-Judge
python
EVAL_PROMPT="""
You are a rigorous AI system evaluator. Evaluate if generated answer is fully faithful to reference context without hallucinations.
Context:{context}
Answer这方面,{response}
Think step-by-step:
1. Extract all factual assertions from answer.
2. Verify each against reference context.
Return JSON:
{{"reasoning":"...","passed":true/false}}
"""
def evaluate:
resp=openai.ChatCompletion.create(
model='gpt-4o',messages=,response_format={"type":"json_object"},temperature=0。)
return json.loads
四、“如何落地” – 一个完整流程示例
从步骤一来看,准备黄金测试集
jsonc
步骤二的观点是,实现 Evaluator 脚本
*采用 Chain-of-Thought 与结构化 JSON 输出*
python # see above snippet from section 《LLM-as-a-Judge》
再看步骤三,CI/CD 集成
yaml # GitHub Actions example.yml
yml_version : 'on'
jobs :
run-eval :
runs-on ubuntu-latest
steps :
- uses : actions/checkout@v3
name : Run Mini-Eval on PR submit
run : python eval_runner.py --dataset golden.json --mode mini
name : Block merge if pass rate below threshold
run : |
PASS=$
if ));n exit 1,fi
name : Nightly Full-Eval Build Schedule via cron job
五、“避坑教程”
裁判偏见警惕: \
• Position Bias – A/B 排序影响评分,可双向跑验证。\
• Verbosity Bias – 长篇回答倾向高分,应在 prompt 明确“简洁为主”。\
不要把普通模型当裁判:\
• Judge 必须 ≥ 被评估模型,否则自身会失效。\
控制评估成本与延迟:\
• Mini‑Eval 每次 PR;其实,Full‑Eval nightly 夜间批量跑。\
Bad Case 回流机制:\
• 上线后把使用者反馈或抽查得到的问题及时补入黄金集,实现持续学习循环。
六、“工具链推荐”
Ragas / TruLens – 专注 RAG 程序评估框架;内置多维度指标算法,
Promptfoo – CLI 简洁。可嵌入 CI/CD,用 YAML 定义测试集。不过,
LangSmith / Phoenix / Braintrust – 集 Trace+Eval+Dataset 管理闭环的大型团队网站。说起来,<\/ul>
"""
''
'LLM 开发前半场聚焦 Prompt 与架构设计。下半场则聚焦评估程序精细与快速迭代速率。'
'搭建可靠 Eval 能让团队从“凭感受走”,迈向“大数据决策”。现在就开始为你的项目整理第一个几条 Baseline Dataset,让数据成为你们最大的安全阀!'