LangChain 入门:LLM 与 Agents 构建智能体应用
本文介绍 LangChain 中 Agent(智能体)的核心概念、组成要素及实现原理。通过对比传统链式结构与 Agent 模式,阐述如何利用大模型作为推理引擎自主决策并调用工具。内容涵盖 Agent 类型、工具创建、执行器机制以及 ReAct 工作流,并提供基于 OpenAI 模型的代码示例,展示如何实现搜索与计算等任务。最后探讨 Agent 在记忆集成与未来机器人领域的应用前景。

本文介绍 LangChain 中 Agent(智能体)的核心概念、组成要素及实现原理。通过对比传统链式结构与 Agent 模式,阐述如何利用大模型作为推理引擎自主决策并调用工具。内容涵盖 Agent 类型、工具创建、执行器机制以及 ReAct 工作流,并提供基于 OpenAI 模型的代码示例,展示如何实现搜索与计算等任务。最后探讨 Agent 在记忆集成与未来机器人领域的应用前景。

在日常应用中,ChatGPT 等模型通过文本输入处理并返回文本内容,类似于只有头部(感知与思考)的实体,能够听、能思考、能说话,但无法直接行动。而 Agent(智能体)是一种能够自主决策、采取行动以达到特定目标的实体。
代理的核心思想是通过大模型来选择要采取的一系列行动。在常规链式结构下,一系列行动通常是硬编码的,是已规定好的行为路线;而在代理中,是用大模型作为推理引擎来确定并采取行动的。通俗地讲,就是给大模型配备工具,让大模型自己去判断在当前场景需要使用什么工具。
代理的效果与模型的智慧程度密切相关。大模型的训练集越大,代理的效果通常越好。较差的模型进行代理可能会陷入自问自答的死循环,而优秀的模型会进行自我验证,检查答案是否与最初的问题相关,若不相关则进行修正。
举例说明:
总结公式: Agent = LLM(思考决策)+ Memory(记忆)+ Tools(执行)
在 LangChain 框架中,构建一个完整的 Agent 系统主要包含以下组件:
LangChain 支持多种类型的 Agent,适用于不同场景:
代理调用的功能相当于手的部分,用于与外部世界交互。LangChain 提供了一系列内置工具,比如 Search 工具、AWS 工具、Wikipedia 工具等。这些工具都是 BaseTool 的子类。通过调用 run 函数,可以执行工具的功能。
from langchain.tools import load_tools
# 加载 SerpAPI 搜索引擎工具
tools = load_tools(["serpapi"], llm=llm)
可以使用 @tool 装饰器定义自定义函数,并在函数文档字符串中描述该工具的用途。
from langchain.agents import tool
@tool
def serpapi_search(query: str) -> str:
"""使用 SerpAPI 搜索引擎获取搜索结果"""
from serpapi import GoogleSearch
params = {
"q": query,
"api_key": "your-serpapi-api-key"
}
search = GoogleSearch(params)
results = search.get_dict()
return results['organic_results'][0]['snippet']
tools = [serpapi_search]
工具包是一组工具的集合。例如 tools = [serpapi_search] 和 tools = load_tools(["serpapi"], llm=llm) 都可以被视为工具包。它们将分散的工具封装在一起,方便传递给 Agent。
代理执行器是代理执行时,由它来选择并执行其他选择的动作。它的主要职责包括:
Agent 在执行任务时的典型思维过程如下:
下面是一个完整的 ReAct 代理示例,配备谷歌搜索引擎和运算工具,展示大模型在不同情景下的推理与工具选择能力。
确保安装必要的依赖:
pip install langchain langchain-openai python-dotenv serpapi
import os
from dotenv import find_dotenv, load_dotenv
from langchain_openai import ChatOpenAI
from langchain.agents import create_react_agent, AgentExecutor, tool
from langchain import hub
from langchain.tools import load_tools
# 加载环境变量
load_dotenv(find_dotenv())
os.environ["OPENAI_API_BASE"] = os.getenv("OPENAI_API_BASE", "")
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY", "")
os.environ["SERPAPI_API_KEY"] = os.getenv("SERPAPI_API_KEY", "")
# 实例化一个大模型
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")
# 从 Hub 中拉取 Prompt
prompt = hub.pull("hwchase17/react")
# 定义自定义工具
@tool
def serpapi_search(query: str) -> str:
"""使用 SerpAPI 搜索引擎获取搜索结果"""
try:
from serpapi import GoogleSearch
params = {
"q": query,
"api_key": os.getenv("SERPAPI_API_KEY")
}
search = GoogleSearch(params)
results = search.get_dict()
return results['organic_results'][0]['snippet']
except Exception as e:
() -> :
:
((expression))
Exception e:
tools = [serpapi_search, calculate]
agent = create_react_agent(
llm,
tools,
prompt,
)
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=,
handle_parsing_errors=
)
():
response = agent_executor.invoke({: human_input})
response[]
__name__ == :
text = ()
(agent_invoke(text))
# 代理地址
OPENAI_API_BASE=""
# 代理密钥
OPENAI_API_KEY=""
# 谷歌引擎
SERPAPI_API_KEY=""
虽然上述示例未显式展示 Memory,但在实际应用中,Memory 是 Agent 的重要组成部分。它允许 Agent 记住过去的对话历史或状态。
集成 Memory 后,Agent 可以在多轮对话中保持上下文连贯性,这对于复杂任务至关重要。
eval 等高风险函数处理用户输入,建议限制可执行的数学表达式范围。handle_parsing_errors,防止因格式错误导致程序崩溃。代理就是让大模型具备了行动的能力,大模型不仅仅局限于进行文本回答,在回答的同时还能进行一系列行动。OpenAI 的 ChatGPT 把 Agent 推向了一个新的高度,使得 Agent 更接近于一个'智能体'。通过各种工具将大模型武装起来,或许这个工具不仅仅是软件也可以是硬件,将大模型与嵌入式结合或许能做成一个能思考能行动的智能机器人。随着技术的演进,私人 AI 助理的概念正逐步变为现实。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online