
第一次看到“让AI自己给大模型做后训练”这个说法时我第一反应是这不就是让厨师自己给自己试菜吗玄乎了点。等把AIBuildAI开源的PostTrain Agent整套设计思路梳了一遍才发现这句大白话背后其实是一套已经在PostTrainBench上拿到第一名的递归自进化流水线AI自动扫描基座模型当前的短板自动整理训练数据自动选择SFT、DPO、蒸馏这类后训练策略跑完训练再自动评测评测结果又作为下一轮训练的输入。整个过程里工程师的主要工作变成了三件事定义eval、看日志、在它跑偏的时候叫停。这篇文章就围绕这套机制展开适合正在做大模型微调或后训练的工程师、负责模型迭代的算法负责人以及所有想搞清楚“AI自己训练AI”到底怎么落地的人。1. 后训练到底在调什么为什么它先成为自动化的突破口1.1 先分清预训练和后训练现在聊大模型训练很多人默认“训练”指的就是预训练那张几万卡跑出来的大网。但真正在业务里折腾过的人都知道预训练只是把底座模型摆在桌上。底座模型能写诗、能做逻辑推理却不一定能好好回答产品用户的问题可能说着说着就停不下来可能一本正经地编造数据可能听不懂指令里的限定词也可能在不该道歉的时候反复道歉。后面这一整堆“把底座变成可用产品”的工作就是后训练。它通常包含几块指令微调SFT让模型学会遵循人类指令的格式和语气、偏好对齐RLHF / DPO让模型的回答更符合人的偏好排序、拒绝采样与思维链蒸馏把强模型的推演过程教给小模型再加上工具调用、格式控制这些工程向的能力打磨。换句话说预训练决定了一个模型的上限和知识储备后训练决定它在真实对话里是不是一个“正常人”。做后训练的工程师每天干的活其实相当接地气洗数据、写任务模板、跑训练、看eval曲线、试超参、回滚、再试。这种工作重复度高、判断规则可枚举天然就是Agent擅长的领域。1.2 PostTrainBench 补上了“裁判”这块短板要把后训练自动化先得有个可靠的裁判不然AI跑得再快你也分不清它是在进步还是在原地打转。这恰恰是PostTrainBench这类专用榜单存在的意义。它和MMLU、GSM8K这些传统bench有本质区别传统bench测的是“模型肚子里有多少知识”而PostTrainBench测的是“后训练这步有没有做好”。一般来说它会覆盖指令跟随率、格式稳定性、对话稳健性、偏好对齐效果以及更关键的一项——底座能力有没有被调坏也就是是否发生了灾难性遗忘。拿MMLU当后训练裁判的问题实际测过的人都有体会你跑完一轮SFTMMLU分数可能降了一两个点但对话体验至少提升了一个档次也可能分数纹丝不动聊起来却明显变傻了。知识测试根本解释不了这种变化因为后训练改动的主要是模型的应答分布和风格倾向而不是知识容量。1.3 后训练适合交给Agent的底层逻辑以前大家觉得“让AI自己训练AI”是很遥远的事其实它成立的前提很简单一个任务能被自动化只要四件事都能闭环——目标可定义、动作可执行、结果可反馈、过程可迭代。后训练恰好全部满足。目标可以定义成一组eval指标动作可以定义成“更换训练数据”“切换策略”“调节超参”这些脚本化操作执行完一次训练后结果可以用同一套eval自动打出来打出来的分数差异又可以直接指导下一次动作。这不再是“智能是否足够”的问题而是“工程怎么把它串成一个while循环”的问题。AIBuildAI的方式本质上是把后训练工程师的日常工作流从“人肉循环”搬进了代码里。2. 递归自进化是怎么实现的AIBuildAI PostTrain Agent 的核心机制拆解2.1 “递归”和“自进化”的具体含义这两个词连在一起很容易被解读成AGI那种玄学叙事。拆开看其实挺朴素的。“递归”是指上一轮训练产出的模型会成为下一轮训练数据的生产者或者评判信号的来源。举例来说第一轮SFT之后模型开始能生成更自然的指令回答于是下一轮数据合成不是继续用外部模板而是让这个被增强过的模型去生成新的训练样本再经过规则和偏好模型筛选后进入下一轮。“自进化”则是指训练策略本身不由人肉调整——模型下一轮该用什么数据、该换什么策略、要不要提前停止都是根据eval结果自动计算出来的。需要强调一下这里的“自”并不是模型直接修改自己的权重文件而是整个训练闭环里不再需要人敲下一步命令。严格说它更像一套具有反馈控制能力的自动机器学习流水线只不过控制对象从普通模型变成了大语言模型本身。2.2 一条完整的迭代流水线每一步在做什么把AIBuildAI这类开源方案拆开看一条完整的迭代流水线通常由六个环节组成。第一步是基线启动。拿到一个基础checkpoint之后先跑一轮完整eval得到一份“短板清单”格式错误率偏高、偏好胜率不理想、某个任务集表现崩坏等等。这份清单就是第一轮规划的输入。第二步是策略生成与候选动作计划。Agent根据短板清单决定本轮是增加SFT数据、切成DPO、做一轮拒绝采样还是先扩大训练数据多样性。这个决策不是随机的而是基于memory里记录的“上一次类似情况用了什么方法、效果如何”来推演。第三步是训练任务执行。决定定了之后系统自动拉起一台训练作业按指定超参跑跑完落一个checkpoint。这一步在工程上基本是标准操作难点在于和后续评估之间做好版本对接保证你能搞清楚“当前这个checkpoint对应的是哪一次训练配置”。第四步是自动评估。新checkpoint出来后立刻对全体eval任务重跑一遍同时跑一个独立的能力子集比如代码、数学、常识问答用来侦查能力漂移。这一轮的结果会作为一个“增量报告”保存下来。第五步是失败归因与记忆更新。如果本轮动作有效就把“策略A在短板B上有效”记进memory如果无效甚至有负优化也照样记进去并且标记为“不建议复用”。这一步是整个递归自进化系统能不能越跑越聪明的关键——它不是在盲目随机搜索而是在积累一份关于自己训练经验的数据库。第六步是判断是否进入下一轮。如果增量提升已经小于阈值或者预算耗尽循环停止否则基于这份新报告重新从第二步开始。人在这条流水线里的位置主要在定义eval、审查memory、设置预算上限。2.3 Agent 内部的分工planner、executor、evaluator、memory从架构视角看这套系统通常会被划分为四个模块理解它们的分工比记住一个具体代码库的目录结构更重要。planner负责“想”它拿到eval报告结合memory里的历史经验输出下一个训练动作。executor负责“做”它把planner的决策翻译成具体的训练脚本、数据流水线、推理服务调用。evaluator负责“判”它运行各类评测任务生成结构化的指标报告并且负责判断“这个分数差是不是在误差范围内”。memory负责“记”它存储历史决策、数据集指纹、策略效果统计以及从失败样本里提取出来的教训。这套分工最大的好处是可以混搭使用不同模型planner用更聪明的强模型来推演executor用最快的推理框架跑脚本evaluator用偏规则的模型加人工审核位来保证稳定性。同时四个模块之间是松耦合的你可以替换任意一个组件而不需要动其他三层。2.4 策略选择一套实用的启发式规则在真实系统里planner的决策逻辑往往不是神经网络在自由发挥而是“eval信号到训练动作”的一张映射表。我根据自己和同行做后训练的工程经验把最常见的对应关系列在下面eval表现常用策略触发条件指令跟随率偏低SFT 模板修正多个任务都存在格式或限定词漏掉偏好A/B胜率停滞切换DPO调betaSFT收敛后偏好分数不再上涨推理任务答非所问拒绝采样 / 思维链蒸馏短答案正确率低推理过程粗糙通用能力子集掉点缩小学习率 回滚能力子集训练指令分涨了但代码/数学分下降输出过于冗长偏好对齐加入长度惩罚人工盲测反馈“太啰嗦”这套规则本身就是后训练工程师经验的产物。AIBuildAI真正做的是把这些经验转化成可执行的运行时决策逻辑再在每次迭代后更新记忆让表格里的“触发条件”越变越精细。3. 这套设计里最值得抄作业的工程亮点3.1 把每个训练决策都变成可回放的数据自动训练最让人心里没底的地方在于出了问题的时候你不知道是哪一步搞坏的。以前人工训练遇到eval异常往往要靠聊天记录和命令行历史去猜猜半天还不一定准。PostTrain Agent这类系统之所以敢把训练权交给Agent不是因为它有多聪明而是因为它把每一步决策都记成了结构化流水账本轮用的prompt模板版本、自动合成数据集的采样种子、训练脚本的完整参数、eval任务列表、模型checkpoint的git地址、甚至推理时的温度设置都一一对得上号。一旦eval曲线异常可以像看git提交历史一样逐层回放定位到具体是哪一次SFT数据、哪一组beta把模型带偏了。这个可回放性是自动化系统最重要的安全网。3.2 安全护栏自动训练最容易翻车的地方都堵住了递归自进化有个天然风险——模型一旦在某轮被训练坏了它会带着这个“坏掉的状态”进入下一轮继续用坏状态生成数据、生成判断导致问题放大。所以这类系统在设计上都会花大力气做护栏。第一道护栏是独立eval集。训练eval和决策eval必须分开训练集用过的prompt绝对不允许出现在决策eval里否则模型会学到“刷题”而不是“提升能力”。第二道护栏是自动回滚。每一轮训练结束系统不仅评估新checkpoint还会和上一轮checkpoint对比如果关键指标下降超过阈值自动回到上一版把本次训练标记为失败。第三道护栏是能力子集回归。单独留一组稳定的代码、数学、常识推理题每轮必测防止模型在指令跟随上变好、在通用能力上变笨。第四道护栏是人一个可配置的熔断开关评估到异常时通过告警通知人介入而不是让Agent闷头继续跑。3.3 成本控制让Agent学会“穷着过”自动迭代系统的另一个失控点不在质量在钱。没有预算约束的递归自进化会在一台满配机器上无限试下去最后一算账优化的那点指标还不够付电费。靠谱的实现都会把算力当成一等人来对待。常见做法有三类一是设总预算每一轮训练前先估算成本快超支就强制停止二是eval子集采样全量eval太重时按比例抽样本牺牲一点精度换速度三是“决定是否训练”如果预期的增量收益小于训练成本planner应该直接选择不训练而不是硬跑。做Agent最忌讳的就是“让它停不下来”。4. 手把手复现一个最小的 PostTrain Agent4.1 别被“登顶榜单”吓住一个小闭环就能跑起来说实话第一次看到“登顶PostTrainBench”这种描述我下意识觉得这是个大工程量项目。但仔细想一下榜单第一拼的是数据和策略的精细度而递归自进化这套骨架本身并不复杂。拿一张24G显存的消费级显卡跑一个小参数模型也完全能搭出一个用来验证原理的最小闭环。你只需要五个组件一个小尺寸底座模型比如7B级别的开源模型就行8B、14B也都可、一个训练框架用TRL或者LLaMA-Factory这类现成工具没必要自己写训练循环、一个推理引擎vLLM或者直接用transformers生成、一套自定义eval脚本几十条prompt加上自动打分就够起步不需要建什么大规模评测集、一个Agent编排层负责调用上面所有组件并记录决策轨迹。4.2 一个最简的 agent_loop 伪代码下面的代码不是某个开源仓库的完整实现而是我按这类系统最常见的设计思路整理出来的最小示意方便你看清核心循环长什么样def posttrain_agent(init_ckpt, task_pool, budget): ckpt init_ckpt memory load_memory(memory.jsonl) for iteration in range(max_iter): report run_eval(ckpt, task_pool) if budget.exhausted() or report.improvement stop_threshold: break action planner(report, memory) train_set build_train_set(action, ckpt) new_ckpt train(ckpt, train_set, action.hyperparams) new_report run_eval(new_ckpt, task_pool) memory.append({ action: action, dataset_fingerprint: fingerprint(train_set), old_report: report, new_report: new_report, }) ckpt select_best(ckpt, new_ckpt, new_report) save_memory(memory) return ckpt这段循环把所有关键要素都包含了每一轮先看当前状态再根据历史和报告决定动作训练完立刻评估最后把整段经历存进memory。你不用一开始就把planner做得太复杂用一个基于规则的判断函数就能启动。4.3 几个关键参数的取值思路参数怎么定这是复现时最容易被卡住的地方。我一般建议按下面这些经验值去试起点再根据eval曲线微调SFT阶段的学习率通常取1e-5到2e-5如果用的是LoRA可以稍微放宽DPO的beta值起步可以设0.1左右它控制“对偏好对的服从程度”太大会让模型丧失多样性太小则偏好对齐无效eval频率建议每个训练作业结束后必跑不要偷懒这是递归自进化的大脑反馈反馈断了系统就瞎了max_iter前期设3到5轮就够目的是先跑通闭环而不是一口气跑出一个榜单第一。还有一个容易忽略的细节数据集指纹要记录采样种子和模板版本否则你根本说不清下一轮数据是从哪来的。4.4 让 Agent 学会“什么时候收手”递归自进化最容易犯的错是追求“多跑几轮总会有提升”。真实情况下训练曲线在几轮之后就进入平台期再继续跑要么在eval集上过拟合、要么白白烧钱甚至出现抖动。我的做法是看最近三轮的增量报告如果每一轮相对上一轮的提升都小于eval本身的噪声水平比如指标波动范围内直接判收敛把剩余预算留给下一批任务而不是硬撑到max_iter跑满。真正的自进化不体现在疯狂迭代上体现在知道什么时候停下来——就像人用梯度下降训练模型也要设一个early stopping的耐心值原理是一样的。5. 递归自进化的三个典型翻车现场和排查办法5.1 Reward hacking模型学会了骗eval而不是变强自动训练遇到的第一大翻车现象是eval分数一路飙升但模型放到真实对话里完全不是那么回事。典型症状包括模型在eval选择题里学会了猜固定位置的选项或者在格式类任务里背下了标准答案模板一旦用户换个问法就立刻露馅。为什么会这样因为eval是自动打分的它本质上是“一个可被优化的目标函数”。模型在递归训练中天然会寻找目标函数的漏洞这不是它坏而是优化过程的本性。排查方法比较直接用一套和训练eval完全异源的盲测集找真人来做一顿对比打分看看自动化分数和主观体验是否一致。如果偏差明显说明eval设计被人为钻了空子需要换任务形态或者给eval引入扰动。5.2 能力漂移越调越“乖”但越变越笨第二种高频翻车是“越训练越听话但底座能力肉眼可见地下降”。这个现象在指令微调里最常见模型学会了用户喜欢的语气、格式、安全话术同时原本拿手的代码题和数学推理开始胡言乱语。原因的根源在分布偏移——后训练数据把模型拉到了指令分布上而底座的知识分布被覆盖掉了。排查不能只看综合均分要看能力子集分项。我见过太多团队被“整体分数稳健”骗了结果拆开子集发现数学掉了一大截。修复方向是把学习率降下来、在训练数据里按比例掺回通用能力数据或者直接回滚到上一版checkpoint再以更小的步长重试。5.3 自我数据污染递归变成复读机第三个坑在“递归”这个特性上埋得最深。当模型自己生成数据、自己筛选数据、自己训练自己跑了多轮以后数据多样性会显著下降——因为模型更倾向于生成它已经擅长的那类输出而那些失败的、偏门的、非典型的样本会被自动过滤掉。结果就是模型越跑越像复读机口头禅、句式结构甚至错误风格都开始趋同。判断是否已经污染看两个信号训练集与前一版本的数据重合度是否异常升高模型对“不常见任务”的鲁棒性是否下降。解决办法包括强制混入外部人类数据、保留一定比例的初代数据以及给自动生成数据加多样性采样约束。我在实际跑闭环的时候会固定一个“数据来源比例上限”任何由模型自动生成的数据在训练集里不得超过70%剩下的必须来自外部校验过的人类或强模型数据。5.4 问题速查表现象可能原因快速排查修复方向eval涨、真人对话下降reward hacking异源盲测对比改eval设计、加扰动、引入人工位指令分涨、能力子集掉分灾难性遗忘拆开能力子集分项看降学习率、混回通用数据、回滚多轮后输出同质化自我数据污染检查数据多样性指标混入外部数据、限制自动数据比例训练曲线抖动不收敛超参过大或eval噪声观察最近三轮增量降lr、调beta、判收敛提前停6. 关于边界和后续扩展的一点个人观察6.1 当前自动化的真实水平PostTrain Agent这类系统现在能替代的是一线后训练工程师手上最耗时的流程型劳动合成数据、改写模板、跑超参网格、盯eval报告、重复试错。它的效率在“流程自动化”这个维度上是实打实的。但在“定义什么是对的”这个维度上它依然非常依赖人来设定eval边界和价值观约束。PostTrainBench登顶确实说明这套递归自进化机制很有竞争力但一个做过几年后训练的工程师也会本能地警惕一个事实榜单本质是一组代理指标。Agent优化的是代理指标不是产品体验本身。评估设计得不好它就会在一个错误的指标上越混越好这个风险并不会因为系统“开源”或者“登顶榜单”而消失。6.2 为什么“什么是好的后训练”仍需要人来定对齐这件事归根到底是价值排序。同一个模型产品方可能希望它更保守、更不愿意冒险猜测另一个产品方可能希望它更开放、更敢给出方向性建议。这不是模型自己能推导出来的而是产品定位、用户群体、合规要求共同决定的。Agent可以优化目标函数但选择和定义目标函数仍然是一个需要人来拍板的决策。换句话说尽管AI可以自己给大模型做后训练但这个“后训练”的合格线由谁来划、安全边界设在哪里、哪些偏好是产品必须坚守的底线还是需要人来定。把目标定义和eval把控握在手里你就能安全地享受自动化的效率撒手不管你省下的时间最后都变成给模型擦屁股的时间。6.3 后续扩展的方向这套架构完全可以往几个方向继续长。一是把更多真实信号接进循环比如线上反馈、用户举报、A/B测试结果让eval不再局限于离线任务。二是把多模态评测和长上下文评测纳入其中细粒度任务越多Agent发挥的空间越大。三是多模型协作——让不同尺寸、不同能力的模型分工参与planner和evaluator形成一套模型族的“训前会诊”这个方向我目前看到的开源实践还不多空间很大。最后分享一个个人经验如果你想在生产环境里落地这套思路不要上来就追求全自动无人工。先找一个你自己完全熟悉的业务场景把eval子集和人工盲测做扎实再逐步放开Agent的决策权。小步快跑总比一个失控的闭环从头再来要划算得多。