跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

基于 LangChain 的 LLM Agent 快速入门与实战

如何使用 LangChain 框架构建基于 LLM 的智能体(Agent)。内容涵盖从环境准备、数据加载与向量化、工具创建(检索工具与数学工具)、Agent 初始化到实际调用的完整流程。通过结合外部知识库和内置计算工具,Agent 能够自主决定执行步骤,支持单轮问答及多轮对话。文章提供了详细的 Python 代码示例,解释了 ReAct 模式的工作原理,并给出了生产环境下的最佳实践建议,旨在帮助开发者快速入门并落地 LLM Agent 应用。

leon发布于 2025/2/7更新于 2026/9/574 浏览
基于 LangChain 的 LLM Agent 快速入门与实战

基于 LangChain 构建 LLM Agent

LangChain 是一个强大的框架,支持构建应用程序,将外部数据源和计算源连接到大型语言模型(LLM)。本文将介绍如何从简单的 LLM 链开始,逐步构建检索链、对话检索链,并最终实现一个能够自主决定步骤的智能体(Agent)。

1. Agent 概述

在之前的示例中,我们创建的链每一步都是预先确定的。而 Agent(智能体)的核心在于 LLM 可以自主决定采取哪些步骤来完成任务。

简单来说,Agent 就是赋予 LLM 使用工具的能力。在这个示例中,我们将授予 Agent 对两个工具的访问权限:

  1. 文档检索工具:基于外部知识库(如百度百科)的电影信息。
  2. 数学计算工具:LangChain 内置的 llm-math 工具,用于处理复杂的数学运算。

当用户询问电影相关问题时,Agent 会使用第一个工具;当涉及数学计算时,则调用第二个工具。

2. 环境准备与依赖安装

在开始之前,请确保已安装必要的 Python 库。可以使用 pip 进行安装:

pip install langchain langchain-community langchain-core faiss-cpu torch transformers

同时需要配置好环境变量或 API Key,特别是对于 HuggingFace 模型的使用。

3. 数据加载与向量化

Agent 需要访问外部知识,这通常通过 RAG(检索增强生成)技术实现。我们需要加载网页数据,将其切分,并通过嵌入模型转换为向量存储到向量数据库中。

3.1 初始化嵌入模型

首先加载词嵌入模型。根据硬件情况选择设备(CUDA, MPS 或 CPU)。

from langchain_community.document_loaders import WebBaseLoader
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
import torch
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 检测设备
EMBEDDING_DEVICE = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"

# 初始化嵌入模型
embeddings = HuggingFaceEmbeddings(
    model_name='m3e-base', 
    model_kwargs={'device': EMBEDDING_DEVICE}
)

3.2 加载与处理文档

加载外部文档并进行文本分割。合理的文本分割有助于提高检索精度。

# 加载外部文档
loader = WebBaseLoader("https://baike.baidu.com/item/%E8%AE%A9%E5%AD%90%E5%BC%B9%E9%A3%9E/5358?fr=ge_ala")
docs = loader.load()

# 文档向量化到 FAISS
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)
vector = FAISS.from_documents(documents, embeddings)

# 得到一个检索器
retriever = vector.as_retriever()

4. 创建工具

为了让 Agent 能够使用上述检索能力,我们需要将检索器封装为工具。

4.1 创建检索工具

from langchain.tools.retriever import create_retriever_tool

retriever_tool = create_retriever_tool(
    retriever,
    "rzdf_search",
    "搜索有关电影《让子弹飞》的信息。对于任何关于《让子弹飞》的问题,你必须使用此工具!"
)

4.2 加载内置工具

LangChain 提供了一些内置工具,例如用于数学计算的 llm-math。

from langchain.agents import load_tools

# 注意:此处 llm 变量需提前初始化,例如使用 ChatOpenAI 或本地模型
# from langchain.chat_models import ChatOpenAI
# llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)

tools = load_tools(['llm-math'], llm=llm)

4.3 组合工具列表

将自定义工具和内置工具合并。

tools.append(retriever_tool)

5. 构建与运行 Agent

现在我们可以创建一个代理来使用这些工具。这里我们使用 ReAct 模式,它结合了推理(Reasoning)和行动(Action)。

5.1 初始化 Agent

获取内置 Prompt 并创建 Agent Executor。

from langchain import hub
from langchain.agents import create_react_agent
from langchain.agents import AgentExecutor

# 获取内置 prompt
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

设置 verbose=True 可以查看 Agent 思考的中间过程(Chain of Thought),这对于调试和理解 Agent 行为非常重要。

5.2 单轮问答测试

调用代理回答关于电影导演的问题。

result = agent_executor.invoke({"input": "让子弹飞的导演是谁"})
print(result['output'])

