ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

LangChain + MCP + LangGraph 实战:从零构建具备外部工具调用能力的AI智能体

LangChain + MCP + LangGraph 实战:从零构建具备外部工具调用能力的AI智能体 这次我们来看一个 LangChain MCP 的实战教程项目。如果你对构建 AI 应用、连接外部工具、或者开发智能体Agent感兴趣但又被各种框架和概念搞得晕头转向这篇文章就是为你准备的。它不是一个新发布的模型而是一套围绕 LangChain 生态特别是新引入的 MCPModel Context Protocol协议和 LangGraph 框架从零开始的实战指南。核心目标很直接手把手带你从环境搭建、概念理解一直走到能跑通的代码实战最终开发出一个具备实际功能的 AI Agent。最值得关注的几个点第一它基于最新的 LangChain 生态涵盖了 MCP 和 LangGraph 这两个当前的热门组件第二教程定位“保姆级”意味着会详细拆解每一步降低入门门槛第三最终落脚点是“代码实战开发”不是空谈理论而是能产出可运行的项目。对于开发者而言这意味着你可以快速上手将大语言模型LLM与数据库、搜索引擎、API 等外部工具连接起来构建属于自己的自动化工作流或智能助手。硬件门槛方面这主要是一个 Python 开发框架的学习与应用对 GPU 没有硬性要求。你的开发机只要能运行 Python 和必要的包即可重点在于理解框架设计和编写代码。当然如果你后续集成的 LLM 需要本地部署那才会涉及显存问题但本教程的核心是框架使用。本文将带你完成以下内容首先快速梳理 LangChain、MCP、LangGraph、Agent 这几个核心概念的关系然后从零开始准备 Python 开发环境并安装所有必要的依赖接着我们会分步实现几个关键场景的代码示例包括基础的链Chain构建、使用 MCP 协议连接外部工具如数据库、文件系统以及利用 LangGraph 构建有状态的、可循环的复杂 Agent最后我们会讨论常见的开发错误、调试技巧以及如何将这些组件应用到你的实际项目中。1. 核心能力速览在深入代码之前我们先通过一个表格快速了解本教程所涉及技术的核心定位与能力这有助于你判断是否值得投入时间学习。能力项说明项目类型AI 应用开发框架实战教程非单一模型。技术栈Python, LangChain, MCP (Model Context Protocol), LangGraph, 各类 LLM API (如 OpenAI, Anthropic, 本地模型)。核心功能1.LangChain: 编排 LLM 调用、提示词管理、记忆、链式调用。2.MCP: 标准化协议用于安全、声明式地将外部工具/数据源暴露给 LLM。3.LangGraph: 基于图Graph来构建有状态、多步骤、可循环的复杂 Agent 工作流。4.Agent: 能理解目标、调用工具、完成复杂任务的智能体。硬件门槛极低。主要依赖 CPU 和内存进行开发与框架运行。仅当集成本地 LLM 推理时才需要 GPU。启动方式通过 Python 脚本或 Jupyter Notebook 启动属于标准开发流程。接口能力强大。可构建 REST API、CLI 工具或集成到现有 Web 应用如 Flask中。批量任务支持。可通过框架轻松实现批量数据处理、自动化工作流。适合场景希望快速构建基于 LLM 的自动化工具、智能客服、数据分析助手、代码生成器、研究助理的开发者。2. 适用场景与使用边界了解一个技术能做什么和不能做什么同样重要。这个工具/教程适合谁Python 中级开发者熟悉 Python 语法和虚拟环境希望进入 AI 应用开发领域。全栈工程师/产品经理需要快速原型验证将 LLM 能力集成到产品中。学生与研究者希望学习当前主流的 AI Agent 开发框架用于学术项目或实验。能解决什么问题工具集成难题想用 LLM 查询数据库、读写文件、调用天气 API但手动拼接提示词和解析输出非常繁琐。LangChain 提供了标准化的工具调用抽象。工作流编排难题任务需要多个步骤且步骤间有依赖关系或循环例如分析问题 - 搜索 - 总结 - 判断是否继续。LangGraph 用图结构清晰定义这种流程。开发效率问题避免重复造轮子。利用 LangChain 丰富的组件文档加载器、文本分割器、向量存储集成快速搭建 RAG检索增强生成等应用。安全与可控性MCP 协议允许你以声明式、受控的方式向 LLM 暴露能力而不是直接给 LLM 系统权限提升了安全性。不适合什么场景追求极致轻量如果你的需求只是调用一次 OpenAI API直接使用requests库更简单。完全不懂 Python需要先补充 Python 基础。需要训练模型本教程聚焦于应用开发框架不涉及模型训练、微调。版权、隐私与安全边界模型合规确保你使用的 LLM API如 OpenAI, Claude符合其服务条款注意数据隐私政策。工具权限通过 MCP 暴露文件系统、数据库等工具时需严格界定可访问的路径和操作范围防止 LLM 执行危险命令。内容审核对于生成式应用应在输出层添加适当的内容过滤或审核机制尤其是在面向公众的服务中。数据安全处理用户数据或敏感信息时确保传输加密并遵守相关法律法规。3. 环境准备与前置条件工欲善其事必先利其器。开始编码前请确保你的开发环境满足以下要求。操作系统推荐: Windows 10/11, macOS, Linux (Ubuntu 20.04)。LangChain 是跨平台的。Python 环境Python 版本: 3.8 或更高版本。推荐使用 3.10 或 3.11以获得最佳的兼容性。包管理工具: 强烈建议使用conda或venv创建独立的虚拟环境避免包冲突。关键依赖概览你需要安装的核心 Python 包包括langchain和langchain-community: LangChain 核心库及社区工具集成。langgraph: 用于构建有状态、图式工作流。langchain-mcp-adapters或相关 MCP 客户端/服务器库用于实现 MCP 协议交互具体包名可能随版本更新以下以示例为准。一个 LLM 的接入库例如openai(用于 GPT 系列) 或anthropic(用于 Claude)。如果你想使用本地模型可能需要ollama或llama-cpp-python。其他工具依赖根据你要集成的工具而定如sqlalchemy(数据库)requests(网络请求)等。硬件与网络CPU/RAM: 现代处理器和 8GB 以上内存足以满足框架运行。磁盘空间: 预留 1-2GB 用于安装 Python 包。网络: 需要能访问 PyPI 以安装包。如果使用云端 LLM API如 OpenAI则需要稳定的网络连接访问对应服务。IDE 或编辑器任何你熟悉的代码编辑器均可如 VS Code (推荐有很好的 Python 和 AI 插件支持)、PyCharm 等。4. 安装部署与启动方式我们将通过命令行一步步搭建环境。这里假设你已安装好 Python 和 pip。步骤 1创建并激活虚拟环境使用venv创建隔离环境是最佳实践。# 创建名为 langchain_env 的虚拟环境 python -m venv langchain_env # 激活虚拟环境 # Windows (PowerShell) .\langchain_env\Scripts\Activate.ps1 # Windows (CMD) .\langchain_env\Scripts\activate.bat # macOS/Linux source langchain_env/bin/activate激活后命令行提示符前通常会显示环境名(langchain_env)。步骤 2安装核心依赖我们将安装 LangChain、LangGraph 以及 OpenAI 的包作为 LLM 示例。MCP 相关的包我们稍后根据具体示例安装。# 升级 pip 到最新版本 pip install --upgrade pip # 安装 LangChain 全家桶核心成员 pip install langchain langchain-community langchain-core # 安装 LangGraph 用于构建智能体工作流 pip install langgraph # 安装 OpenAI 库如果你打算使用 GPT 系列模型 pip install openai # 安装环境变量管理库方便管理 API Key pip install python-dotenv步骤 3安装 MCP 相关组件MCP 的生态正在快速发展。目前你可能需要安装特定的 MCP 服务器或客户端适配器。一个常见的起点是安装mcp客户端库以及一些官方或社区的 MCP 服务器工具包。# 示例安装 MCP 的 Python 客户端库请关注官方文档获取最新名称 # pip install mcp # 或者通过 langchain-community 集成 # pip install langchain-mcp-adapters # 安装一个具体的 MCP 服务器示例例如文件系统服务器 # pip install mcp-server-filesystem请注意MCP 包的具体名称和安装方式可能变化较快请务必查阅撰写本文时最新的 LangChain 和 MCP 官方文档。下面的实战部分我们会以一个假设的mcp-demo-tools包为例进行说明。步骤 4验证安装创建一个简单的 Python 脚本test_install.py来验证基础环境。# test_install.py import sys print(fPython version: {sys.version}) try: import langchain print(fLangChain version: {langchain.__version__}) except ImportError: print(LangChain not installed.) except AttributeError: print(LangChain imported, but version not accessible.) try: import langgraph print(LangGraph imported successfully.) except ImportError: print(LangGraph not installed.) try: import openai print(OpenAI library imported successfully.) except ImportError: print(OpenAI library not installed.)在激活的虚拟环境中运行python test_install.py如果看到成功的导入信息说明基础环境就绪。5. 功能测试与效果验证从 Chain 到 Agent现在我们通过三个循序渐进的代码示例来验证 LangChain MCP LangGraph 的能力。我们将从最简单的链开始逐步过渡到使用 MCP 工具最后用 LangGraph 构建一个智能体。5.1 基础测试构建一个简单的 LangChain Chain首先我们测试最基本的 LangChain 链式调用。你需要一个 OpenAI API Key或其他 LLM 提供商的 Key。设置 API Key在项目根目录创建.env文件并填入你的密钥OPENAI_API_KEYsk-your-actual-api-key-here重要将.env添加到.gitignore中切勿提交到版本控制系统。创建基础链脚本新建basic_chain.py# basic_chain.py import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser # 1. 加载环境变量 load_dotenv() # 2. 初始化 LLM llm ChatOpenAI(modelgpt-3.5-turbo, temperature0) # 3. 创建提示词模板 prompt ChatPromptTemplate.from_messages([ (system, 你是一个乐于助人的助手。), (user, {input}) ]) # 4. 创建链prompt - llm - output_parser chain prompt | llm | StrOutputParser() # 5. 调用链 question LangChain 是什么用一句话解释。 answer chain.invoke({input: question}) print(f问题: {question}) print(f回答: {answer})运行与验证python basic_chain.py预期结果脚本应成功运行并输出一个关于 LangChain 的简短解释。成功标准无报错且 LLM 返回了合理的文本。常见失败原因OPENAI_API_KEY未设置或无效。网络问题导致无法连接 OpenAI API。Python 包版本冲突。5.2 进阶测试使用 MCP 协议集成工具假设我们有一个通过 MCP 协议暴露的“计算器”工具。这里我们模拟一个 MCP 工具的使用流程。在实际中你需要运行一个 MCP 服务器。模拟 MCP 工具使用由于 MCP 具体实现依赖特定服务器我们以伪代码和概念演示。假设我们已经通过MCPClient连接到了一个提供calculator工具的服务器。# mcp_tool_demo.py (概念示例) import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain_core.prompts import ChatPromptTemplate # 假设我们从某个适配器导入了 MCP 工具加载器 # from langchain_mcp_adapters import MCPToolLoader load_dotenv() llm ChatOpenAI(modelgpt-3.5-turbo, temperature0) # 伪代码加载 MCP 工具 # 1. 连接到本地运行的 MCP 服务器例如在端口 8000 # 2. 获取服务器暴露的工具列表 # tools MCPToolLoader(server_urlhttp://localhost:8000).load_tools() # 假设我们得到了一个名为 calculator 的工具 # 为了演示我们手动定义一个类似功能的 LangChain 工具 from langchain.tools import tool tool def calculator(expression: str) - str: 计算一个数学表达式的结果。支持 , -, *, /, **, ()。 try: # 警告实际生产中应对输入进行严格安全检查避免代码注入 result eval(expression) return str(result) except Exception as e: return f计算错误: {e} tools [calculator] # 创建 Agent prompt ChatPromptTemplate.from_messages([ (system, 你是一个强大的助手可以使用工具。请用中文回答。), (user, {input}), (assistant, 我会使用工具来帮你解决这个问题。), ]) agent create_tool_calling_agent(llm, tools, prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) # 执行 result agent_executor.invoke({input: 请问 (12 34) * 2 等于多少}) print(\n最终答案:, result[output])运行与验证python mcp_tool_demo.py预期结果Agent 应识别出需要计算调用calculator工具并返回结果 “92”。成功标准控制台输出显示 Agent 的思考过程verboseTrue包括工具调用和结果最终输出正确答案。核心概念验证此示例验证了 LangChain Agent 如何将自然语言问题分解并调用预定义的工具模拟 MCP 工具来解决问题。5.3 核心实战使用 LangGraph 构建有状态的 AgentLangGraph 的核心是“图”Graph和“状态”State。我们构建一个简单的“研究助手”Agent它可以根据用户问题决定是直接回答还是需要先进行一次网络搜索模拟。定义状态和节点新建langgraph_agent.py# langgraph_agent.py import os from dotenv import load_dotenv from typing import TypedDict, Annotated, Literal from langgraph.graph import StateGraph, END from langgraph.graph.message import add_messages from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage import operator load_dotenv() llm ChatOpenAI(modelgpt-3.5-turbo, temperature0) # 1. 定义状态结构 class AgentState(TypedDict): # 消息历史 messages: Annotated[list, add_messages] # 用户的最新问题 question: str # 是否需要搜索 needs_search: bool # 搜索到的结果如果有 search_result: str # 2. 定义工具函数模拟搜索 def web_search_tool(query: str) - str: 模拟网络搜索工具。在实际应用中这里会调用 SerperAPI 或 Tavily 等。 print(f[模拟搜索] 正在搜索: {query}) # 返回模拟结果 return f关于 {query} 的模拟搜索结果LangGraph 是 LangChain 中用于构建有状态、多步骤智能体的框架。 # 3. 定义图节点 # 节点A路由决策 - 判断是否需要搜索 def router_node(state: AgentState) - Literal[search, answer_directly]: 根据问题和历史决定下一步是搜索还是直接回答。 system_msg SystemMessage(content你是一个决策路由器。根据用户问题判断是否需要实时信息搜索。如果需要最新信息或具体数据就选择搜索否则直接回答。只输出 search 或 answer_directly。) user_msg HumanMessage(contentf用户问题{state[question]}) response llm.invoke([system_msg, user_msg]) decision response.content.strip().lower() print(f[路由决策] LLM 决定: {decision}) return decision # 节点B执行搜索 def search_node(state: AgentState) - dict: 执行搜索并更新状态。 search_query state[question] result web_search_tool(search_query) return {needs_search: True, search_result: result} # 节点C直接回答无需搜索 def direct_answer_node(state: AgentState) - dict: LLM 基于自身知识直接回答。 system_msg SystemMessage(content你是一个知识渊博的助手请用中文直接回答用户的问题。) user_msg HumanMessage(contentstate[question]) response llm.invoke([system_msg, user_msg]) new_message HumanMessage(contentf[直接回答] {response.content}) return {messages: [new_message], needs_search: False} # 节点D基于搜索结果的回答 def answer_with_search_node(state: AgentState) - dict: LLM 结合搜索结果进行回答。 system_msg SystemMessage(content你是一个助手请根据提供的搜索结果为用户的问题给出答案。用中文回答。) user_msg HumanMessage(contentf问题{state[question]}\n\n搜索结果{state[search_result]}) response llm.invoke([system_msg, user_msg]) new_message HumanMessage(contentf[结合搜索回答] {response.content}) return {messages: [new_message]} # 4. 构建图 workflow StateGraph(AgentState) # 添加节点 workflow.add_node(router, router_node) workflow.add_node(search, search_node) workflow.add_node(answer_directly, direct_answer_node) workflow.add_node(answer_with_search, answer_with_search_node) # 设置入口点 workflow.set_entry_point(router) # 添加条件边根据路由结果走不同分支 workflow.add_conditional_edges( router, # 下一个节点由 router_node 的返回值决定 lambda x: x, { search: search, answer_directly: answer_directly } ) # 添加普通边 workflow.add_edge(search, answer_with_search) workflow.add_edge(answer_directly, END) workflow.add_edge(answer_with_search, END) # 编译图 app workflow.compile() # 5. 运行图 # 测试用例1不需要搜索的问题 print( 测试1直接回答 ) initial_state1 AgentState( messages[], questionPython 是什么, needs_searchFalse, search_result ) result1 app.invoke(initial_state1) print(f最终消息: {result1[messages][-1].content}\n) # 测试用例2需要搜索的问题 print( 测试2需要搜索 ) initial_state2 AgentState( messages[], questionLangGraph 的最新版本号是多少, needs_searchFalse, search_result ) result2 app.invoke(initial_state2) print(f最终消息: {result2[messages][-1].content})运行与验证python langgraph_agent.py预期结果测试1路由器应判断为answer_directlyLLM 直接输出关于 Python 的解释。测试2路由器应判断为search触发模拟搜索然后 LLM 结合搜索结果给出关于 LangGraph 版本的回答模拟结果中可能不包含精确版本但会提及 LangGraph。成功标准控制台清晰打印出决策流程、模拟搜索动作以及最终的回答。这验证了 LangGraph 管理复杂、有条件分支工作流的能力。核心概念验证此示例展示了如何用 LangGraph 将“决策”、“执行工具”、“合成回答”等多个步骤编排成一个可控的、有状态的智能体工作流。6. 接口 API 与批量任务将开发好的智能体暴露为 API 服务或处理批量任务是生产部署的常见需求。6.1 使用 FastAPI 构建 Web API我们可以用 FastAPI 快速将上面的 LangGraph Agent 包装成 REST API。安装 FastAPIpip install fastapi uvicorn创建 API 服务文件agent_api.py# agent_api.py import os from dotenv import load_dotenv from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List # 假设我们有一个编译好的 LangGraph app这里从之前的示例导入需稍作调整 # 为了示例我们创建一个简化版的 agent from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser load_dotenv() llm ChatOpenAI(modelgpt-3.5-turbo, temperature0) prompt ChatPromptTemplate.from_template(你是一个助手。请回答{question}) chain prompt | llm | StrOutputParser() app FastAPI(titleLangChain Agent API) class QuestionRequest(BaseModel): question: str class AnswerResponse(BaseModel): answer: str model_used: str app.post(/ask, response_modelAnswerResponse) async def ask_question(request: QuestionRequest): 接收问题返回智能体的回答。 try: answer chain.invoke({question: request.question}) return AnswerResponse(answeranswer, model_usedgpt-3.5-turbo) except Exception as e: raise HTTPException(status_code500, detailf处理请求时出错: {str(e)}) app.get(/health) async def health_check(): return {status: healthy} if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)启动与测试 APIpython agent_api.py服务启动后访问http://127.0.0.1:8000/docs查看自动生成的 API 文档。你可以通过 Swagger UI 直接测试/ask接口。使用 curl 或 Python 客户端调用# 使用 curl 测试 curl -X POST http://127.0.0.1:8000/ask \ -H Content-Type: application/json \ -d {question: 什么是机器学习}# 使用 Python requests 测试 import requests url http://127.0.0.1:8000/ask payload {question: 什么是机器学习} response requests.post(url, jsonpayload) print(response.json())6.2 批量任务处理对于批量处理例如处理一个文件中的多个问题我们可以简单地在循环中调用 Agent。# batch_processor.py import json from agent_api import chain # 导入我们定义好的链或 agent def process_batch(questions_file: str, output_file: str): 读取问题文件批量处理并保存结果。 with open(questions_file, r, encodingutf-8) as f: # 假设每行一个问题 questions [line.strip() for line in f if line.strip()] results [] for i, q in enumerate(questions): print(f处理中 ({i1}/{len(questions)}): {q}) try: answer chain.invoke({question: q}) results.append({id: i1, question: q, answer: answer}) except Exception as e: results.append({id: i1, question: q, error: str(e)}) with open(output_file, w, encodingutf-8) as f: json.dump(results, f, ensure_asciiFalse, indent2) print(f批量处理完成结果已保存至 {output_file}) if __name__ __main__: # 假设有一个 questions.txt 文件 process_batch(questions.txt, answers.json)最佳实践在批量任务中添加延迟避免对 LLM API 造成速率限制。实现失败重试机制。使用线程池或异步 IO 提高效率注意 API 的并发限制。记录详细的日志便于追踪每个任务的状态。7. 资源占用与性能观察由于本教程核心是开发框架资源占用主要集中在 Python 运行时和网络 I/O。内存占用一个简单的 LangChain Agent 进程通常在几十 MB 到几百 MB 之间具体取决于加载的工具数量、向量数据库等。使用htop(Linux/macOS) 或任务管理器 (Windows) 观察。CPU 占用框架本身的 CPU 消耗很低。主要计算发生在调用 LLM API 时的网络序列化/反序列化或本地模型推理时。网络 I/O如果使用云端 LLM如 OpenAI性能瓶颈和延迟主要在网络请求。建议使用异步调用asyncio处理并发请求。为请求设置合理的超时时间。考虑在客户端实现重试和退避策略。本地模型集成如果通过 Ollama 或llama.cpp集成本地模型则需关注显存占用由加载的模型大小决定。7B 参数模型通常需要 6-8GB 以上显存。内存占用如果使用 CPU 推理会占用大量内存。观察方式使用nvidia-smi(GPU) 或系统监控工具。性能优化提示缓存对频繁且结果不变的 LLM 调用或工具调用使用缓存如langchain.cache。批处理如果 LLM API 支持将多个独立请求批处理为一个请求。精简上下文合理设置max_tokens并优化提示词减少不必要的 token 消耗。工具优化确保自定义的工具函数高效避免阻塞 I/O。8. 常见问题与排查方法在开发过程中你可能会遇到以下问题。这里提供排查思路。问题现象可能原因排查方式解决方案ModuleNotFoundError依赖包未安装或虚拟环境未激活。1. 运行pip list检查包是否存在。2. 确认命令行前缀有(venv_name)。1. 激活正确的虚拟环境。2. 使用pip install安装缺失的包。AuthenticationError(OpenAI)API Key 错误、过期或未设置。1. 检查.env文件中的OPENAI_API_KEY。2. 在代码中打印os.getenv(“OPENAI_API_KEY”)的前几位确认。1. 在 OpenAI 平台检查 API Key 状态并重置。2. 确保.env文件在项目根目录且已加载。网络超时或连接错误代理设置、防火墙或 LLM 服务端问题。1. 尝试ping api.openai.com。2. 检查系统代理设置。1. 配置网络环境。2. 在代码中为请求设置更长的timeout参数。3. 使用服务商提供的备用端点。Agent 陷入循环或行为异常提示词设计有缺陷、工具返回格式不对、图的条件边逻辑错误。1. 开启verboseTrue查看详细执行日志。2. 检查每个节点的输入/输出状态。1. 优化系统提示词明确约束。2. 确保工具返回格式符合 Agent 预期。3. 在 LangGraph 中检查条件边的判断逻辑。MCP 服务器连接失败服务器未启动、端口错误、协议版本不匹配。1. 确认 MCP 服务器进程是否在运行 (ps aux | grep mcp)。2. 尝试用curl或简单客户端连接服务器端口。1. 按照 MCP 服务器文档正确启动。2. 检查客户端代码中的连接地址和端口。3. 查看服务器日志获取错误信息。RuntimeError: CUDA out of memory本地模型太大显存不足。运行nvidia-smi查看显存使用情况。1. 换用更小的模型。2. 使用量化版本模型 (如 GGUF)。3. 使用 CPU 推理速度慢。4. 调整推理的batch_size或max_length。批量任务速度慢顺序执行、网络延迟、API 速率限制。观察单个请求的耗时监控任务队列。1. 改为异步并发执行注意遵守 API 并发限制。2. 增加任务间的延迟。3. 使用更高效的模型或工具。9. 最佳实践与使用建议基于上述实战总结一些工程化建议帮助你更稳健地开发 LangChain 应用。项目结构清晰将提示词模板、工具定义、图构建、API 路由等分模块存放提高可维护性。my_agent_project/ ├── .env ├── requirements.txt ├── agents/ │ ├── __init__.py │ ├── research_agent.py # LangGraph 智能体定义 │ └── tools.py # 自定义工具 ├── chains/ │ └── basic_chain.py ├── api/ │ └── server.py # FastAPI 应用 ├── config.py # 配置管理 └── main.py # 主入口配置外部化将 API Keys、模型名称、服务器地址等配置项放在.env文件或配置管理系统中不要硬编码。日志与监控为你的 Agent 添加详细日志记录关键决策点、工具调用和耗时。这对于调试复杂工作流至关重要。测试驱动为你的工具函数、链和图的节点编写单元测试。LangChain 提供了LangChainTracer等工具可以辅助测试。版本控制对提示词、工作流图进行版本管理。微小的提示词改动可能导致输出差异巨大。安全第一工具权限通过 MCP 或自定义工具暴露能力时实施最小权限原则。例如文件工具只允许访问特定子目录。输入验证对所有用户输入和工具参数进行严格的验证和清理防止注入攻击。输出过滤对 LLM 生成的内容进行必要的审核和过滤特别是面向公众的服务。从简单开始先构建一个能跑通的最小可行产品MVP例如只有一个工具的 Agent再逐步增加复杂性和新功能。10. 总结与下一步通过本教程我们从零开始完成了 LangChain 生态的入门到实战。最值得尝试的点在于你不再需要从零开始处理复杂的 LLM 交互逻辑而是站在 LangChain、MCP、LangGraph 这些“巨人”的肩膀上快速搭建功能强大的 AI 应用。最先应该验证的功能建议你按照基础链 - 简单工具调用 - LangGraph 工作流的顺序实践一遍。确保最基本的 LLM 调用和工具调用能成功这是所有复杂应用的地基。最容易踩的坑环境配置虚拟环境未激活或依赖包版本冲突。始终使用requirements.txt记录版本。API 密钥忘记设置或错误设置环境变量。提示词工程指令不清晰导致 Agent 行为怪异。花时间优化你的系统提示词。MCP 集成MCP 协议和工具尚在快速发展中关注官方文档和社区更新某些用法可能发生变化。后续扩展方向集成真实工具将示例中的模拟工具替换为真实的 MCP 服务器如连接数据库、GitHub API、内部业务系统等。实现记忆机制为你的 Agent 添加对话历史记忆ChatMessageHistory或长期记忆向量数据库使其能进行多轮对话。构建复杂工作流利用 LangGraph 的循环、分支、并行等特性设计更自动化的工作流如自动代码评审、多步骤数据分析等。前端界面使用 Gradio 或 Streamlit 快速为你的 Agent 构建一个聊天界面。部署上线学习使用 Docker 容器化你的应用并部署到云服务器或 Kubernetes 集群。LangChain 生态正在快速演进MCP 协议有望成为连接 LLM 与外部工具的通用标准而 LangGraph 让构建可靠、复杂的智能体变得更加直观。现在你已经拿到了入场券接下来就是结合你的具体业务场景开始创造有价值的 AI 应用了。建议收藏本文在开发过程中遇到问题时可以回头查阅对应的排查章节。
返回列表