基于高德地图MCP + SSE + langchain_mcp_adapters 实现一个智能出行系统

前言

1. 高德地图MCP:高德地图MCP是一个用于高德地图的API,它提供了许多用于获取地图数据的接口。

2. SSE:SSE(Server-Sent Events)

  •   SSE(Server-Send Events)是基于 HTTP协议中的持久连接
  •   是一种服务端向客户端推送信息的单向通信方法

3. langchain_mcp_adapters:langchain_mcp_adapters是一个用于使用langchain进行自然语言处理MCP的适配器。

这三个技术组件共同构成了系统的核心三角:MCP提供地理智能,SSE保障实时体验,LangChain适配器实现自然交互。这种架构既发挥了专业地图服务的可靠性,又融入了生成式AI的灵活性,最终打造出更人性化的智能出行解决方案。

一、高德地图MCP

高德地图MCP(Map Content Platform)是面向开发者的标准化地图能力中枢,提供路径规划、实时交通、POI搜索、地理编码等核心服务。在路线规划系统中,它承担着基础数据支撑角色:

  • 通过精准的路径计算API生成多种出行方案(驾车/骑行/步行)

  • 实时路况数据为动态路线优化提供决策依据

  • 地理围栏与坐标转换能力保障空间计算的准确性

  • 亿级POI数据库支持沿途兴趣点的智能推荐

高德地图MCP接入文档以及key申请地址快速接入-MCP Server | 高德地图API

具体的key配置流程以及SSE配置方法可参考上面地址

 

二、SSE:实时交互的通信管道

Server-Sent Events(SSE)技术构建了低延迟的单向信息通道,在路线规划场景中实现:

  • 渐进式结果推送:长距离路径计算的阶段性反馈

  • 动态事件通知:突发路况变化时的实时路线调整建议

  • 服务状态广播:后端计算资源的负载状态可视化

  • 断线自动重连:移动端弱网环境的容错保障
    相较于WebSocket,SSE的HTTP原生特性更易于集成到现有架构,服务端仅需维护轻量级事件流。

三、langchain_mcp_adapters

1、简介

这个库提供了一个轻量级的包装器,使人类模型上下文协议(Anthropic Model Context Protocol, MCP)工具与LangChain和LangGraph兼容。

特点:

  1. 将MCP工具转换为可与LangGraph代理一起使用的LangChain工具
  2. 一个客户端实现,允许您连接到多个MCP服务器并从中加载工具

说的直白一点,langchain-mcp-adapters 就是一个基于langchain实现的MCP客户端

2、下载库

pip install langchain-mcp-adapters

3、项目中的主要功能:

该适配器在LangChain框架与高德API间建立了语义理解层:

  • 意图识别:解析"避开高速的最近路线"等模糊需求

  • 上下文关联:将"上次去过的餐厅"映射为具体POI坐标

  • 多模态转换:把自然语言指令转化为MCP所需的参数结构

  • 对话记忆:在连续交互中保持地理位置上下文一致性
    通过预训练模型与规则引擎的结合,有效解决了地理信息查询中的歧义消除和实体链接难题。

4、简单示例:

1、Client

# 创建stdio连接的服务器参数
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client

from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent

from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")

server_params = StdioServerParameters(
    command="python",
    args=["/path/to/math_server.py"],
)

async with stdio_client(server_params) as (read, write):
    async with ClientSession(read, write) as session:
        # 初始化连接
        await session.initialize()

        # 获取工具
        tools = await load_mcp_tools(session)

        # 创建一个agent
        agent = create_react_agent(model, tools)
        agent_response = await agent.ainvoke({"messages": "what's (3 + 5) x 12?"})

2、多MCP服务的连接

项目就是用MultiServerMCPClient实现连接SSE的客户端

from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent

from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o")

async with MultiServerMCPClient(
    {
        "math": {
            "command": "python",
            "args": ["/path/to/math_server.py"],
            "transport": "stdio",
        },
        "weather": {
            # sse服务连接方式
            "url": "http://localhost:8000/sse",
            "transport": "sse",
        }
    }
) as client:
    agent = create_react_agent(model, client.get_tools())
    math_response = await agent.ainvoke({"messages": "what's (3 + 5) x 12?"})
    weather_response = await agent.ainvoke({"messages": "what is the weather in nyc?"})

四、核心代码实现

1、所用到的库

from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import AgentExecutor
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
import os
import asyncio
from dotenv import load_dotenv
from langchain.chat_models import init_chat_model
from langchain.agents import create_openai_functions_agent

2、mcp客户端实现地图查询

load_dotenv(override=True)

llm_ds = init_chat_model(
    "gpt-4o-mini",
    api_key = os.getenv("XXXXXX_KEY"),
    base_url = os.getenv("XXXXXXX_URL"),
    model_provider="openai"
)

