前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >解密prompt系列50. RL用于优化Agent行为路径的一些思路

解密prompt系列50. RL用于优化Agent行为路径的一些思路

原创
作者头像
风雨中的小七
修改2025-03-06 08:26:42
修改2025-03-06 08:26:42
2500
代码可运行
举报
文章被收录于专栏:小七的各种胡思乱想
运行总次数:0
代码可运行

OpenAI新推出的Deep Research功能,属实有些惊艳,也验证了去年的一些观点,之后的大模型工作流会呈现一些截然不同的形态,有敏捷型的例如语音端到端的及时对话,也会有异步长流程的复杂任务,去做例如课题研究,信息收集,实验设计,假设验证等等。

而Deep Research的效果类似O1的长思考是非常长的行为链,OpenAI也直接表明Deep Research是使用和O1相同的RL训练得到的。但这里比O1更难的就是数据集的设计,训练过程动态行为数据的引入和RL目标的选择。

这一章我们分别介绍从两个不同角度使用RL优化Agent行为链路的方案,其中PaSa更类似Deep Research的链式行为链使用RL直接优化行为路径,而ARMAP则是使用RL优化Verifier指导行为链的生成。

Bytedance-PaSa

PaSa: An LLM Agent for Comprehensive Academic Paper Search

https://pasa-agent.ai/?utm_source=ai-bot.cn

https://github.com/bytedance/pasa

PaSa是字节推出的自动搜索相关论文(引用论文)的Agent,通过RL优化Policy模型,优化论文搜索和论文筛选行为,实现更全面,精准的论文搜索,充分考虑到论文搜索场景的长尾性,query的复杂性,以及论文引用的关联性等特点。

其实论文引用收集这个目标也可以用于综述类论文写作任务,因为写作类的开放任务很难使用基于规则的RL目标进行优化,但是如果假设模型的写作能力已经足够应对常见的任意写作任务,那是否收集足够的论据和论文就是综述类论文写作的一个间接衡量目标了。

数据集

对于智能体的行为优化,比较核心的部分就是数据集的构建,毕竟O1可以依赖更多有标准答案的Math和Coding数据集,而Agent优化需要依赖和现实世界交互获得的实时数据。这里论文开源了

  • AutoScholarQuery训练数据:训练验证测试的划分分别为33511/1000/1000
  • RealScholarQuery Benchmark: 包含50个标注的高质量

数据格式如下,包含用户的搜索query,搜索时间,以及和Query相关的论文标题列表

其中AutoScholarQuery的构建方式是搜集了2023,2024年的ICLR,ICML,N二UIPS,ACL,CVPR的论文,每篇论文都会使用Related work部分的内容,使用以下Prompt让GPT4-o生成研究员可能使用哪些Query来收集这些相关论文。这样Query和Related Work部分的论文就构成了以上的样本,时间用了比较宽松的论文发布时间。作者人工抽检了100条样本,整体query和论文的相似度在90%+。

平均每个问题对应的论文数量的统计如下,平均1个问题对应两篇以上论文,p90在5~6篇。

但这样构建的数据集有两个问题:

  • paper list只是Query能搜索到的论文的一个子集,毕竟研究员写相关论文时往往只会列一些核心论文
  • 缺少搜索路径,数据中并未包含研究员收集这些论文的过程,因此整个搜索行为链都要依赖RL进行路径搜索。

而RealScholarQuery测试Benchmark是筛选了真实研究员的50条具体的搜索Query,人工使用多种手段进行信息搜索,包括PaSa自身,Google, google Scholar, ChatGPT(搜索模式),GPT4o Query改写等等,把所有途径收集到的论文使用人工标注得到的高质量,高覆盖的数据集,因为标注成本过高,所以只有50条,整体paper量级显著更高如下

Agent训练

如上图所示,论文设计了两个智能体进行配合

  • Crawler:负责检索论文通过特殊token控制智能体的三种行为
    • 【Search】生成检索Query进行论文搜索,把搜索到的论文插入Paper Queue
    • 【Expand】且从已经搜索到的论文中提取引用论文,并把这些论文都插入到Paper Queue
    • 【Stop】重新回到用户Query和当前Paper Queue中最新的论文
  • Selector:针对Paper Queue中的每篇论文,判断和用户提问是否相关,丢弃无关的,保留相关的。

整体上Crawler负责提升召回,Selector负责提升准确。考虑这里Crawler需要启发式检索的所以使用RL训练,而Selector更多是descriminate的任务直接用Prompt或者监督微调就可以。所以下面我们重点说下Crawler RL训练的细节,整个训练的核心目标就是更高效率,在尽可能少的检索行为下搜索到最全面的论文。

首先是Crawler的两个行为,搜索和引用论文定位,它们的实现分别通过以下Prompt实现

奖励函数的定义

奖励函数的公式如下:

