Agent所做的就是应用ReAct框架的思想,ReAct的思想就是将整个过程分为 推理-行动两部分,推理就是观察周围环境内容得出一些分析或者思考,行动就是根据这些思考内容通过调用工具或者别的什么采取行动解决问题。
大模型的幻觉
如果我们给定的提示词是不符合事实的,大模型就可能在这个不符合事实的问题上开始瞎编,出现所谓的幻觉。解决这种问题的方法呢就是判断提示词是否符合事实(通过本地知识库或者通过搜索引擎搜索)。上面所说的无论本地知识库还是搜索引擎,都不是封装在大模型内部的知识,我们把它们称为“外部工具”。
代理的作用
代理就是在需要模型自己通过调用外部工具做一些判断;代理就像一个多功能的接口,它能够接触并使用一套工具。根据用户的输入,代理会决定调用哪些工具。它不仅可以同时使用多种工具,而且可以将一个工具的输出数据作为另一个工具的输入数据。
ReAct框架
这个框架是解决如何指导大模型推理和行动的思维框架。
大语言模型可以通过生成推理痕迹和任务特定行动来实现更大的协同作用。
具体来说,就是引导大模型生成一个任务解决轨迹:观察-思考-行动即推理(Reasoning)-行动(Action)。
其中,Reasoning包括了对当前环境和状态的观察,并生成推理轨迹。这使模型能够诱导、跟踪和更新操作计划,甚至处理异常情况。Acting在于指导大模型采取下一步的行动,比如与外部源(如知识库或环境)进行交互并且收集信息,或者给出最终答案。
通过代理来实现ReAct框架
# 设置OpenAI和SERPAPI的API密钥
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%卖出,应该如何定价?"
)