跳到主要内容

134 篇博文 含有标签「evals」

查看所有标签

当你的评测结果不一致时:在数据互相矛盾时的一套信号优先级体系

· 阅读需 14 分钟
Tian Pan
Software Engineer

这是周二的早晨,也就是 Prompt 更改上线到一半流量后的那一周。你打开四个仪表板。LLM 评审员(LLM judge)评分的留存黄金集显示 +8%。每周对生产流量进行抽样的真人评估小组显示无变化。下游转化率的 A/B 测试显示 -2%。点赞率(thumbs-up rate)持平。四个信号,四个结论,而十五分钟后就有一个站会,会上有人会问你到底是发布这个 Prompt 还是回滚。

你很容易倾向于选择那个能证实你原本意图的数字——团队也会这样做,因为会议上没有人拥有一套关于哪个信号获胜的书面规则。这种不一致并非测量错误。这是一个在没有层级体系的情况下强行把四个评估器凑在一起的系统的必然产物。缺乏这种体系的代价是,每个发布周都会变成一场关于该信任谁的数据的辩论。

倒置智能体:当用户是规划者,模型是步骤执行者时

· 阅读需 13 分钟
Tian Pan
Software Engineer

当今大多数智能体 (agent) 产品都达成了一个简单的契约:模型决定做什么,用户点击“批准”。对于低风险的消费者聊天场景 —— 预订餐厅、摘要收件箱、起草非正式回复 —— 这确实是正确的形式。但对于法律起草、财务咨询、医疗分诊和事件响应来说,这却是灾难性的错误。在这些场景中,用户承担着模型永远无法承担的问责,而且错误 计划 的成本远高于任何单个 步骤 的成本。

反向智能体翻转了这种极性。用户将计划构思为一系列命名的、可重新排序的步骤。模型按需执行每个步骤 —— 拥有完整的上下文、工具访问权限和推理能力 —— 但绝不决定下一步该做什么。模型可以提供建议,但建议仅供参考,不具有自主性。这并不是一个更糟糕的自主智能体;它是一个完全不同的产品,虽然其成本和延迟表现绝对更差,但信任度绝对更高,专门针对那些否则会完全拒绝采用自主版本的用户。

团队一直在犯的错误是将“自主性”视为默认的努力方向。它其实是一个你在每个界面上选择的 UX 维度。如果搞错了极性,你交付的功能就会被那些承担最高风险的用户悄悄拒绝使用。

评估困局:当你的 LLM 评测器比被评分的模型更聪明时

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个回归告警在周一早晨响了。你的留出评估集的忠实度(Faithfulness)在周末从 0.86 掉到了 0.78。没人发布新模型,没人动过提示词,也没人改过检索索引。值班工程师花了三个小时排查才发现,唯一改变的是裁判模型——自动评估器静默滚动到了一个更新的快照,它捕捉到了旧版本放过的细微委婉语。同样的答案,同样的模型,更低的分数。真实的数字,虚假的回归。

这就是评估困境:随着你的 LLM-as-judge(以 LLM 作为裁判)变得更敏锐,你在固定系统上的得分会下滑,而那个本应检测回归的仪表盘开始制造回归。没注意到这一点的团队会花上几个季度去追逐完全存在于“尺子”里的“质量偏移”。

30 天 Prompt 见习计划:当“阅读代码”失效时,如何入职工程师

· 阅读需 14 分钟
Tian Pan
Software Engineer

一位资深工程师在周一加入你的团队。到了周五,他们已经交付了一个涉及 11 个文件的 TypeScript 重构,并在通过评审时仅有两个小细节(nits)需要修改。两周后,这位工程师打开了路由智能体(routing agent)的系统提示词——240 行指令、三个编号的示例块、四个“绝不允许”子句,以及底部一段读起来像道歉的段落——然后盯着它看了一个小时。他们无法告诉你如果删除第 87–94 行会发生什么。六个月前写下这些内容的工程师也无法告诉你。

这是没人会写在入职文档里的鸿沟。一个重度依赖提示词的代码库看起来像是个代码库:它存在于同一个仓库中,运行相同的 CI,并在相同的 PR 中接受评审。但它的语义却存在于别处:存在于一个团队中没人构建的模型观察到的行为中,针对的是一个没人能完全枚举的输入分布,其失败模式表现为添加一句话的 PR,而不是错误报告。传统的代码阅读工具——类型、签名、测试、命名——几乎不起作用。一个试图“阅读代码”的新员工无法了解为什么每一行都在那里,而一个只交给他们 Notion 文档和 Slack 频道的团队,实际上是在默认将入职培训“外包”给提示词的最初作者。

Prompt Bisect:通过二分查找定位破坏 Eval 的修改

