
原文:Langchain 代理 (Agents) ,赋能超级 LLMs - 知乎
大型语言模型(LLMs) 非常强大,但它们缺乏“最笨”的计算机程序可以轻松处理的特定能力。逻辑、计算和搜索是计算机通常擅长的领域,但 LLMs 却遇到了困难。 计算机可以解决非常复杂的数学问题,但如果我们让 GPT-4 告诉我们 4.1 * 7.9 的答案,它就失败了:

GPT 4 对简单计算的响应
要求 GPT-4 执行简单的计算通常会得到一个错误的答案。一个简单的计算器可以毫无问题地执行相同的计算。
根据一个简单的计算器,答案是 19.357,保留三位小数。一个简单的计算器程序可以做到这一点,但一个非常复杂的 AI 引擎却失败了,这是不是很有趣?
这还不是全部。如果我问 GPT-4,“我如何在 LangChain 中使用 LLMChain?”它又遇到了困难:

GPT-4 无法回答关于最近事件、技术等的问题
这里谈到的 LangChain 并不是我们所知道的 LangChain。它是一个旧的区块链项目。回答既过时又充满错误的信息。
没错。LangChain 确实是一个区块链项目 [1][2]。然而,似乎没有“ LLMChain ”组件或“ LANG 代币 ”——这两者都是幻觉。
GPT-4 无法告诉我们关于 LangChain 的信息,这是因为它与外部世界没有联系。它的唯一知识来自于它的训练数据,而训练数据在 2021 年末截止。
在当今的 LLMs 一代中存在重大缺陷,我们必须找到解决这些问题的方法。一种“解决方案套件”以“代理 (Agents) ”形式提供。
这些代理 (Agents) 不仅解决了我们上面看到的问题,还解决了 许多 其他问题。事实上,添加代理 (Agents) 在增强 LLMs 的能力方面几乎没有上限。
在本章中,我们将讨论代理 (Agents) 。我们将学习它们是什么,它们如何工作,以及如何在 LangChain 库中使用它们来为我们的 LLMs 增添超能力。
什么是代理 (Agents) ?
我们可以将代理 (Agents) 视为 LLMs 的工具 (Tools) 。就像人类使用计算器进行数学计算或在 Google 中搜索信息一样,代理 (Agents) 允许 LLM 做同样的事情。

LangChain LLM 代理 (Agents)
代理 (Agents) 是可以使用计算器、搜索或执行代码的 LLMs。
使用代理 (Agents) ,LLM 可以编写和执行 Python 代码。它可以搜索信息,甚至查询 SQL 数据库。
让我们看一个简单的例子。我们将从一个 “Zero-shot” 代理 (Agents) 开始(稍后会详细介绍),它允许我们的 LLM 使用计算器。
代理 (Agents) 和工具
要使用代理 (Agents) ,我们需要三样东西:
- 一个基本的 LLM,
- 我们将要进行交互的工具 Tools,
- 一个控制交互的代理 (Agents) 。
让我们从安装 langchain 并初始化我们的基本 LLM 开始。
from langchain import OpenAI
llm = OpenAI(
openai_api_key="OPENAI_API_KEY",
temperature=0,
model_name="text-davinci-003"
)
现在初始化计算器工具。
在初始化工具 Tool 时,我们可以创建自定义工具 Tool 或加载预构建工具 Tool。
无论哪种情况,"工具 Tool" 都是一个给定工具 名称 name 和 描述 description 的 实用链。
例如,我们可以从现有的 llm_math 链创建一个新的计算器工具:
In [3]:
from langchain.chains import LLMMathChain
from langchain.agents import Tool
llm_math = LLMMathChain(llm = llm)
# initialize the math tool
math_tool = Tool(
name ='Calculator',
func = llm_math.run,
description ='Useful for when you need to answer questions about math.'
)
# when giving tools to LLM, we must pass as list of tools
tools = [math_tool]
In [4]:
tools [0].name, tools [0].description
Out [4]:
('Calculator', 'Useful for when you need to answer questions about math.')
在使用自定义工具时,我们必须遵循此过程。然而,一个预构建的 llm_math 工具可以做同样的事情。所以,我们可以这样做:
In [5]:
from langchain.agents import load_tools
tools = load_tools(
['llm-math'],
llm = llm
)
In [6]:
tools [0].name, tools [0].description
Out [6]:
('Calculator', 'Useful for when you need to answer questions about math.')
如果我们的用例存在一个预构建的工具,我们只能按照第二种方法进行。
现在我们有了 LLM 和工具,但没有 代理 (Agents) 。
要初始化一个简单的代理 (Agents) ,我们可以这样做:
from langchain.agents import initialize_agent
zero_shot_agent = initialize_agent(
agent = "zero-shot-react-description",
tools = tools,
llm = llm,
verbose = True,
max_iterations = 3
)
这里使用的 *代理 (Agents) * 是一个 "zero-shot-react-description" 代理 (Agents) 。
Zero-shot 意味着代理 (Agents) 仅在当前操作上起作用——它没有 记忆。
它使用 ReAct 框架根据工具的 描述 description 来决定使用哪个工具。
我们不会在本章中讨论 * ReAct 框架 ,但您可以将其视为 LLM 可以循环进行 * Re asoning 和 * Act ion 步骤的过程。它启用了一个多步骤的过程来识别答案。*
初始化了我们的代理 (Agents) 后,我们可以开始使用它。让我们尝试一些提示,看看代理 (Agents) 如何回应。
In [8]:
zero_shot_agent(" what is (4.5*2.1)^2.2?")
Out [8]:
[1m > Entering new AgentExecutor chain...[0m
[32; 1m [1; 3m I need to calculate this expression
Action: Calculator
Action Input: (4.5*2.1)^2.2 [0m
Observation: [36; 1m [1; 3mAnswer: 139.94261298333066
[0m
Thought: [32; 1m [1; 3m I now know the final answer
Final Answer: 139.94261298333066 [0m
[1m > Finished chain.[0m
{'input': 'what is (4.5*2.1)^2.2?', 'output': '139.94261298333066'}
In [9]:
(4.5 *2.1)**2.2
Out [9]:
139.94261298333066
这里的答案是正确的。让我们再试一次:
In [10]:
zero_shot_agent("if Mary has four apples and Giorgio brings two and a half apple "
"boxes (apple box contains eight apples), how many apples do we "
"have?")
Out [10]:
[1m > Entering new AgentExecutor chain...[0m
[32; 1m [1; 3m I need to

大型语言模型(LLMs)存在逻辑、计算和搜索等能力缺陷,LangChain代理(Agents)可解决这些问题。本文介绍了代理的概念、使用所需的要素,还阐述了Zero Shot ReAct、会话式ReAct、ReAct文档存储、使用搜索自问等常见代理类型,展现了其增强LLMs能力的潜力。
最低0.47元/天 解锁文章
885

被折叠的 条评论
为什么被折叠?



