LangChain 框架下的 AI Agent 构建与部署实践

LangChain 框架下的 AI Agent 构建与部署实践

  • 专栏系列第 6 篇 · 智能体纪元

本文将详细介绍并实践以下内容:

  • LangChain 各组件(LLM、工具、链、记忆、Agent、提示、RAG、Retriever 等)在完整项目中的协作关系
  • 结合 DeepSeek + bge-small-zh + FAISS + DuckDuckGoSearch
  • 提供模块化代码示例,说明每部分的职责与灵活性
  • 使用 FastAPI 将 Agent 封装成 API 服务,可用于 Web 前端接入
  • 查漏补缺前几篇中未展开的主题,例如 Tool 封装规范、Agent 执行中间状态管理、复杂提示结构设计等

本系列文章最后一篇将系统讲解如何基于 LangChain 框架构建一个功能齐全、可部署的智能问答 Agent。我们将结合前文核心概念(ReAct 架构、RAG 检索增强、提示工程、工具调用等)逐步展开,选用 DeepSeek 聊天模型作为 LLM、BAAI/bge-small-zh-v1.5 作为中文嵌入模型、FAISS 作为向量数据库、DuckDuckGoSearchRun 作为联网搜索工具,最终封装成 RESTful 服务。

  • 什么是LangChain?

LangChain是一个用于开发由语言模型驱动的应用程序的框架。它允许开发者将大型语言模型(LLMs)与其他计算或知识源连接起来,从而创建更强大、更灵活的AI应用。

  • LangChain核心组件

LangChain包含多个核心模块,这些模块可以组合使用来构建复杂的AI Agent:

  • Models:支持多种语言模型接口
  • Prompts:提示管理、优化和序列化
  • Memory:短期和长期记忆管理
  • Indexes:文档加载、处理和检索
  • Chains:调用序列和组合
  • Agents:动态决策和工具使用
  • Callbacks:日志和流式传输
  • ReAct 框架:是一种将推理(Reasoning)与动作(Action)相结合的交互式提示方式。LangChain 的 ReAct Agent 可以让模型在对话过程中思考 ()、采取动作 () 并观察结果 (),从而动态调用外部工具。例如,当模型面临复杂问题时,可以通过调用搜索工具或数据库工具来获取补充信息,再结合生成能力给出答案。
  • RAG(检索增强生成):指在生成回答时通过检索相关文档来提供上下文或证据的技术。RAG 适用于将领域知识融入对话,避免模型只凭「记忆」回答超出能力的问题。我们会使用向量数据库(FAISS)和文本嵌入来实现 RAG,从海量文档中检索与用户问题最相关的内容,再输入模型生成答案。
  • 提示工Agent 智能体程:通过 等机制设计和组织模型提示,将任务指令、示例和变量拼接成最终输入。好的提示可以大幅提升模型理解和回答能力。我们将定制提示模板,明确说明用户意图及可用工具等,引导模型在 ReAct 交互中正确使用工具。
  • 工具调用:Agent 能访问的工具(如搜索引擎、知识库查询、计算器等)需封装为符合接口的 对象,包含名称、调用函数和用途说明。在 ReAct 策略下,模型可以选择某个工具并按指定格式传入参数。本文示例中,将集成联网搜索与本地向量检索两种工具供 Agent 使用。
  • 多轮对话与记忆:使用 记录会话历史,实现上下文连续性。当用户提问时,上下文记忆会作为提示变量注入,让模型参考前文对话内容,使回答更具连贯性。
  • LLM(聊天模型):选用 DeepSeek 提供的 deepseek-chat 模型作为对话模型。DeepSeek 是一系列开源模型,支持结构化输入、工具调用等能力。DeepSeek API 使用与 OpenAI 兼容的 API 格式,可使用 LangChain 的 进行接入,如下所示:

✅ 参数使用建议

  1. 温度设置
    • 适合问答、摘要、代码生成等确定性任务;
    • 更适合生成富有创意的内容。
  2. 兼容模型
    • 若使用 DeepSeek、Moonshot、Azure OpenAI 等非官方 API,务必设置 。
  3. 高阶用法
    • 可结合 或 构建复杂流程。

这样实例化后, 即可获得模型回复。


输出:


在构建 Agent 之前,我们需要先将原始文档转化为可以检索的向量形式,具体包括:

(1)加载本地文档

LangChain 提供多种 来读取不同格式的文档。

  • 读取 Markdown 文件():

2025-05-14 16 26 47.png

  • 读取整个目录下的 Markdown 文件

2025-05-14 16 40 06.png

  • 读取 PDF 文件

