如何提升大模型的Agent推理规划等能力?

文摘   2024-07-16 14:20   上海  


 从去年GPT爆火之后,越来越多的工业界和学术界都关注Agent应用。本文尝试捋一下两方面工作:1、对于较为复杂的任务,Agent推理规划能力一直被诟病,尤其是《TravelPlanner: A Benchmark for Real-World Planning with Language Agents 》,发现对于复杂规划任务,即便如SOTA模型GPT4也只能达到0.6%,其他LLMs全军覆没。2、对于大部分公司来说,经常需要进行技术自研,那么有哪些方法可以提升LLM的agent能力

TL;DR: 

COT
基于思维链增强LLM

TOT


DFS、BFS思维树

React:Reason and Action


既思考又行动,多次迭代取得最终结果。


Reflexion

提供口头交互轨迹作为强化学习的反馈
AgentTuning通过多任务微调来提升agent泛化能力
FireAct基于丰富的对话路径进行提升

AgentFLAN

数据构造,将训练语料格式与预训练保持一致

KnowAgent

基于动作知识库进行提升agent推理能力
AutoACT基于多agent


01



COT:慢思考的开始


思维链:一直跟进大模型的同学对这个技术应该听了很多遍,确实是非常具有开创性的工作,至于之后的各种推理一致性、multi-step 推理都是花式的对思维链的补充。具体原文来说:Chain-of-thought prompting enables large language models to tackle complex arithmetic, commonsense, and symbolic reasoning tasks。通过增加推理过程到prompt中,能很大幅度的提升在数学推理、常识推理、符号推理上的指标。具体做法如下经典图:

但这个工作笔者觉得最重要的可能不是这样一个简单的例子。而是对于大模型的认知理念的差异。过去几年很长一段时间,都是将bert等nlp模型视为理解文本的语义。但现在的差异在于将大模型视为Agent,视为一个能思考的个体,这个在去年六七月可能都没有多少人这么坚信,现在则不同。如果你始终坚信,大模型具备初高中学生的能力,你要做的工作只是激发他的能力,那才有可能有Jason Wei思维链这样的工作。这里在放一张对于快慢思考的对比图:当我们完成直觉本能的一些任务如2+2=?,根本不需要思考,但问题变得复杂之后,我们则需要理性的、逻辑的决策思考。这个理念我们后面做大模型的落地应用应该也要去坚守。




02


ToT:思维树


思维树就是在这样的理念下进行试验分析的,选择的任务是Game of 24,给你4个数字通过什么样的运算(加减乘除)可以得到24。从图上可以看出来,思维树比起原始思维链和一致性思维链,做的更细致,并不要求每个路径一条路走到黑,而是每一步进行搜索如BFS、DFS,在探索的时候还可以进行验证和回溯。个人觉得最值得参考的点是不断向人或者机器去解决一个问题的方式去思考。




这里提供一个简单的Prompt,我经常用来日常排障:


Imagine three different experts are answering this question.

All experts will write down 1 step of their thinking, then share it with the group.

Then all experts will go on to the next step, etc.

If any expert realises they're wrong at any point then they leave.

The question is...

假设三位不同的专家来回答这个问题。所有专家都写下他们思考这个问题的第一个步骤,然后与大家分享。然后,所有专家都写下他们思考的下一个步骤并分享。以此类推,直到所有专家写完他们思考的所有步骤。只要大家发现有专家的步骤出错了,就让这位专家离开。请问...



03


ReAct:知行合一


React的全称是Reason and Action,既思考又行动,这个框架意义也挺大,后续很多agent sft的工作都是参考这篇文章。这里的Reason就是指的思维链推理过程,Action指的是不同场景下采取的动作,跟环境紧密相关。他的意义在于,之前COT、TOT获取信息的来源为不同的思考路径,但如果agent本身会在不同环境中完成任务,那么一定会进行交互,这里交互的执行动作,会给agent带来更多的信息,比如成功或失败的信息,有没有完成的任务。论文实验的一些任务包含 《做家务》、《多跳推理问答》等需要反复推理动作的任务。

