跳到主要内容

LangGraph MCP智能体开发实战

Part 1.LangGraph接入MCP搭建智能体实战

[toc]

一、LangGraph与MCP技术概述

1. LangGraph接入外部工具技术实现方法

​ 说到智能体开发,无论使用何种框架,有一项绕不开的核心技术,那就是MCP(Model Context Protocol)技术。

​ 在智能体开发过程中,接入外部函数工具是至关重要的一环,而在LangChain&LangGraph技术生态中,我们可以非常便捷的通过@tool装饰符来自定义一个外部函数:

image-20250630203002611

或者也可以借助LangChain丰富的、数以百计的内置工具,三行代码即可在智能体中进行工具调用。

功能类别工具名称简要说明
🔎 搜索工具TavilySearchResults快速搜索实时网络信息
SerpAPIWrapper基于 SerpAPI 的搜索结果工具
GoogleSearchAPIWrapper调用 Google 可编程搜索引擎
🧠 计算工具PythonREPLTool执行 Python 表达式并返回结果
LLMMathTool结合 LLM 和数学推理能力
WolframAlphaQueryRun基于 Wolfram Alpha 的计算引擎
🗂 数据工具SQLDatabaseToolkit构建 SQL 数据库查询工具集
PandasDataframeTool用于在 Agent 中操作表格数据
🌐 网络/APIRequestsGetTool / RequestsPostTool执行 HTTP 请求
BrowserTool / PlaywrightBrowserToolkit自动化网页浏览与抓取
💾 文件处理ReadFileTool读取本地文件内容
WriteFileTool写入文本到指定文件中
📚 检索工具FAISSRetriever基于向量的文档检索工具
ChromaRetriever使用 ChromaDB 的检索器
ContextualCompressionRetriever上下文压缩检索器,适合长文档
🧠 LLM 工具ChatOpenAI / OpenAIFunctionsTool使用 OpenAI 模型作为工具调用
ChatAnthropicAnthropic Claude 模型封装工具
🔧 自定义工具@tool 装饰器任意函数可封装为 Agent 可调用工具
Tool 类继承自定义更复杂逻辑的工具实现

LangChain工具集:https://python.langchain.com/docs/integrations/tools/

image-20250630203103354

而除此之外,伴随着MCP技术爆火,给了开发者第三种选项,那就是借助MCP技术、遵照MCP协议,来调用其他开发者已经开发好的MCP工具,来快速搭建智能体应用。

2. MCP技术概述

2.1 MCP技术定位与技术价值介绍

​ 我们可以将MCP技术简单理解为智能体外部工具开发的一种通用规范(范式)。举个例子,以天气查询工具为例,在MCP技术诞生之前,要给大模型添加查询天气的功能,至少需要经历这么两个开发阶段:

  • 阶段一:编写查询天气的外部函数,例如:

