<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>回归测试 on lategege 的技术博客</title><link>https://lategege.com/tags/%E5%9B%9E%E5%BD%92%E6%B5%8B%E8%AF%95/</link><description>Recent content in 回归测试 on lategege 的技术博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sun, 22 Mar 2026 02:30:00 +0800</lastBuildDate><atom:link href="https://lategege.com/tags/%E5%9B%9E%E5%BD%92%E6%B5%8B%E8%AF%95/index.xml" rel="self" type="application/rss+xml"/><item><title>做一套可持续的 LLM 评测体系：离线数据集、在线回放与回归基线</title><link>https://lategege.com/p/llm-eval-system-offline-online-regression/</link><pubDate>Sun, 22 Mar 2026 02:30:00 +0800</pubDate><guid>https://lategege.com/p/llm-eval-system-offline-online-regression/</guid><description>&lt;p&gt;你会发现 LLM 项目最痛的不是“第一次做出来”，而是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;prompt 改了一句，效果变了&lt;/li&gt;
&lt;li&gt;模型换了个版本，线上投诉变多&lt;/li&gt;
&lt;li&gt;retriever 调了参数，某些场景突然不好用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果没有评测体系，你只能凭感觉回滚。&lt;/p&gt;
&lt;p&gt;这篇文章给一套我认为可持续的评测框架：&lt;strong&gt;离线数据集 + 线上回放 + 回归基线&lt;/strong&gt;。它适用于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;纯聊天问答&lt;/li&gt;
&lt;li&gt;RAG&lt;/li&gt;
&lt;li&gt;Agent（工具调用）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="1-明确评测对象你到底要评测什么"&gt;1. 明确评测对象：你到底要“评测什么”
&lt;/h2&gt;&lt;p&gt;建议先把任务分成三类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;检索质量&lt;/strong&gt;（RAG）&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Top-K recall、MRR、命中率&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;生成质量&lt;/strong&gt;（答案本身）&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;正确性、完整性、可读性、是否引用证据&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt;行为质量&lt;/strong&gt;（Agent）&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;工具调用是否正确&lt;/li&gt;
&lt;li&gt;是否遵守边界（不越权、不外泄）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;很多团队把这三类混在一起，导致指标失真。&lt;/p&gt;
&lt;h2 id="2-离线数据集小而真实比大而虚更重要"&gt;2. 离线数据集：小而真实，比大而虚更重要
&lt;/h2&gt;&lt;h3 id="21-数据集来源"&gt;2.1 数据集来源
&lt;/h3&gt;&lt;p&gt;优先用真实用户日志：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;搜索 query&lt;/li&gt;
&lt;li&gt;工单问题&lt;/li&gt;
&lt;li&gt;FAQ 热点&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果没有，就让业务同学/客服给 50~200 条典型问题。&lt;/p&gt;
&lt;h3 id="22-每条样本要有什么标注"&gt;2.2 每条样本要有什么“标注”
&lt;/h3&gt;&lt;p&gt;不要一上来追求完美答案标注。&lt;/p&gt;
&lt;p&gt;更轻量但高效的标注方式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RAG：标注“应该命中的文档/段落 id”（或至少 doc id）&lt;/li&gt;
&lt;li&gt;生成：标注“必须包含的要点列表”（bullet points）&lt;/li&gt;
&lt;li&gt;Agent：标注“允许的工具序列/禁止行为”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样成本低、可扩展。&lt;/p&gt;
&lt;h2 id="3-评测方法别只用一个-llm-打分"&gt;3. 评测方法：别只用一个 LLM 打分
&lt;/h2&gt;&lt;h3 id="31-检索指标是硬指标"&gt;3.1 检索指标是硬指标
&lt;/h3&gt;&lt;p&gt;RAG 的检索阶段建议用硬指标：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Top-5 recall：答案证据是否在前 5 个里&lt;/li&gt;
&lt;li&gt;MRR：正确证据排第几&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这能把“检索问题”和“生成问题”拆开。&lt;/p&gt;
&lt;h3 id="32-生成评测用-rubric--结构化检查"&gt;3.2 生成评测：用 rubric + 结构化检查
&lt;/h3&gt;&lt;p&gt;如果用 LLM-as-a-judge：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;必须有 rubric（评分标准）&lt;/li&gt;
&lt;li&gt;输出结构化（JSON）：
&lt;ul&gt;
&lt;li&gt;correctness: 0-5&lt;/li&gt;
&lt;li&gt;completeness: 0-5&lt;/li&gt;
&lt;li&gt;grounded: 0-5（是否有证据）&lt;/li&gt;
&lt;li&gt;notes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;同时加一些“硬规则检查”：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;是否包含引用链接&lt;/li&gt;
&lt;li&gt;是否输出了敏感字段&lt;/li&gt;
&lt;li&gt;是否出现禁止词（例如泄露系统提示）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;多信号比单一打分稳。&lt;/p&gt;
&lt;h2 id="4-线上回放把事故变成数据"&gt;4. 线上回放：把事故变成数据
&lt;/h2&gt;&lt;p&gt;上线后最有价值的样本来自失败案例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户追问很多次&lt;/li&gt;
&lt;li&gt;点踩/转人工&lt;/li&gt;
&lt;li&gt;明显答非所问&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;你应该把这些请求“可回放化”，至少包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;原始输入&lt;/li&gt;
&lt;li&gt;当时的系统提示版本&lt;/li&gt;
&lt;li&gt;检索结果（doc id、score）&lt;/li&gt;
&lt;li&gt;工具调用记录（参数、返回）&lt;/li&gt;
&lt;li&gt;最终输出&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样你能：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;把失败样本加入离线集&lt;/li&gt;
&lt;li&gt;做“回归基线”：以后改任何东西都不能再坏&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="5-回归基线评测要能挡住退化"&gt;5. 回归基线：评测要能挡住退化
&lt;/h2&gt;&lt;p&gt;实践里我会设三条线：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;质量线&lt;/strong&gt;：核心问题集的平均分不得下降&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全线&lt;/strong&gt;：越权/外泄相关用例必须 0 失败&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能线&lt;/strong&gt;：P95 TTFT/TPOT 不能超过阈值&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每次改动（prompt、模型、检索、rerank、工具）都跑一遍。&lt;/p&gt;
&lt;h2 id="6-最小可行实现mvp长什么样"&gt;6. 最小可行实现（MVP）长什么样
&lt;/h2&gt;&lt;p&gt;如果你今天就要做一个评测体系 MVP，我建议：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先收集 100 条真实问题&lt;/li&gt;
&lt;li&gt;标注：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;每条一个“参考要点”&lt;/li&gt;
&lt;li&gt;RAG 场景加 doc id&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start="3"&gt;
&lt;li&gt;写一个脚本：跑完整链路，输出 JSON 结果&lt;/li&gt;
&lt;li&gt;做一个简单 dashboard：&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;质量分布&lt;/li&gt;
&lt;li&gt;失败样本列表&lt;/li&gt;
&lt;li&gt;版本对比&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一周内就能跑起来，然后边用边补。&lt;/p&gt;
&lt;h2 id="结语"&gt;结语
&lt;/h2&gt;&lt;p&gt;评测体系的价值不是“给领导看分数”，而是让你：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;敢改&lt;/li&gt;
&lt;li&gt;改得动&lt;/li&gt;
&lt;li&gt;改完不怕上线&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你告诉我你现在的产品形态（纯聊天/RAG/Agent）和数据源，我可以把这套评测框架进一步具体化成：字段定义、样本格式、rubric 模板与回归阈值建议。&lt;/p&gt;</description></item></channel></rss>