格式还是比较简单:

通过<环境Observation>反思:

首次把Action也纳入解决问题模块,相比纯Reason和纯Action,解决复杂问题要更好

Thought: ... 

Action: ... 

Observation: ... ... (Repeated many times)


04


Reflexion:Verbal强化学习


这篇论文的题目是Reflexion: Language Agents with Verbal Reinforcement Learning。主要有两点:1、大模型就是Agent了2、Verbal强化学习。Verbal的含义为:adj.口头的,非书面的;用言辞的,文字的。为什么要提出这个概念,可以看看下图。在ReAct的基础之上,专门增加一个Evaluator进行reward的打分,等价于强化学习中的环境奖励。使用交互轨迹和奖励进行综合反思。

从几个经典任务如Alfworld、HotpotQA等上提升还是比较明显的


 

05


AgentTuning:多任务微调Agent

这是智谱AI的工作,还是比较良心的,数据和模型都放了出来。论文提出了一种名为AgentTuning的方法,通过构建一个轻量级的指令调整数据集AgentInstruct,并采用混合指令调整策略,结合AgentInstruct和开源通用指令进行微调,从而在不损害LLMs的一般能力的情况下增强其代理能力。AgentTuning用于对Llama 2系列进行指令调整,生成AgentLM。

Key TakeAway:

  • 数据格式:agent的SFT数据格式为ReAct

  • 数据量级:AgentInstruct数据集包含了来自六个不同代理任务的1,866个经过验证的交互轨迹,这些轨迹具有高质量的Chain-of-Thought(CoT)推理过程

  • 数据配比(1领域:4通用):论文中通过在7B规模的模型上从0到1的区间内以0.1的间隔扫描混合比例η,最终选择了η=0.2,这在未见过的代理任务上表现最佳,即20%的数据来自于AgentInstruct数据集,这部分数据专注于提升模型的代理能力,例如规划、记忆和工具利用等特定Agent任务,其他都是通用shareGPT数据

  • Trajectory:多轮轨迹用于LLM学习。给后续研究提供一些参考即如何保证trajectory的多样性和质量

实验结果表明,在alfword、hotpot等几个任务上训练后,在没有训练过的场景任务上也能有不错的效果,这进一步体现了大模型的巨大潜力,类似于FLAN-T5,只不过换成了agent相关工具使用或者推理的泛化能力。


06


FireACT:对话路径多样性

这篇论文也是通过微调的方式提升大模型的Agent的能力,只不过数据的形式有了些新的思考:不同思维框架如COT、React、Reflexion等的数据格式混合能提升多样性。

所以基本上可以总结为如下图,通过不同任务不同格式的轨迹数据微调大模型的agent能力。


07


AgentFLAN:数据构造与预训练一致性




这个工作比较重要的是对于数据的处理,主要包含两个发现:

(1) SFT一个agent和预训练数据格式不一致。可看下图

(2) LLMs 对于不同任务的学习不一样(可能是观察数据来的假设)

(3) 当前方法会有些幻觉:如格式不对或调用不存在的工具

KeyTakeAway:

  • 保证数据的一致性,将一个任务拆分成多轮对话的如图

  • 数据配比:将多轮对话拆分为推理、检索、理解、指令遵循,并在数据构造的时候均衡各类型的比例


  • 对于幻觉问题,增加负样本




08


