
1. 先把Agentic SFT这件事的来龙去脉捋一遍Agentic SFT这个词我这半年在不少技术讨论里反复看到一开始我以为它就是把普通指令数据换成带工具调用的数据拿同一个微调流程跑一遍而已。真正上手之后才发现这个认知太浅了——Agentic SFT训练的不仅是模型会调用工具这个表面动作它是在通过模仿学习让模型具备一种在环境反馈中持续决策的行为模式。这个过程和传统SFT教模型按格式输出一段话有本质区别。我理解的Agentic SFT简单说就是用智能体执行任务的完整轨迹数据包括思考、动作、环境反馈对基座模型做有监督微调让模型学会在回合制交互中做规划、调工具、读结果、再决策。它解决的问题很具体普通SFT教出来的模型只会回答问题但不会做事。比如你让它查一个需要调API、翻文档、分步骤完成的复合任务普通模型要么一口气编个答案要么就停在第一步说我无法访问外部信息——而Agentic SFT训练过的模型知道什么时候该调用什么工具调用完之后怎么解读返回结果观察不满足时下一步该追问还是该换个工具。这篇东西不是什么权威教程而是我边做边记的持续记录适合三类人看一是准备给模型加智能体能力但还在犹豫要不要上Agentic SFT的工程同学二是已经在训练但效果不理想、想对照看看自己哪里踩坑的调参选手三是对Agentic SFT到底是什么这件事还没彻底搞清想有个系统性认知的产品和技术负责人。1.1 从普通SFT到Agentic SFT到底变了什么普通的SFT数据长这样一条指令对应一条标准回答。训练目标简单粗暴——让模型输出的条件概率逼近人类标注。模型学会的是信息检索型的答题习惯把知识浓缩组织成结构化答案。这种训练里不存在下一步的概念模型没有状态也不需要考虑自己上一轮输出的东西造成了什么后果。Agentic SFT的数据形态完全不同。它是一条轨迹轨迹里包含多个轮次每个轮次内部又有角色切换。典型的ReAct风格轨迹长这样用户提问请帮我对比Q1和Q2的销冠产品并出一个周报摘要。 助手思考需要先获取两个季度的销售数据调用get_sales_quarter接口。 助手动作get_sales_quarter({quarter: [Q1, Q2]}) 环境返回{Q1销售额数据..., Q2销售额数据...} 助手思考数据拿到了但市场占有率字段缺失需要再查竞品表。 助手动作query_competitor({quarter: Q2}) 环境返回{竞品数据...} 助手回答根据两个季度对比Q2销冠产品变化如下……注意这里的训练粒度模型不是一次到位输出最终答案而是在值得调用工具的位置停下来、输出结构化动作、等待环境反馈、再根据反馈继续。这正是Agentic SFT和普通SFT在行为层面上的分水岭——前者在训练多轮决策策略后者在训练单轮语言映射。1.2 Agentic SFT真正在训练的四项底层能力按我现在的理解Agentic SFT实际上在同时塑造四种能力缺一不可停止生成的能力模型要知道哪些话可以直接说哪些话不该硬编答案而应该输出工具调用格式。这个我该停了把控制权交给环境的判断是很多微调模型崩溃的重灾区。因为普通SFT的监督信号里模型永远是把话说完的很少见到话说到一半就交给外部系统的样本。动作格式化的能力即便模型决定了要调工具还要保证动作以严格的JSON或函数调用schema输出。这一步看着简单实际上在数据不平衡、训练不充分时非常容易崩动不动就少了右括号、参数名写错、或者把解释文本和动作参数混在一起。观察解读的能力环境返回的内容是高度异构的——有JSON有日志串可能还有报错信息。模型需要学会读懂这些反馈区分哪些信息有用、哪些是噪声而不是直接把原始返回复制粘贴进下一轮。多步规划的能力根据系统提示里给定的目标结合当前已经走到的步骤决定接下来是继续采集信息、换一条路径还是已经足以生成最终答案。这一步最难因为它依赖前两项能力稳定发挥某种意义上规划是涌现出来的没法靠几条样本强行教会。这里我也要诚实地说这四项能力并不是独立训练的它们共享一套参数互相影响。后面所有数据设计、损失函数设计、评估指标本质上都是围绕这四项能力谁能保住、谁先崩来展开的。2. 数据工程Agentic SFT的大头重来不在训练我可以很直接地说在我目前做过的几个Agentic SFT实验里训练环节花的时间不到20%剩下80%全砸在数据上了。数据决定成败这件事在这种需要表达完整决策序列的学习场景里体现得格外明显——因为轨迹数据的获取成本、错误率、分布偏差都比普通指令数据高出一个量级。2.1 轨迹数据的三种来源与优劣对比造Agentic SFT数据市面上主流的路径有三条每条我都试过直接上对比数据来源优势劣势适合场景真实业务日志分布最真实覆盖线上实际调用模式噪声大中间步骤错误多需大量清洗冷启动期根本攒不够量产品已经上线、有日志回流的中大规模团队专家人工标注质量最高轨迹逻辑清晰动作决策合理成本惊人一条复杂任务轨迹可能写几百上千字精修少量金标轨迹作为对齐参照大模型合成环境验证可批量生产成本可控覆盖度高有教师模型偏见弱基座抄不到强基座的推理过程绝大多数团队的实际首选路线我个人最推荐的组合是大模型合成环境验证为主线辅以少量真实日志精修。这里有个关键点合成数据生成之后不是拿去训练就完事而是必须放到真实环境里跑一遍验证。轨迹里想一想、调一个工具、看反馈这些步骤是否真的能执行环境说了算。跑不通的轨迹不管文字写得再漂亮都得丢掉或者截断重造。我踩过最大的坑就是存侥幸心理把教师模型生成的高质量文本轨迹直接拿去训练结果模型学了一堆用正确格式调用不存在参数的幻觉行为。后来我才理解Agentic SFT数据的“事实正确性”锚点在环境里而不在文本里。一条轨迹只有真实执行成功过才能作为正样本。2.2 合成轨迹的完整生产流水线我自己最后沉淀下来的一套批量生产流程分成五个环节每个环节都有值得注意的细节第一步构造任务集。任务集决定数据的覆盖度要刻意做难度分层不能全是简单单步调用也不能全是变态的多步推理。我一般按单步查询多步规划具身操作类用6:3:1的比例铺。任务描述要写完整包括上下文背景、用户目标、以及可用工具列表。第二步教师模型采样。把任务丢给教师模型加上ReAct格式约束和工具schema用不同温度并行采样。温度我喜欢在0.7到1.0之间打几个档位低温拿到稳定保守路径高温探索出一些绕远路但最终成功的轨迹这类多样性能有效防止模型在训练后只会一条路走到黑。第三步环境回放验证。这一步是整个流水线的质检关卡。每条采样轨迹都必须真实执行按这种标准打分过滤执行完全成功、部分步骤失败但最终修正成功、执行失败。我通常只保留前两类丢到训练集的比重大概是6:4——就算要保留最终修正成功的轨迹也得确保轨迹里是模型自己发现了错误并走了修正路径这是很宝贵的教学样本。第四步轨迹截断与对齐。很多轨迹在真正有用的信息到达之前夹杂了大量试探性操作。截断要保留完整的开头—过程—结尾叙事结构不能一刀切。我通常保留完整逻辑链只在确实存在冗余时做精简因为训练目标本来就是模仿完整决策过程。第五步去重与配比。轨迹去重不能靠文本完全一致要用embedding做语义相似度去重阈值设在0.85左右。配比环节在后面训练部分细说。2.3 格式化里的几个隐蔽深坑轨迹数据格式也是一大坑。现在实际上流行两套风格一套是OpenAI函数调用的消息数组风格每个tool消息带独立role和tool_call_id另一套是开源社区常见的ReAct纯文本风格。在构造Agentic SFT数据时我的建议是跟实际推理部署代码严格保持一致——训练时用什么格式上线时就必须用什么格式。很多团队死在训练用老式纯文本上线发现新引擎不兼容这种低级问题上。格式化的另一个坑是特殊标记的数量控制。工具调用的开始、结束、参数块都要用专用token包起来数量别太多控制在两到三个以内。我见过用四五个特殊标记的格式设计各种嵌套训练既有收敛速度问题推理时还有解码稳定性隐患。这个代码能跑、模型学不会的典型场景值得大家引以为戒。3. 训练细节格式、损失与超参的取舍数据准备利索之后训练本身反而像搭积木。但搭积木也有讲究尤其是Agentic SFT这种行为克隆性质的训练和普通指令微调在损失函数设计、样本组织方式上差别很大。3.1 损失函数别对思考过程一视同仁传统的SFT对整个输出序列计算交叉熵损失。但在Agentic SFT里轨迹里的文本是分角色的有模型自己的思考、有工具调用、有环境返回的observation。它们一旦混在一起同等对待模型就会把大量概率分配给读observation和复述思考这种语言建模任务真正需要稳的动作输出反而学不扎实。业界从AgentTuning等早期工作里总结出的一个有效做法是action-aware loss只在动作相关token上计算损失思考和观察部分要么直接mask掉要么给一个极低的权重。我自己的实验也验证了这一点——采用动作掩码之后工具调用的格式正确率从87%左右跳到了96%上下代价是思考文本变得更短更干净这其实是个意外收获。实现动作掩码时要注意按token粒度对齐别按字符或按消息粒度算错了否则掩码错位会导致模型学得歪七扭八。我排查过一个诡异现象模型能流畅输出动作但参数名疯狂出错查了两天最后发现是mask漂移把动作的右半边给盖住了。3.2 数据配比拒绝灾难性遗忘的底线Agentic数据通常只占总训练数据的一部分。如果100%全是轨迹数据模型原有的问答、写作、总结能力很快会退化。我目前常用的配比分三块数据类别占比作用Agentic轨迹数据50%~60%学习工具调用与多步决策一般指令数据25%~30%保持基础对话和推理能力工具schema/单步调用数据10%~15%复习各工具的独立调用方式纯话术/拒答数据5%教会模型不用工具也该回答问题这个配比不是说死的要看基座和Agentic数据的差异度。基座本身工具能力就强的话Agentic比例可以降到40%弱一些则要提到70%但一般别超75%除非你根本不在乎模型失去通用能力。另外配比要在每个batch内随机混合不要分阶段训练——我试过先训智能体数据再训通用数据的法子结果模型把前面学的又还回去了效果很差。3.3 超参数与长序列训练的现实问题Agentic SFT的样本普遍比较长动不动就三四千token多步轨迹可以上万。这带来两个直接问题学习率要更保守。我喜欢用1e-5到2e-5的区间峰值学习率比普通SFT低一倍左右。原因很简单轨迹数据里经验密度太高学习率大了非常容易过拟合到轨迹的微观语言模式而学不到决策结构。训练轮数不宜多。普通SFT跑3到5个epoch很常见轨迹数据我控制在1到3个epoch。超过3个epoch验证集上格式正确率可能还在涨但各种泛化指标开始掉——典型的过拟合信号会被格式学好了这个表象掩盖。处理长序列还有一个训练效率问题如果按传统方式把每条样本补零到统一长度计算浪费巨大。业界解决方法是packing——把多条轨迹按长度排序后拼接成一个超长样本用attention mask隔开。注意拼接时要在frame边界处加padding和mask否则模型会跨样本串门出现上一个样本的observation影响下一个样本决策的幻觉污染这也是我实际踩过的坑。pack对提升吞吐量非常明显我从每条独立训练改成pack训练之后训练时间直接缩短了40%以上。4. Agentic RAG和Agentic SFT的纠缠关系现在社区热词里经常能看到Agentic RAG我第一次看到这个词的时候愣了一下——RAG和Agentic SFT有什么关系后来想透了Agentic RAG是应用形态Agentic SFT是它背后智能的训练来源之一。两者根本不是对立概念而是上下游关系。4.1 拆解Agentic RAG多出来的那点智能传统RAG流程是固定的用户问-检索-拼接-生成。它没有选择题不会根据问题复杂度调整检索策略也不会判断检索结果够不够。而Agentic RAG引入的是自主决策模型先判断这个问题需不需要检索需要的话怎么拆成子查询拿到结果后自己判断相不相关不相关就改写查询再来一轮相关就进入生成阶段。这个判断—行动—再判断的循环本质上就是一个智能体行为只是行动空间换成了检索工具。关键问题是这种复杂的决策模式靠纯prompt能教会一个中号模型吗我实测下来7B到14B这个量级的模型光靠提示词拿捏不住多轮检索-判断的稳定循环经常出现检索完了不会判断、或者明知答案不够还要强行答的情况。反过来如果用Agentic SFT把决策轨迹直接教给模型同样的模型参数量下行为稳定性会有非常显著的提升。这也是我认为Agentic SFT在近期最实际的一个落地点——它能让中小模型跑动Agentic RAG这类的复杂循环。4.2 一个Agentic RAG训练数据的构造案例假设我们要训练一个带检索判断能力的模型Agentic SFT的数据设计可以这么拆把一次Agentic RAG的完整交互分解成路由阶段、查询改写阶段、相关性判断阶段、生成阶段。对应到SFT数据每条样本都要包含这四个阶段的轨迹标注。比如用户提问帮我对比一下A框架和B框架在长文本任务上的表现。 助手思考这个需要外部知识走检索关键词拆分为【A框架长文本表现】和【B框架长文本表现】。 助手动作search({query: A框架 长文本 性能, top_k: 5}) 环境返回[5条摘要] 助手动作search({query: B框架 长文本 性能, top_k: 5}) 环境返回[5条摘要] 助手思考两轮检索结果都拿到了覆盖了对比维度可以直接综合生成答案。 助手回答A框架在……注意这里我特意设计了两轮检索而不是一次检索就完事——这就是在教模型复杂问题需要分解成多个子检索是Agentic RAG和普通RAG最大的行为差异。实际构造时还需要在数据里混入另一种负样本用户问题本身已经足够清楚模型调用检索函数后返回了一堆无关结果模型学会这轮结果不相关换关键词再试一次。这种数据构造的工作量不小但收益直接。我印象特别深的一个实验是拿一套混合了无需检索直接回答、单轮检索、多轮检索三种类型的数据做Agentic SFT之后模型在评测集上的是否需要检索判断准确率提升了接近20个点而且最妙的是它学会了在答案已经齐全时主动停止检索这一点在纯prompt版本里几乎做不到。4.3 先想清楚Agentic RAG和SFT的边界也不能把Agentic SFT神化成解决Agentic RAG的全部。要区分清楚SFT负责教行为模式不负责加工线上新知识。Agentic SFT训练完的模型如果拿到一批出厂后新增的工具或知识库它照样不知道怎么用——那是RAG或者工具库要去解决的实时性问题。换句话说Agentic SFT教的是怎么做决策RAG负责的是决策时拿什么数据。两边配合才是完整方案。还有一点容易混淆的地方很多人以为Agentic RAG只要在prompt里加一句你是个智能体可以多次检索就等于完成了Agentic改造。这个想法在强模型上确实能沾点边但在资源和成本受限的场景或者说对响应时延有严格要求的场景里靠SFT把决策过程固化下来无论从性能还是稳定性来说都更可靠。5. 评估与迭代怎么知道模型是真的会了Agentic SFT最容易出现的幻觉是训练loss很低评测paper漂亮一上真实环境就原形毕露。原因很简单轨迹数据里有太多纸面上成功的样本模型可能在考试时背答案但没真正掌握决策能力。所以评估不能只看最终答案对没对必须深入到行为层面。5.1 离线评测按层级拆解成功率我自己习惯把Agentic评估指标拆成四个层级每一层可以单独观测、单独定位问题指标层级具体示例观察重点格式正确率动作JSON合法、工具名匹配、参数schema正确模型是否学到了如何表达动作单步决策正确率给定状态该调哪个工具、参数选得对不对模型是否学到了该做什么路径效率成功完成任务所用步数 vs 最优步数有没有绕路、重复调用、无效搜索任务成功率最终是否达成用户目标全局行为是否闭环这四个指标经常出现矛盾信号比如格式正确率高但任务成功率低说明问题出在决策层面任务成功率高但路径效率低说明模型在硬闯路径优化空间大。这种分层评估法的好处是迭代时有明确的方向感而不是面对一个笼统的效果不好发呆。5.2 从失败案例倒推数据问题的三板斧评测发现问题之后的修正路径我一般走三板斧第一板斧看错误类型分布。把所有失败轨迹按错误点打标归类成格式错误工具不存在参数不合法检索结果未用没判断完就收尾等几类。如果某种错误占比超过30%直接去数据里找到对应场景补样本效果立竿见影。我遇到过参数不合法占35%的情况补了800条相关轨迹后这个比例立刻腰斩。第二板斧看基座模型本身的跳板能力。有些决策错误不是SFT数据不够而是基座模型压根没见过这种任务的中间状态它理解不了Observation返回的是键值对下面该用哪个键做下一步判断。这时候补轨迹作用不大得考虑换更强的基座或者在合成数据时故意加入更多的观察解读训练样本。第三板斧盯住泛化盲区。用一个没进训练集的新任务集做评测看模型能不能把已学的工具调用模式迁移过去。如果训练集上任务成功率90%新任务直接掉到30%说明模型学的是背路径而不是学策略。规避方法是在合成数据时把任务描述做大量paraphrase同一工具多换几种说法、多换几种组合路径逼模型学工具的语义而不是背任务模板。5.3 把持续记录做成团队资产标题里有持续记录四个字这个意识我觉得在评估环节特别重要。我现在的习惯是每次实验都建一个独立的实验记录文件固定记录几样东西基座型号与版本、数据配比与条数、损失mask策略、超参数、评测指标明细、以及我追加标注的这次实验让我产生了什么新假设。这个文件不光是给自己看的团队里新同学进来之后翻完记录就能避开我踩过的七八个坑这种累积效应非常可观。实验记录的一个关键细节是保留失败的trajectory快照。每次评测跑出的失败样例我不只记一句失败原因参数错误而是连当时的完整输入输出、工具返回都存下来。积累几百条之后再去聚类你会发现很多失败模式在初次定位时看不到它们往往是组合型的比如参数错误源于上一步思考不充分单看快照根本发现不了。6. 踩坑实录与现阶段的一些没想明白的事这篇文章既然定位是持续记录最后就按我自己的习惯把踩过的坑和还没想通的问题原样摊开。6.1 常见问题速查表现象常见原因我验证过的解决办法工具调用格式崩输出缺括号或参数名错动作token没做掩码、数据量不足、特殊标记过多改用action-aware loss增加单步调用数据精简格式标记模型疯狂调工具连今天天气怎么样都先查库轨迹数据里无需工具样本太少在配比中专门加入5%~10%的直接回答样本模型总在第二步放弃轨迹中途断掉失败轨迹被错误标记为成功、数据结尾处理不当重新校验轨迹执行结果丢掉的捡不回来就重建训练loss下降漂亮上环境后表现拉胯数据有采样偏置环境验证环节没过关每条正样本都真实跑一遍环境并保留失败轨迹做对照模型学会了工具调用但忘了写自然语言回答配比失衡通用指令数据太少回退配比把通用指令数据比例提到25%以上长轨迹里串门污染上一个任务的状态影响下一步packing时mask没加对检查attention mask每条样本边界补pad并重新mask6.2 我现在还没完全想清楚的问题首先Agentic SFT和强化学习的分工边界在哪里。短期看SFT作为模仿阶段几乎不可少但从更长期的角度如果想让模型在训练数据覆盖不到的极端路径上也能稳住单靠SFT的模仿上限肯定不够。下一步应该是SFT偏好优化强化学习的组合但三者在数据配比、训练轮次上的最优配合我还在实验。其次合成数据里的教师偏见问题。虽然环境验证能筛掉执行失败的轨迹但没法筛掉教师模型特有的思维惯性。比如强教师模型习惯在观察足够时多做一轮确认性检索学生模型学到后会在线上环境里多浪费一步调用。怎么在数据合成时引入更多样的教师策略我暂时没有好的解法。最后是评估指标本身能不能被刷。任务成功率是终极指标但单测任务成功率容易刷高真实任务泛化又会崩。我最近在尝试新任务成功率和路径效率两个附加指标感觉方向是对的但还没有形成一套完整的判断标准。6.3 现阶段我可以给出来的实操建议基于目前这些实验记录如果有人现在要启动Agentic SFT项目我个人最想划重点的是先做小规模闭环再谈大规模上线。不要一上来就铺十万条轨迹先把几百条高质量数据、配合一个真实的工具环境走完数据生产-训练-评估-修正整个闭环。这个闭环跑通之后你才知道自己环境里哪类任务会是重灾区然后再去扩充数据成功率会高很多。数据验证环节的成本不能省。无论是用API还是本地环境轨迹合成了必须执行执行不了就得返工。这个环节慢一点、贵一点都值得它是数据质量的总闸门。基座选型上要多留一个心眼。我发现Agentic SFT对基座的要求和普通SFT不完全一样除了基础语言能力基座自身的结构化推理能力更重要同一个数据集在不同基座上的结果差异非常明显不一定最强的基座效果就最好。值得做一轮小规模的基座筛选实验再定。这篇记录写到这里其实只是把现阶段能看明白的部分固化了。Agentic SFT这个方向还在快速变化昨天觉得对的理解明天可能就被新的实验推翻。但有一件事我越来越确定不管前面还有什么新SOTA方案冒出来把行为决策过程变成可学习的监督信号这个思路本身一定会在这波智能体浪潮里长久占据核心位置。后续有新进展我会继续补充进来也希望这篇记录能帮同行们少走几个我走过的弯路。