online branch: main

2026-10-02

RSS llms.txt GitHub

Agent 改进怎么验证:数据集、基线与对照实验

$
Agent 改进怎么验证:数据集、基线与对照实验

旧版和新版各跑了一次,新版报告读起来更完整,格式也更整齐。这足够说明值得继续研究,却还不能说明改动已经有效。

先核对两件小事:它们回答的是同一组问题吗?除此之外,有没有顺手换模型、增加文档、调整工具权限?如果输入不同或者对照也发生了变化,“新版更好”里面可能混着多种原因。即使条件完全相同,生成本身的波动,也会让一次结果比另一次看起来更好。

上一篇的错误分析把问题定位到具体环节。到了这里,需要把那些发现变成可反复运行的样例,再安排一场比较。数据集负责保留输入和判据,实验负责说明比较条件。最后得到的应是一组有范围、有代价、有不确定性的结果,而非孤立的分数。

两份输出先放在同一个问题下面

Langfuse Academy 的实验课程建议,从 20–30 个真实例子开始,把同一输入下的两个版本 trace 并排读。这个起点的目的,是理解产品里的“更好”具体长什么样。实验课程。

假设一个投放诊断 Agent 修改了提示词,要求先检查数据完整性。选来的输入中,有字段缺失、时间窗不足、跨账户口径不同,也有数据完备的常规问题。新版是否识别出了缺失信息?是否停止给出没有依据的归因?在完整输入上,是否又变得过度谨慎,要求用户反复补数据?这是示例场景,并非真实测试结果。

逐条比较能够发现总分不容易表达的交换。新版可能少犯了无依据归因,却增加转人工次数;它可能在高风险账户上更稳,在日常账户上变慢。将这些变化先写下来,再决定需要哪些评估项,比先找一套通用评分模板更容易形成有效标准。

比较时保留输入、执行过程和输出。只看成文报告,无法知道新版是否用了更多工具、调用了更贵的模型,或者在重试中才成功。同样一句正确建议,可能来自更好的推理,也可能只是检索拿到了之前没有的资料。

这一步可以人工做,也可以由窄的代码检查或 judge 辅助。但“并排阅读”不等于统计验证。二十几条真实例子足以提出假设、发现明显退化,不足以自动证明微小总体提升。先确定要学什么,再决定后续要测多精细。

同一组输入下的双版本比较

把这场比较写清楚

Academy 把实验拆成四个部分:基线、数据集、改变的变量、待比较的输出。工程上还应记录评价口径和决策用途。后一部分会在下一篇展开,这里先保证比较有明确对象。

项目 本次需要写下的内容 不写会混进什么
对照 哪一个可指认的系统版本 对“以前表现”的模糊记忆
输入 哪份数据集、哪个版本 题目难度与人群变化
改动 模型、提示词、上下文、工具或架构 多项变化的共同作用
输出 逐条结果、过程、成本与延迟 只记住最好的一次
评价 评估器版本、人工准则、样本范围 评分标准的漂移

已经上线的系统,当前生产版通常是合适对照。尚未上线时,可以是当前实现、上一稳定候选、人工流程,或者明确的简单方案。开发期同样可以开展实验,不需要等待已有生产版。真正需要的是一个可复核、适合本次问题的对照。

实验窗口内,基线应固定。否则新版上涨了,是候选改善还是旧版同时退化?数据集也要固定为同一版本。如果决定补三条失败样例,可以建立新数据集版本,让两个条件都重跑,不能只给新版补题,再接着比较旧分数。

这里的固定有时间范围。数据集不应永久不变:产品政策、工具能力、场景都会演进。保持一套稳定回归核心,另外增补新场景,再把版本与可比部分写清,通常比“一直用同一份旧题”更合理。更换生产版后,下一轮基线也可以更新,只是不要把不同基线上的分数差直接拼成一条性能增长曲线。

只改一个变量,有用但不是铁律

修改一类变量,通常更容易解释结果。模型、提示词、检索内容、工具权限、Agent 架构,都可能成为实验对象。采样参数、上下文预算等配置也应记录,它们虽不是 Academy 单列的变量名称,却会改变行为。

提示词实验前,先区分规格问题与执行问题。若要求没写清,补清要求可能就解决了;若要求已明确而模型仍不稳定执行,就需要比较与持续评估。这个区分决定投入,不意味着规格修改完全不必验证。修了一个要求,也可能影响其他行为。

