ARTICLE DETAIL

资讯详情

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

LangChain+LangGraph+MCP+Agent:企业级智能体应用开发实战指南

LangChain+LangGraph+MCP+Agent:企业级智能体应用开发实战指南 你大概也发现了现在刷技术社区几乎每个和 AI 应用开发相关的标题里都会同时出现 LangChain、LangGraph、MCP、Agent 这四个词。很多人第一反应是“又一套新概念”第二反应是“这四个东西到底什么关系”第三反应是打开教程跟着装了一遍结果写出来的东西还是只会在本地跑一个 demo。这篇文章会做一个和其他教程不太一样的事不只教你怎么调 API而是把这四个技术放在同一条主线里讲清楚——它们分别解决企业级 Agent 开发中的哪一环节组合使用时如何分工以及从“能跑”到“能上线”还差哪些工程动作。读完你会得到三样东西一张清晰的技术选型地图、一套可以直接运行的代码骨架、一份生产环境的避坑清单。这不是一篇纯科普也不是堆代码的搬运文而是一条从入门到实战的完整路径。1. 这篇文章真正要解决的问题先看一个真实场景。假设你所在的公司要做智能客服需求是用户提问AI 能查到工单状态、能调用内部系统还能记住对话上下文。你很快会用 LangChain 写一个 Agent接上大模型和几个工具函数demo 阶段效果惊艳。但一旦进入生产问题接踵而来Agent 执行路径不可控、会话中途断了无法恢复、工具越来越多难以管理、每次和第三方系统对接都要改代码。更麻烦的是当 Agent 需要按不同情况走向不同流程时普通 Chain 写法几乎无法维护。这里的核心矛盾在于LangChain 擅长“把大模型和工具串起来”但企业级应用真正需要的不是“串起来”而是“可控地编排、可观察地运行、可维护地扩展”。这就是 LangGraph 进入视线的原因它把 Agent 从“一串代码”变成了“一张有状态、有分支、有回路的状态图”。和 LangGraph 同时流行的 MCP解决的是另一个层面的问题工具接入方式没有标准。过去每个 Agent 要调用外部服务都要单独写适配器每换一家 ERP、CRM 就必须重新开发一遍。MCP 把“工具”变成一种标准化协议Agent 只需要装一个客户端就能像访问插头一样接入各种服务。而 Agent 本身则是前面三者协作的最终形态。所以这篇文章其实是在回答一个问题当你在 2025 年之后去做 AI 应用为什么不能再只会“调大模型 API”而需要掌握一套完整的智能体工程化方法。适合阅读的读者包括刚开始接触 LangChain 但不知道下一步往哪走的初学者、已经在写 Prompt 但要升级到 Agent 的应用开发者、以及需要在团队内做技术选型和架构方案的技术负责人。2. 核心概念与关系LangChain、LangGraph、MCP、Agent 到底是什么很多人被这四个词绕晕是因为它们不在同一个抽象层次上。用一个类比来破题假设你要开一家自动化餐厅。LangChain 是“标准厨具套装”。锅、铲、刀、案板都提供好了还给你一本菜谱Prompt Template、一套食材采购Retriever、一种把食材变成菜品的流程Chain。它解决的是“你不需要从零造工具”的问题。LangGraph 是“厨房流水线管理系统”。它定义哪道菜先做、哪个环节要等、哪一步出问题要跳转到什么工序还能记录每一单做到哪里了。它解决的是“流程复杂后的编排与恢复”问题。MCP 是“国家标准的电源插座”。任何一个电器厂商只要按标准生产插头就能插进任何插座。它解决的是“工具接入统一化”问题。Agent 则是“真正上场的厨师长”。他根据顾客需求自己判断今天做什么菜、按什么顺序做、发现缺少食材时调用补货系统。它是前面三层协作下产生的有自主决策能力的程序。四者的分层关系可以这样理解LangChain 提供基础组件LangGraph 负责流程编排MCP 规范化工具接入Agent 是基于前三者的完整应用形态。在实际项目中它们往往同时出现用 LangChain 的模型封装和 Prompt 工具用 LangGraph 定义状态图用 MCP 接外部服务最后整体跑起来你就得到了一个 Agent。从市场热度来看LangChain 依然是生态最完整的框架但它的定位已经从“全流程方案”回归到“组件库”LangGraph 是官方推荐的 Agent 编排层也是目前最值得投入学习的方向MCP 在 2025 年前后迎来了大量官方跟进包括各类编辑器和设计软件的官方适配已经成为事实上的工具接入标准。理解这条演进路径很重要因为你在搜索“LangChain 入门”时看到的很多旧教程还停留在 Chain 时代而学习的新手如果跟着旧教程走会觉得这套框架笨重、难用然后误判整个技术方向。事实上不是框架不行而是你没有跟上它的演进。3. 环境准备先用最小化配置把骨架跑起来在开始写代码之前先统一环境。本节以 Python 为例版本请以实际项目为准本文重点演示通用思路但如果你从零起步推荐使用 Python 3.10 或更高版本因为新版本框架对类型注解和异步支持更友好。依赖安装建议使用虚拟环境。这里用一个最小安装命令来覆盖之后所有代码示例需要的包python -m venv .venv source .venv/bin/activate # Windows 下为 .venv\Scripts\activate pip install --upgrade pip pip install langchain langchain-openai langgraph mcp如果你的网络环境无法直接安装可以配置国内 PyPI 镜像源例如使用清华源安装pip install -i https://pypi.tuna.tsinghua.edu.cn/simple langchain langchain-openai langgraph mcp接下来需要准备大模型 API 的访问凭证。你可以使用 OpenAI 兼容接口的各种模型服务也可以通过本地部署的大模型例如 Ollama、vLLM 等来接入。为便于后续代码统一建议把 API Key 放到环境变量中export OPENAI_API_KEYyour-api-key export OPENAI_BASE_URLhttps://api.example.com/v1这里要提醒一个新手常见的困惑如果你只是做本地验证也可以直接使用本地模型服务LangChain 的通用的ChatOpenAI类可以指向任意兼容 OpenAI 协议的地址并不强制要求使用 OpenAI 官方服务。环境准备的目标只有一个——跑通“大模型能返回内容”这一步后面的 Agent 逻辑都建立在这个基础之上。验证环境是否就绪可以运行下面这段最小脚本# 文件路径quick_test.py from langchain_openai import ChatOpenAI llm ChatOpenAI( modelgpt-4o-mini, temperature0, ) resp llm.invoke(你好请用一句话介绍你自己) print(resp.content)如果这一步能输出一句正常的模型回答说明你的模型访问链路是通的。接下来才能谈 Agent、LangGraph 和 MCP。这一步是后面所有代码的“地基”地基不牢后面每跑一步都会在报错和配环境之间反复横跳。4. LangChain 模型调用与工具函数从这里理解 Agent 的最小单元LangChain 并不是一个“必须把每个组件都用上”的框架。它真正的价值是提供了一套标准化的模型调用、Prompt 管理和工具封装方式让你不用每次写重复的胶水代码。在 Agent 开发中最核心的 LangChain 能力有三个模型封装、Prompt 模板、工具定义。我们用一个“工单查询助手”作为贯穿全文的案例。假设企业内部有一个简单的工单系统Agent 可以通过工具函数查询订单状态。先用 LangChain 的方式定义一个工具函数# 文件路径tools/order_tools.py from langchain_core.tools import tool # 模拟的工单状态数据库 FAKE_ORDER_DB { A1001: {status: 已发货, logistics: SF123456, eta: 2026-01-08}, A1002: {status: 处理中, logistics: None, eta: None}, A1003: {status: 已取消, logistics: None, eta: None}, } tool def query_order_status(order_id: str) - dict: 查询订单当前状态、物流单号和预计送达时间。 Args: order_id: 订单号格式为 A 开头加 4 位数字。 Returns: 包含 status、logistics、eta 的字典如果订单不存在则返回错误信息。 if order_id in FAKE_ORDER_DB: return FAKE_ORDER_DB[order_id] return {error: f订单号 {order_id} 不存在请确认后重试}注意这里的tool装饰器它做了几件事把 Python 函数转换为 LLM 可以识别的工具描述将 docstring 解析为工具说明并自动做好参数 Schema 推导。这就是为什么 docstring 要写得尽量清楚——它不是给人看的注释而是给模型看的“使用方法”。接下来把模型和工具绑定构成一个最简易的 Agent# 文件路径agent_simple.py from langchain_openai import ChatOpenAI from tools.order_tools import query_order_status llm ChatOpenAI(modelgpt-4o-mini, temperature0) # 绑定工具 llm_with_tools llm.bind_tools([query_order_status]) # 第一次调用让模型决定是否要调用工具 response llm_with_tools.invoke(用户说我想查一下订单 A1001 到哪了) # 打印模型返回结果 print(response) print(是否要调用工具, response.tool_calls)如果你运行这段代码会看到模型输出一个tool_calls列表里面包含工具名query_order_status以及参数{order_id: A1001}。这说明模型已经理解了用户的意图并决定使用工具但此时还只是在“声明”它想用工具并没有真正执行工具。真正执行工具需要手动调用来拿到结果再把结果回传给模型。这个过程在 LangChain 里可以用AgentExecutor简化但更重要的是理解它的执行链路模型判断是否调用工具、程序执行工具、结果返回给模型、模型基于结果生成最终回答。Agent 的最小循环就是这四步。看到这个模式之后你会发现“Agent 很智能”这件事更多来自模型能力而我们作为开发者真正要做的是把模型和工具之间的“协议”设计好。5. LangGraph 流程编排从链式调用升级为可控状态图如果你的 Agent 只需要“查一次工具、给一次回答”用 LangChain 就够了。但真实业务中几乎都会遇到更复杂的情况先判断意图再查订单再判断需要不需要查物流还要支持多轮对话、失败重试、会话恢复。这时LangChain 的简单链式调用的缺点就暴露了——它以“线性执行”为核心模型困难地表达循环、分支和并行。LangGraph 的核心思想是把 Agent 的运行过程建模为一张图。图里有节点、边和条件边节点是执行单元边是流转路径条件边是“根据上一次结果决定下一跳去哪里”。此外LangGraph 引入了 State状态的概念并把它升级为整张图的全局变量。我们用一个示例来对比上面的工单查询 Agent如果用 LangGraph 实现流程会拆成三个节点agent节点负责调用模型并决定是否使用工具tools节点负责执行工具条件边负责判断“还要不要继续调工具”。# 文件路径graph_demo.py from typing import TypedDict, Annotated, Literal from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, START, END from langgraph.graph.message import add_messages from langgraph.prebuilt import ToolNode from langchain_core.messages import BaseMessage, SystemMessage from tools.order_tools import query_order_status # 1. 定义全局状态 class AgentState(TypedDict): messages: Annotated[list, add_messages] # 2. 定义 agent 节点 def agent_node(state: AgentState): system_prompt SystemMessage( content你是一个企业工单助手。如果需要查询订单信息请调用 query_order_status 工具。 ) response llm_with_tools.invoke([system_prompt] state[messages]) return {messages: [response]} # 3. 定义路由决策是否继续调用工具 def should_continue(state: AgentState) - Literal[tools, __end__]: last_message state[messages][-1] if last_message.tool_calls: return tools return __end__ # 4. 初始化模型和工具 llm ChatOpenAI(modelgpt-4o-mini, temperature0) llm_with_tools llm.bind_tools([query_order_status]) # 5. 构建图 graph StateGraph(AgentState) graph.add_node(agent, agent_node) graph.add_node(tools, ToolNode([query_order_status])) graph.add_edge(START, agent) graph.add_conditional_edges(agent, should_continue, {tools: tools, __end__: END}) graph.add_edge(tools, agent) app graph.compile()这段代码的关键点在哪第一State中我们用Annotated[list, add_messages]声明messages字段它告诉 LangGraph“每次向 state 写入时不是覆盖旧的 messages而是追加”。这是多轮对话记忆能在图里跑通的基础。第二should_continue返回字符串来指示图的走向这是在表达业务分支。第三ToolNode是 LangGraph 内置的一个预置节点它会自动读取模型返回的tool_calls找对工具执行然后把结果包装成ToolMessage。运行这张图的代码如下# 文件路径run_graph.py from graph_demo import app # 第一轮对话 result app.invoke({messages: [{role: user, content: 帮我查一下订单 A1001 到哪了}]}) print(result[messages][-1].content) # 第二轮自然追问 result2 app.invoke({messages: [{role: user, content: 那什么时候能到}]}) print(result2[messages][-1].content)这里有个容易被忽略但在生产中很重要的设计LangGraph 的StateGraph默认是“无状态”运行每次invoke都是独立的一次调用。要实现跨轮记忆需要在编译时传入checkpointer比如使用MemorySaver。这段逻辑我们先留到第 8 章配置持久化时再展开但你需要先记住图中的状态不是自动跨请求保留的需要显式配置。LangGraph 相比普通 Chain 带来的真正改变是让 Agent 的执行路径变成了“可观测、可中断、可恢复、可控”的数据流。生产环境里每一张图都可以在状态级别打断、续跑和测试这比黑盒式的一次性 Chain 调用可靠得多。6. MCP 工具接入让 Agent 能标准化连接外部系统前面用 LangChain 定义工具的方式其实已经很好用了但一个现实问题是如果你的 Agent 要接企业内部的 CRM、订单中心、知识库你是为每一个系统都写一套自定义工具函数还是用一套统一标准每对接一个新系统都要重新开发适配器整个团队都会被“工具连接”这件事占满。MCP 的出现就是为了解决这个“工具接入标准”问题。MCP 全称是 Model Context Protocol它定义了一个通用协议让 AI 应用可以通过统一的方式调用外部工具、访问资源和获取提示词。本质上它做了一件非常朴素的事情把工具调用接口从“私有 API”变成“标准协议”。简单说不再是你写一个query_order_status函数然后绑进 Agent而是启动一个独立的 MCP ServerServer 里声明“我能提供哪些工具”Agent 侧只要装上 MCP Client就能动态获取工具列表并完成调用。以工单查询为例用mcp库的 FastMCP 快速定义一个 MCP Server# 文件路径mcp_server.py from mcp.server.fastmcp import FastMCP mcp FastMCP(order-service) FAKE_ORDER_DB { A1001: {status: 已发货, logistics: SF123456, eta: 2026-01-08}, A1002: {status: 处理中, logistics: None, eta: None}, } mcp.tool() def query_order_status(order_id: str) - dict: 查询订单当前状态、物流单号和预计送达时间。 if order_id in FAKE_ORDER_DB: return FAKE_ORDER_DB[order_id] return {error: f订单号 {order_id} 不存在} if __name__ __main__: mcp.run(transportstdio)这段代码和 LangChain 的tool写法非常相似因为两者的设计哲学一致用装饰器声明工具、用 docstring 生成描述。MCP Server 把“工具”变成了一个独立服务。当 Agent 需要接入新的业务系统时只需要让该系统提供一个 MCP Server而 Agent 自己几乎不用改动。在 Agent 侧客户端连接并调用这个工具。以 Python SDK 为例连接本地进程的方式是# 文件路径mcp_client_demo.py import asyncio from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client async def main(): server_params StdioServerParameters( commandpython, args[mcp_server.py], ) async with stdio_client(server_params) as (read, write): async with ClientSession(read, write) as session: await session.initialize() # 列出服务器提供的所有工具 tools_result await session.list_tools() print(MCP 提供的工具列表, [t.name for t in tools_result.tools]) # 调用工具 result await session.call_tool( query_order_status, arguments{order_id: A1001}, ) print(工具返回, result.content) if __name__ __main__: asyncio.run(main())运行后客户端能动态发现 MCP Server 提供的工具并完成调用。这里体现出的思维方式是“面向协议开发而不是面向接口开发”你的 Agent 不关心工具背后的实现只关心这个 Server 是否遵循 MCP 标准。换个角度说就算未来你会更换技术栈只要 MCP 层保持稳定Agent 侧的改动成本会低得多。MCP 和 LangChain 的工具函数并不能简单划分出孰优孰劣。当你的工具数量少且只在单个项目内复用时直接用 LangChain 的tool更轻便当工具数量多、需要跨团队跨系统共享时MCP 才是更合理的方案。很多团队实际采用的方式是“混合模式”简单工具直接函数化遗留系统、SaaS 服务等通过 MCP 接入。7. 企业级项目开发实战完整案例串联四层技术栈现在把前四节的技术点串联成一个完整的“智能客服工单助手”。业务要求用户提问时系统能先判断意图如果只是闲聊直接回答如果涉及查订单、查物流调用 MCP Server 查询如果用户情绪明显不满自动标记为高优工单转给人工同时支持多轮对话。这个需求如果只用 LangChain 的 AgentExecutor 也能实现但可维护性、可扩展性都不够好。用 LangGraph 来编排就清晰得多。图里会有四个节点intent_router做意图路由agent做对话处理tools执行工具escalation做升级处理。结构上意图路由节点负责判断是否需要走工具链路。下面给出一个可运行的骨架。因为涉及文件较多这里把关键逻辑写在同一个脚本里便于演示实际项目建议按职责拆分文件。# 文件路径enterprise_agent.py from typing import TypedDict, Annotated, Literal from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, START, END from langgraph.graph.message import add_messages from langgraph.prebuilt import ToolNode from langgraph.checkpoint.memory import MemorySaver from langchain_core.messages import SystemMessage, HumanMessage from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client FAKE_ORDER_DB { A1001: {status: 已发货, logistics: SF123456, eta: 2026-01-08}, A1002: {status: 处理中, logistics: None, eta: None}, } class AgentState(TypedDict): messages: Annotated[list, add_messages] escalated: bool # 为了让示例可运行这里直接使用本地模拟函数。 # 企业项目中可以替换为 FastMCP 启动的独立服务进程。 def query_order_status(order_id: str) - dict: 查询订单状态 return FAKE_ORDER_DB.get(order_id, {error: 订单不存在}) def tools_node(state: AgentState): last_message state[messages][-1] result_texts [] for tool_call in last_message.tool_calls: args tool_call[args] if tool_call[name] query_order_status: result_texts.append(str(query_order_status(args[order_id]))) return { messages: [ { role: tool, content: \n.join(result_texts), tool_call_id: last_message.tool_calls[0][id], } ] } llm ChatOpenAI(modelgpt-4o-mini, temperature0) llm_with_tools llm.bind_tools([query_order_status]) def intent_router(state: AgentState) - Literal[agent, human_handoff]: text state[messages][-1].content.lower() if 投诉 in text or 愤怒 in text or 差评 in text: return human_handoff return agent def agent_node(state: AgentState): system_prompt SystemMessage( content你是企业工单助手。查订单时调用 query_order_status 工具。 ) response llm_with_tools.invoke([system_prompt] state[messages]) return {messages: [response]} def human_handoff(state: AgentState): return { messages: [ { role: assistant, content: 检测到您的问题比较复杂我已经为您升级到人工客服通道请稍候。, } ], escalated: True, } def should_continue(state: AgentState) - Literal[tools, __end__]: last_message state[messages][-1] if last_message.tool_calls: return tools return __end__ graph StateGraph(AgentState) graph.add_node(intent_router, intent_router) graph.add_node(agent, agent_node) graph.add_node(tools, tools_node) graph.add_node(human_handoff, human_handoff) graph.add_edge(START, intent_router) graph.add_conditional_edges( intent_router, lambda state: state[next_node], {agent: agent, human_handoff: human_handoff}, ) graph.add_conditional_edges(agent, should_continue, {tools: tools, __end__: END}) graph.add_edge(tools, agent) graph.add_edge(human_handoff, END) checkpointer MemorySaver() app graph.compile(checkpointercheckpointer)运行这个图时需要传入一个config参数里面包含thread_id。这个thread_id是会话记忆的隔离维度同一个用户的多轮对话放在同一个 thread 下LangGraph 会将状态自动持久化这里示例用的是内存实现生产环境建议替换为数据库实现。config {configurable: {thread_id: user-001}} reply app.invoke( {messages: [HumanMessage(content帮我查一下 A1002 到哪了)]}, config, ) print(reply[messages][-1].content) reply2 app.invoke( {messages: [HumanMessage(content那需要多久才能发货)]}, config, ) print(reply2[messages][-1].content)当第二个问题“那需要多久才能发货”进来时Agent 能根据 thread_id 读取之前的状态知道用户问的是 A1002并且能结合上一次查询的产品信息回答。这就是企业级对话里“记忆”最基本的实现方式——不是让模型从头读全部历史而是通过状态管理把关键信息保留在上下文中。8. 常见问题与排查思路在实际开发中代码写通只是第一步真正费时间的是排查运行时报错。下面整理一份高频问题清单按出现频率排序。问题现象可能原因排查方式解决方案调用模型时报 Connection errorAPI Base URL 配置错误或网络不通检查OPENAI_BASE_URL是否能直接访问打印环境变量确认无拼写错误改为可访问的接口地址或代理网络出口本地模型则确认服务端口已启动模型返回了 tool_calls但 Agent 没有执行工具Agent 循环逻辑中缺少工具执行节点查看图中是否有 tools 节点以及should_continue分支是否正确指向 tools按本文的方法构建 LangGraph 图补上 ToolNode 节点LangGraph 多轮对话不记得上文没有配置 checkpointer或不同请求使用了不同 thread_id检查 compile 是否传入了 checkpointer检查 config 中的 thread_id 是否一致为应用增加 MemorySaver 或数据库级 checkpointer统一用户维度 thread_idMCP Server 启动但客户端连不上transport 类型不一致例如服务端使用 HTTP客户端使用 stdio确认 server 和 client 的 transport 参数一致查看服务端启动日志统一使用 stdio 或统一使用 streamable-http工具返回内容特别长模型回答混乱工具结果未做摘要超出上下文窗口查看传给模型的 messages 数量和 token 估算工具返回前做截断或摘要必要时启用模型长上下文版本Agent 陷入死循环反复调用工具工具返回结果没有闭环条件观察 LangGraph 的步骤执行轨迹检查条件边是否总是返回 tools增加最大迭代限制或者在条件边增加“工具调用次数达到上限则强制结束”的判断生产环境偶尔出现 timeout工具体执行时间过长检查外部服务响应时长给工具调用增加超时控制异步化耗时操作这里重点说一个问题Agent 死循环。LangGraph 提供递归限制参数编译时可以在app.invoke(..., config{recursion_limit: 20})中设置。这是生产环境必须考虑的安全阀——当模型反复判断“需要调用工具”时不能让系统无限跑下去否则既消耗 token 又拖垮服务。9. 最佳实践与工程建议从 demo 到生产线真正拉高门槛的往往不是模型能力而是工程细节。基于 LangChain、LangGraph、MCP 这套技术栈总结几条生产和团队协作层面的建议。第一先定义工具契约再写代码。这里的“契约”指的是工具名称、参数、返回结构、错误码。推荐的做法是把所有 Agent 工具的 Schema 集中管理用 JSON Schema 或 Pydantic 模型统一维护。MCP Server 的接口要约定版本号工具升级时保持向后兼容。很多团队在 Agent 接入第三方系统后出现“模型经常调错参数”问题根源通常是工具描述写得太模糊缺少对参数枚举值和常见反例的说明。第二为 Agent 增加预算控制。企业级 Agent 的 token 成本需要被量化。一个简单做法是每次会话记录 token 累计用量通过 LangGraph 的流式接口在节点执行时进行汇总当某个 thread 的费用超过阈值时主动中断并转人工。模型层面也可以按问题复杂度做路由简单问题用轻量模型复杂问题切到大模型这里总结为“模型分级路由”模式。第三可观测性不是可选项。生产环境必须能看到每一步的执行轨迹模型输入输出、工具调用耗时、token 消耗、分支判断结果。LangGraph 原生提供了对 LangSmith 的支持如果你没有使用 LangSmith也可以自行埋点把每一次节点执行时的 state 快照写入日志或链路追踪系统。没有可观测性的 Agent本质上就是一个黑盒出了问题只能靠猜。第四权限与安全边界。Agent 的工具调用权限必须遵循最小化原则。尤其当通过 MCP 接入企业内部系统时不能让 Agent 拥有任意数据库操作权限。更稳妥的设计是Agent 调用工具 → 工具层做鉴权 → 核心操作进入人工确认队列。对写操作建议使用“二次确认”模式让 Agent 先生成执行草案用户确认后才真正落库。这些机制不会削弱 Agent 的能力反而会让业务方更放心地使用 Agent。第五关于 MCP 在 Windows 等桌面开发环境的使用。如果你想在本地快速试用 MCP Server推荐优先使用 stdio transport因为它不涉及端口占用和防火墙配置启动成本最低。如果你的 Server 要通过网络共享给多个客户端调用再改用 HTTP 型 transport并做好鉴权和限流。10. 总结与后续学习方向回到开头的问题为什么现在做 AI 应用开发必须理解 LangChain、LangGraph、MCP、Agent 这套组合因为这四个技术恰好覆盖了应用开发中最关键的四个动作——集成模型能力、编排流程状态、标准化接入工具、构建自主决策系统。不会 LangChain你就要重复造封装轮子不会 LangGraph你的 Agent 只能停留在线性 demo不会 MCP每接一个系统就要重新开发一套适配层不理解 Agent你就无法判断模型什么时候该用工具、什么时候该停下来。建议下一步按这个路径继续深入先用本文第二个代码示例最小 LangGraph 图跑通一个带工具的 Agent再接入一个 MCP Server 扩展工具然后替换 checkpointer 为数据库持久化最后把图中每个节点加入日志和监控埋点。每完成一步你都在向企业级实战靠近一步。这套体系还在快速演进。版本和 API 会变但“组件化 流程编排 协议标准化 自主决策”的架构思想会是未来几年 AI 应用开发的主线。把这条主线想清楚面对任何新框架、新工具你都不容易被绕晕。
返回列表