KnowAgent:动作知识库增强


      这篇论文介绍了KNOWAGENT,这是一个旨在增强大型语言模型(LLMs)规划能力的新方法。它通过结合明确的行动知识来解决LLMs在与环境交互时生成可执行行动的复杂推理任务中的不足,特别是在任务解决过程中规划轨迹的指导不足,导致规划幻觉问题。

       具体来说KNOWAGENT利用行动知识库来约束规划过程中的行动路径,通过将行动知识转换为文本,使模型能够更深入地理解和利用这些知识来创建行动轨迹。最后,通过知识型自学习阶段,使用模型迭代过程中开发的轨迹来不断改进其对行动知识的理解及其应用即迭代式SFT

    总结来说也是一篇关于数据的工作,只不过,框架从多轮轨迹的优化增加到类似RAG的思路,将动作知识库转化为文本融入模型微调过程中去。

  • 什么是动作知识库?

    • 动作知识库(Action Knowledge Base, AKm)是KNOWAGENT框架中的一个关键组成部分,它定义了一组特定的动作(Ea)以及管理这些动作转换的规则(R)。这些动作和规则构成了一个结构化的知识体系,用于指导语言模型在执行任务时生成合理的行动轨迹。以下是一个简化的动作知识库案例,用于解释其结构和应用:

    • 动作集合 (Ea):

      • Search: 搜索相关信息或数据。

      • Retrieve: 检索特定的信息或实体。

      • Lookup: 在已知信息中查找特定关键词或数据。

      • Finish: 完成任务并输出结果。

    • 动作规则 (R):

      • Rule 1 (Search -> Retrieve): 如果当前动作是Search,下一个合法的行动可以是Retrieve,表示在搜索后找到一个具体实体。

      • Rule 2 (Search -> Lookup): 从Search动作可以转换到Lookup,表示在搜索过程中需要查找特定关键词。

      • Rule 3 (Retrieve -> Finish): 如果Retrieve动作成功,可以接着执行Finish动作,表示检索到所需信息后完成任务。

      • Rule 4 (Lookup -> Finish): 如果Lookup动作找到了所需答案,可以直接执行Finish动作结束任务。

    • 动作知识库应用案例:

    • 假设我们有一个多跳问答任务,需要回答“华盛顿特区最大的私立医院是儿童国家医疗中心还是MedStar华盛顿医院中心?”这个问题。

      • Start: 初始状态,模型需要确定如何获取答案。

      • Search: 模型执行Search动作,搜索“华盛顿特区私立医院”相关信息。

      • Retrieve: 根据Search结果,模型执行Retrieve动作,找到“儿童国家医疗中心”和“MedStar华盛顿医院中心”的具体信息。

      • Lookup: 模型在检索到的信息中执行Lookup动作,查找两个医院的规模比较。

      • Finish: 一旦模型通过Lookup动作确定了哪个医院更大,就执行Finish动作,输出最终答案并结束任务。

    • 在这个案例中,动作知识库确保了模型在规划和执行任务时遵循逻辑和顺序,避免了不合理的行动序列,如直接从Search跳到Finish而忽略了中间的检索和查找步骤。通过这种方式,动作知识库有助于提高模型在复杂任务中的性能和准确性。




09


AutoAct:MultiAgent


前面的这些工作,不同prompt框架,不同agent finetuning的方法,基本都是建立在一个模型完成所有的agent任务的目标去的。这篇论文则考虑到了多智能体的思路。并且给出了一个表格对比他所拥有的能力范围,自然是比较全面的选手,只不过Generality和Reflection都没那么值得去说,这里比较的重点应该是多智能体的提出。怎么进行多代理协作等应该比较被关注?

具体来说:

多代理协作的一个具体案例可以通过以下步骤实现:

任务定义:

