月度归档:2025年04月

08. 解锁AI潜能:DeepSeek与LangChain的MCP客户端教程

Model-Control-Protocol (MCP) 是一个开放标准,用于定义大型语言模型如何与外部工具和服务进行通信。本文将详细介绍如何使用DeepSeek与MCP进行集成,并且如何和mcp.so 大量的mcp服务进行集成,实现功能强大的AI应用。

本文源码地址:https://github.com/wangyiyang/DeepSeek-LangChain-Cookbook/tree/main/08_langchain_mcp

为什么选择MCP?

在当今的AI开发中,如何让大模型高效调用外部工具和服务是一个关键问题。MCP协议通过标准化的通信方式,解决了这一难题。它的优势包括:

  • 灵活性:支持多种传输机制(如stdio和SSE)
  • 可扩展性:轻松集成多个工具和服务
  • 高效性:优化了大模型与外部工具的交互流程

通过本文,你将学会如何使用MCP协议扩展AI应用的能力。

快速入门

首先,我们需要安装必要的Python库,以支持MCP客户端和DeepSeek大模型的集成。

%%capture #避免显示pip安装信息
%pip install langchain-mcp-adapters langchain-deepseek python-dotenv langgraph fastmcp

构建你的第一个MCP服务器

参考:https://github.com/langchain-ai/langchain-mcp-adapters

在深入了解客户端前,我们先了解如何创建自定义MCP服务器,这将为我们提供与大模型交互的工具。

数学运算服务器示例

下面是一个简单的数学运算MCP服务器示例,它提供两个基本工具:加法和乘法。

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Math")

@mcp.tool()
阅读全文

MCP与Function Call的共生手册

“用LangChain开发Agent明明不需要人工编排,为什么还要折腾MCP?”这是我在2025年最大的技术误判。 历经3个月、为12个项目接入MCP后,我想用真实的经历,回答开发者最尖锐的三个问题:

  1. 为什么Function Call的“动态规划”是伪命题?
  2. LangChain的“零编排”幻觉从何而来?
  3. 不改一行旧代码,如何让MCP工具在本地生产环境跑起来?

一、撕开Function Call的“动态规划”假象

1.1 动态?不,你只是预定义了所有可能性

经典场景:用户问“帮我订机票并安排接机”,看似模型动态调用了“机票预订”和“租车”工具,实际开发流程如下:

# 开发者必须预定义所有可能被调用的工具
functions = [
    {
        "name": "book_flight",
        "description": "预订机票,需用户提供日期、城市",
        "parameters": {...}
    },
    {
        "name": "rent_car",
        "description": "预订接机车辆,需用户提供时间和地点",
        "parameters": {...}
    }
]

# 模型只能从这两个工具中选
response = openai.ChatCompletion.create(..., functions=functions)

真相:模型的选择范围被开发者硬编码限制,真正的动态发现新工具?不存在的。

1.2 性能灾难:工具数量与响应延迟的正相关

压测数据(GPT-4-32K,工具数量 vs 平均响应时间):

工具数量1050200
延迟(ms)120034009800

结论:当工具超过50个,Function Call因需要将全部描述塞入上下文,导致延迟飙升。

MCP的解法:协议层工具发现(按需查询):

# MCP动态工具发现(伪代码)
def handle_query(user_input):
    # 第一步:模型决定需要什么工具类型
    intent = model.detect_intent(user_input)
阅读全文