业界目前的AI助手应用集中于两大功能:

  • 基于垂直领域知识的智能问答
  • 基于垂直领域知识的智能行动

在《【chatGPT】学习笔记21-LangChain之Retrieval,对LLM的抽象4》中,着重介绍了智能问答依赖的技术点。

本文重点介绍与智能行动依赖的技术点。

1.什么是ReAct

(1)基本概念

常见的LLM推理模式有两种:

  • Reason Only:比如CoT,利用提示词诱导LLM进行逻辑推理,进而回答偏数理逻辑类的问题。
  • Act Only:比如指令微调提到的,明确在问题中带有指令。

ReAct提出了一种新的推理模式——Reason + Act

  • LLM推理出”把大象装进冰箱需要几步",
  • 再针对待执行的每一步选择合适的工具
  • 在执行当前步骤后,通过环境的反馈,决策下一步是什么

image-20231031152602671

(2)ReAct优势

在论文《ReAct: Synergizing Reasoning and Acting in Language Models》中,阐述了ReAct的训练效果比Reson OnlyAct Only都好:

image-20231031153243968

(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核心代码如下:

1
2
3
4
5
next_action = agent.get_action(...)
while next_action != AgentFinish:
    observation = run(next_action)
    next_action = agent.get_action(..., next_action, observation)
return next_action

(4)LangChain已经支持的Agent和Tool列表

  • LangChain已经提供了很多AgentTools,具体如下:

image-20231031151549996

2.代码示例

Agent是当前LLM App的一个热点方向,展开阐述会有很多的内容。本文仅通过1个经典问题代码示例,为各位小伙伴建立Agent的宏观认识。后续本专栏再详细阐述Agent开发的内容。

  • 问题:周杰伦的老婆是谁?她现在的年龄的0.43次方等于多少?
  • 代码
    • 创建了tools工具集对象
    • 初始化了agent对象,agent对象包含1个LLM和1个tools对象
    • 执行agent对象的run方法,由LLM自行开展行动,直到获得最终答案。
  • 运行结果分析
    • LLM首先明确任务目标:背后应该是由一个复杂的提示词驱动的。
    • LLM再分解出三个步骤:每个步骤的输出,都会作为下一个步骤的输入。
    • LLM最后汇总结果LLM判断如果达成目标,则给出最终答案,并终止执行。

image-20231031154927730

image-20231031160426352

3.小结

本文关键要点如下:

  • 简述了Agent理论基础ReAct
  • 描述了论文ReAct: Synergizing Reasoning and Acting in Language Models中的实验现象、ReAct的优势。
  • 给出了一个有关大语言模型不知道的有时效性的知识的问题,Agent如何利用大语言模型的推理能力解决此类问题的代码示例。

如果说上篇文章的Retrieval帮助AI助手具备了智能问答能力,这篇文章的Agent则帮助AI助手实现了智能行动

所以,Agent这个方向是目前开发LLM应用的诸多厂商的关注热点,这里还有一些未及展开讨论的内容:

  • 如何自定义1个满足垂直领域的自定义Agent
  • 如何自定义1组满足垂直领域的自定义Tool

这些高级话题,留待本专栏后续分解,敬请期待。