· 阅读需 12 分钟
Tian Pan
Software Engineer

评测榜单的分数一夜之间掉了两分。在绿色运行(通过)和红色运行(失败)之间,唯一发布的内容就是上周的提示词 PR —— 那个包含了 17 处修改的 PR。两个章节调整了顺序。三个新的 few-shots。一个更严厉的拒绝条款。一个更换过的角色描述。还有一些人称之为“润色”的单词级改动。当复盘开始时,有人说了句显而易见的话:“肯定就是其中之一。”然后他们花接下来的两天时间去搞清楚到底是哪一个。

这两天时间是寻找单一回归最昂贵的方式。而另一种只需几分钟的方法则完全借用了一个有着 40 年历史的内核调试技巧:对补丁进行二分查找 (bisect)。将提示词视为一系列可回滚的变动块 (hunks),将评测套件作为断言条件,让二分查找隔离出导致分数波动的代码行。其中的数学原理与 git bisect 在提交记录上运行的原理一致,而且它强制要求的提示词管理规范,其带来的收益甚至超过了二分查找本身。

RLAIF 末日循环:当廉价的反馈信号悄然毒害你的微调模型

· 阅读需 12 分钟
Tian Pan
Software Engineer

我在上个季度交流过的一个团队在 8 周内发布了 4 轮偏好微调(preference fine-tuning)。每一轮,他们相对于上一个 Checkpoint 的离线胜率都在上升。每一轮,他们的 LLM-as-judge 都确认模型变得更好了。每一轮,他们的留存曲线(retention curve)都下垂得更厉害了一点。到第 4 轮时,裁判(judge)表示模型比 v0 基准提升了 71%;而用户的流失速度比开始前快了 9%。这就是一段话总结的 RLAIF 毁灭循环(doom loop),而残酷的是:该团队的流水线在技术上没有任何错误。

来自 AI 反馈的强化学习(RLAIF)—— 即使用更强的模型来生成你以前付钱请人标记的偏好标签 —— 是现代后训练(post-training)中最具经济合理性的决策之一。AI 生成的标签每个不到 1 美分;而人工标签则需要 1 美元甚至更多,对于特定领域的工作,价格通常是这个数字的 10 倍。在偏好数据集规模(数十万对数据)下,这就是六位数预算与五位数预算的区别。已发布的 RLAIF 基准测试显示,在摘要和对话任务上,其胜率在统计学上与 RLHF 无法区分。数学计算的结果是:切换到 RLAIF。

在单位成本方面,数学计算是对的;但在你购买的内容本质上,它错了。你买的不是偏好数据。你买的是裁判的偏好,并将其投影到你的数据上 —— 经过多轮训练,这种区别就体现为“与用户对齐”和“与另一个模型的审美对齐”之间的鸿沟。

路由即产品:为什么你的低成本分类器比旗舰模型决定了更多行为

· 阅读需 12 分钟
Tian Pan
Software Engineer

我上个季度接触的一个团队上线了一个他们称之为“路由项目”的东西:在他们的旗舰模型前端放了一个微型 BERT 分类器,用来判断查询是否足够简单,以便分流给更便宜、更快速的备选方案。这个项目在三周内就回本了。成本仪表盘上绿光一片。旗舰模型的评估套件——包含三百个对抗性案例、每周的评分运行等等——依然在每个周五稳稳通过。

上线六周后,某个特定产品界面的留存率下降了四个百分点,没人能找到原因。旗舰模型表现正常。延迟也正常。结果发现,路由竟然将 71% 的查询发送到了廉价模型。这种情况从第二周就开始了。对于大多数用户来说,这个廉价模型才是真正的产品,而这个廉价模型根本没有任何评估套件。

这是我在 2026 年看到的采用 LLM 路由进行成本控制的团队中最常见的失败模式:评估规范被绑定在系统的昂贵长尾部分,而廉价的头部部分——即承载大部分请求量、定义了产品体验的部分——却处于盲跑状态。

采样参数继承:当 0.7 的温度从规划器泄露到验证器时

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个在 8% 的情况下会推翻自己答案的验证器(verifier)并不是一个表现不稳定的模型。这是一个由于框架默认采用继承机制而进入生产环境的采样配置 Bug。规划器(planner)需要 temperature=0.7 来头脑风暴子任务的分解。而验证器 —— 其全部工作就是针对答案是否符合评分标准给出低方差的“是”或“否” —— 却是通过同一个 harness 调用实例化的,并默默地沿用了相同的温度设置。没有人故意这么设置。甚至根本没有人去设置它。