假设我们有一个多跳问答任务(例如HotpotQA),其中问题需要通过多个步骤和推理来解答。例如,问题可能是:“在《傲慢与偏见》中,达西先生的庄园位于英格兰德比郡的什么地方?”答案应该是“彭伯里”。

  • 自我规划:

    • 元代理(META-AGENT)首先通过自我指导(Self-Instruct)生成一组初始的问答对,这些问答对作为训练数据。然后,元代理利用工具库(Tool Library)中的信息自动选择适合的工具,比如搜索引擎、知识检索工具等。

  • 规划轨迹合成:

    • 元代理使用选定的工具来自动生成规划轨迹,这些轨迹包含了一系列的思考(Thought)、行动(Action)和观察(Observation)记录。例如,元代理可能会生成一个轨迹,其中包含使用搜索引擎查找与“达西先生”和“彭伯里”相关的信息,然后从搜索结果中提取答案。

  • 自我分化:

    • 根据合成的规划轨迹,元代理分化成三个子代理:

      • 计划代理(Plan-Agent)决定下一步的行动计划。

      • 工具代理(Tool-Agent)根据计划代理的指示调用搜索引擎,并提供必要的参数(如搜索查询)。

      • 反思代理(Reflect-Agent)评估行动的结果,并确定是否需要进一步的行动或已经找到了正确答案。

  • 微调实现:

    • 对于每个子代理,使用特定的LoRA(Low-Rank Adaptation)模型进行微调。微调过程中,每个子代理都会针对其特定的任务和责任进行训练,以便更有效地执行其功能。例如,计划代理可能会被训练来更好地理解问题和上下文,以便制定有效的行动计划;工具代理可能会被训练来更准确地调用和使用外部工具;反思代理可能会被训练来更好地评估答案的正确性。

  • 群体规划:

    • 在实际的推理过程中,这些子代理会协作完成任务。计划代理提出行动计划,工具代理执行计划中的工具调用,反思代理评估结果并提供反馈。这个协作过程可能需要多轮迭代,直到找到满意的答案。

    通过这种方式,AUTOACT框架能够实现多代理之间的有效协作,每个代理都在其专业领域内进行微调,以提高整体任务的执行效率和准确性。这种方法允许每个代理专注于其特定的任务,而不是将所有任务都放在一个单一的模型中处理,从而提高了系统的灵活性和可扩展性。

    本质上还是拆解任务,做更好的数据处理。


总结:本文捋了下提升大模型agent能力的一些方法,从思维链到agent 的finetuning。如果要评价的话个人觉得最有价值的还是CoT,开创了这个方向,其次是AgentTuning,给我们对开源LLM具备agent能力有了一些探索, KnowAgent则是RAG的另一种体现,推理类型也可外挂一些推理知识库进行增强。但类似很多的工作目前还比较有限,大部分都在怎么把sft轨迹的数据质量和多样性进行提高。虽然像AutoAct这种工作已经引入到多智能体协作了,但真正落地还是有很多困难,太多模型对于线上推理也有一定的压力。

对于后续的工作方向,个人可能想去做的一些尝试:

  • 数据配比:通用数据和agent能力数据的配比优化

  • 统一Prompt框架:保证推理效果和工程性能

  • 推理知识的注入:怎么类似RAG外挂的方式高效注入推理知识到大模型

  • agent系统框架:完成一个agent能力需要怎样的的工程和算法架构,需要多少个模型才算最佳?



Reference:

  • 1、cot:https://arxiv.org/pdf/2201.11903.pdf

  • 2、tot:https://arxiv.org/pdf/2305.10601.pdf

  • 3、react:https://arxiv.org/pdf/2210.03629.pdf

  • 4、reflexion:https://arxiv.org/pdf/2303.11366.pdf

  • 5、agent tuning:https://arxiv.org/pdf/2310.12823.pdf

  • 6、fireact:https://arxiv.org/pdf/2310.05915.pdf

  • 7、agentFlan:https://arxiv.org/pdf/2403.12881.pdf

  • 8、knowagent:https://arxiv.org/pdf/2403.03101.pdf

  • 9、autoact:https://arxiv.org/pdf/2401.05268.pdf

  • 10、Travel Plan:https://arxiv.org/pdf/2402.01622.pdf


互联网持续学习圈
清华大学计算机系校友、前微软、阿里高级算法工程师创办。汇聚互联网精英、985高校及海外硕博、自主创业者,持续学习者的专属圈。专注互联网资讯、科研、求职等。器识其先,文艺其从,陪你进化二十年。
 最新文章