如果你正在寻找一套能让你从零开始真正掌握 LangChain、LangGraph、Agent、RAG 和 MCP 核心开发能力的实战教程那么这篇文章就是为你准备的。今天我们不谈空洞的概念直接聚焦于一套被社区广泛认可的、号称“B站讲得最好”的 LangChainLangGraph 实战视频教程。这套教程的核心价值在于它通过完整的项目实战将 Agent 多智能体、RAG 知识库、MCP 协议等前沿技术串联起来让你不仅能理解更能亲手搭建出可用的 AI 应用。这套教程最吸引人的地方在于其“实战性”。它不满足于简单的 API 调用演示而是深入到 LangGraph 的工作流编排、Agent 的复杂决策逻辑、RAG 系统的工程化构建以及利用 MCP 协议扩展工具能力。对于开发者而言这意味着你可以学到如何设计一个能处理多步骤任务、拥有长期记忆、并能安全调用外部工具的智能体系统。无论你是想构建一个智能客服、一个自动化数据分析助手还是一个能联网搜索并生成报告的内容创作工具这套教程提供的知识框架和代码实践都是直接的“脚手架”。接下来我们将从实战视角拆解这套教程可能涵盖的核心内容。你会看到如何准备开发环境、如何一步步构建核心模块、如何进行功能测试与联调以及如何将这套系统部署为一个可用的服务。我们重点关注的是技术的落地能力代码怎么写、服务怎么跑、问题怎么查。1. 核心能力速览在深入代码之前我们先通过一个表格快速了解基于 LangChain 和 LangGraph 构建的 AI 应用系统所具备的核心能力这也是本套实战教程力求让你掌握的内容。能力项说明与教程聚焦点技术栈核心LangChain(应用框架) LangGraph(工作流/状态机) 大语言模型(如 OpenAI GPT, DeepSeek, Ollama 本地模型)核心功能智能体(Agent)开发让 LLM 学会使用工具、进行多轮决策。RAG 知识库从文档构建、向量化到智能检索与生成的完整流水线。MCP 协议集成安全、标准化地扩展智能体可用的外部工具如数据库、Figma、蓝湖。复杂工作流编排使用 LangGraph 构建具有循环、分支、状态管理的多步骤 AI 流程。开发门槛需要基础的 Python 编程能力对 API 调用、异步编程有了解更佳。教程通常从环境配置讲起适合入门。硬件要求云上模式主要依赖 API 调用如 OpenAI本地只需能运行 Python 的环境。本地模式如需本地运行 Ollama 等模型则需要足够的 CPU/内存GPU 可加速。启动与部署通常以 Python 脚本或 FastAPI/Flask 等 Web 服务形式启动教程会涵盖本地调试和简易服务化部署。是否支持 API是。构建的应用本身可暴露为 API 服务供其他系统调用。是否支持批量/异步任务是。LangGraph 天然支持异步执行教程会涉及任务队列、并行处理等工程化主题。适合场景1. 构建企业级智能问答与文档分析助手。2. 开发自动化流程如自动生成周报、数据分析。3. 创建能使用专业工具如设计软件、数据库的 AI 智能体。2. 适用场景与使用边界这套以 LangChain 和 LangGraph 为核心的开发实战教程目标用户非常明确希望将大语言模型能力整合进实际业务系统的开发者、技术负责人以及 AI 应用创业者。它非常适合以下场景从 Demo 到产品你已体验过 ChatGPT现在想构建一个专属的、能处理内部数据、业务流程固定的 AI 应用。复杂任务自动化需要 AI 执行一系列操作例如读取邮件 - 提取关键信息 - 查询数据库 - 生成报告 - 发送通知。LangGraph 的状态机模型是绝佳选择。构建“专家”助手为公司内部知识库产品文档、客服问答、技术手册打造一个精准的问答机器人这就是 RAG 的典型应用。安全地扩展 AI 能力让 AI 能够操作 Figma 修改设计、访问数据库获取实时数据、调用内部 API同时又要保证操作的安全与可控MCP 协议提供了标准化思路。需要注意的边界与限制不是“零代码”工具你需要编写 Python 代码理解基本的软件工程概念如 API、状态管理。依赖底层 LLM 的能力系统的智能上限受限于你所选用的大语言模型如 GPT-4、Claude 或本地模型的能力。提示词工程和流程设计是为了更好地激发模型潜力。RAG 效果取决于知识库质量“垃圾进垃圾出”。文档预处理、分块策略、向量模型选择、检索算法都会极大影响最终答案的准确性。Agent 的不可预测性基于 LLM 的 Agent 在复杂决策中可能产生“幻觉”或陷入循环需要通过 LangGraph 的检查点、人工审核节点等机制进行约束。合规与安全当智能体通过 MCP 等方式接入真实业务系统数据库、内部 API时必须严格设计权限管控和操作审计防止未授权或破坏性操作。3. 环境准备与前置条件开始跟随教程实战前你需要准备好以下开发环境。这套组合是当前进行 AI 应用开发最主流和高效的选择。操作系统推荐Windows 10/11, macOS 或 Linux。所有主要组件均支持跨平台。Python 环境建议使用Python 3.10 或 3.11。避免使用 Python 3.12 等过新版本以防某些库兼容性问题。强烈推荐使用Conda或venv创建独立的虚拟环境。# 使用 conda 创建环境示例 conda create -n langchain-demo python3.10 conda activate langchain-demo # 或使用 venv python -m venv venv # Windows .\venv\Scripts\activate # Linux/macOS source venv/bin/activate核心开发工具代码编辑器VS Code推荐拥有丰富的 Python 和 AI 插件或 PyCharm。Git用于克隆教程代码和版本管理。包管理工具pip。大语言模型接入准备二选一或兼备云端 API准备一个OpenAI API Key或DeepSeek等国内可用模型的 API Key。这是最快开始的方式。本地模型安装Ollama用于在本地运行 Llama、Qwen 等开源模型。适合对数据隐私要求高或想深度定制模型的场景。# 安装 Ollama (详见官网) # 拉取一个模型例如 Qwen2.5 ollama pull qwen2.5:7b向量数据库用于 RAG教程可能会使用轻量级的ChromaDB内存/持久化模式或FAISS。它们都可以通过 pip 安装无需单独部署服务非常适合学习和原型开发。网络如果使用海外 LLM API如 OpenAI需要确保网络环境可访问。4. 项目初始化与依赖安装实战教程通常会从一个项目脚手架开始。我们模拟一个标准的项目初始化流程。步骤 1创建项目并初始化依赖文件mkdir ai-agent-tutorial cd ai-agent-tutorial touch requirements.txt touch main.py步骤 2编写requirements.txt这是最核心的一步包含了 LangChain 生态的核心库及常用工具。# LangChain 核心 langchain0.1.0 langchain-core langchain-community # 社区贡献的集成和工具 # LangGraph 用于构建工作流 langgraph0.0.40 # 用于接入 OpenAI 等模型 langchain-openai # 向量数据库与文本嵌入 chromadb langchain-chroma # 或 faiss-cpu sentence-transformers # 用于本地嵌入模型 # Web 框架用于构建 API 服务 fastapi uvicorn[standard] # 异步 HTTP 客户端 httpx # 环境变量管理 python-dotenv # 其他可能用到的工具 pypdf # 处理PDF tiktoken # Token计数步骤 3安装依赖在激活的虚拟环境中运行以下命令pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple安装过程可能会持续几分钟具体时间取决于网络和系统环境。步骤 4配置环境变量创建一个.env文件来安全地存储你的 API Key。# .env 文件内容 OPENAI_API_KEYsk-your-openai-api-key-here # 如果使用其他模型例如 DeepSeek DEEPSEEK_API_KEYyour-deepseek-api-key DEEPSEEK_API_BASEhttps://api.deepseek.com在代码中使用python-dotenv加载这些变量。5. 核心模块实战拆解接下来我们按照教程的逻辑分模块拆解如何构建一个具备 RAG 和 Agent 能力的系统。5.1 构建 RAG 知识库系统RAG 是让 AI 应用“拥有知识”的关键。我们构建一个最简单的本地知识库。目标将本地 PDF 文档加载、切分、向量化并存入 ChromaDB实现基于语义的检索。代码示例rag_pipeline.pyimport os from dotenv import load_dotenv from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_chroma import Chroma from langchain_openai import OpenAIEmbeddings from langchain.retrievers import ContextualCompressionRetriever from langchain.retrievers.document_compressors import LLMChainExtractor from langchain_openai import ChatOpenAI # 1. 加载环境变量 load_dotenv() # 2. 加载文档 loader PyPDFLoader(./docs/your_product_manual.pdf) # 替换为你的PDF路径 documents loader.load() # 3. 分割文本 text_splitter RecursiveCharacterTextSplitter( chunk_size1000, # 每个块的大小 chunk_overlap200, # 块之间的重叠保持上下文 separators[\n\n, \n, 。, , , , , 、, ] ) splits text_splitter.split_documents(documents) print(f将文档切分为 {len(splits)} 个文本块。) # 4. 创建向量存储 # 使用 OpenAI 的嵌入模型也可换为本地模型如 all-MiniLM-L6-v2 embeddings OpenAIEmbeddings(modeltext-embedding-3-small) vectorstore Chroma.from_documents( documentssplits, embeddingembeddings, persist_directory./chroma_db # 持久化到本地目录 ) print(向量数据库创建完成。) # 5. 创建检索器 retriever vectorstore.as_retriever(search_kwargs{k: 4}) # 检索最相关的4个块 # 可选6. 使用重排序器提升精度 llm ChatOpenAI(modelgpt-3.5-turbo, temperature0) compressor LLMChainExtractor.from_llm(llm) compression_retriever ContextualCompressionRetriever( base_compressorcompressor, base_retrieverretriever ) # 7. 测试检索 query 产品的主要功能有哪些 docs retriever.invoke(query) print(f查询: {query}) print(f检索到 {len(docs)} 个相关文档块:) for i, doc in enumerate(docs): print(f[{i1}] {doc.page_content[:200]}...)关键点文本分割chunk_size和chunk_overlap是影响效果的关键参数需要根据文档特点调整。嵌入模型对于中文text-embedding-3-small效果不错。追求完全本地化可使用sentence-transformers库中的paraphrase-multilingual-MiniLM-L12-v2模型。持久化persist_directory使得向量库可以保存到磁盘下次启动无需重新处理文档。5.2 创建基础 Agent工具调用Agent 的核心是让 LLM 学会在需要时调用工具。我们创建一个能进行数学计算和搜索的简单智能体。代码示例simple_agent.pyfrom langchain.agents import AgentExecutor, create_tool_calling_agent from langchain_openai import ChatOpenAI from langchain.tools import Tool from langchain import hub import math # 1. 定义工具 def calculate_sqrt(number: float) - float: 计算一个数的平方根。 return math.sqrt(number) def search_web(query: str) - str: 模拟网络搜索。实际项目中可接入 SerperAPI 或 Tavily。 # 此处为模拟返回 return f关于 {query} 的模拟搜索结果这是一个非常热门的话题涉及AI、编程和未来科技。 # 将函数包装成 LangChain Tool tools [ Tool( namesqrt_calculator, funccalculate_sqrt, description当需要计算一个数字的平方根时使用此工具。输入应为数字。 ), Tool( nameweb_searcher, funcsearch_web, description当需要获取最新的、模型知识库之外的信息时使用此工具例如新闻、实时数据。 ) ] # 2. 拉取预设的 Agent 提示词模板来自 LangChain Hub prompt hub.pull(hwchase17/openai-tools-agent) # 3. 初始化 LLM llm ChatOpenAI(modelgpt-3.5-turbo, temperature0) # 4. 创建 Agent agent create_tool_calling_agent(llm, tools, prompt) # 5. 创建执行器 agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) # 6. 运行测试 if __name__ __main__: questions [ “16的平方根是多少” “帮我查一下今天 LangChain 有什么新动态” ] for question in questions: print(f\n用户: {question}) result agent_executor.invoke({input: question}) print(fAgent: {result[output]})执行观察 当运行此脚本时你会看到类似以下的verbose输出清晰地展示了 Agent 的思考过程Reasoning和工具调用Action Entering new AgentExecutor chain... 用户: 16的平方根是多少 Thought: 用户需要计算16的平方根。我应该使用 sqrt_calculator 工具。 Action: { “name”: “sqrt_calculator”, “args”: {“number”: 16} } Observation: 4.0 Thought: 我得到了结果 4.0可以回答用户了。 Final Answer: 16的平方根是 4。 Finished chain. Agent: 16的平方根是 4。这个流程直观地展示了 Agent 的“思考-行动-观察-再思考”循环。5.3 使用 LangGraph 构建复杂工作流当任务步骤超过简单的“调用工具-返回结果”时就需要 LangGraph 来管理状态和流程。我们构建一个“研究助手”工作流它包含检索、总结、润色等多个节点。代码示例research_agent_graph.pyfrom typing import TypedDict, Annotated, List import operator from langgraph.graph import StateGraph, END from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage from langchain_core.prompts import ChatPromptTemplate # 1. 定义状态结构 class GraphState(TypedDict): 图的状态。它在节点之间传递。 question: str # 用户原始问题 retrieved_docs: List[str] # 检索到的文档 summary: str # 初步总结 polished_answer: str # 润色后的最终答案 iterations: Annotated[int, operator.add] # 循环计数器 # 2. 定义各个节点函数 def retrieve(state: GraphState): 检索节点从知识库获取相关信息。 print(f“[检索节点] 正在检索: {state[question]}”) # 这里应接入真实的 RAG 检索器此处用模拟数据 mock_docs [ “文档1: LangGraph 是用于构建有状态、多智能体应用的库。”, “文档2: 它使用图结构来定义工作流支持循环和条件分支。” ] return {“retrieved_docs”: mock_docs} def summarize(state: GraphState): 总结节点基于检索到的文档生成初步总结。 print(f“[总结节点] 正在总结 {len(state[retrieved_docs])} 份文档...”) llm ChatOpenAI(model“gpt-3.5-turbo”, temperature0) docs_text “\n”.join(state[‘retrieved_docs’]) prompt ChatPromptTemplate.from_messages([ (“system”, “你是一个专业的总结助手。”), (“human”, “请根据以下信息简要总结核心内容\n{context}”) ]) chain prompt | llm summary chain.invoke({“context”: docs_text}).content return {“summary”: summary} def polish(state: GraphState): 润色节点将总结润色成友好的最终答案。 print(“[润色节点] 正在润色答案...”) llm ChatOpenAI(model“gpt-3.5-turbo”, temperature0.7) # 温度稍高更有创造性 prompt ChatPromptTemplate.from_messages([ (“system”, “你是一个乐于助人的AI助手请将以下技术总结转化为通俗易懂、热情的回答。”), (“human”, “技术总结{summary}”) ]) chain prompt | llm polished chain.invoke({“summary”: state[‘summary’]}).content return {“polished_answer”: polished} def quality_check(state: GraphState): 质量检查节点决定是否需要进行新一轮检索模拟。 print(f“[质量检查] 当前迭代次数: {state[iterations]}”) # 这里可以加入更复杂的逻辑例如检查答案是否包含“我不知道”等 if state[‘iterations’] 2 and “LangGraph” in state[‘polished_answer’]: print(“ - 答案质量尚可但可以再深入一些决定重新检索。”) return “retrieve” # 返回下一个要执行的节点名 else: print(“ - 答案质量合格结束流程。”) return END # 3. 构建图 workflow StateGraph(GraphState) # 添加节点 workflow.add_node(“retrieve”, retrieve) workflow.add_node(“summarize”, summarize) workflow.add_node(“polish”, polish) workflow.add_node(“quality_check”, quality_check) # 设置边和入口 workflow.set_entry_point(“retrieve”) workflow.add_edge(“retrieve”, “summarize”) workflow.add_edge(“summarize”, “polish”) workflow.add_edge(“polish”, “quality_check”) # quality_check 节点的下一个节点由它自己决定条件边 workflow.add_conditional_edges( “quality_check”, quality_check, # 这个函数返回下一个节点名 { “retrieve”: “retrieve”, END: END } ) # 编译图 app workflow.compile() # 4. 运行图 if __name__ “__main__”: initial_state { “question”: “LangGraph 是什么” “retrieved_docs”: [], “summary”: “”, “polished_answer”: “”, “iterations”: 0 } print(“开始执行研究助手工作流...\n”) final_state app.invoke(initial_state) print(“\n” “”*50) print(“最终答案”) print(final_state[“polished_answer”])关键点状态管理GraphState定义了在整个工作流中传递的数据结构。节点与边每个节点是一个函数边定义了执行顺序。add_conditional_edges实现了条件分支。可观测性通过print语句我们可以清晰看到工作流的执行路径。在实际应用中应使用更专业的日志。5.4 集成 MCP 服务器扩展工具能力MCPModel Context Protocol是一种新兴协议用于标准化 LLM 与外部工具/数据源的连接。教程可能会演示如何连接一个 MCP 服务器例如一个提供数据库查询工具的服务器。概念与步骤启动 MCP 服务器这通常是一个独立的进程暴露了标准化的工具接口。例如一个“文件系统 MCP 服务器”可以提供读文件、写文件、列目录等工具。客户端连接你的 LangChain/ LangGraph 应用作为客户端通过 SSEServer-Sent Events或 stdio 连接到 MCP 服务器。动态加载工具连接成功后MCP 服务器会向客户端宣告它提供了哪些工具。你的 Agent 就可以像调用普通 LangChain Tool 一样调用这些工具。简化示例伪代码/概念# 假设我们已经有一个运行在 http://localhost:8080 的 MCP 服务器 # LangChain 社区未来可能会提供更直接的集成方式。 # 1. 连接到 MCP 服务器使用假设的 LangChain MCP 客户端 from langchain_mcp import MCPServer mcp_server MCPServer(url“http://localhost:8080”) tools mcp_server.get_tools() # 动态获取服务器提供的所有工具 # 2. 将这些工具加入到你的 Agent 中 llm ChatOpenAI(model“gpt-4-turbo”) agent create_tool_calling_agent(llm, tools, prompt) executor AgentExecutor(agentagent, toolstools, verboseTrue) # 3. 现在 Agent 就可以使用 MCP 服务器提供的工具了 # 例如如果 MCP 服务器提供了 query_database 工具 result executor.invoke({“input”: “查询上个月的销售额最高的产品。”})MCP 的价值它将工具提供者如数据库、设计软件、内部系统与 AI 应用解耦。工具提供者只需实现一次 MCP 服务器任何兼容 MCP 的 AI 框架如 LangChain都可以直接使用这些工具无需为每个框架编写适配器。6. 构建 API 服务与批量任务处理一个完整的应用需要提供 API 接口并能处理批量任务。6.1 使用 FastAPI 暴露服务我们将上述的 RAG 问答和 Agent 能力封装成 HTTP API。代码示例api_server.pyfrom fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List, Optional import asyncio from .rag_pipeline import compression_retriever # 导入之前写的 RAG 模块 from .simple_agent import agent_executor # 导入之前写的 Agent 模块 app FastAPI(title“AI Agent 服务 API”) class QueryRequest(BaseModel): question: str use_agent: bool False # 是否使用智能体模式 stream: bool False # 是否流式输出简化示例暂未实现 class BatchRequest(BaseModel): queries: List[QueryRequest] app.post(“/v1/query”) async def query_rag_system(request: QueryRequest): 单次问答接口 try: if request.use_agent: # 使用 Agent 处理可能包含工具调用 result await asyncio.to_thread( agent_executor.invoke, {“input”: request.question} ) answer result[“output”] else: # 使用纯 RAG 检索增强生成 docs compression_retriever.invoke(request.question) context “\n\n”.join([doc.page_content for doc in docs]) # 这里需要调用 LLM 结合 context 生成答案为简洁省略 answer f“基于检索到的信息答案是{context[:500]}...” # 模拟 return {“answer”: answer, “status”: “success”} except Exception as e: raise HTTPException(status_code500, detailf“处理请求时出错: {str(e)}”) app.post(“/v1/batch_query”) async def batch_query_rag_system(request: BatchRequest): 批量问答接口顺序处理 results [] for q in request.queries: try: # 这里可以改为并发处理以提高效率使用 asyncio.gather result await query_rag_system(q) results.append({“question”: q.question, “result”: result}) except Exception as e: results.append({“question”: q.question, “error”: str(e)}) return {“batch_results”: results, “processed_count”: len(results)} app.get(“/health”) async def health_check(): return {“status”: “healthy”} if __name__ “__main__”: import uvicorn uvicorn.run(app, host“0.0.0.0”, port8000)启动服务python api_server.py服务启动后可以通过http://localhost:8000/docs访问自动生成的 API 文档Swagger UI并进行测试。6.2 批量任务处理进阶对于大量任务需要引入任务队列如 Celery Redis或异步批处理。简化批处理示例import asyncio import aiohttp from concurrent.futures import ThreadPoolExecutor async def process_batch_queries_concurrently(queries: List[str], api_url: str, max_workers: int 5): 并发处理一批查询 async with aiohttp.ClientSession() as session: semaphore asyncio.Semaphore(max_workers) # 控制并发数 async def process_one(query): async with semaphore: async with session.post(api_url, json{“question”: query, “use_agent”: False}) as resp: return await resp.json() tasks [process_one(q) for q in queries] results await asyncio.gather(*tasks, return_exceptionsTrue) return results # 使用示例 if __name__ “__main__”: queries [“问题1”, “问题2”, “问题3”, …] results asyncio.run(process_batch_queries_concurrently(queries, “http://localhost:8000/v1/query”)) for q, r in zip(queries, results): print(f“Q: {q} - R: {r}”)7. 资源占用与性能观察在开发和部署过程中监控资源使用和性能至关重要。内存与显存RAG 检索阶段向量数据库如 Chroma加载到内存后会占用一定空间取决于向量维度和数据量。嵌入模型推理如果是本地模型会占用显存。LLM 推理阶段调用云端 API 主要消耗网络带宽和 Token 费用。本地运行模型如通过 Ollama则会占用大量内存和显存。一个 7B 参数的模型通常需要 8GB 以上的空闲内存/显存。观察方法使用nvidia-smiGPU或任务管理器/htopCPU/内存进行监控。API 调用延迟与成本延迟网络往返时间 模型生成时间。对于复杂 Agent 任务多次工具调用会导致多次 API 请求总延迟叠加。成本OpenAI 等 API 按 Token 收费。Agent 的多次交互和长上下文会显著增加 Token 消耗。务必在代码中估算 Token 数量使用tiktoken库。优化建议缓存对相同的查询或中间结果进行缓存特别是 RAG 检索结果。异步化利用 LangChain 和 LangGraph 的异步支持ainvoke,ainvoke以及asyncio来处理并发请求。限制上下文长度合理设置 RAG 检索返回的文档块数k并采用“重排序”策略优先返回最相关的内容避免将过多无关文本送入 LLM。使用更经济的模型在非关键路径上使用gpt-3.5-turbo而非gpt-4-turbo。对于本地部署可以尝试量化后的较小模型。8. 常见问题与排查方法在学习和开发过程中你一定会遇到各种问题。下表列出了常见问题及其排查思路。问题现象可能原因排查方式解决方案导入 LangChain 库失败版本冲突或未在正确的虚拟环境中安装。1. 检查当前 Python 环境 (which python或where python)。2. 使用 pip listgrep langchain 查看已安装版本。OpenAI API 调用报错AuthenticationErrorAPI Key 错误、过期或未设置。1. 检查.env文件中的OPENAI_API_KEY。2. 在代码中打印os.getenv(“OPENAI_API_KEY”)的前几位确认。1. 在 OpenAI 官网重新生成 Key。2. 确保.env文件在项目根目录且代码中已调用load_dotenv()。RAG 检索结果不相关1. 文本分割策略不当。2. 嵌入模型不匹配如用英文模型处理中文。3. 检索参数k设置过大或过小。1. 检查分割后的文本块是否完整表达了语义。2. 尝试不同的chunk_size和chunk_overlap。3. 换用多语言嵌入模型。1. 调整文本分割器参数。2. 使用sentence-transformers的paraphrase-multilingual-*模型。3. 引入重排序器。Agent 陷入循环或调用错误工具1. 工具描述不清晰。2. LLM 温度 (temperature) 过高导致决策不稳定。3. 缺少对 Agent 行为的约束。1. 开启verboseTrue观察 Agent 的思考链。2. 检查工具的描述 (description) 是否准确。1. 优化工具描述使其精确无歧义。2. 降低temperature到 0。3. 在 LangGraph 中设置最大迭代次数或超时机制。LangGraph 工作流状态混乱状态 (State) 结构设计不合理节点间数据传递错误。1. 在每个节点打印输入状态。2. 使用 LangGraph 的可视化工具检查图结构。1. 精确定义TypedDict确保每个字段类型正确。2. 简化工作流逐步增加复杂度。本地 Ollama 模型响应慢1. 硬件资源不足。2. 模型未量化体积过大。1. 观察 CPU/GPU 和内存使用率。2. 检查 Ollama 日志。1. 尝试更小的模型如 3B、7B 参数。2. 使用量化版本如qwen2.5:7b-instruct-q4_K_M。3. 确保为 Ollama 分配了足够的系统资源。FastAPI 服务并发请求失败1. LLM 调用是同步的阻塞了事件循环。2. 未做并发控制资源耗尽。1. 使用async/await和asyncio.to_thread将同步 LLM 调用卸载到线程池。2. 监控服务在压力下的表现。1. 将核心的同步函数用线程池包装。2. 在 API 层面或任务队列层面加入限流机制。9. 最佳实践与使用建议基于实战经验以下建议能帮助你更稳健地开发和部署 LangChain/LangGraph 应用从简单开始逐步迭代不要一开始就设计复杂的超级 Agent。先实现一个能正确回答问题的 RAG 系统再添加一个简单的工具调用最后用 LangGraph 将它们组合起来。重视提示词工程Agent 的表现极度依赖提示词。将系统提示词、工具描述、用户指令分开管理并不断进行测试和优化。考虑使用 LangChain 的hub.pull或本地模板文件。实现完善的日志与监控为你的工作流每个节点添加日志记录记录输入、输出、耗时和错误。这对于调试复杂流程和了解系统行为至关重要。为 Agent 设置“安全护栏”工具权限明确每个工具能做什么并在工具层面进行参数验证和权限检查。迭代限制在 LangGraph 中设置最大循环次数防止 Agent 陷入死循环。人工审核节点在关键操作如发送邮件、修改数据库前加入人工确认节点。管理好上下文长度LLM 的上下文窗口是有限的且昂贵的。主动管理对话历史总结或丢弃旧消息。在 RAG 中精心设计检索策略只返回最相关的信息。版本控制与配置化将提示词、工作流图结构、模型配置等写入配置文件如config.yaml或数据库而不是硬编码在代码中。这便于实验、回滚和不同环境部署。测试、测试、再测试构建全面的测试用例包括单元测试单个工具、节点、集成测试整个工作流和端到端测试模拟用户对话。考虑使用pytest框架。这套“B站讲得最好的” LangChainLangGraph 实战教程其精髓在于将前沿的 AI 应用开发范式拆解为一个个可动手、可调试、可复用的代码模块。从环境搭建到 RAG 构建从简单 Agent 到基于 LangGraph 的复杂工作流再到通过 MCP 协议进行能力扩展和最终的服务化部署它提供了一条清晰的学习路径。最值得你立即动手尝试的是RAG 知识库的构建和第一个能调用工具的 Agent。这两个模块是大多数 AI 应用的基石。在实践过程中你会遇到嵌入模型选择、提示词优化、工具描述撰写等各种具体问题而解决这些问题的过程正是能力提升的关键。最容易踩的坑往往是环境配置和版本依赖因此务必使用虚拟环境并记录下所有可工作的版本号。另一个常见问题是低估了 Agent 行为的不确定性务必为其设计好约束和回退机制。掌握了这些核心技能后你可以进一步探索更复杂的多智能体协作、与业务系统的深度集成通过 MCP、以及面向生产环境的性能优化和监控告警。AI 应用开发的世界刚刚开启而你现在已经拥有了第一把钥匙。