5.3 两个提升案例复盘


5.3 两个提升案例复盘

本节摘要:官方给出两个微调提升的公开案例,本节逐个复盘。案例一:typed-decisions 基准微调后从 0.362 升到 0.766(官方口径)——先把跃迁拆成可解释的三层(底座近随机所以起点低、typed 基准与检查点特化方向一致、偏好数据直接注入任务知识),再讲从中能迁移与不能迁移的结论。案例二:browser-agent 决策头——把网页操作里「下一步点哪里」从大模型生成降级成一道 choice 问题:候选动作就是当前页面的可点击元素,微调后的 laya 在毫秒级延迟内给出选择(延迟为官方口径量级)。两个案例合起来指向同一个价值主张:小模型加领域微调,用「懂你的小快灵」换「什么都会的大而慢」。数字凡未标注官方口径处均为示意值。

学习目标

  • 复盘 typed-decisions 基准 0.362 到 0.766(官方口径)的三层归因。
  • 说出从这个案例能迁移与不能迁移的结论各是什么。
  • 把「Agent 下一步动作选择」翻译成 choice 问题的字段设计。
  • 论证「小模型加领域微调」的价值边界:赢在哪里、输在哪里。

一、案例一:typed-decisions 基准的跃迁

官方口径的数字:laya-typed-decisions 检查点在 typed-decisions 基准上微调前 0.362、微调后 0.766——翻了一倍还多。第一眼看到这个数字容易兴奋,第二眼要问三个问题:起点为什么这么低,提升为什么这么大,我的业务能不能复制这个幅度。

0.362 ──────────────▶ 0.766(官方口径)的三层归因 第一层:起点低是「官方声明过」的 ┌────────────────────────────────────────────┐ │ 底座 zero-shot 接近随机猜(官方 README 口径) │ 0.362 不是「模型差」, │ 多选项基准上随机水平本身就不高(示意判断) │ 是「未微调」的刻度读数 └────────────────────────────────────────────┘ 第二层:方向对——基准与检查点特化一致 ┌────────────────────────────────────────────┐ │ laya-typed-decisions 本就是 typed 三原语特化 │ 微调数据与底座特化方向 │ 微调数据正是 typed 决策形态(5.1 节格式) │ 同向叠加,不是逆水行舟 └────────────────────────────────────────────┘ 第三层:信号直接——偏好对直接约束输出排序 ┌────────────────────────────────────────────┐ │ 每条偏好样本都在教「这道题怎么排」 │ 封闭答案空间上没有 │ 小样本特性(5.1 节)让注入高效 │ 无效功 └────────────────────────────────────────────┘ ​

三层归因给出一个清醒的读法:0.362 到 0.766 里有一部分是「从近随机到及格」的确定性抬升,任何与官方做法等价的微调都该拿到这一段;剩余部分是基准与特化方向一致带来的红利,你的业务若与某个检查点的特化方向重合(分类、路由、是非判断),也能期待类似弹性;但把 0.766 直接当成你业务的预期上限,是把官方基准当成了许诺——你自己的数字只能来自你自己的留出集(5.1 节三查)。

能迁移与不能迁移的结论分开列:

能迁移 不能迁移
微调前先跑基线,记录 zero-shot 起点 0.362 这个绝对值(它是那个基准的刻度)
用与业务同构的偏好数据微调 0.766 这个绝对目标
微调后立刻在留出集复测 「翻倍」这个幅度预期
每次改动只动一个变量(数据量、轮数、题面) 跳过基线直接比较两次微调

右列的共同错误是拿别人的终点当自己的起跑线。官方数字的用途是证明「微调有效且幅度可观」,不是给你立 KPI。

二、案例二:browser-agent 决策头

第二个官方案例换了赛道:browser-agent 决策头(官方口径)。场景是这样的——一个操作网页的 Agent,每一步都要回答「下一步做什么」:点哪个按钮、填哪个输入框、滚动还是返回。传统做法把这个问题交给大模型生成:把整页快照塞进提示词,让它生成下一步动作,一次几百毫秒到秒级(量级示意),而且动作空间开放,还要做格式约束与解析。

laya 的改法是把开放的生成问题收窄成封闭的 choice 问题:

browser-agent 决策头的建模(示意) 当前页面状态 choice 题面 ┌───────────────────┐ ┌─────────────────────────────────┐ │ DOM 快照/可交互元素 │ │ context: 页面状态摘要 │ │ [登录] [搜索框] │ ─▶ │ question: 下一步应执行哪个动作? │ │ [购物车] [商品卡片] │ │ options: [点击登录, 在搜索框输入, │ │ ... │ │ 点击购物车, 点击商品卡片, 滚动] │ └───────────────────┘ └─────────────────────────────────┘ │ 微调后的 laya(5.1 节格式) ▼ 毫秒级返回动作选择(官方延迟口径 32.8ms 量级) 低置信走「交回大模型规划」(第 7 章门控) ​

三个设计决定值得抄走。其一,候选动作即选项表:每一步从页面现场提取可执行动作(可点击、可输入、可滚动的元素序列化成候选),选项表是动态生成的——choice 的「封闭空间」不等于「固定选项」,空间可以在每次调用前重建。其二,偏好数据从轨迹来:一条成功轨迹里「实际执行并通向目标的动作」是 preferred,「同状态下其他候选」是 rejected——这是 5.1 节「业务日志隐式偏好」的典型形态,标注成本接近零。其三,分层的兜底设计:laya 决策头负责高频的确定性动作,低置信(第 7.3 节)或关键节点交回大模型做规划——小模型前置、大模型兜底,正是第 9.2 节混合架构在 Agent 内部的预演。

把案例二走一遍完整流程(字段与数值均为示意)。输入:登录页快照,可交互元素序列化成候选动作表——[输入用户名, 输入密码, 点击登录, 点击忘记密码, 切换语言],任务目标是完成登录,题面问「下一步应执行哪个动作」。输出:首选「输入用户名」,answer_confidence 0.87,高于门控阈值直接执行;页面翻到密码页后候选表随页面重建,「输入用户名」不再出现在选项里——封闭空间是动态重建的,不存在「重复执行已完成动作」这类开放生成特有的幻觉。再看一次误判:某轮首选是「点击忘记密码」(0.71)——复盘发现登录按钮被弹窗遮挡、序列化时被漏掉,模型只能在剩余候选里挑语义上最接近目标的动作。这个误判的教训不在模型在工程:候选表的提取质量才是这条路线的真上限,提取漏了,微调再好也补不回来。

# traj_pairs.py —— 从一条成功轨迹构造偏好对(示意) def pairs_from_trajectory(states, actions_taken): """states: 每一步的候选动作表(列表的列表) actions_taken: 每一步实际执行并通向目标的动作下标""" pairs = [] for step, (candidates, chosen) in enumerate(zip(states, actions_taken)): preferred = candidates[chosen] for idx, rejected in enumerate(candidates): if idx != chosen: # 未选中的候选都当 rejected pairs.append({ "step": step, "options": list(candidates), "preferred": preferred, "rejected": rejected, }) return pairs # states = [["输入用户名", "输入密码", "点击登录"], # ["输入密码", "点击登录", "返回"]] # actions_taken = [0, 0] # print(len(pairs_from_trajectory(states, actions_taken))) # 4 —— 两步各三条候选,每步产出两条偏好对,标注成本为零(示意) ​

这段骨架把设计决定之二落成代码。zip 把每一步的候选表与实际动作对齐;内层循环让首选与每个未选候选各配一对——三候选的一步产出两条偏好对,轨迹越长产出越多。两条纪律要跟上:只采「通向目标」的成功轨迹,失败轨迹里的高分动作恰恰是有害样本;同一页面的元素序列化要稳定(固定模板、描述带角色标签,示意做法),否则偏好对会顺带把选项顺序的噪声学进去——顺序敏感是这类数据的通病,模板固定是第一道防线。

这个案例的教学价值在于它示范了「降级建模」的思想:很多看起来需要生成能力的问题,拆开看核心只是「在已知候选里挑一个」。挑出来交给 laya,毫秒级、可微调、成本近乎零;真正需要开放规划的留给 System 2。降级的前提是候选空间可枚举且枚举便宜——页面动作满足,你的业务里哪些环节满足,是读完本节最值得带走的问题。

三、价值主张:小模型加领域微调的赢面