async def run_agent(query):
    gaode_map_key = os.getenv("GAODE_MAP_KEY")
    async with MultiServerMCPClient(
    {
        "search": {
            "url": f"https://mcp.amap.com/sse?key={gaode_map_key}",
            "transport": "sse",
        }
    }
) as client:
        prompt = ChatPromptTemplate.from_messages([
            ("system", "你是一个有帮助的智能助手。请仔细分析用户问题并使用提供的工具来回答问题。"),
            ("user", "{input}"),
            MessagesPlaceholder(variable_name="agent_scratchpad"),
        ])
        # 获取工具并修剪描述长度
        tools = client.get_tools()

        # for tool in tools:
        #     print(f"工具名称:{tool.name}\n工具描述:{tool.description}\n 工具参数:{tool.args_schema}\n ")
        
        # 创建OpenAI函数代理
        agent = create_openai_functions_agent(
            llm=llm_ds,
            tools=tools,
            prompt=prompt
        )
        # 创建代理执行器
        agent_executor = AgentExecutor(
            agent=agent,
            tools=tools,
            verbose=True,
            max_iterations=5,
            return_intermediate_steps=True,  # 返回中间步骤以便调试
            handle_parsing_errors=True
        )
        
        # 运行代理
        agent_response = await agent_executor.ainvoke({
            "input": query
        })
        # 返回格式化的响应
        return {
            "status": "success",
            "result": agent_response.get("output", ""),
            "steps": len(agent_response.get("intermediate_steps", [])),
        }

print(asyncio.run(run_agent("从北京到西安怎么走?以及帮我规划沿途著名的旅游景点")))

3、运行结果示例:

五、智能出行助手演示

1、页面展示

页面加载后首先获取高德MCP的工具列表,并在页面右边展示

 2、数据请求

3、结果展示

4、天气情况展示

上面的就是一个简单智能出行系统的展示, 可以根据用户的提问规划你的行程路线以及沿途的旅行风景,还有天气等信息。

六、写在最后

系统还在初步完善中,但是实现的核心代码就是四中展示的,如果需要完整的前后端演示代码,可以私信我。

<think>好的,我现在需要回答用户关于langchain_mcp_adapters框架的局限性问题。首先,我需要回忆一下这个框架的基本信息。根据之前的引用,MCP(模型上下文协议)旨在促进不同智能体框架之间的协作,而langchain_mcp_adapters应该是LangChainMCP之间的适配器,帮助LangChain集成到MCP生态中。 用户提到的局限性可能包括兼容性、性能、功能支持等方面。我需要从这些角度分析。首先,查看引用[1]提到LM Studio不支持MCP,但其他工具支持,说明不同工具的兼容性可能存在问题。如果LangChain通过适配器连接到MCP,可能受限于底层模型的支持情况,比如某些模型可能无法通过MCP正确集成,导致功能受限。 引用[2]提到不同框架之间的沟通困难,MCP解决了部分问题,但适配器可能仍有协议转换的复杂性。例如,LangChain的高度抽象与MCP的协议之间可能存在语义差异,导致信息丢失或配置复杂。此外,性能方面,中间层(适配器)可能引入延迟,尤其是在处理大规模数据或复杂任务时,影响实时性。 另外,功能覆盖也是一个问题。LangChain的某些高级功能可能在MCP中没有对应实现,导致只能使用基础功能。社区支持方面,新兴的框架通常资源较少,文档和案例不足,增加学习和维护成本。 还需要考虑依赖性问题,比如MCP协议更新可能导致适配器需要频繁调整,维护成本高。安全性方面,跨协议通信可能增加攻击面,需要额外的安全措施。 总结可能的局限性点:模型支持限制、协议转换复杂性、性能开销、功能覆盖不全、依赖更新频繁、社区资源不足、安全风险。需要将这些点组织成清晰的结构,用中文回答,并生成相关问题。</think>### Langchain_MCP_Adapters框架的局限性分析 1. **模型支持受限性** Langchain_MCP_Adapters依赖底层模型对MCP协议的兼容性。若本地部署的模型(如通过LM Studio)未实现MCP接口,则无法通过适配器完成集成[^1]。例如,部分开源模型可能缺少必要的元数据定义或响应格式,导致协议转换失败。 2. **协议转换复杂性** MCP要求智能体间通过标准化的上下文协议交互,但Langchain原有的抽象层(如链式调用、工具封装)需额外映射到MCP的语义规范。这可能导致部分高级功能(如动态记忆管理)在转换过程中信息丢失,需手动配置适配逻辑[^2]。 3. **性能开销问题** 适配器作为中间层,会增加请求处理链路长度。对于需要低延迟的场景(如实时对话系统),多次协议解析和数据封装可能显著影响响应速度。例如,大型语言模型的输出需先转换为MCP的JSON Schema格式,再被Langchain解析,这一过程可能引入额外计算开销。 4. **功能覆盖不完整** MCP当前主要支持基础任务协作(如问答、工具调用),但Langchain的复杂工作流(如多智能体竞争、递归式任务分解)可能缺乏对应的MCP操作符,导致部分功能无法跨框架复用。 5. **依赖更新风险** MCP协议仍处于演进阶段,协议版本的升级可能导致适配器代码需要同步修改。例如,若MCP新增"异步流式响应"特性,而适配器未及时支持,则相关功能将出现兼容性问题。 6. **社区生态成熟度** 相比成熟的LangChain生态,MCP相关工具链(如调试器、监控组件)尚不完善。开发者可能面临文档示例少、错误排查困难等问题,尤其在多框架混合调试时更显著[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值