业界目前的AI助手应用集中于两大功能:
- 基于垂直领域知识的智能问答
- 基于垂直领域知识的智能行动
在《【chatGPT】学习笔记21-LangChain之Retrieval,对LLM的抽象4》中,着重介绍了智能问答依赖的技术点。
本文重点介绍与智能行动依赖的技术点。
1.什么是ReAct
(1)基本概念
常见的LLM推理模式有两种:
- Reason Only:比如CoT,利用提示词诱导LLM进行逻辑推理,进而回答偏数理逻辑类的问题。
- Act Only:比如指令微调提到的,明确在问题中带有指令。
ReAct提出了一种新的推理模式——Reason + Act:
- LLM推理出”把大象装进冰箱需要几步",
- 再针对待执行的每一步选择合适的工具,
- 在执行当前步骤后,通过环境的反馈,决策下一步是什么。
(2)ReAct优势
在论文《ReAct: Synergizing Reasoning and Acting in Language Models》中,阐述了ReAct的训练效果比Reson Only
和Act Only
都好:
(3)Agents内部结构
数据结构:
AgentAction
:表示Agent应采取的行为。包含1个tool
属性和一个tool_input
属性,表示这个行为可采用的工具及工具输入。AgentFinish
:表示Agent完成后的返回结果。包含1个return_values
属性,字典类型。intermediate_steps
:表示之前的Agent行为和返回结果。
Agent:智能体,可以分析出”将大象放进冰箱里需要几步",内部实现依赖LLM的逻辑推理能力。它的输入包括:
- 工具列表:
List of available tools
,Agent可以用的工具集合。 - 用户输入:User input。
- 之前的Agent行为和返回结果:Any previously executed steps,就是
intermediate_steps
对象。
- 工具列表:
Tools:它是Agent某个行为可以使用的工具。每个工具需要有两个明确信息:
- 工具的可用性:如"使用Google搜索"是一个工具,这个工具本身要真的可用、可靠。
- 工具的准确描述:对工具的作用有准确的描述,这段描述最终会变成提示词,帮助Agent知道要执行什么行为的时候,应该选择哪个工具更合适。
AgentExecutor:Agent执行器。能够调用
Agent
,不断获得下一步action(行为)
并执行。除了
AgentExecutor
,LangChain还提供了实验性质的其它Agent执行器:- Plan-and-execute Agent
- Baby AGI
- Auto GPT
AgentExecutor
核心代码如下:
|
|
(4)LangChain已经支持的Agent和Tool列表
- LangChain已经提供了很多
Agent
和Tools
,具体如下:
2.代码示例
Agent
是当前LLM App的一个热点方向,展开阐述会有很多的内容。本文仅通过1个经典问题代码示例,为各位小伙伴建立Agent
的宏观认识。后续本专栏再详细阐述Agent
开发的内容。
- 问题:周杰伦的老婆是谁?她现在的年龄的0.43次方等于多少?
- 代码:
- 创建了
tools
工具集对象 - 初始化了
agent
对象,agent
对象包含1个LLM
和1个tools
对象 - 执行
agent
对象的run
方法,由LLM
自行开展行动,直到获得最终答案。
- 创建了
- 运行结果分析:
LLM
首先明确任务目标:背后应该是由一个复杂的提示词驱动的。LLM
再分解出三个步骤:每个步骤的输出,都会作为下一个步骤的输入。LLM
最后汇总结果:LLM
判断如果达成目标,则给出最终答案,并终止执行。
3.小结
本文关键要点如下:
- 简述了
Agent
理论基础ReAct
- 描述了论文
ReAct: Synergizing Reasoning and Acting in Language Models
中的实验现象、ReAct
的优势。 - 给出了一个有关大语言模型不知道的有时效性的知识的问题,
Agent
如何利用大语言模型的推理能力解决此类问题的代码示例。
如果说上篇文章的Retrieval
帮助AI助手具备了智能问答能力,这篇文章的Agent
则帮助AI助手实现了智能行动。
所以,Agent
这个方向是目前开发LLM应用的诸多厂商的关注热点,这里还有一些未及展开讨论的内容:
- 如何自定义1个满足垂直领域的自定义Agent?
- 如何自定义1组满足垂直领域的自定义Tool?
这些高级话题,留待本专栏后续分解,敬请期待。