r(st, a_t) = \alpha \times \sum{i=1}^{n_t} \mathbb{I}(q, p_i, t) - c(a_t)

其中:

  • s_t是当前的状态(包括当前的LLM上下文和论文队列)。
  • a_t是Crawler在当前状态下执行的动作。
  • \alpha是一个奖励系数,用于调整奖励的幅度。
  • n_t是执行动作a_t后添加到论文队列中的新论文数量。
  • \mathbb{I}(q, p_i, t)是一个指示函数,用于判断论文$ p_i$是否与用户查询 q相关。
  • c(a_t)是执行动作a_t的成本。

其中\mathbb{I}(q, p_i, t)判断用户Query和论文是否相关,论文考虑到以上训练集中每个Query标注的论文,只是真实答案的子集,因此补充了Selector==1的论文。而搜索成本的选择,C(search)=0.1, C(expand)=0.1, C(stop)=0。

奖励的计算过程

  1. 执行动作:Crawler在当前状态下执行一个动作a_t,例如,执行搜索或扩展引用。
  2. 更新论文队列:执行动作后,Crawler会将新找到的论文添加到论文队列中。
  3. 计算奖励:对于每个新添加的论文p_i,Selector+数据集标注共同检查它是否与用户查询相关。如果相关,则增加奖励;否则,不增加奖励。
  4. 减去动作成本:最终奖励是相关论文的奖励总和减去执行动作的成本。

多Session训练过程

明确了奖励函数还有1个问起需要解决就是整个搜索过程的长轨迹和长轨迹带来的稀疏奖励问题。因此论文选择了分Session来进行奖励函数的计算,而Session的划分,就是使用以上的Stop Token,包括两种行为链

  • Search Session:用户查询q → 生成搜索词 → 调用搜索工具 → 结果加入队列 → Stop。
  • Expand Session:处理队列中的论文p → 提取子章节引用 → 新论文加入队列 → Stop。

而每个Session励函数的计算会同时考虑这些新论文的及时价值(session内奖励),也就是r(s_t,a_t),也会考虑这些新找到的论文,对后面找到更多论文带来增量价值(跨session奖励)的影响,而这部分跨Session的影响,是通过未来状态的期望来进行估计的。例如Expand行为发现了5篇新的论文,那跨session的奖励,就是这5篇论文在未来Session中价值的折现。

V_{\phi}(s) \approx \mathbb{E}_{\pi_{\theta}} \left[ \sum_{k=0}^{\infty} \gamma^k r(s_t, a_t) \mid s_0 = s \right]

其中:

  • \gamma是折扣因子,表示未来奖励的重要性。
  • r(s_t, a_t)是在状态s_t下采取动作a_t后得到的即时奖励。

那具体每个session的奖励函数,就是分别包括了该session直接获得的论文带来的及时奖励,以及该论文内部引用论文在未来session带来的预期奖励,并增加了KL散度来避免策略函数偏离过大。

\hat{R}_t = \sum_{k=0}^{t_{i+1}-1-t} \gamma_0^k \left[ r(s_{t+k}, a_{t+k}) + \gamma_1 \sum_{j=1}^{n_{t+k}} \hat{V}_\phi(S_{q+p_j}) - \beta \cdot \log \frac{\pi_\theta(a_t|s_t)}{\pi_{\text{sf}t}(a_t|s_t)} \right]

奖励函数对应的就是优势函数,如果奖励函数超过该状态的平均价值,则意味着策略函数应该进行该动作例如Search或者Expand,反之不应该。这样策略函数(LLM)就可以依赖以下的优势函数提供的信号,来优化大模型生成行为链的过程了。

\hat{A}(s_t, a_t) = \hat{R}_t - V_{\phi}(s_t)

PPO训练过程中为了稳定,论文选择了先冻结策略函数训练价值函数,再同时开放训练,并且在PPO之前也采用了SFT进行Imitation Learning。其他细节我们就不具体介绍了,感兴趣的同学可以直接去看论文。

MIT-IBM:ARMAP

ARMAP: SCALING AUTONOMOUS AGENTS VIA AUTOMATIC REWARD MODELING AND PLANNING

https://github.com/heaplax/ARMAP

ARMAP是面向购物场景的多模态Web Agent,论文的出发点是在多步Agent的场景中评估比生成要简单,所以论文使用RL对Agent的多步行为链的Reward模型进行优化,并使用该Reward模型来指导Agent的行为链路选择。Take away主要是论文给出了自动构建Agent对比行为链样本来训练reward模型的方案。

如上图所示,论文选择了Offline Training的方案,也就是离线构建成功和失败的大模型行为链路,然后使用RL进行优化训练,整个样本构建的流程可以分成以下3个步骤: 生成任务指令,大模型基于指令生成行为链路,构建正负行为链的样本对。样本构建流程之后就是Reward模型训练,以及基于Reward模型的Agent行为链路搜索生成。具体细节如下

  • 生成任务指令