一次同时改提示词、模型和工具,仍可得到“组合 B 比组合 A 如何”的有效比较;无法仅凭它说提示词贡献了全部收益。需要拆分归因时,可以后续做消融,或者专门安排能估计交互作用的设计。

强交互时,硬拆也会产生无意义的组合。例如新模型需要不同提示词结构,新工具接口必须与新架构配合。Academy 明确允许同时改变一组变量。此时在报告里写“本次比较整体配置,未分离组内贡献”,比给某项改动凭叙事分配功劳更准确。

数据集先回答“为什么收这一行”

一条生产记录值得阅读,不表示它已经是好测试题。用户问得不完整、工具状态已经过期、正确做法尚有争议,都可能让重跑没有意义。

数据集是可重复运行的一组样例,代表选定的产品范围。先确定它支持哪个问题:检查一次路由修改是否可以上线,防止索引陈旧导致引用过时资料,还是研究一个新模型的工具选择能力?目的不同,输入范围、条目结构、评估方式也不同。

把所有题塞进同一个“黄金集”,总分很快就失去解释力。稳定回归集、对抗集、单步诊断集都可能有价值,最好保留各自角色。它们能共同参与发布判断,不必共用一个平均分。

先选范围,再选分布

步骤级数据集用于检索、摘要、路由等局部能力,运行更快,容易定位。端到端数据集用于完整任务,能发现步骤相互作用导致的问题。局部测试通过,不能推出整个任务通过;端到端失败,也需要局部证据帮助解释。

输入分布不是“手上有什么就收什么”,而是一份覆盖安排。哪些任务类型出现,常规、模糊、高难度、高风险各有哪些例子,每行扮演典型场景、已知回归、实际失败或合成补缺中的哪种角色。把这些写成 metadata,后续才能按切片读结果。

回归数据集可以刻意多收严重失败和边缘输入。Academy 明确表示,它不必精确匹配生产频率,前提是分布设计可见。这样做适合验证覆盖,却不能把未经加权的总分称作线上总体质量。数据集设计课程。

第一版也别全是刁钻题。没有常规任务,就很难知道本次修复是否影响了主要能力;长期极低分,又会使团队习惯忽略结果。边缘题需要单独切片,常见场景同样需要保留。

渠道、语言、客户分层、区域都可能有用,但无需第一天就把所有维度做均衡约束。先选会改变行为或影响结果解释的维度。元数据可以保留丰富信息,覆盖计划却应有优先级,否则集子在跑起来之前就被设计成本拖住。

来源按空白补,不必强求每种都有

生产 trace 展现真实措辞、上下文和已发生失败;FAQ、历史工单、政策资料、专家手写则提供已有资产和预期场景。AI 合成适合填补已经明确的覆盖空白。

生产与假设两类来源可以互补,但不必每套数据集都同时具备。选择来源应服从目标:没有流量时从已有资产和人工场景开始;上线后加入真实失败;真实数据缺少某类危险输入时,再针对这一缺口设计样例。

合成前能说清“我们缺的是哪类场景”,合成后再人工审阅。未经审核的大规模合成题,可能反复确认生成器自己的假设,数量多不会自动提高可信度。人工审阅过的小集更适合起步,但人工标签也会出错,应允许复核与修改。

课程给最小完整版本的建议是 15–30 行,覆盖常见场景、少量高风险输入和一两个已知失败。项目原有的 20–50 条起步也是相近量级。规模用于降低开工成本,不代表数据集已经充分;扩展应由覆盖缺口和测量目的推动,不是为了凑到一千条。

给条目一个可以执行的契约

Langfuse 使用 input、expectedOutput、metadata 三种字段。它们是灵活的容器,团队仍要约定具体形状。若同一数据集中每行的结构随意变化,实验运行器和评估器都会变得难维护。

input 包含被测系统边界真正需要的输入。若被测的是路由,它可能是一段请求与渠道信息;若被测的是“给定检索上下文后的回答”,就需要问题与检索内容;若被测的是完整检索链路,提前塞进正确文档会改变测试对象。边界先定,字段才能定。

