LangChain 入门:LLM 与 Agents 构建智能体应用
什么是 Agent
在日常应用中,ChatGPT 等模型通过文本输入处理并返回文本内容,类似于只有头部(感知与思考)的实体,能够听、能思考、能说话,但无法直接行动。而 Agent(智能体)是一种能够自主决策、采取行动以达到特定目标的实体。
代理的核心思想是通过大模型来选择要采取的一系列行动。在常规链式结构下,一系列行动通常是硬编码的,是已规定好的行为路线;而在代理中,是用大模型作为推理引擎来确定并采取行动的。通俗地讲,就是给大模型配备工具,让大模型自己去判断在当前场景需要使用什么工具。
代理的效果与模型的智慧程度密切相关。大模型的训练集越大,代理的效果通常越好。较差的模型进行代理可能会陷入自问自答的死循环,而优秀的模型会进行自我验证,检查答案是否与最初的问题相关,若不相关则进行修正。
举例说明:
- 链式结构下:我会拿着螺丝刀去拧螺丝,拿着钥匙开锁,拿着斧头砍木头。我不会选择工具,而是按照规划的路线行动。
- 代理情况下:我有螺丝刀、钥匙、斧头等工具。遇到一颗螺丝,我会用螺丝刀去拧;遇到一把锁,我会用钥匙去开;遇到木头,我会用斧头去砍。在不同的场景或问题下,Agent 会进行推理选择。
总结公式: Agent = LLM(思考决策)+ Memory(记忆)+ Tools(执行)
LangChain 中代理的关键组成
在 LangChain 框架中,构建一个完整的 Agent 系统主要包含以下组件:
- Agent 代理:负责根据输入和状态决定下一步动作。
- LLM 大模型:作为推理核心,提供决策能力。
- Tool 工具:外部能力的接口,如搜索、计算、API 调用等。
- Prompt 提示词:指导 Agent 如何思考和行动的系统指令。
- Toolkit 工具包:一组工具的集合,便于管理。
- AgentExecutor 代理执行器:负责调度 Agent 和工具的执行流程。
代理的类型
LangChain 支持多种类型的 Agent,适用于不同场景:
- Zero-shot ReAct:利用工具的描述来决定使用哪个工具,可以有多个工具,每个工具都要提供描述信息。选择单纯依靠描述信息。
- Structured Input ReAct:通过工具的参数 schema 创建结构化的动作输入。
- Open AI Functions:与 OpenAI function call 机制配合工作。
- Conversational:为对话场景设计,使用具有对话性提示词,利用 ReAct 框架选择工具,并利用记忆功能来保存对话历史。
- Self ask with search:利用工具查找事实性答案。
Tool 工具详解
代理调用的功能相当于手的部分,用于与外部世界交互。LangChain 提供了一系列内置工具,比如 Search 工具、AWS 工具、Wikipedia 工具等。这些工具都是 BaseTool 的子类。通过调用 run 函数,可以执行工具的功能。
如何创建工具
1. 加载 LangChain 内置的工具
from langchain.tools import load_tools
# 加载 SerpAPI 搜索引擎工具
tools = load_tools(["serpapi"], llm=llm)