这里以Science World数据集举例,它是一个虚拟环境,环境中智能体可移动,可观测环境并改变环境状态。这个任务里生成Agent初始任务指令的Prompt如下,输入包括fewshot,对环境状态(state)的描述,和Agent可操作行为的描述,让模型生成Agent需要完成的任务指令,例如“你要寻找个活人跟他say hello之类”

代码语言:python
代码运行次数:0
复制
SCIWORLD_GEN = """You are a helpful assistant to do some scientific experiment in an environment.
In the environment, there are several rooms: kitchen, foundry, workshop, bathroom, outside, living room, bedroom, greenhouse, art studio, hallway

The available actions are:
open OBJ: open a container
close OBJ: close a container
activate OBJ: activate a device
deactivate OBJ: deactivate a device
connect OBJ to OBJ: connect electrical components
disconnect OBJ: disconnect electrical components
use OBJ [on OBJ]: use a device/item
look around: describe the current room
examine OBJ: describe an object in detail
look at OBJ: describe a container's contents
read OBJ: read a note or book
move OBJ to OBJ: move an object to a container
pick up OBJ: move an object to the inventory
pour OBJ into OBJ: pour a liquid into a container
mix OBJ: chemically mix a container
teleport to LOC: teleport to a specific room
focus on OBJ: signal intent on a task object
wait: task no action for 10 steps
wait1: task no action for a step

You will be given a dialogue between you (assistant) and a human user. You need to generate the task description after understanding the dialogue given to you.
In order to help you better generate the task description, I will give you an example below.

In this example, a human user gives a Task Description at first.
Then you work as an assistant and talk with user to finish the task step by step using the available actions above.
Thought and Action are your reasoning and the actions you take at each step. Observation is provided by the human user; it is an observation of the surrounding environment after you have executed the action.
In the end, you need to restore the Task Description based on the whole dialogue.

Here is the example:
此处省略大段Example

Here is the task you need to do:
[placeholder]

You should generate the Task Description following the format like examples below and generate it based on the dialogue above without any other words.
Examples:
Your task is to boil ice cream. For compounds without a boiling point, combusting the substance is also acceptable. First, focus on the substance. Then, take actions that will cause it to change its state of matter.
Your task is to use chemistry to create violet paint. When you are done, focus on the violet paint.
Your task is to find a(n) living thing. First, focus on the thing. Then, move it to the red box in the bathroom.

Task Description: 
"""
  • 收集Agent行为链路

基于以上生成的任务指令,会在使用Prompt让模型来生成多样的行为链路,这一步是借助当前模型能力对Agent行为路径进行探索。并且还引入了对完整行为链的反思能力,对已生成的行为链进行二次的优化。Prompt太长这里就不展示,不过和以上Instruction Gen的Prompt主体相同,都是给出状态,可用行为,让模型生成下一步的Action。

  • 构建正负样本对

针对以上生成的多样的行为链路,论文会使用prompt把正确的行为链路作为上文,让模型给出和正确链路相似的错误链路,这样就能构建对比样本对,帮助Reward模型学习定位关键的错误节点。以下是论文给出的一个正负样本对比

  • Reward模型训练

基于以上的正负样本对对VILA模型进行强化学习,RL的损失函数就是让模型能显著区分以上正确的行为链路和错误的行为链路,也就是cross-entropy Loss。(本来我以为都构建关键错误步骤了,难道不是训练PRM?让模型识别关键错误步骤,这样可以在生成阶段识别错误步骤,结果是整体行为质量判断)

  • 基于Reward模型的Agent链路搜索

基于Reward模型就可以进行推理搜索,这里论文尝试了Best-of-N,Reflection和MCTS,这三种广度,深度,和树形搜索策略,感觉之前在Inference Scaling的尝试上,基本上MCTS在多数场景下效果都是最好的,在这里也不例外。

  • Reward的灵活探索

其实这一步是为数不多感觉有意思的点,就是可以根据不同目标调整Reward目标的设计,例如加入步数Penalty,类似当前对长思考COT长度的Penalty,引导Agent在更少的步数里面完成整个任务,或者在webshop任务里面加入价格奖励,引导模型在购物搜索时寻找价格更低的产品。

这其实是后面Agent RL设计的一个很有意思的方案,就是针对不同场景的Agent诉求,在已有任务目标的基础上,加入更多约束项,例如金融里面在保证收益的基础上要控制回撤,控制调仓频率等等。

想看更全的大模型论文·微调预训练数据·开源框架·AIGC应用 >> DecryPrompt

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Bytedance-PaSa
    • 数据集
    • Agent训练
      • 奖励函数的定义
      • 奖励的计算过程
      • 多Session训练过程
    • MIT-IBM:ARMAP
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档