expectedOutput 放参考数据,例如正确标签、所需事实、允许动作和禁止承诺。不要把阅读笔记、来源解释、作者感想一并塞进来。那些属于 metadata。参考答案也不必约束唯一措辞,行为正确、表达不同的回答应有机会通过。

reference-free 评估可以省略 expectedOutput,或设为空,用共同 rubric 判断合法 JSON、是否有上下文支撑、是否越权等。reference-based 评估则需要准备目标信息,维护成本更高,但回归失败通常更容易解释。

如果还说不清每行怎么评,就先安排人工阅读,把标准逐步写出来。不要为了集子显得“完整”强行编一个参考答案。存在一个字段,不等于存在可信判据。

元数据可保留 source、scenario_type、difficulty、dataset_role、failure_mode、review_status,以及材料版本或时间范围。用统一取值便于筛选,不必为了整齐丢掉证据链接。每行都应能说明为什么纳入、谁审阅、当前适用于哪段产品行为。

生产记录入库前要处理的事

先检查可用范围与敏感信息。保留任务所需上下文,处理个人或客户数据,并确认评测用途与留存范围。具体要求取决于数据来源和既有约定。

脱敏与转换可能改变难度。把真实公司名替成 A 公司,把长对话截成一句问题,可能删除造成失败的上下文。记录转换方式,并检查关键行为是否仍在。脱敏后能保护数据,也要确保新样例仍测同一个问题。

随后审阅期望行为。用户未投诉不表示答案正确,人工已经修过的输出不表示模型原本会做到。课程要求把 trace 当作种子,而非 ground truth,正是为了避免将生产偶然成功写成标准。

再检查可运行性:必要对话历史、检索上下文、工具状态、时间窗是否齐全?只留“用户觉得退款慢”的摘要,无法重放真实任务。反过来,也不应把所有系统字段都照搬进来;无关信息会增加泄漏与维护成本。

最后做去重、版本化与范围标注。重复行会放大某个切片的权重;输入相似但测试不同能力的变体可以保留,理由应明确。更新标签时保留变更记录,不能让同一编号在前后两次运行中代表不同标准。

运行后,先查测量是不是在正常工作

第一次实验的用途包括检查契约本身。某些行跑不起来,可能是 input 不符合真实应用;某些失败不合理,可能是 expectedOutput 过度指定措辞;模型输出没问题却被 judge 判错,可能是 rubric 缺少限定。

不要立即把每个红灯归入系统质量下降。先区分应用失败、数据集失效、评估器错误和执行异常。执行异常也应单独报告,不能静默删去后只计算留下来的成功率。

数据集演进通常有三种方式。加入新的生产场景扩大覆盖;严重失败经过审阅后变成回归样例;不同用途开始混合时拆成专用数据集。已有条目含糊就编辑,产品行为已经改变就更新或归档。

坏 trace 扩展的优势是:每条对应已经付出代价的问题,通常更容易说明为何值得维护。它仍可能堆积噪声,也可能只是个偶发、不再适用的场景,因此需要审阅与取舍。

功能承诺应有对应样例,这是从 Academy 的 features-as-tests 提法作出的工程引申。它不意味着每一条营销措辞都机械对应一个用例,而是重要能力不应只存在于功能说明里。新增工具或渠道时,需要检查它是否进入覆盖范围。

四种让分数变漂亮的坏办法

只收容易题,表现自然好看;把脏输入改成标准书面语,鲁棒性会被高估;旧政策条目不归档,失败会变成大家忽略的噪声;反复拿同一批题调提示词,模型选择与规则可能对题目过拟合。

第四种尤其隐蔽。没有直接训练模型,也可能泄漏测试信息:看一条失败改一条特例,用同一批输出反复选模型、选参数,再用同一批题宣称提升。分数反映的不再是未知场景表现。

保留一批未参与调优的样本,是一种独立验证方式。样本规模小、结果不稳定时,应说明限制,而不是因为“留出集”三个字就自动通过。新鲜的生产随机样本也可以帮助检查长期漂移。

分数差里有多少是不确定的

同一批题、两个固定版本,解决了很多可比问题,仍没有消除随机波动。模型生成、工具响应、缓存、时间敏感内容、judge 判定,都可能变化。记录完整配置,必要时重复运行,并考虑运行顺序是否带来差异。