对于 PDF 文件,可以使用 进行加载。它会按页读取并自动转为 对象。


2025-05-14 16 43 03.png

如果你希望将多个来源的文档合并处理,只需拼接多个 列表即可:


(2)文档切分

为了让长文档适配向量数据库,我们需要按段落或语义块进行切分。推荐使用 :


此操作会将文档拆成多个短文本块,既保留上下文连续性,又便于后续的向量化处理。

2025-05-14 16 46 54.png

我们选用了性能与体积兼顾的中文向量模型 —— BAAI/bge-small-zh-v1.5。它支持短语级语义检索,能生成可用于相似度计算的高质量文本向量。


  • 嵌入模型(Embedding Model) 的核心功能是将自然语言文本转换为数值向量(embedding),使得我们可以基于向量做相似度检索、聚类、语义匹配等操作。在 LangChain 中,embedding model 通常用于以下两个场景:
  1. 文档入库(embedding + 存入向量数据库)
  2. 用户查询转换(embedding + 相似文档检索)
  3. BGE 模型推荐在 之前添加查询指令(query_instruction),以获得更好的效果。

输出:

2025-05-14 15 08 11.png

  • 向量数据库:使用 FAISS 存储文档向量。FAISS 是 Facebook 提供的高效相似度检索库,专门用于密集向量搜索。将待检索的文档列表通过 编码后,使用 构建向量索引。例如:

1. 将前面切分后的 向量化,并存入 FAISS


2025-05-14 17 00 02.png

这样即可快速从 FAISS 中根据用户查询检索相关文档。

2. 检索器构造(Retriever)

我们通过 构造一个语义检索器,支持基于向量相似度的文段召回:


  • 是 LangChain 中统一的文档检索接口,而 是把底层的向量数据库变成这个接口。
  • :检索方式,默认是 “similarity”(相似度检索),还可以是 “mmr”(最大边际相关性)等。
  • :检索参数,比如 k=3 表示返回前 3 条相似结果。也可以传入 等用于更精细控制的参数。

输出:

2025-05-14 17 15 43.png

使用 DuckDuckGo 搜索工具进行实时查询。LangChain 社区提供了 封装,可直接调用 DuckDuckGo API。示例:


2025-05-14 17 25 37.png

这个工具方便集成到 Agent 中,实现“需要联网搜索”时的补充信息。

所有工具统一封装为 对象,包含名称、执行函数和描述。例如,我们可以准备两个工具:网络搜索向量检索


这样 Agent 在对话过程中如果决定“搜索网页”就会调用第一个工具,如果需要“查看知识库”则调用第二个。

按照 LangChain 组件化设计,我们将主要功能模块划分为不同文件或类以便维护:

  • Embedding 模块:负责加载 模型并构建 FAISS 数据库。示例代码如上,将用于后续检索。
  • Tool 模块:定义各种工具。可以把搜索和检索函数封装在此,例如前述的 、。
  • Prompt 模板:使用 定义 ReAct 提示格式,插入工具列表和对话历史等变量,例如:

  • 记忆模块:通过 保存对话记录。初始化时指定 ,并将该内存作为参数传入 AgentExecutor。
  • Agent 构建:使用 LangChain 的 ReAct Agent 构造器创建可调用的 Agent:

这样得到的 会返回模型对话输出,其中模型可以在生成过程中调用 或 等工具,并将返回结果纳入思考。


输出:


完成以上组件后,用 FastAPI 构建 API 服务接口:


启动服务后,客户端即可通过 POST 请求访问,例如:


上述请求返回的 JSON 会包含智能体的回答。整个服务基于组件化设计,后续可替换模型、增加工具或更换向量数据库,而不影响主逻辑。

  • 推荐阅读:深入了解 LangChain 文档,如 ReAct Agent 和工具调用机制,探索 LangGraph 新架构;学习 DeepSeek 和 BGE 模型的官方资料。
  • 项目目录及代码详情(以模块化方式组织代码):

详细代码:ai_agent_demo


输出:

2025-05-19 16 43 25.png 2025-05-19 16 44 21.png



2025-05-19 17 18 28.png

  • 总结:本文展示了如何将 RAG、工具调用、多轮记忆等技术融合到一个 LangChain Agent 中,结合 DeepSeek 聊天模型和本地向量数据库,实现实用的问答系统。该架构具有良好可扩展性,可根据需求添加更多工具或采用更强大的模型,以满足复杂的应用场景。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/245337.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月15日 下午7:54
下一篇 2026年3月15日 下午7:54


相关推荐

关注全栈程序员社区公众号