输出结果示例:

{
    'input': '让子弹飞的导演是谁', 
    'output': '《让子弹飞》的导演是姜文。'
}

5.3 复杂计算测试

测试 Agent 调用数学工具的能力。

result = agent_executor.invoke({"input": "8 的立方根是多少?乘以 13.27,然后减去 5。"})
print(result['output'])

输出结果示例:

{
    'input': '8 的立方根是多少?乘以 13.27,然后减去 5。', 
    'output': '8 的立方根大约是 2,然后乘以 13.27 得到 26.54,减去 5 后得到 21.54。'
}

6. 多轮对话支持

Agent 可以通过传入聊天记录来实现上下文感知,从而进行多轮对话。

from langchain_core.messages import HumanMessage, AIMessage

chat_history = [
    HumanMessage(content="让子弹飞是谁导演的"), 
    AIMessage(content="让子弹飞是姜文导演的。")
]

result = agent_executor.invoke({    
    "chat_history": chat_history,    
    "input": "这部电影什么时候上映的?"
})

输出结果示例:

{
    'chat_history': [
        HumanMessage(content='让子弹飞是谁导演的'),  
        AIMessage(content='让子弹飞是姜文导演的。')
    ], 
    'input': '这部电影什么时候上映的?', 
    'output': '电影《让子弹飞》上映于 2010 年 12 月 16 日。'
}

7. 总结与最佳实践

至此,我们已经成功设置了一个基本的 Agent。它结合了外部知识检索和数学计算能力,并能维护对话历史。

在实际生产环境中,建议关注以下几点:

  1. Prompt 优化:默认的 ReAct Prompt 可能不够精确,可根据具体业务场景微调 System Prompt。
  2. 工具描述:清晰定义工具的描述(Description),帮助 LLM 准确判断何时调用哪个工具。
  3. 错误处理:增加异常捕获机制,防止因工具调用失败导致整个流程中断。
  4. 性能监控:记录 Token 消耗和响应时间,以便优化成本。

高级用法包括自定义 Agent 类型(如 Plan-and-Execute)、更复杂的记忆管理以及与其他系统的集成等。掌握基础后,可进一步探索 LangChain 的高级特性以构建更复杂的 AI 应用。

目录

  1. 基于 LangChain 构建 LLM Agent
  2. 1. Agent 概述
  3. 2. 环境准备与依赖安装
  4. 3. 数据加载与向量化
  5. 3.1 初始化嵌入模型
  6. 检测设备
  7. 初始化嵌入模型
  8. 3.2 加载与处理文档
  9. 加载外部文档
  10. 文档向量化到 FAISS
  11. 得到一个检索器
  12. 4. 创建工具
  13. 4.1 创建检索工具
  14. 4.2 加载内置工具
  15. 注意:此处 llm 变量需提前初始化,例如使用 ChatOpenAI 或本地模型
  16. from langchain.chat_models import ChatOpenAI
  17. llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
  18. 4.3 组合工具列表
  19. 5. 构建与运行 Agent
  20. 5.1 初始化 Agent
  21. 获取内置 prompt
  22. 5.2 单轮问答测试
  23. 5.3 复杂计算测试
  24. 6. 多轮对话支持
  25. 7. 总结与最佳实践

更多推荐文章

查看全部
  • 前端核心面试题详解:闭包、事件循环、Vue 原理等
  • ESP-SparkBot 开源 AI 桌面机器人 ESP32-S3 核心方案
  • SkyWalking 与 Spring Cloud Alibaba 全链路追踪实战
  • 从三年前端到韩国 CS 硕士:留学复盘与回归前端之路
  • Windows 下 Codex 一直“正在思考”的代理解决方案
  • Python 爬虫实战:抓取小说并保存为本地 TXT 文件
  • FPGA 实现 HDMI 输出:接口原理、时序与实战案例
  • HS-FPN:微小目标检测的频域与空间感知架构
  • Vue3 H5 端纯前端人脸识别与活体检测方案
  • 从 ComfyUI 到 Agent 工作流:设计思路、实践案例与优化策略
  • Python 安装 Pandas 常见错误与解决方案
  • PMBus 电压监测精度提升:ADC 前端电路设计要点
  • 小米智能家居 Miloco 分离式部署指南
  • llama.cpp 本地大模型部署教程
  • EasyLink 文档解析实战:让非结构化数据为AI所用
  • 大模型场景落地的关键技术与实践路径
  • Stable Diffusion v4.10 与 ComfyUI 整合包配置指南
  • 无需训练让 LLM 支持超长输入的四种主流方案
  • Gitee 代码上传完整教程:从初始化到推送
  • Vivado 连接 JTAG 烧录 FPGA 实战指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online