在构建多轮工具调用的开放域research agent时,SFT和RL流程应该如何设计和优化?
research agent很麻烦,尤其是多轮调用以后,轮次越多,越容易出错。而且单靠SFT真的很难做好,但RL又特别容易翻车,我只能说说我的一些经验,供参考。
SFT阶段
很多人觉得SFT就是收集点数据喂给模型就完事了,其实SFT阶段其实是在打地基,数据怎么构建直接决定了后面RL的效果。
首先就是数据,如果手工标注数据不多,就用GPT或者Claude这种强模型生成一批种子数据,然后人工筛选质量高的留下来,这部分人工是少不了的。
而且数据的多样性也要保证,比如简单的2-3步工具调用要有,复杂的需要10步以上还要中间做信息综合的也要有。你说的开放区域更麻烦,比如科技、金融、医疗类的细节都不一样,这也是要考虑的问题。
我只能说说技术类的,这里要保证数据的边缘案例要保证有,比如API调用失败怎么办、信息不完整怎么继续追问、多个来源信息冲突怎么处理,这些都得有样本。而且失败案例也有纯成功轨迹训练出来的模型,遇到意外情况就不知道怎么办了,所以8:2的成功失败比例就可以。
有CoT格式的最好,会对规划能力提升明显,没有的那就没办法了。
另外就是Loss Masking(损失掩码)一定要有。一定要把环境返回的 Observation(比如搜索结果、网页内容)给 Mask 掉,只计算模型生成的 Thought 和 Action 的 Loss。我们不希望模型去“预测”搜索结果是什么,我们要它学的是“根据当前的搜索结果,下一步该怎么思考”。
RL阶段
RL容易崩的原因是reward设计不好模型会学歪,学习率调不对也会让模型直接忘掉之前学的东西。
奖励函数这块是麻烦的。单纯用任务成功与否做二元奖励信号太稀疏了模型根本学不动。要设计多维度的奖励。
我用DPO来做Chosen(正例)选的是引用精准且路径最短的轨迹,Rejected(负例)是虽然答对了,但是引用了不存在的链接,或者明明一步能搜到的东西搜了三步的这种多于步骤的。
而且对于多轮 Research,只看最后结果对不对太粗糙了。我是对每一个 Step 进行打分。如果模型第一步搜索关键词选得很烂,哪怕最后碰运气答对了这一步也得扣分。 具体就是参考的openai这篇论文。
最后还有个很严重的问题,Research Agent 会读很多网页这时候Context Window 很快就爆了在 SFT 阶段你就要教会模型做一个动作:Summary。
不要让模型无限地往回看所有的原始网页内容,要在多轮交互中间插入一种数据模式让模型主动把前几轮搜到的信息做个摘要,这既省 Token又能防止模型在长上下文中迷失(Lost in the Middle)。
以上就是我一些算是经验吧,供参考
小更一下评估:
stf是基石所以肯定不能跳过评估,而且不能只看 Loss,也不能只看最后的 Answer 准不准。SFT 阶段主要评估的是“执行能力”和“格式依从度”。
所以需要建立一个验证集,包含约 100-200 条不同难度的 Research Query,进行以下层面的自动化评估, 如果 SFT 后的模型 Format Error > 5-10% 或 Completion Rate < 80%,是不能进入到RL阶段的,因为进入了也会出现问题。说明基础就不行。
rl的话我用DPO所以性价比最高的方案就是构造 (Winner, Loser) 数据对。用大模型比如说gemini3或者gpr5生成的成功轨迹然作为winnner,失败的案例作为包含死循环、幻觉引用、或搜索关键词质量极差的轨迹的作为loser。
然后如果开放域没有答案可以试试使用 LLM-as-a-Judge来进行端到端的打分,我看有认识这么做的但是我没测试不知道效果怎么样。
大概就是这样了