ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

LangGraph与LangChain实战:构建多智能体RAG系统的完整指南

LangGraph与LangChain实战:构建多智能体RAG系统的完整指南 这类教程最值得先看的不是它覆盖了多少个技术名词而是学完之后你能不能真的动手搭出一个能跑起来的、有实际用处的智能体应用。很多人学了一堆概念但一到自己动手就卡在环境、依赖、数据流和任务编排上。这套教程的核心价值在于它把 LangChain、LangGraph、Agent、RAG、MCP 这几个当下最热的开发框架和概念串成了一个从零到一、再到生产级优化的完整实战路径。它适合两类人一是想从传统后端或数据开发转向 AI 应用开发的工程师二是已经了解过一些 AI 模型 API 调用但不知道如何构建复杂、稳定、可维护的智能体系统的开发者。最关键的一点是它不只是教你怎么调用 API而是教你如何用 LangGraph 来设计和控制多个智能体之间的协作流程如何用 RAG 给智能体装上“知识库”避免胡说八道以及如何通过 MCP 这种新兴协议来扩展工具能力。下面我就以一个过来人的视角拆解一下如果要跟着这套教程实战你需要关注的核心环节、避坑点以及如何验证自己的学习成果。1. 先理清核心概念LangChain、LangGraph、Agent、RAG、MCP 各自管什么在动手之前如果概念是模糊的代码就会写得混乱。这几个词经常被混在一起讲但它们职责不同。LangChain更像是一个“粘合剂”和“工具箱”。它的主要作用是标准化流程把调用大模型、处理输入输出、连接外部工具如搜索、数据库的步骤抽象成一个个可复用的“链”Chain。提供常用组件比如各种文本分割器、向量化接口Embedding、文档加载器。你用它来快速搭建一个基于提示词Prompt的问答流程会很方便。管理上下文Context帮助处理长文本解决模型有限的输入长度问题。但 LangChain 在处理需要循环、分支、多角色协作的复杂 Agent 逻辑时会显得有点力不从心代码容易变成“面条代码”。LangGraph就是来解决这个问题的。你可以把它理解为在 LangChain 之上的一套“流程图”或“工作流引擎”。核心是“图”把智能体的每个步骤节点和步骤之间的流转条件边定义清楚。比如“先让 Agent A 分析问题如果问题是关于财务的就转给 Agent B 处理否则转给 Agent C”。管理状态State在整个流程中有一个全局的状态对象在节点间传递和修改这比用一堆全局变量要清晰和可靠得多。支持循环和中断可以实现“思考-行动-观察”的循环直到任务完成或满足某个条件退出。这就是实现复杂 Agent 的关键。所以LangChain 和 LangGraph 不是二选一而是组合使用。LangChain 提供基础的模型调用、工具封装能力LangGraph 则用这些基础能力作为节点来编排高级的、有状态的协作流程。Agent智能体在这里是一个抽象概念指的是能理解目标、调用工具思考/行动、并从结果中学习观察来完成任务的程序单元。一个 LangGraph 流程里可以包含多个不同职责的 Agent。RAG检索增强生成是给智能体“喂资料”的关键技术。它解决的核心问题是大模型的知识可能过时或不包含你的私有数据直接问它会胡编乱造幻觉。流程把你的文档PDF、Word、网页等切片、向量化后存入向量数据库如 Milvus、Chroma。当用户提问时先从向量库中检索出最相关的文档片段和问题一起交给大模型让它基于这些“证据”来生成答案。在教程里的角色教程里提到的“基于LangGraph多Agent对公信贷尽职调查报告生成系统”RAG 很可能就是用来让 Agent 能够查询内部信贷政策、企业财报等非公开文档的。MCPModel Context Protocol是一个比较新的协议可以把它看作是“工具扩展的标准化接口”。传统问题给 Agent 开发新工具比如连接一个内部业务系统需要写很多适配代码而且不同项目之间工具难以复用。MCP 的思路定义一套标准协议任何符合 MCP 的服务Server都可以像插件一样被支持 MCP 的客户端比如某些 Agent 框架发现和调用。教程里提到的 Figma MCP、蓝湖 MCP就是指为 Figma、蓝湖这类设计协作平台提供了标准化的工具接口你的智能体可以直接通过协议调用它们的功能而不需要为每个平台写专属的爬虫或 API 封装代码。理清了这些你就知道教程的每一部分在解决哪个层面的问题学习时目标会更明确。2. 环境准备与依赖管理避开第一个大坑很多人卡在第一步环境跑不起来。教程如果是2026年的很可能基于较新的 Python 和库版本。你需要有策略地搭建环境。2.1 核心环境清单Python 版本建议直接使用 Python 3.10 或 3.11。3.12 可能存在一些第三方库的兼容性问题。使用pyenv或conda管理多版本 Python 是很好的习惯。包管理工具强烈建议使用poetry或uv。它们能更好地处理依赖冲突和锁定版本。如果教程提供了requirements.txt或pyproject.toml就用它初始化环境。关键依赖除了langchain,langgraph这些核心库你一定会用到一个大模型 SDK如openai(用于 GPT)、anthropic(用于 Claude) 或国内模型的 SDK。注意教程中提到的langchain支持deepseek的第几个版本这需要你查看 LangChain 官方文档或 DeepSeek 的集成说明确认兼容的 SDK 版本。向量数据库客户端如pymilvus(用于 Milvus)、chromadb。文档加载器langchain-community中包含了大量加载器如PyPDFLoader,UnstructuredFileLoader。嵌入模型可以是 OpenAI 的text-embedding-3-small也可以是开源的如BAAI/bge-small-zh-v1.5后者需要sentence-transformers库。2.2 依赖安装的实战建议不要一次性安装所有依赖。按模块来基础骨架先只安装langchain-core,langchain,langgraph。跑一个最简单的“Hello World”链确认基础环境 OK。模型接入再安装 OpenAI 等模型 SDK并设置好 API Key 环境变量。写一个简单的提示词链测试模型调用是否成功。RAG 模块接着安装文档加载器、嵌入模型库和向量数据库客户端。尝试加载一个本地 PDF切片生成向量存入 Milvus 或 Chroma。高级工具最后再根据教程进度引入 MCP 客户端或其他特定工具库。这样做的好处是一旦报错你能快速定位是哪个模块的依赖出了问题。常见的坑点包括Protobuf 版本冲突某些向量数据库客户端和 TensorFlow 等库可能对 protobuf 版本有要求。如果遇到ImportError相关 protobuf尝试固定一个兼容版本如protobuf3.20.*。CUDA 与 torch 版本不匹配如果你使用本地部署的嵌入模型或 LLM需要安装 PyTorch。务必去 PyTorch 官网根据你的 CUDA 版本生成安装命令不要直接pip install torch。网络问题下载某些大型模型文件如 sentence-transformers或连接海外 API 可能超时。对于模型文件可以考虑配置镜像源或手动下载。对于 API确保网络环境允许。3. 从单智能体到多智能体用 LangGraph 构建工作流理解了概念搭好了环境接下来就是核心实战如何用 LangGraph 把东西串起来。3.1 单智能体任务拆解不要一开始就想复杂的多 Agent 系统。先从 LangChain 构建一个单 Agent 开始定义工具用tool装饰器定义一个简单的函数比如计算器、网络搜索需要 API Key、查询数据库。创建 Agent使用create_react_agent或类似的函数将大模型和你定义的工具绑定。这个 Agent 的核心逻辑是“思考-行动-观察”循环。运行测试用一个简单问题测试例如“北京现在的天气怎么样”观察 Agent 是否会正确调用搜索工具。这个阶段你可能会遇到工具描述不清模型无法理解何时该调用你的工具。需要仔细编写工具的name、description和参数args_schema。无限循环Agent 可能陷入“思考-调用无关工具-再思考”的死循环。需要设置max_iterations参数来限制循环次数。解析错误模型返回的内容不符合工具调用的格式JSON。需要检查提示词模板并做好错误处理try...catch。3.2 引入 LangGraph 实现状态管理当单 Agent 能工作后引入 LangGraph 来让它更健壮、更可控。定义状态State这是一个 Pydantic 模型定义了在整个工作流中需要传递的所有数据。比如question,analysis,tools_called,final_answer。定义节点Nodes每个节点是一个函数。比如agent_node: 运行你的单智能体更新状态中的analysis。tool_node: 根据 Agent 的决定执行具体的工具调用更新tools_called。judge_node: 判断工具返回的结果是否足够回答question决定下一步是继续循环还是结束。定义边Edges和条件流转使用conditional_edge。例如从agent_node出来后如果 Agent 决定调用工具就流向tool_node如果决定直接回答就流向end。编译并运行图graph StateGraph(...).compile()然后graph.invoke({question: 你的问题})。关键点LangGraph 的“图”是静态定义的对应热词langgraph 静态循环但执行路径是动态的。这比用if-else硬编码逻辑要清晰和强大得多。3.3 扩展到多智能体协作这是教程的进阶部分。多 Agent 系统的设计核心是分工和路由。分工设计不同专长的 Agent。例如一个“分析员”Agent 负责理解用户意图和拆解任务一个“研究员”Agent 专精调用 RAG 知识库一个“执行员”Agent 负责调用具体的 API 工具一个“审核员”Agent 负责检查最终输出的质量和合规性。路由在 LangGraph 中可以设计一个“路由节点”。这个节点根据当前状态比如问题的领域、复杂度决定下一个应该激活哪个 Agent。这可以通过一个简单的分类器甚至是用大模型本身来实现。教程案例“对公信贷尽职调查报告生成系统”就是一个典型的多 Agent 应用查询解析 Agent理解用户要生成关于哪家公司、什么类型的报告。数据收集 Agent调用 RAG 从内部知识库查信贷政策也可能通过 MCP 工具调用外部企查查 API 获取企业公开信息。报告生成 Agent将收集到的信息按照固定模板生成报告草稿。风险审核 Agent检查报告草稿中的数据是否矛盾风险提示是否充分。格式整理 Agent将最终报告输出为 Word 或 PDF 格式。整个流程由 LangGraph 编排状态中传递着企业名称、收集到的数据、报告草稿、审核意见等。4. RAG 系统搭建让智能体“有据可查”RAG 听起来简单但搭建一个效果好的 RAG 系统有很多细节。教程里应该会覆盖从文档处理到检索的全流程。4.1 文档处理流水线这是影响效果的基础不能马虎。加载使用合适的DocumentLoader。对于 PDFPyPDFLoader是基础选择但对于复杂排版UnstructuredFileLoader效果更好但依赖较重。分割不要简单按固定字符数切割。优先尝试递归字符分割RecursiveCharacterTextSplitter它会尝试按段落、句子、单词的层级来分割尽量保证语义完整。基于标记的分割对于代码、Markdown使用LanguageSplitter或MarkdownHeaderTextSplitter。关键参数chunk_size(如 500-1000)、chunk_overlap(如 100-200)。重叠部分能避免答案被切碎。向量化选择嵌入模型中文场景BAAI/bge系列是很好的开源选择。英文或双语text-embedding-3-small效果稳定且便宜。本地部署考量如果选开源模型要考虑模型大小和推理速度。bge-small-zh-v1.5约 100MB在 CPU 上也可用适合入门。存储Milvus功能强大适合生产环境但部署稍复杂。教程中“spring boot milvus langchain4j 实现 rag 问答”提到了 Java 生态的集成。Chroma轻量纯 Python支持内存和持久化模式非常适合开发和原型验证。注意Chroma 的持久化路径如果设置不当重启后数据可能丢失务必确认persist_directory参数正确使用。4.2 检索与生成优化存进去之后怎么高效准确地查出来检索器最基本的vectorstore.as_retriever()。可以调整search_type如similarity相似度搜索、mmr最大边际相关性后者在保证相关性的同时增加多样性和search_kwargs如k4返回前4个片段。重排序初级 RAG 直接返回 top-k 片段。高级 RAG 可以引入一个“重排序”模型对初步检索出的片段进行更精细的相关性打分重新排序只把最相关的几个片段送给大模型。这能显著提升答案质量但会增加延迟。提示词工程给大模型的提示词至关重要。必须清晰指示“请严格根据以下上下文回答问题如果上下文不包含答案请说‘根据已知信息无法回答’。” 这能有效减少幻觉。避坑点数据预处理不干净PDF 中的页眉页脚、无关图片的标注文字等如果不清理会成为噪声影响检索精度。分割不合理chunk_size太大可能包含多个不相关主题太小可能把完整答案切碎。需要根据你的文档类型做测试。“中文分句”问题一些分割器对中文句号“。”的识别不如英文句号“.”好可能导致句子被不合理切断。可以自定义分割符号列表。5. MCP 集成扩展智能体的工具能力MCP 是让智能体能力“可插拔”的关键。教程如果涉及2026年的 MCP 开发实战可能会教你如何创建和使用 MCP Server。5.1 MCP 的基本使用对于智能体开发者客户端使用 MCP 相对简单确保你的 Agent 框架如某些支持 MCP 的 LangChain 版本或专用框架支持 MCP 客户端。启动或连接一个 MCP Server。例如一个提供了“查询天气”工具的 Server。你的 Agent 就能像调用本地函数一样通过标准协议调用这个“查询天气”工具无需关心 Server 是用什么语言实现的。5.2 MCP Server 开发初探如果你需要为自己公司的内部系统暴露工具可能需要开发 MCP Server。核心步骤定义工具明确你的 Server 提供哪些工具每个工具的输入输出格式。实现 Server根据 MCP 协议规范实现一个 HTTP 或 stdio 服务器监听请求。请求和响应都是特定的 JSON 格式。注册工具在 Server 启动时向客户端宣告自己提供的工具列表。处理调用当客户端发起工具调用请求时执行相应的内部逻辑如查询数据库、调用内部 API并将结果按协议格式返回。关键理解MCP 协议类似于一个更智能、更面向 LLM 的“API 网关”或“RPC 协议”。它让工具的定义和调用标准化了。教程里提到的 Figma MCP、蓝湖 MCP就是设计软件公司官方或社区提供的标准 Server让你的智能体可以直接操作设计稿。6. 面试题准备与项目复盘从“会做”到“会讲”教程如果包含面试题那价值就不仅仅是技术了更是思路的整理。面对“LangChain 和 LangGraph 区别”“如何设计一个多 Agent 系统”“RAG 效果不好怎么排查”这类问题你需要有结构化的回答。6.1 概念辨析类问题LangChain vs LangGraph如前所述LangChain 是组件库和链式编排适合线性流程LangGraph 是基于状态图的工作流引擎适合有循环、分支、多角色的复杂 Agent。它们常结合使用。Agent 架构可以从“感知-规划-执行-学习”框架去谈并结合 LangGraph 的节点和状态管理来解释具体实现。RAG 框架核心是“索引-检索-生成”三阶段。可以谈向量检索、图检索、混合检索等不同方案的选择。6.2 设计类问题设计一个多 Agent 系统遵循“单一职责-定义接口-设计路由-状态共享-错误处理”的思路。先拆分子任务为每个任务设计专用 Agent定义清晰的消息格式或共享状态设计一个路由中心可以是规则也可以是小模型考虑 Agent 间通信和异常处理如某个 Agent 失败后的重试或降级方案。基于LangGraph多Agent对公信贷系统这就是一个完美的设计案例。可以详细阐述你如何设计数据流、如何利用 RAG 注入知识、如何用 MCP 连接外部数据源、如何设计审核节点控制风险。6.3 实战排查类问题RAG 效果差提供一个排查漏斗检索阶段检查检索到的片段是否真的相关可以人工评估。如果不相关检查嵌入模型是否合适、向量索引是否构建正确、chunk_size是否合理。生成阶段如果检索片段相关但答案不对。检查提示词是否明确要求“基于上下文”上下文的格式是否清晰如用### 上下文包裹模型本身的能力是否足够。数据阶段如果以上都 OK回溯到数据预处理检查文档加载和分割是否丢失或扭曲了关键信息。Agent 陷入循环检查工具描述是否清晰检查max_iterations参数在 LangGraph 中可以在判断节点设置更严格的终止条件。系统速度慢定位瓶颈。是嵌入模型计算慢考虑量化、用小模型向量检索慢考虑索引类型、硬件还是大模型响应慢考虑模型规格、缓存6.4 项目复盘要点学完教程后最好的巩固是做一个自己的小项目。复盘时问自己目标我做的这个智能体解决了什么问题架构图我能画出数据流和组件图吗LangGraph 的图本身就是很好的素材技术选型理由为什么用 Chroma 不用 Milvus为什么用这个嵌入模型遇到的坑哪个问题最难解决最后怎么解决的例如处理 PDF 表格提取不准换用了unstructured库效果评估如何衡量我的系统是有效的是人工评测还是设计了自动化测试用例后续优化如果时间再多点我会在哪个环节投入例如引入重排序、实现 Agent 的记忆机制、做更全面的错误处理和日志把这些想清楚、讲明白无论是应对面试还是在实际工作中推进项目你都会更有底气。这套教程的价值最终要体现在你能独立完成一个闭环的、可运行的智能体应用并且能清晰地解释其中的每一个技术决策。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表