两个案例合起来,laya 式路线的价值主张可以写成一张对照(延迟为官方口径,其余为定性判断):

维度 小模型加领域微调(laya 路线) 通用大模型直接上
延迟 官方口径 32.8 毫秒量级 数百毫秒到秒级(量级示意)
单次成本 CPU 推理,近乎免费 按量计费
领域内精度 微调后可达成业务可用(以留出集为准) 通用能力强,领域细节靠提示词追
泛化与兜底 弱,域外近似盲(第 10 章) 强,天然兜底
迭代速度 一轮微调几小时量级(5.2 节免费算力,示意) 改提示词即时生效

赢面清晰:高频、封闭、延迟敏感、有偏好数据可攒的环节。输面同样清晰:域外泛化、开放生成、候选不可枚举的任务。这张表在第 9.1 节会扩展成 Jev、Kev、laya 的三向六轴对照,这里先立起「小模型不是缩水版大模型,而是另一种工程选择」的判断框架。

四、复盘的复盘:从案例到自己的数据

把两个案例的方法论压成可执行清单,作为本章的收束。跑基线:微调前先用第 3.2 节的 predict_batch 在留出集上记录 zero-shot 起点,没有起点的提升是讲故事。选对齐:业务与哪个检查点的特化方向重合(第 2.1 节),重合度越高微调弹性越大。攒偏好:日志隐式、人工二元、强模型铺底三来源混合(5.1 节),量级从几百条起步试。守纪律:题面冻结、留出集隔离、轮数保守、每次只动一个变量。验三查:留出集、边界样本、分布形状(5.1 节)。交校准:微调完的模型不带可信概率出厂,第 7 章接手。

复盘六步的流水线视角(每步产出喂给下一步,顺序即纪律) 跑基线 ──▶ 选对齐 ──▶ 攒偏好 ──▶ 守纪律 ──▶ 验三查 ──▶ 交校准 (起点数字) (方向红利) (三来源混合) (单一变量) (留出集三查) (温度重拟合) │ │ │ 缺起点:提升是讲故事 │ 缺校准:第 7 章门控失准 └────────────── 断链处就是翻车点 ──────────────┘ ​

五、常见问题与排查

问题 先查什么 处置
我也微调了,为什么没翻倍 zero-shot 起点是不是本来就高——起点 0.6 的任务物理上没有翻倍空间(示意判断) 换口径:看错误率降幅与留出集绝对值,不看倍数
幅度达了,线上没兑现 线上分布与微调数据是否同构:题面措辞、选项定义、文本长度 抽线上失败样本回流成偏好数据,再走一轮第 5 章流水线
候选动作表怎么序列化才稳 同一元素跨页面的描述是否一致、候选数是否漂移过大 固定序列化模板,元素描述带角色标签(示意做法)
低置信交回大模型的线画在哪 把「大模型规划一次」的成本当人工格,套第 7.3 节代价矩阵 阈值随矩阵联动重算,不单独拍数字
轨迹偏好对会不会把坏动作学进去 轨迹是否真通向目标;失败轨迹是否被误当成功 只采成功轨迹,入库前抽检一小批(示意纪律)

本节要点回顾

  • 0.362 到 0.766(官方口径)三层归因:起点低是官方声明过的、方向与特化一致、偏好信号直接;幅度可参考,绝对值不可搬运。
  • browser-agent 案例:候选动作即选项表(动态选项)、偏好从轨迹来、低置信交回大模型——降级建模的完整示范。
  • 降级建模的前提:候选空间可枚举且枚举便宜;「生成问题」拆开常是「选择问题」。
  • 价值主张赢面:高频、封闭、延迟敏感、有偏好数据;输面:域外泛化与开放产出。
  • 复盘落地六条:跑基线、选对齐、攒偏好、守纪律、验三查、交校准。
  • 轨迹偏好对零标注但有纪律:只采成功轨迹、序列化模板稳定;候选表提取质量是决策头路线的真上限。

至此微调闭环完整:数据、训练、算力、验收与预期管理。但真实业务不会只送来三句话的 context——下一章处理两个「超规格」输入:文本太长用 predict_long 窗口扫描,选项太多用预算与两段式。


作者与出处
原作者: 灏天文库
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U