onPanda: Efficient Annotation of On-Policy Alignment Data for LLMs and Agents via Token-Level Correction
Lei Yang, Mengyin Liu, Jia Wang, Hangyu Guo, Liang Zhao, Zheng Ge, Kang An, Binxing Jiao, Qi Han, Daxin Jiang, Siqi Shen, Xiangyu Zhang
cs.CL, cs.HC, cs.LG
2026-09-22
阶跃星辰的 onPanda 用「点第一个错 token 再续写」来做对齐标注。21 条图文任务上中位时间比手改少 52%,产出 PPL 相对 rollout 只偏 +0.86%。
对齐数据和 agent 轨迹一直卡在三件事做不到齐:便宜、贴模型自己的采样分布、监督够细。人手写或通篇改模型回复,能做出合格 SFT,但贵,而且改完的文本已经离开 rollout 模型的分布。偏好排序更便宜,标签却只打到整段回复;候选还必须是模型自己采得出来的,模型根本抽不到正确答案时,排序给不出纠偏方向。
Agent 更麻烦。一条轨迹是多步工具交互,改一处就要真去跑工具、拿真实反馈,再接着生成。现有平台能观察、打分、中途插手。面向终端写代码的 Reptile 允许改模型输出再执行,但改的几乎全是人手打的字,也吃不了通用 toolcall 格式。社区缺的是一个能跨环境、实时改推理和工具调用、再把改过的调用真正跑起来的交互工具。
onPanda 的核心交互是 token 级纠正。标注员顺着模型回复往下读,找到第一个不合适的 token,从该位置 top-20 候选里点一个替代,或双击后手打正确文本。系统立刻截掉这个位置之后的内容,把纠正后的前缀当作 assistant prefix,让模型继续生成。然后重复「定位-纠正-续写」,直到回复过 SFT 质量线。
错误往往从某一个分叉点开始往后污染。修第一个错位、让模型自己接着写,后面同类幻觉经常跟着消失,不必像通篇手改那样到处找同一类错误。人只动少数位置,绝大多数 token 仍是 rollout 模型采出来的。点候选比手打更贴分布;手打是兜底,用来处理模型自己采样不到的方向。
推理 API 需要两件事:从 assistant 前缀续写(论文举的例子是 vLLM 的 continuefinalmessage),以及返回每个 token 的 top-k logprobs。界面按字形边界把 token 聚成可读的 chunk,记录仍精确到 token。一次标注会话做成 annotation tree:每次纠正分出一个新节点,中间版本自动留下。标了 isgood=Y 的节点导出 SFT;同一 prompt 下正负节点配成偏好对;纠正点还能抽出「负样本、被拒 token 及位置、选中 token」三元组,给 DPO 或过程奖励模型用。
Agent 侧用 response template,在结构化消息(reasoning / content / toolcalls)和模型原生 token 流之间双向转换。</think>、<|toolcallbegin|> 这类特殊 token 可以直接改。工具经 MCP 接入;Claude Code、Codex、OpenClaw 用适配器包成 MCP server。工具调用可设成先等人批准:改参数再执行,或拒绝并可选给文字指引,被拒轨迹自动当负样本。图像、音频、视频消息也能进同一套界面。
系统本身是一套前端组件。可以当无数据库的静态网页用,浏览器直连 Chat Completions API;也可以嵌进已有数据平台。产物打成单个 .panda.json。
对照实验规模很小:3 名标注员、21 条图文描述 prompt,拉丁方平衡顺序和题目难度。三条工作流共用同一条初始 rollout,来自 Qwen3.5-35B-A3B 的 instruct 模式,temperature 0.7、top-p 0.8。基线是 POTATO 上的通篇手改,以及 Argilla 上对 4 条候选排序。标注员都不是 onPanda 开发者,三种方法都做过热身。
| 工具 | 范式 | 中位 / 平均时间 | LLM 两两胜率 | PPL(相对基线) | SFT 覆盖 | 每题偏好对 |
| Argilla | 排 4 条 | 336s / 685s | 28.6% | 1.161(−0.83%) | 52% | 6.00 |
| POTATO | 通篇手改 | 681s / 711s | 54.8% | 1.596(+36.31%) | 100% | 0.95 |
| onPanda | token 级纠正 | 330s / 516s | 66.7% | 1.181(+0.86%) | 100% | 7.43 |
中位时间相对 POTATO 少 51.5%,和 Argilla 几乎持平。平均时间两边都更低:Argilla 在难样本上要读完四条长回复,均值被长尾拉高。重采样基线 PPL 是 1.171,单次 rollout 本身大约会晃 ±2.8%;onPanda 和 Argilla 都落在噪声里,手改把 PPL 抬了 36%。LLM 裁判是 GPT-5.5,顺序对调以压位置偏差。人工盲评里,onPanda 对 POTATO 的偏好是 54.8%。改过的 NASA-TLX 工作负荷(0–10,越低越轻):onPanda 3.1,Argilla 5.4,POTATO 6.8。
生产侧已经在视觉、音频、agent 三条线上跑:25,596、105,143、1,257 个会话,合计约 38.8 万次 token 级纠正。合格回复里 97.0% 的 token 是模型生成的,2.1% 点自候选,手打只有 0.9%。Agent 会话中位耗时 31.3 分钟,视觉和音频中位分别是 1.65 和 1.93 分钟;agent 的手打比例也更高,作者归因于轨迹更长、rollout 还不够稳。
公开数据集 Panda-CVL 是中文为主的视觉语言标注,7,491 个会话(训练 6,839 / 测试 652),标注时的辅助 rollout 来自 32B 稠密 VLM step-1o-turbo。配套 benchmark 把 652 条测试会话展开成 2,126 个实例(652 条已合格、1,474 条中间稿),要求模型判断该不该改,若要改则定位第一个错并给出替换。最好的 F1 只有 17.09%,来自 GPT-5.5;GPT-6 的定位 24.46%、端到端纠正 15.83%。对人也不轻松:四人独立标同一条初始回复,精确位置一致率 30.95%,放宽 4 个 token 到 44.44%。位置相同的前提下,替换 token 一致率 69.44%。
做对齐数据的团队可以把它当成「人在环里的续写编辑器」:要 SFT 覆盖率,又想文本别被手改得离模型太远。偏好对是纠正树上长出来的,不用另开一轮排序。token 级三元组位置准、正负成对,看起来比整段 DPO 更省信号,但这篇没有训练实验,还不能当结论。
Agent 标注是更实在的增量。改 toolcall 参数、批准执行、把真实工具结果喂回去再续写,比事后改一份轨迹文本更接近真实 rollout。代价是推理 API 必须同时支持前缀续写和 logprobs。开源侧 vLLM、SGLang 够用;作者点名豆包、DeepSeek、Kimi、阶跃官方 API 已经提供这两项。不暴露它们的闭源接口,标不了 on-policy 数据。
Panda-CVL 的分数低,说明「找第一个错 token 并改对」本身是硬任务。现阶段更接近一套标注工具和数据协议,还不是已经打通的训练方法。
作者写了几条硬边界。交互绑死在前缀续写和 top-k logprobs 上,部分闭源 API 做不到。token 级纠正的效率和 on-policy 优势都建立在错误稀疏上:模型离任务太远、处处要改时,两边都会塌,只能退回手打。on-policy 是相对标注当时的 rollout 权重而言的,拿去训别的模型,或同一模型持续更新之后,这层好处会淡。
对照实验只有 3 人 × 21 题、单一图文描述任务、单一 rollout 模型,被试全是内部标注员。质量主要靠 GPT-5.5 当裁判,人工对照只覆盖 onPanda 对 POTATO。没有对照实验做 agent 任务,agent 证据停在系统能力和生产统计。更关键的缺口:这篇验证的是标注效率、产出质量和分布贴合度;token 级纠正信号拿去训练到底有没有收益,作者明确说还没做。
人与人位置一致率只有三成,单参考 exact-match 的 Corr.-NG 会被标注意见分歧压低。把 17% F1 读成「模型很差」之前,得先把标注噪声算进去。论文也承认,和 POTATO、Argilla 的对比评的是整套工作流,分不清增益来自界面、来自范式,还是两者叠在一起。