FENCE0

  • 阶段二:将外部工具进行进一步封装,以适配不同的开发框架。例如

    • 接入OpenAI Agents SDK时:

      from agents import function_tool
      @function_tool
      def get_weather(loc):
      """
      查询即时天气函数......
      """
      # Step 1.构建请求
      url = "https://api.openweathermap.org/data/2.5/weather"

      # Step 2.设置查询参数
      params = {......
      return ......
    • 接入LangGraph时:

      from langchain_core.tools import tool
      from pydantic import BaseModel, Field

      class WeatherQuery(BaseModel):
      loc: str = Field(description="The location name of the city")

      @tool(args_schema = WeatherQuery)
      def get_weather(loc):
      """
      查询即时天气函数......
      """
      # Step 1.构建请求
      url = "https://api.openweathermap.org/data/2.5/weather"

      # Step 2.设置查询参数
      params = {......
      return ......
    • 接入谷歌ADK时

      def get_weather(city: str) -> str:
      """
      Retrieves the current weather report for a specified city.

      Args:
      city (str): The name of the city (e.g., "Beijing", "Shanghai").
      Note: For cities in China, use the city's English name (e.g., "Beijing").

      Returns:
      dict: A dictionary containing the weather information.
      Includes a 'status' key ('success' or 'error').
      If 'success', includes a 'report' key with weather details.
      If 'error', includes an 'error_message' key.
      """
      # Step 1.构建请求
      url = "https://api.openweathermap.org/data/2.5/weather"

      # Step 2.设置查询参数
      params = {......
      return ......

这就使得实际开发Agent的过程中,外部函数工具的开发会占用大量的开发者的时间精力。

​ 而与此同时,人们发现,很多外部工具的功能其实是通用的,例如查询时间、查询天气、网络搜索、操作本地文件夹等等等等,如果有一种规范,能够减少重复造轮子的时间,一个人开发完成后全体开发者都能共享,那么整体的研发效率都将得到大幅提高。

​ 在这一设想下,MCP技术诞生了。MCP的全称是Model Context Protocol,模型上下文协议,由Claude母公司Anthropic于去年11月正式提出。

image-20250318201338022

该技术核心目标,就是创建一种统一的大模型调用外部工具的通信规范,相当于这种标准的通信规范,一项特定功能的外部函数,只需要开发一次,就能被各种不同类型的Agent开发框架所识别。例如同样是查询天气,如果我们遵循MCP技术协议开发一个查询天气的外部函数,那么接下来全体开发者就都能直接用我开发好的这个天气查询工具,带入任何智能体开发框架,快速搭建智能体应用了。

​ 通过下面这组图能够非常清楚的解释MCP工具在智能体开发过程中实际带来的提效的作用。

image-20250318185821214 image-20250318185810201

2.2 MCP技术架构

​ 不过呢,要做到这种“车同轨、书同文”的标准化工作,不仅需要制定一套让所有人都信服的标准,而且还需要经过时间的检验,同时还需要有足够多的用户,这个标准才能真正被市场所认同。因此MCP技术也历经了一段时间的沉淀和打磨,自去年11月发布开始,到今年3月技术大爆发,再到第二季度开始越来越多的Agent框架和热门应用宣布支持MCP技术,MCP才算是逐渐成为一项智能体开发的通用协议。

​ 截止目前,MCP的技术生态可以划分为三层,最底层是协议层,也就是“文字版”的规定、或者说规范,而为了普及这一规范,让更多的人更加快速的完成自己的MCP工具开发,Anthropic进一步的提供了MCP开发工具,借助这些SDK,我们能够非常快速完成MCP工具开发。而既然是一种标准化的协议,其核心价值就在于用的人足够多、同时分享的人也足够多,才能真正减少“重复造轮子”的时间,因此Anthropic官方和很多第三方平台,也在积极的推进MCP技术生态的构建,尤其是MCP工具平台的建设,通过鼓励开发者更多的分享自己开发的MCP工具,只有形成了更大的(分享和引用的)协作规模,MCP的技术才能更有价值。

image-20250416155146454

2.3 MCP SDK与MCP技术生态

​ 而在这些MCP完整的技术架构中,开发者尤其需要关注MCP的SDK(开发工具)和MCP技术生态。所谓MCP的SDK,指的是官方提供的用于开发MCP工具的第三方库,截至目前,MCP SDK已支持Python、TypeScript、Java、Kotlin和C#等编程语言进行客户端和服务器创建。

MCP项目官网:https://github.com/modelcontextprotocol

image-20250416160218085

而借助这些库,仅需几行代码,即可快速构建一个MCP工具。

image-20250630212718580

反之,如果没有这些MCP开发工具,想要开发MCP工具,就必须从MCP技术协议出发,借助其他库来完成开发,其实现难度非常大。

​ 而如果我们并不需要开发MCP工具,而只想要借助现成的MCP工具快速完成智能体开发,那么就需要重点关注现在的MCP集成平台,也就是集成了各类目前非常流行的MCP工具的平台,借助这些平台,我们能够快速找到想要的MCP服务,然后根据指示说明快速进行接入,甚至伴随着MCP流式HTTP功能的上线,很多平台还提供了这些MCP工具后端运行服务,我们只需要输入指定的后端地址,就能调用运行在云端的MCP工具。

​ 主流的MCP集成平台如下:

3.MCP核心技术概念

​ 而在正式开始MCP智能体开发之前,我们还需要补充两个MCP技术体系中至关重要的技术概念,分别是MCP客户端与服务器、以及两大类MCP工具运行模式。

3.1 MCP客户端与服务器

​ 由于MCP是一种围绕大模型外部函数工具创建的统一范式,因此MCP工具从诞生之初就是客户端(client)与服务器(server)分离的架构。服务器与客户端的技术概念可以借助MySQL这个通用的数据库软件进行理解,在MySQL中,服务器指的是数据库实际运行环境,例如公司内部的某个统一用于数据存储的物理机,而客户端,则指的是SQL编写和运行的环境,可以是比如数据分析师用的笔记本。每次要进行查数时,数据分析师就可以在自己的笔记本上运行MySQL WorkBench(一个SQL编程的IDE),然后借助MySQL客户端,给公司的MySQL服务器发送查数的请求。

​ 类似的,所谓MCP Server(服务器),指的是MCP工具运行的环境,而MCP Client(客户端),则指的是能够调用MCP工具、或者说给MCP工具发送请求并接受结果的环境。二者关系如图所示:

image-20250318153131024 image-20250318202116026

这种服务器和客户端分离的架构的好处,就在于可以更加便捷的进行模块化开发和维护,而此前我们所说的MCP工具,其实就指的是MCP服务器,而那些MCP工具集合,其实就是MCP服务器集合网站。

​ 同时,基于这种技术划分,当我们在开发一个智能体,并希望这个智能体能够接入MCP工具时,其实从MCP技术角度来说,我们本质上是开发一个MCP的客户端(Client)。例如当我们基于LangGrpah开发一个接入MCP工具的智能体,其实我们就开发了一个基于LangGraph的MCP客户端。而现在也有很多大模型聊天工具允许接入MCP工具,例如Claude Desktop、Cherry Studio等,这些也都是MCP客户端。

3.2 标准MCP工具接入客户端流程

​ 这里以Cherry Studio为例,为大家展示一个标准的MCP客户端接入MCP服务器的基本流程,从中我们能够看出,填写对应的配置文件,是运行MCP工具的关键。