数据管道的三道验收:逐条、多遍、换模型重跑
Agent 写训练数据,45 分钟预算下没有一个跑过 20 分;五遍投票只有 1.28% 被一致判为不合规,单遍却标出 2.7%–3.2%。坏数据活到第几步才被发现,决定了管道的真实单价。
验收放在第几步,决定了管道的单价
数据团队和论文作者看的是同一件事的两头。论文侧的通行做法是:让 agent 造一批任务,拿去微调,再用下游分数评价这批数据好不好。数据工业的做法不是这样——数据是逐条交付的,每一条都要对着一组验收标准单独判一次,合格的进训练集,不合格的退回。
AutoDataBench(2026-09-28)把这道分界线摆到了台面上。它给 agent 一个原始基准任务和一条目标模型的尝试记录,要求 agent 为同一套件写一条新任务,并满足生产管道会用的四类标准:有效性(validity)、新颖性(novelty)、难度(difficulty)和行为覆盖(behavioural coverage)。关键差别在于不需要训练跑一遍就能判定。
结果不客气。在三个可执行 agent 任务基准上,默认 45 分钟预算下,没有一个受评 agent 拿到 20 分(满分 100)。把最强 agent 的时间放宽到四倍,分数大幅提升,而单条可用任务的成本几乎没变。
这次评测的规模是 5 个受评 agent、24 条原始任务、每条跑 2 个 episode,所以「没有一个拿到 20 分」不是个别任务的意外,而是覆盖了上百次尝试后的稳定结论。
这个组合值得停下来读一遍。它说的是:agent 造得出达标的数据,但造不快;而拉长时间并不推高单价,说明成本的大头不在”想”,而在每条数据都要走完的那套验收动作上。
第一道闸:把验收标准写成可判的字段
四类标准要能落地,得先变成字段。下面这份 gate 配置可以直接塞进数据管道的入口:
# acceptance_gate.yaml —— 逐条验收,不通过即退回
gates:
validity:
executable: true # 任务能被真实环境跑起来
reference_solution_passes: true
min_assertions: 1
novelty:
max_ngram_overlap: 0.35 # 与套件内已有任务的最大重合度
min_edit_distance_ratio: 0.40
difficulty:
target_model_pass_rate: [0.0, 0.6] # 太容易和太难都退回
min_steps_to_solve: 3
coverage:
required_behaviours: [tool_use, error_recovery, multi_turn]
forbid_duplicate_behaviour_signature: true
on_fail: quarantine # 不要静默丢弃
quarantine_dir: s3://data-pipeline/quarantine/{run_id}/
两个细节是踩过的坑。一是 target_model_pass_rate 给的是区间不是上界——全对的样本对训练没贡献,全错的样本大概率是任务本身坏了,两边都得退回。二是失败样本必须进隔离区而不是丢掉:quarantine 里的东西是下一轮 prompt 迭代的唯一原料,丢了就只能靠猜。
AutoDataBench 的得分之所以普遍低,多半就低在这四个门是”与”关系:四条全过才算一条可用,任何一条 80% 通过率叠起来也只剩四成。
第二道闸:判定器自己也要被验收
逐条验收一旦交给 LLM 判定器,就引入了一个新的误差源:判定器本身的稳定性。
CompOrca(2026-09-29)给出了目前最完整的一份实测。它对 4,233,923 条 OpenOrca 全量做合规标注,用 LongCat-2.0(1.6T)跑五遍独立判定,结果是:五票一致合规 94.75%,五票一致不合规 1.28%,不一致行 3.97%。单遍判定会标出 2.7%–3.2% 的不合规,只有 1.28% 被五票全部判中——单遍的噪声是真实信号的两倍多。
对 450 条人工标注样本(其中 150 条双标,human-human κ=0.93)校准后,一致合规标签精确率 97.3%,一致不合规标签精确率 86.7%。论文还点名了一件事:已发表的 refusal-detection 方法在这个类上的召回率只在 0.4% 到 94.1% 之间。
那个区间才是真正该记住的数字。区间下沿接近零,意味着拿一个现成的拒绝检测器当过滤器,你无法预知自己漏掉了多少。工程上的处置是”多遍投票 + 只取一致票 + 保留票数不丢”:
# multi_pass_judge.py —— 只输出一致票,票数一并落盘
from collections import Counter
def judge(example, passes: int = 5):
votes = [call_judge(example, seed=i) for i in range(passes)]
c = Counter(votes)
top, n = c.most_common(1)[0]
if n == passes:
bucket = "unanimous_compliant" if top == "compliant" else "unanimous_noncompliant"
else:
bucket = "nonunanimous" # 不猜,留给人工或下一轮
return {"bucket": bucket, "votes": votes, "agree": n / passes}
# 落盘:votes 原样保留,后面调阈值不用重跑判定
row = {**example, **judge(example)}
三点:不一致行单独成桶,不要按多数票塞进合规桶;votes 数组原样落盘,后面调阈值时不用重跑判定;校准集至少双标一遍并报 κ,否则你连”判定器稳不稳”这件事本身都没有基准。
第三道闸:换一个模型重跑,增益还在才算数
数据管道最容易骗自己的地方,是把”在这个基座上分数涨了”当成”这批数据好”。
TabFM-Auto(2026-09-29)给了一个反例的做法。它用一个语言模型 agent 围着表格基座模型 TabFM 迭代演化管道——数据清洗、特征工程、上下文选择、后处理,每一步都由验证集反馈驱动。在 TabArena 的全部 51 个数据集上,五种配置包揽前五,最好一组把 TabFM 从 1785 Elo 提到 2013 Elo。
更有价值的是最后一句:搜出来的管道迁移到其他冻结的表格基座模型上,仍能带来 +69 到 +143 Elo,且无需重新搜索。这就是判别标准——把基座换掉重跑一遍,增益还在,说明管道抓到的是数据本身的结构;增益消失,说明你只是把管道过拟合到了某个模型的脾气上。
# transfer_check.py —— 管道收益的迁移自检
from statistics import median
def transfer_check(pipeline, base_a, base_b, datasets):
rows = []
for d in datasets:
a = evaluate(pipeline(d), base_a) # 冻结基座 A
b = evaluate(pipeline(d), base_b) # 冻结基座 B
rows.append((d, a, b, b - a))
keep = sum(1 for _, _, _, delta in rows if delta > 0)
return {"datasets": len(rows), "positive": keep, "median_delta": median([r[3] for r in rows])}
报表里要印的是 positive/datasets 这个比例,不是平均分。平均分会被少数暴涨的数据集拉平,比例不会。
配比的边界:混进去不等于变好
最后一道容易被跳过的是配比外推。加一个辅助数据源,下游分数涨了,于是把在小规模上搜到的配比直接搬到大一档的训练上——这一步没有任何保证。
When do data mixtures improve scaling laws?(2026-09-29)从高维混合数据回归的角度给了条件:在目标域与辅助域协方差谱按幂律对齐的设定下,作者推导出显式的 scaling law,混合数据要真正改善缩放速率,需要谱衰减、目标正则性与两个数据集的相对增长速度之间形成特定配合。换成大白话:辅助数据能不能改善 scaling law,取决于它和目标任务的谱结构搭不搭、以及它涨得比目标数据快还是慢,不是”加进去总比不加好”。论文在语言模型上的实验观察到了同一定性现象。
工程含义有两条。配比搜索要在目标规模附近做,别在十分之一算力上搜完直接外推;每次换配比,把辅助域与目标域的 token 量比值一起记进实验表,比值本身就是一个要被搜索的变量。
三道闸对照
三道闸的排查成本、能挡住的失效、以及各自的验收凭据并不对称,落地时按成本从低到高排:
| 闸 | 挡住的失效 | 验收凭据 | 排查成本 | 凭据来源 |
|---|---|---|---|---|
| 一、逐条 gate | 坏数据进了训练集 | 四类标准逐条可判字段 + 隔离区 | 低(改入口配置) | AutoDataBench:四条全过才计一条可用 |
| 二、多遍投票 | 判定器自己就是噪声源 | 一致票分桶 + votes 落盘 + κ | 中(判定次数 ×N) | CompOrca:五票一致的精确率 97.3% / 86.7% |
| 三、换模型重跑 | 管道收益是对某个基座的过拟合 | positive/datasets 比例 | 高(要冻第二个基座重跑) | TabFM-Auto:迁移 +69 到 +143 Elo |
表里第四列是容易被漏掉的一层:三道闸不是同一个抽象层级的东西。第一道改的是数据,第二道改的是判定,第三道改的是结论的可外推性。跳过前两道直接做第三道,得到的迁移比例会被上游的噪声和坏数据污染,反而更难归因。
落地顺序
按排查成本从低到高排:先加隔离区和票数落盘(改动量最小,且是后面所有归因的前提);再把四类验收标准写成字段,接进入口;最后做迁移自检和配比比值记录(这两项贵,但能挡住最贵的那类错误——把钱花在只对某一个基座有效的数据上)。
三道闸对应三种失效:第一道挡”坏数据进了训练集”,第二道挡”判定器自己就是噪声源”,第三道挡”管道收益其实是对某个模型的过拟合”。AutoDataBench 那个 20 分不是能力上限,是在提醒我们,验收这一侧的工程一直被当成附属品。