这是你的技术栈中最昂贵却无人认领的参数。它在调用树中不断累积:验证器上方的总结器、下方的结构化输出提取器,以及包裹整个流程的重试循环,都像使用全局变量一样沿用着规划器的“保持创意”旋钮。这笔账会同时体现在三个地方:评估的不稳定性、Token 支出,以及资深工程师花半天时间对一个结果发现根本不是退化的“性能退化”进行二分法排查。

Session Stitching:为什么你的会话 ID 是个谎言

· 阅读需 12 分钟
Tian Pan
Software Engineer

一名用户在上午 9 点开始在她的电脑上与你的智能体谈判合同。她收到一条 Slack 消息,在午休时间切换到手机问了一个澄清问题,并在下午 4 点重新打开电脑标签页来修改草案。对她来说,这是一项任务 —— 处理一份合同的三个小时工作。对你的系统来说,这是两个设备上的三个会话,每个都有自己的 conversation-id,每个都有自己的记忆窗口,每个都呈现全新的问候并要求她重新粘贴已经讨论过两次的草案。

Bug 不在模型中。Bug 在于你的平台将“会话 (session)” —— 一个关于单一连接的传输层产物 —— 编码为上下文单位,而你的用户将“任务 (task)” —— 即合同 —— 编码为上下文单位。市面上的每个框架都悄悄地混淆了这两者,而它们之间的差距正是智能体 UX 损耗了一半的地方。

AI 工程师的三种品味:为什么 Prompt、Eval 和 Guardrail 往往无法共存于一个大脑中

· 阅读需 13 分钟
Tian Pan
Software Engineer

我今年雇佣的三位最优秀的 AI 工程师,如果让他们互相面试,可能都会被刷掉。那个能写出在模型升级后依然稳健的提示词(prompt)的人,这辈子没写过一个有用的评估(eval)用例。那个能设计出捕捉到关键故障的评估集的人,写的提示词其他工程师根本不想去维护或扩展。那个能设计出既能“故障闭合”(fail closed)又不阻塞正常路径的护栏(guardrail)的人,对另外两个人的看法我在这里不便多说。

职级体系将他们三人都称为“AI 工程师”。定级委员会在对比他们的晋升材料时,仿佛他们做的是同样的工作。其实不然。

你的工具目录遵循幂律分布,而你却在针对长尾进行优化

· 阅读需 13 分钟
Tian Pan
Software Engineer

调取任何生产环境智能体(agent)的一周工具调用追踪(tool-call traces),你会发现其规律如出一辙:三四个工具处理了 90% 的调用,其余数十个工具则瓜分了剩下的 10%。工具目录呈现幂律分布(power law),但框架却将其视为均匀列表。每个工具描述都会出现在每个系统提示词(system prompt)中,每个选择准则都对工具一视同仁,每个评估(eval)在对目录进行采样时,都仿佛 search-files 调用和 refund-issue 调用来自同一分布。事实并非如此。

这种“扁平化”处理的代价在爆发前往往是隐形的。团队增加第 18 个工具,规划器(planner)对最初三个工具的准确率下降了两个百分点,却没人能将这种退化归因于特定变更,因为所有指标都同时发生了偏移。而评估套件本身在目录中也是均匀分布的,它将这些下滑平均成一个看起来依然正常的数字。与此同时,本轮对话中模型不会调用的工具描述所消耗的 token,已经超过了用户实际提示词的 token。

拒绝还是上报:置信度门控 AI 中的双阈值问题

· 阅读需 14 分钟
Tian Pan
Software Engineer

大多数生产环境中的 AI 功能在发布时只带有一个置信度阈值。在阈值之上,模型给出回答;在阈值之下,用户会得到一句生硬的“我不确定”。这个单一的数值同时承担着两个完全不同的任务,这就是为什么即便你对已回答查询的准确率看起来不错,但信任度指标却已经连续两个季度下滑的原因。

正确的设计至少应该有两个切分点。一个“弃权”(abstain)阈值设在低位:低于该值时,模型拒绝回答,因为此时保持沉默比给出任何答案都更有价值。一个“升级”(escalate)阈值设在中间:在两个切分点之间,系统将案例交给人工审核员,而不是直接将其丢弃。将它们合并成一个刻度盘,你发布的产品在出错时和不确定时会让人感到同样无用——在用户只需打开另一个标签页就能找到免费替代品的市场中,这是最糟糕的处境。

这并不是什么新鲜想法。拒绝选项分类器(reject-option classifier)的文献自 20 世纪 70 年代以来就一直在主张拆分阈值,将“歧义”拒绝(输入介于已知类别之间)与“距离”拒绝(输入远离任何训练数据)区分开来。生产环境中的 AI 团队总是在以惨痛的方式重新学习这一教训,通常是在首次发布大约六个月后,当支持队列中挤满了询问“这玩意儿是坏了还是怎么了”的人时。