统计判断应从关心的最小变化开始。若目标是发现一个足以改变业务动作的退化,就按这个幅度安排样本与比较;若只能读取两位数样例,就把结论定位为有限范围的方向性证据,不要用小数点后四位制造精确感。

没有测出显著差异,不表示两个版本完全一样。样本量不足、噪声太大、提升仅在某个切片出现,都可能导致总体看不出差异。反过来,样本很大时,极小差异也可能统计显著,但不值得承担迁移成本。

显著性、实际幅度和业务意义需要一起看。严格地说,p 值描述特定零假设与模型成立时,观察到当前或更极端结果的概率,不能直接解释成“改动有效的概率”。本篇不提供功效计算公式,原始材料也没有给出统一样本量算法;这里保留的是解释纪律。

多重比较还会放大误判机会。跑十个候选、看二十项指标、拆六种切片,就会产生许多发现“好结果”的机会。比较越多,未经控制的偶然发现风险越高。

实验前指定主要指标与关注切片,探索发现用于生成假设,再用新数据验证。没有预先指定不意味着结果一概不能谈显著性,但应明确探索性质,并处理选择与多重比较带来的偏差。

报告还要有成本、延迟、风险。新方案正确率更高,却把一次任务的工具调用翻倍,可能对高价值任务值得,对批量日报不值得。质量不是脱离运行条件的一项数字;这些交换最终需要产品负责人判断。

同一个代理指标,也可能越优化越偏

在 RLUF 研究中,Meta 团队用 Love 表情反应训练奖励模型。约 0.1% 的模型消息收到这一反应,它不是总体用户反馈率,更不是实际满意度。论文。

论文对十次历史模型迭代进行了回测,离线得分与线上 Love 反应率变化的 Pearson 相关系数为 0.95。这支持该代理在研究条件下用于预测 Love 变化,不等于离线得分可以预测所有安全、事实性或用户价值。作者也要求配合其他检查。

政策优化时,Helpfulness 与 Safety 权重分别为 0.7、0.3,Love 权重为 0、0.1、0.3,形成基线、Moderate、Aggressive 三个候选。线上 A/B 每臂至少一百万条 prompt。Moderate 的 Love 反应率相对基线提升 9.73%,Aggressive 提升 28%;表 2 分别报告 p<0.05 与 p≪0.01。

收益有伴随代价。附录表 7 的 Helpfulness 平均奖励分由 1.53 降至 1.46、1.28,按原表换算约下降 4.6%、16.3%。这不是人工“有用率”下降相同百分点;它是对应奖励分的相对变化。Safety Violation Rate 为 11.4%、12.8%、12.7%,也不能把这些数写成某个通用安全水平。

含 bye 的回复占比由基线 0.72% 上升至 Moderate 2.0%、Aggressive 2.8%,并出现不必要的结束话术。论文在 Aggressive 候选中观察到明确的重复结束话术;Moderate 虽然含 bye 的比例上升,未观察到同样的重复行为。分数上升时,仍要检查具体行为,而不能把代理收益当成完整质量。

这个实验的可借鉴之处,是把权重当变量,同时记录代理收益与独立约束。当代理指标成为主要优化目标时,需要检查其他目标是否退化:当代理不完整覆盖产品目标时,过度优化可能损伤其他重要行为,需要专门检测。

YouTube 的推荐论文也讨论了点击率容易偏向吸引点击的内容,因此排序目标采用期望观看时长,并对正样本按观看时长加权。去掉该加权,论文报告加权 loss 恶化 4.1%;这一数值不是线上业务收益。论文同时指出,离线指标与线上 A/B 结果并不总相关。原始研究。

观看时长也只是特定产品目标的一种代理。不能把论文写成“换指标后产品本质已经彻底对齐”的成功故事。产品目的与风险范围改变后,还要重新检查指标可能诱发的行为。

自然反馈不能独自承担最终验收

Marlin 等人的 UAI 2007 研究,用音乐服务中的随机评分与用户自选评分比较,说明后者可能系统性偏向特定喜好。受访者中 64.85% 表示喜好影响是否评分,对“最爱”(Love)与中性(Neutral)歌曲选择“非常经常”(Very Often)评分的比例分别为 93.91%、36.50%。它提示的是缺失机制问题,不是 AI 用户不满意比例。原论文。

