
1. 为什么“合成清洗”成了训练数据的新主线过去两年我参与过好几个从零起步的模型训练项目最深的感受不是“模型结构选哪个”而是数据从哪来、怎么洗、怎么配比。尤其是做 SFT监督微调、mid-training中期训练和 RL强化学习这三类任务时数据质量直接决定模型上限。标题里提到的“agentic 方式合成 / 清洗训练数据”说白了就是让一个具备工具调用和自主决策能力的智能体去自动生成、筛选、修正训练样本而不是靠人工一条条写或简单规则过滤。这个思路解决的核心问题是人工标注成本高、规则清洗覆盖不全、合成数据容易“自嗨”模型自己生成自己学越学越偏。Agentic 方式把“生成”和“验证”拆成两个角色甚至让多个智能体互相博弈最终留下真正有信息量的样本。适合谁参考如果你正在做垂直领域微调、需要构造高质量指令数据、或者想用 RL 提升模型推理能力这套方法能直接套用。我试过纯人工写 5000 条 SFT 数据花了三周效果还不如后来用 agentic 流水线两天跑出来的 8000 条。差距不在数量而在清洗环节的智能程度。下面我把整套思路拆开从设计逻辑到实操细节再到踩过的坑全部摊开讲。2. 整体设计三个训练阶段的数据需求差异2.1 SFT、mid-training、RL 对数据的要求完全不同很多人把这三个阶段的数据混在一起处理结果 SFT 学格式、mid-training 学知识、RL 学偏好互相打架。我的经验是分开建流水线但共享底层清洗模块。阶段数据核心需求典型样本量合成重点清洗重点SFT指令遵循、格式规范5k-50k多样化指令标准答案去重、去低质、格式校验mid-training领域知识密度100k-1M知识密集型文本QA对事实性校验、去噪RL偏好对比、推理链10k-100k多路径推理打分奖励信号一致性SFT 阶段最怕“答案对但格式乱”mid-training 最怕“看起来像知识其实是幻觉”RL 最怕“奖励模型自己都分不清好坏”。Agentic 方式的价值在于每个阶段都可以配置不同的智能体角色。比如 SFT 用“指令生成器格式校验器”mid-training 用“知识抽取器事实核查器”RL 用“推理生成器偏好打分器”。2.2 为什么选 agentic 而不是传统 pipeline传统 pipeline 是“规则模型打分”的线性流程问题是规则写死了就僵化模型打分又容易过拟合。Agentic 方式引入自主决策智能体可以根据当前样本的困惑度、长度、领域标签自己决定“这条数据是丢弃、改写还是送人工复核”。我实测下来agentic 清洗比固定阈值清洗的有效数据保留率高出 23%而且下游任务指标更稳。原因很简单固定阈值会把“短但精”的样本误杀也会放过“长但水”的样本。智能体可以综合多个信号做判断比如同时看困惑度、重复率、信息熵、与目标分布的 KL 散度。2.3 整体架构生成-验证-修正的闭环我的流水线分三层生成层多个智能体并行每个负责一种数据风格问答、对话、推理链、代码等验证层独立智能体对生成样本打分包括事实性、逻辑性、格式合规性修正层对“边缘样本”进行改写或补充而不是直接丢弃这个闭环的关键是验证层不能和生成层用同一个模型否则会出现“自己批自己”的偏差。我通常用不同规模或不同微调版本的模型来交叉验证。3. 核心细节合成与清洗的具体实现3.1 合成数据的三种模式与选型合成不是让模型随便写而是有策略地“造”。我常用的三种模式模式一种子扩展。给 100 条人工写的种子样本让智能体生成相似但不同的变体。适合 SFT 指令数据。关键是控制“变异度”太像了没信息量太不像了跑偏。我的做法是让智能体在生成时显式指定“保持意图不变改变表达风格和实体”。模式二知识重组。从文档中抽取事实让智能体组合成 QA 对或推理题。适合 mid-training。这里必须加事实核查智能体否则模型会把“张三生于北京”和“张三死于上海”拼成“张三生于上海”。模式三对抗生成。两个智能体一个生成“看起来合理但实际有错”的样本另一个负责找出错误并修正。适合 RL 的偏好数据。我试过用这种方式生成数学推理的对比样本奖励模型学得比人工标注的还准。3.2 清洗环节的五个关键信号清洗不是简单去重。我用的五个信号按优先级排序格式合规性JSON 能否解析、字段是否齐全、特殊 token 是否越界信息密度用压缩率或困惑度衡量太低说明是废话事实一致性与知识库或检索结果交叉验证多样性与已有数据的语义相似度避免同质化难度分布确保简单、中等、困难样本比例合理注意不要用单一信号做硬阈值。我踩过的坑是设了“困惑度50 就丢弃”结果把很多专业术语密集的优质样本也扔了。后来改成智能体综合打分保留率上来了下游指标也涨了。3.3 智能体的角色配置与提示词设计每个智能体都要有明确的“人设”和“输出格式”。比如事实核查智能体的提示词你是一个严格的事实核查员。给定一个问答对你需要 1. 判断答案中的每个事实陈述是否可验证 2. 如果不可验证标记为“存疑” 3. 如果与已知事实矛盾标记为“错误”并给出修正 输出 JSON{verdict: pass/flag/fail, reason: ..., corrected: ...}生成智能体的提示词则要强调“多样性”和“自然度”避免模板化。我通常会在提示词里加一句“不要使用‘首先、其次、最后’这类套话”效果立竿见影。4. 实操过程从零跑通一条 agentic 数据流水线4.1 环境准备与工具选型我用的技术栈比较轻量编排框架LangGraph 或 AutoGen选哪个看团队习惯。LangGraph 对状态管理更清晰AutoGen 对多智能体对话更友好。模型生成用 7B-13B 的指令模型验证用 3B-7B 的判别模型避免同源偏差。存储Parquet 存中间结果方便按字段过滤和版本对比。监控Weights Biases 或 TensorBoard 记录每轮生成/清洗的统计量。硬件上单卡 24G 显存可以跑 7B 模型的推理批量大小设 4-8。如果要做 RL 的对抗生成建议双卡一个跑生成一个跑验证。4.2 种子数据构造与初始生成先人工写 50-100 条高质量种子。不要多但要精。我通常覆盖 5-10 个任务类型每个类型 10 条左右。然后让生成智能体做“种子扩展”# 伪代码示意 for seed in seeds: for i in range(20): variant generator_agent.generate( seedseed, instruction保持任务意图改变表达方式和实体输出 JSON ) raw_pool.append(variant)这一步会得到 1000-2000 条原始合成数据。别急着清洗先跑一遍格式校验把明显坏的扔掉。4.3 多轮清洗与迭代优化清洗分三轮第一轮规则过滤。JSON 解析失败、长度超限、包含敏感词的直接丢。这轮能去掉 10%-15%。第二轮智能体打分。每个样本让验证智能体打三个分事实性、逻辑性、格式分。总分低于阈值的进“边缘池”。第三轮边缘池修正。对边缘池的样本让修正智能体尝试改写。改写后重新打分通过则入池不通过则丢弃。我实测下来三轮之后有效数据保留率在 60%-70%比单轮规则清洗的 40% 高不少。而且下游 SFT 的指令遵循准确率提升了 8 个百分点。4.4 数据配比与课程学习清洗完不是直接混在一起训练。我会按难度和类型做配比简单样本 30%中等 50%困难 20%每个任务类型至少占 5%避免偏科mid-training 的知识密度要高于 SFTRL 的推理链长度要长于前两者课程学习上先训简单中等再混入困难样本。这样模型不会一开始就被难样本带偏。5. 常见问题与排查技巧实录5.1 合成数据导致模型“复读”怎么办这是最常见的问题。模型生成的数据有固定模式训出来的模型也只会那几种句式。我的解法在生成提示词里加“禁止使用以下句式...”用多样性指标监控语义相似度高于 0.9 的样本只保留一条引入“风格智能体”专门负责改写模板化表达5.2 验证智能体误杀优质样本验证智能体太严格会把“虽然短但信息量大”的样本判死。我试过几个方法调整打分权重降低长度惩罚对“边缘样本”不直接丢而是送修正智能体定期人工抽检 100 条看误杀率反过来调提示词5.3 RL 阶段奖励信号不一致RL 的偏好数据最难搞。两个标注员对同一个回答可能打相反的分。Agentic 方式的解法是多智能体投票三个验证智能体独立打分取多数。如果分歧太大直接丢弃这条样本不进入训练。5.4 常见问题速查表问题可能原因排查方法解决技巧合成数据多样性低提示词太窄统计 n-gram 重复率加风格指令、提高温度清洗后数据量骤降阈值太严看各轮保留率改硬阈值为智能体打分下游指标不升反降数据配比失衡分析各类型占比重做课程学习配比验证智能体偏差大与生成同源换不同基座模型交叉验证人工抽检RL 训练不稳定奖励信号噪声大看奖励方差多智能体投票丢弃高分歧提示每轮清洗后都要保存中间结果方便回溯。我习惯用data_v1_raw.parquet、data_v1_cleaned.parquet这样命名出问题能快速定位是哪一轮的锅。6. 工具选型与成本控制6.1 自建 vs 用现成平台如果数据量在 10 万条以内自建流水线完全够用成本主要是推理算力。超过 50 万条可以考虑用分布式框架但要注意智能体之间的通信开销。我试过用 Ray 做分布式生成吞吐量提升 3 倍但调试复杂度也上去了。6.2 算力成本估算以 7B 模型为例生成一条 500 token 的样本大约需要 0.5-1 秒单卡 A100。清洗阶段每条样本要过 2-3 个智能体时间翻倍。综合下来1 万条数据的全流程大约需要 8-12 小时单卡时间。如果做 RL 对抗生成时间再翻一倍。6.3 质量与成本的平衡不是所有数据都需要 agentic 清洗。我的策略是种子数据和核心任务数据全流程 agentic大规模 mid-training 数据规则清洗抽样 agenticRL 偏好数据全流程 agentic多智能体投票这样能在保证质量的同时把成本控制在可接受范围。7. 我踩过的三个大坑第一个坑是生成和验证用同一个模型。刚开始图省事结果验证智能体对生成智能体的“套路”特别宽容坏数据全放过了。后来换成不同基座误杀率和漏杀率都降了一半。第二个坑是清洗阈值拍脑袋定。我一开始设“困惑度40 丢弃”结果专业领域数据几乎全军覆没。后来改成智能体综合打分保留率从 35% 涨到 68%下游指标还涨了。第三个坑是忽略数据配比。有次 SFT 数据里代码任务占了 70%训出来的模型连日常对话都磕巴。后来强制每个任务类型至少 5%问题才解决。这三个坑的共同点是别用单一规则替代智能判断。Agentic 方式的核心价值就是让多个智能体从不同角度“看”数据综合决策。你如果刚开始做建议先从 1000 条数据跑通全流程再逐步放大。跑通之后你会发现数据质量带来的提升远比换模型结构明显。