LangChain实战08-代理|豆包MarsCode AI刷题

142 阅读4分钟

一.代理

1.为什么要用代理

在之前的思维链(CoT)中,我们看到了 LLMs 执行推理轨迹的能力。在给出答案之前,大模型通过中间推理步骤能够实现复杂的推理,获得更好的结果,以完成更具挑战的任务。

然而,仅仅应用思维链推理并不能解决大模型的固有问题:无法主动更新自己的知识,导致出现事实幻觉。那我们如何解决这个问题: image.png 这里的本地知识库和搜索引擎,都不是封装在大模型内部的知识,即“外部工具”。

2.代理的作用

代理就像一个多功能的接口,它能够接触并使用一套工具。根据用户的输入,代理会决定调用哪些工具。它不仅可以同时使用多种工具,而且可以将一个工具的输出数据作为另一个工具的输入数据。

在LangChain中使用代理,我们只需要理解下面三个元素

  • 大模型:提供逻辑的引擎,负责生成预测和处理输入。
  • 与之交互的外部工具:可能包括数据清洗工具、搜索引擎、应用程序等。
  • 控制交互的代理:调用适当的外部工具,并管理整个交互过程的流程。

3.ReAct框架

首先引入一个例子,在运营花店的过程中,经常会经历天气变化而导致的鲜花售价变化,那么每天早上应该如何为鲜花定价?

image.png 在这个简单的例子中,我们看到有观察、有思考,然后才会具体行动。这里的观察和思考,我们统称为推理(Reasoning)过程,推理指导着你的行动(Acting)。推理加上行动就有了我们现在的ReAct框架。

Reasoning包括了对当前环境和状态的观察,并生成推理轨迹。这使模型能够诱导、跟踪和更新操作计划,甚至处理异常情况。Acting在于指导大模型采取下一步的行动,比如与外部源(如知识库或环境)进行交互并且收集信息,或者给出最终答案。

image.png 我们还可以将 ReAct框架和思维链(CoT)结合使用,则能够让大模型在推理过程同时使用内部知识和获取到的外部信息,从而给出更可靠和实际的回应,也提高了 LLMs 的可解释性和可信度。

3.通过代理实现ReAct框架

下面,我们用LangChain中最为常用的 ZERO_SHOT_REACT_DESCRIPTION ——这种常用代理类型,来剖析一下LLM是如何在ReAct框架的指导之下进行推理的。

此处,我们要给代理一个任务,这个任务是找到玫瑰的当前市场价格,然后计算出加价15%后的新价格。

import os

os.environ["SERPAPI_API_KEY"] = (
    "Your SERPAPI API KEY"
)

# 加载所需的库
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain_openai import ChatOpenAI  # ChatOpenAI模型

# 初始化大模型
llm = ChatOpenAI(model=os.environ["LLM_MODELEND"], temperature=0)

# 设置工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)

# 初始化Agent
agent = initialize_agent(
    tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)

# 跑起来
agent.run(
    "目前市场上玫瑰花的平均价格是多少?如果我在此基础上加价15%卖出,应该如何定价?"
)

观察代码,这里我们使用了在 serpapi.com 注册账号后拿到的 SERPAPI_API_KEY,这个就是为大模型提供的 Google 搜索工具。

tools = load_tools(["serpapi", "llm-math"], llm=llm):这里加载一些要使用的工具,包括serpapi(调用Google搜索引擎的工具)以及llm-math(通过LLM进行数学计算的工具)。

然后通过initialize_agent()方法,我们使用工具tools、语言模型llm和代理类型agent初始化代理,这三个就是上面提到的代理的三个元素

最后我们运行代理查看结果:

屏幕截图 2024-11-27 195923.png

我们看到,ZERO_SHOT_REACT_DESCRIPTION类型的智能代理在LangChain中,自动形成了一个完善的思考与行动链条,而且给出了正确的答案。下面这个表格解释了链条中的每一个环节。

这个思维链条中,智能代理有思考、有观察、有行动,成功通过搜索和计算两个操作,完成了任务。