研究报告逐歌曲对称 KL 散度中位数为 0.8750 bits,说明两种评分分布不同。训练约 218,000 条自选评分、在 50,000 条随机评分上测试时,显式建模缺失机制改善预测;一个使用 400 名留出用户估得机制参数的配置,MAE 为 0.7148,相比对照 1.2126,相对下降约 41.1%。

这里不能推出“四百名用户对任何产品都够用”,也不能只保留“四成提升”忽略设置。工程上可迁移的是独立测量通路:在全部任务中抽一批,而不只用主动反馈者的记录,再检查自然反馈样本与目标总体差了什么。

偏差方向也未必永远高估。投诉样本可能偏负,点赞样本可能偏正,某些反馈入口漏掉的恰好是难题。自然反馈既可帮助改进,也应保留它的选择机制。随机抽取任务后,人工是否完成评分又会产生下一层缺失;仅随机发出邀请,不自动保证最终评分无偏。

离线比较之后,还缺真实运行的证据

离线可以重复跑,覆盖罕见风险,并在用户接触前发现明显倒退;它仍是选定输入上的结果。真实用户怎样改问、何时放弃、是否因为新版产生错误信任,通常需要运行中的证据。

在线 A/B 通过分流观察用户行为,适合评价价值依赖真实反应的变化。它同样受到指标覆盖、样本量、实验窗口和人群构成限制。两者都提供部分证据,最后还要结合风险与定性阅读。

Park 等人的 Alexa 论文提供了影子评估思路:让两个系统面对同一生产请求,只由原系统承担实际服务,再重点人工检查输出差异。研究报告超过 99% 的请求具有相同的解释排序列表,因此差异集能集中评审资源。这里比较的是该研究的解释结果,不是所有生成文本完全相同。这个做法保留真实输入,但不包含用户实际体验候选后产生的行为反馈,不能替代所有 A/B。

Langfuse 客服教学案例采用离线、内部辅助、面向用户三个阶段。内部阶段由人把关,人工修改的类型与幅度成为信号;它仍要解释:轻微措辞修改与事实纠正意义不同,“改得少”也可能因为忙或未仔细审阅。

高风险、不可逆动作和紧急事故,不宜为了对照继续让部分用户承担不必要风险。可以先缩权限、人工审核、离线验证、影子运行,再安排适合风险范围的灰度。安全底线不能作为“看看违规会不会提高收益”的实验变量。这里是工程安排,具体风险要求由业务与既有规则确定。

2025 年 4 月的 GPT-4o 谄媚更新提醒了另一种盲区。OpenAI 复盘写道,离线评估通常看起来不错,小流量 A/B 也给出正向信号,但专家测试者感觉行为有些不对。团队最终上线,随后承认这一判断错误,并回滚。官方复盘。

复盘对成因保留限定:多项变化可能共同起作用,团队认为新增用户反馈奖励削弱了原有奖励对谄媚的抑制。不能把它写成“已证明点赞单独导致事件”。同样,文中没有证明当时没人有权叫停,能确认的是主观警示没有获得足够权重,后续承诺将行为风险与定性信号正式纳入阻断依据。

交出去的是比较条件和逐条结果

一次实验结束,至少留出数据集版本、对照版本、候选完整配置、评估器版本、运行时间、逐条输入输出和执行异常。模型供应商侧的标识或日期、工具与资料状态,也属于影响复现的条件。

随机系统不必承诺重跑每字一致,应明确可复现的是条件、分布表现与判断过程。必要时记录多次运行范围,保留失败案例。只留下一个 0.82,总分就无法检查,也无法回答后来出现的问题当时是否已发生。

关键回归集可以进入变更检查:小而快的集子覆盖高优先级行为,较大集子用于周期或大改动验证。范围由风险、费用与反馈时效决定,不必每次运行全部历史数据,也不应因昂贵就完全放弃语义评估。

实验报告的结尾可以很具体:“同一数据集版本下,候选修复了这些输入,新增这些退化;模型与提示词同时更换,未分离贡献;高风险场景样本有限;成本增加尚待产品取舍。”它未必带来一个漂亮结论,却让下一次动作有依据。

下一篇会把这组证据放进发布判断:改善是否跨过业务底线,护栏有没有越线,哪些不确定性可接受,谁来签字。数据集与实验做到这里即可,不要提前把“在这批题上更好”写成“已经可以上线”。