创建安全的临时工作目录
从仅能生成文本的大型语言模型(LLM)到能够采取行动的 AI 智能体的转变,是现代软件工程中最重要的发展之一。智能体系统能够感知环境、做出决策,并使用工具来实现特定目标,超越了简单的问答式聊天机器人。LangChain 作为一个开源框架,通过将 LLM 与外部数据、工具以及其他 LLM 连接起来,已成为构建这些复杂应用的标准。
本教程提供了一份全面、分步的指南,教你如何使用 LangChain 构建 AI 智能体。你将学习基础概念,并通过实际实现进行实践,从而能够创建自己的自主智能体,执行现实世界中的任务。
你将学到什么
在本教程结束时,你将理解智能体 AI 和 LangChain 框架的核心原理。你将能够设置开发环境、连接到 LLM、定义自定义工具,并使用现代的 create_agent API 构建一个功能完整的智能体。你将构建并运行一个完整的 AI 智能体,能够根据自然语言命令与本地文件系统交互,为你创建更复杂的自动化任务打下实践基础。
1. LangChain 基础与核心概念
在深入代码之前,理解什么是 AI 智能体以及 LangChain 如何简化其创建过程至关重要。智能体的核心是一个使用 LLM 作为其推理引擎的系统。智能体接收用户请求,提示 LLM 决定采取何种行动,执行该行动(通常通过调用工具),然后处理结果以生成响应。这个循环会持续进行,直到任务完成。
LangChain 提供了一个标准框架来实现这个推理循环,最显著的是通过其对 ReAct(推理+行动)框架的支持。LangChain 是一个构建在 LangGraph 之上的高级工具,LangGraph 是一个更低层级的编排框架,让你能够对智能体的工作流和状态进行精细控制。
要使用 LangChain 构建智能体,你需要四个主要组件:
- LLM: 智能体的推理引擎。
- 工具: 允许智能体与外部世界交互的函数,例如 API、数据库或文件系统。
- 智能体循环: 管理 LLM、工具和状态的“大脑”编排层。
- 记忆(检查点): 持久化智能体状态的能力,使其能够在对话线程中记住过去的交互。
2. 设置开发环境
首先,你需要安装 LangChain 及其核心依赖项。本教程使用 Python 演示该过程,但概念和高级模式对于 TypeScript 用户来说是相似的。
首先,确保你的系统上安装了 Python 3 和 Pip。对于基于 Debian/Ubuntu 的系统,你可以使用以下命令。对于其他操作系统,请遵循相应的安装方法。
sudo apt update
sudo apt install python3 python3-pip
接下来,安装主要的 LangChain 包。langchain 包是核心框架。langchain-community 包含由社区维护的工具,而 langgraph 是现代智能体创建 API 所需的。
pip install langchain langgraph langchain-community
3. 集成大型语言模型
构建智能体的第一步是将其连接到 LLM。LangChain 支持数十个模型提供商,包括 Google Gemini、OpenAI、Anthropic 等。在本教程中,我们将使用 Google 的 Gemini 模型。
你需要从 Gemini 控制台获取一个 API 密钥。获得密钥后,你可以安装 Google GenAI 集成包并设置环境。
pip install -qU "langchain[google-genai]"
现在,你可以编写 Python 代码来初始化模型。getpass 模块用于安全地提示输入 API 密钥。
import getpass
import os
from langchain.chat_models import init_chat_model
from langchain_core.messages import HumanMessage, SystemMessage
if not os.environ.get("GOOGLE_API_KEY"):
os.environ["GOOGLE_API_KEY"] = getpass.getpass("输入 Google Gemini 的 API 密钥:")
model = init_chat_model("gemini-2.0-flash", model_provider="google_genai")
你可以通过一个简单的查询来测试设置是否成功。
response = model.invoke("法国大革命是什么时候开始的?")
print(response.content)
4. 为智能体定义工具
工具是智能体强大的关键。它们允许 LLM 执行超出文本生成范围的操作。在本教程中,我们将使用 LangChain 的 FileManagementToolkit 构建一个能够管理本地计算机上文件的智能体。
FileManagementToolkit 是 langchain-community 包的一部分,你已经安装了这个包。该工具包允许你指定智能体可以执行哪些文件操作,例如读取、写入和列出文件。
导入必要的模块并定义工具。一个关键的安全实践是将智能体限制在临时目录中,而不是让它完全控制整个文件系统。
from langchain_community.agent_toolkits import FileManagementToolkit
from tempfile import TemporaryDirectory
working_directory = TemporaryDirectory()
# 使用选定的工具和根目录初始化工具包
tools = FileManagementToolkit(
root_dir=str(working_directory.name),
selected_tools=["read_file", "write_file", "list_directory"],
).get_tools()
5. 使用 create_agent 构建智能体
准备好 LLM 和工具后,你现在可以构建智能体了。在 LangChain 中构建智能体的现代且推荐的方法是使用 create_agent 函数。
该函数接收你的模型和一个工具列表,并创建一个管理推理循环的智能体执行器。它简化了流程,无需手动创建 ReAct 智能体和执行器。
from langchain.agents import create_agent
# “model”和“tools”变量来自前面的步骤。
agent = create_agent(
model=model,
tools=tools
)
这一行代码创建了一个复杂的智能体。该智能体使用模型根据用户输入决定调用哪个工具。它可以处理将多个工具调用链接在一起以完成复杂任务的情况。
⚠️ 重要提示: 虽然 LangChain 可以与较旧的智能体创建方法(如
create_react_agent)一起使用,但create_agentAPI 是现代推荐的方法,应该是你构建新智能体的默认选择。
6. 运行你的第一个智能体
智能体构建完成后,你可以通过向其发送用户消息来运行它。以下命令将演示智能体与文件系统交互的能力。
首先,让智能体列出当前工作目录中的文件。此时,目录是空的。
input_message = {"role": "user", "content": "列出当前工作目录中的文件"}
response = agent.invoke({"messages": [input_message]})
for message in response["messages"]:
message.pretty_print()
接下来,指示智能体创建一个名为 sample-file.txt 的文件。
input_message = {"role": "user", "content": "创建一个名为 sample-file.txt 的文件"}
response = agent.invoke({"messages": [input_message]})
for message in response["messages"]:
message.pretty_print()
最后,再次让智能体列出文件。它将显示 sample-file.txt 存在。
input_message = {"role": "user", "content": "列出当前工作目录中的文件"}
response = agent.invoke({"messages": [input_message]})
for message in response["messages"]:
message.pretty_print()
如你所见,智能体成功解释了自然语言命令,调用了适当的工具(list_directory、write_file),并对所采取的行动提供了反馈。这是一个基本但强大的演示,展示了如何使用 LangChain 构建 AI 智能体。
7. 为智能体添加记忆
无状态智能体的一个关键限制是,它在一次调用完成后会忘记所有上下文。要创建一个能够记住过去交互的对话式智能体,你需要添加记忆。这通过一个“检查点器”来实现,它可以保存智能体的状态。
LangGraph 提供了一个 MemorySaver 类,这是一个简单的内存检查点器。在生产环境中,你会使用更健壮的选项,如 PostgresSaver 或基于 MongoDB 的检查点器,但 MemorySaver 非常适合测试和开发。
首先,导入并初始化检查点器。
from langgraph.checkpoint.memory import MemorySaver
checkpointer = MemorySaver()
接下来,重新创建你的智能体,并将 checkpointer 作为参数传递。
agent_with_memory = create_agent(
model=model,
tools=tools,
checkpointer=checkpointer
)
要使用记忆,你必须在配置中指定一个 thread_id。这个 thread_id 充当对话 ID,允许智能体为每个不同的对话维护独立的记忆。
config = {"configurable": {"thread_id": "user-123"}}
agent_with_memory.invoke(
{"messages": [{"role": "user", "content": "我叫 Alice"}]},
config=config
)
result = agent_with_memory.invoke(
{"messages": [{"role": "user", "content": "我叫什么名字?"}]},
config=config
)
# 智能体回应:“你的名字是 Alice。”
print(result["messages"][-1].content)
这个简单的添加使你的智能体能够进行有上下文的对话,使其感觉更加智能和有用。
8. 超越基础:多智能体系统
随着你的进步,你可能会遇到单个智能体无法处理的复杂任务。LangChain 支持构建复杂的多智能体系统,其中专门的智能体协作解决问题。这是处理复杂工作流的一种强大架构模式。
子智能体 是一种核心的多智能体模式,其中主监督智能体协调多个专门的子智能体,将它们作为工具调用。例如,一个子智能体可能负责研究,另一个负责内容创作,第三个负责审查工作。
| 模式 | 工作原理 |
|---|---|
| 子智能体 | 主智能体将子智能体作为工具进行协调。所有路由都通过主智能体,由它决定何时调用每个子智能体。 |
| 交接 | 行为根据状态动态变化,工具调用会触发切换到不同的智能体或配置。 |
| 技能 | 专门的提示和知识按需加载到单个智能体的上下文中。 |
| 路由器 | 路由步骤对输入进行分类,并将其定向到一个或多个专门的智能体进行处理。 |
选择正确的模式至关重要。例如,子智能体架构非常适合并行执行和分布式开发,而交接模式对于单个对话中的重复用户请求更高效。在个人助理应用中使用子智能体模式可以实现上下文隔离——每个子智能体在一个干净的上下文窗口中处理任务,防止主智能体的记忆膨胀。
来源
- Chris Tozzi. "Build an AI agent with LangChain in this beginner tutorial." TechTarget, 2025年9月。
- "Quickstart" LangChain 官方文档。
- "Multi-agent" LangChain 官方文档。
- "Workflows and agents" LangChain 官方文档。
- "langchain-fundamentals" LangChain Skills 文档,GitHub。
- "How to Build an AI Agent with LangChain and LangGraph: Build an Autonomous Starbucks Agent." freeCodeCamp, 2025年12月。
- "Subagents" LangChain 官方文档。
- "LangChain Python Tutorial: A Complete Guide for 2026." The JetBrains Blog, 2026年3月。
— Editorial Team
暂无评论。