引言
大模型能够通过中间的推理步骤,对复杂问题进行推理,解决具有挑战性的任务。然而,大模型存在一些固有问题,比如:
- 无法自动更新知识:大模型仅能依赖训练数据和上下文信息,一旦问题超出认知范围,就会出现错误。
- 幻觉问题:大模型可能会根据提示生成虚假或错误信息。
解决方法
为了解决上述问题,可以:
- 验证提示信息的真实性:如发现错误,则进行修正。
- 调用外部工具:如搜索引擎,检索并验证信息的真实性。
LangChain代理
大模型自主判断、调用工具,并决定下一步行动的行为,被称为代理。
代理的三个关键元素
- 大模型:负责逻辑推理和预测生成。
- 外部工具:如搜索引擎、数据处理工具。
- 代理机制:管理大模型与工具之间的交互流程。
在复杂问题求解中,代理需合理选择工具并制定行动策略。例如:
- 何时使用本地知识库?
- 如何验证外部搜索工具返回的内容?
- 怎样确保信息真实性检索的完整性?
ReAct框架
ReAct框架(Reasoning-Acting)是LangChain代理的核心逻辑,包括以下步骤:
- Thought(思考):由大模型生成逻辑推理过程,决定行动依据。
- Act(行动):选择适当的工具或API,并生成参数执行目标行动。
- Obs(观察):获取外界反馈,为进一步决策提供依据。
通过上述循环,代理可以动态推理和调整计划,与外部工具交互,完成复杂任务。
使用示例
目标:找到玫瑰的当前市场价格,并计算加价15%后的新价格。
环境准备
- 注册 SerpAPI 并获取
SERPAPI_API_KEY。 - 安装必要依赖:
pip install google-search-results
import os
from langchain.agents import load_tools, initialize_agent, AgentType
from langchain.llms import OpenAI
# 设置API密钥
os.environ["OPENAI_API_KEY"] = 'Your OpenAI API Key'
os.environ["SERPAPI_API_KEY"] = 'Your SerpAPI API Key'
# 初始化大模型
llm = OpenAI(temperature=0)
# 加载工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# 初始化代理
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
# 执行查询
agent.run("目前市场上玫瑰花的平均价格是多少?如果我在此基础上加价15%卖出,应该如何定价?")