#强化学习

汉松
1个月前
DeepResearch Agent 有一个很大的问题就是多次的搜索阅读很容易就把上下文窗口用光了,常规的做法是像 Claude Code 一样,超过阈值就触发记忆压缩。通义的论文《ReSum》提出了一种在 RL 中让模型学会更好地利用压缩内容的方法。 这个方法我们之前也考虑过,但这样做在强化学习的时候会有一个问题:一旦触发记忆压缩,整个历史记录都会变成压缩后的内容,此时模型就只能看到压缩后的 token,压缩前的就丢掉了,此时模型就学不到压缩前的动作了。我们当时没想到好的解法,而 ReSum 提出一种可行的方案:把压缩前和压缩后的轨迹分成两条分别给奖励。 举个例子: 正常的轨迹是这样的:“用户查询 → AI 助手 → 工具调用 → AI 助手 →... → AI 助手 → 答案” 加入了 summary 工具之后,当轨迹接近上下文窗口的时候,系统就会触发总结。 接近上下文窗口长度的轨迹 A:“用户查询 → AI 助手 → 工具调用 → AI 助手 →... → AI 助手 → summary” 新的轨迹 B:“用户查询 + 摘要 → AI 助手 → 工具调用 → AI 助手 → 答案” 关键点来了,当 B 答对时,B 的奖励会复制给 A。为什么要这样做? 尽管 A 没有直接得出答案,但它找到了一个有用的摘要,最终导向了正确的答案,所以 A 中的所有动作也得到了正向的激励。这样模型能通过 A 学会收集能够产生优质摘要的关键信息。而模型则通过 B 学会了利用摘要信息来高效地完成任务。这就是一箭双雕。
「Agent, RAG, Reasoning」论文 ReSearch: Learning to Reason with Search for LLMs via Reinforcement Learning ReSearch,充满了 ReAct 的影子。它教会模型“何时求助于世界”;但局限在于,ReSearch 只能依赖一种工具。 作者提出了一种创新的框架,名为 ReSearch,旨在通过强化学习(RL)训练 LLM 在推理过程中有效地反复利用 search API 完成任务。 从任务形式上,它解决的是增强LLM+ RAG的问题,但并不同于基于 embedding 的单轮相似度检索方法。 它关注的是多次 query、反复调用 search API 来完成信息查询任务。 并不同于基于embedding去单次算相似度的方法,它解决的是多次query,反复调用search API完成外部信息查询的问题。 而反复调用 API,涉及推理能力去决策调用的时机,以及生成调用的参数 —— 这是一个典型的 agent + function calling 场景。 ReSearch目标将这种search的reasoning能力通过RL学到。 具体来说,ReSearch 采用了专门为搜索功能设计的训练模版: <think>...</think>:表示模型的思考过程; <search>...</search>:表示模型发起的搜索查询; <result>...</result>:表示搜索引擎返回的结果; <answer>...</answer>:表示模型给出的最终答案。 特别地,ReSearch 的奖励函数不是仅仅基于答案对错,而是采用 rule-based 的组合机制:基于答案的 F1 相似度 + 输出格式是否符合模板,以此优化 policy,微调语言模型参数。 此时不免再次提及 ReAct:ReSearch 充满了 ReAct 的循环影子——: Reasoning:模型的思考过程; Action:模型发起的调用; Observation:工具返回的反馈。 ReAct 是神作,它以 verbal reasoning (人话)的方式,将原本充满数学公式的 RL 概念转化为语言链式推理,让 LLM 学会如何使用工具,优雅而简洁。 一些思考: ReSearch 以及前几天分享的 ReTool 是非常类似的工作,它们都通过强化学习微调,将使用工具的能力内化于语言模型中,增强工具调用的鲁棒性。 但它们的局限性也非常明显:ReSearch 和 ReTool 都只支持一种工具 —— search API 和 code interpreter。 而 ReAct,通过 Prompt Engineering,就可以灵活调用多个外部工具。 ReSearch 和 ReTool 的 RL 框架是为“单工具、二选一调度”设计的。如果强行扩展为多工具,训练信号将更加稀疏、credit assignment 更加困难,其策略网络、reward assignment、以及 rollout 表达能力都需要重新设计。 我们距离真正原生具备多轮、多工具能力的通用 Agent,还有一段距离。