python 调用 spring ai sse mcp

一.背景

在生成式 AI 与企业级应用深度融合的趋势下,跨技术栈协同成为落地核心诉求 ------Python 凭借丰富的 AI 生态(如数据分析、模型微调、工具链)成为 AI 应用快速验证与原型开发的首选语言,而 Spring AI 作为 Java 生态的主流 AI 开发框架,依托 Spring Boot 的成熟特性,在企业级系统(如权限管控、业务流程集成、高可用部署)中具备天然优势。两者的协同能充分发挥 "Python 的 AI 灵活性" 与 "Spring AI 的企业级稳定性",构建兼顾快速迭代与生产级可靠性的 AI 应用。

在 AI 交互场景中,SSE(Server-Sent Events,服务器推送事件) 是实现流式响应的关键技术,能够让 AI 模型(如大语言模型)的生成结果以 "增量推送" 的方式返回客户端,避免用户长时间等待,提升交互体验,广泛应用于智能对话、实时报告生成等场景。而MCP(Model Consumer Protocol) 作为 Spring AI 中标准化的模型调用协议,统一了不同 LLM 厂商(如 OpenAI、本地化模型)的调用接口,解决了跨模型的协议兼容问题,降低了企业级应用中模型替换与扩展的成本。

传统跨技术栈调用中,Python 与 Spring AI 的交互常面临诸多痛点:

  1. 协议适配复杂:Spring AI 的 SSE 流式输出与 MCP 协议封装,缺乏 Python 侧的原生对接方案,需手动处理 HTTP 请求头、流式数据解析、协议格式转换等底层细节,开发成本高且易出错;
  2. 流式传输断裂风险:Python 与 Spring AI 的网络通信中,若未妥善处理 SSE 的连接保持、数据分片接收等逻辑,易出现流式响应中断、数据丢失或乱序问题,影响用户体验;
  3. 上下文与状态同步困难:多轮 AI 交互中,Python 侧需维护对话上下文,并通过 MCP 协议准确传递给 Spring AI,传统手动封装方式易出现上下文丢失或格式不兼容,导致模型生成结果偏差;
  4. 企业级需求适配不足:企业场景中,Spring AI 常集成权限校验、流量控制、日志审计等特性,Python 侧需合规对接这些企业级能力,而原生调用方式缺乏标准化方案,易导致集成效率低下。

因此,开展 "Python 调用 Spring AI SSE MCP" 的实践探索,核心目标是解决跨技术栈的流式协同与协议兼容问题:通过标准化的调用方式,让 Python 应用能无缝对接 Spring AI 的 SSE 流式输出与 MCP 协议能力,无需关注底层通信细节;同时保障流式传输的稳定性、上下文同步的准确性,以及企业级特性的合规适配。这一实践不仅能打通 Python 与 Java 生态的 AI 协同链路,还能为企业级 AI 应用提供 "快速原型验证(Python)+ 稳定生产部署(Spring AI)" 的落地路径,适用于智能客服、实时数据查询助手、企业级 AI 工作台等场景,具有重要的技术衔接价值与工程实践意义。

二.具体实现

1.已有的spring ai sse (Cherry Studio)

2.构建python工程,引入依赖

复制代码
import asyncio
from mcp import ClientSession
from mcp.client.sse import sse_client

2.使用sse_lient访问

复制代码
async with sse_client(url="https://xxx.xxx.xxx/sse") as streams:
        async with ClientSession(*streams) as session:
            # 初始化会话
            await session.initialize()
            
            # 列出可用工具
            tools_response = await session.list_tools()
            print("Available tools:")
            for tool in tools_response.tools:
                print(f" - {tool.name}: {tool.description}")
                if hasattr(tool, 'inputSchema') and tool.inputSchema:
                    print(f"   输入模式: {tool.inputSchema}")
            
            # 调用天气工具
            print("\nCalling get_weather tool for London...")
            weather_response = await session.call_tool("addMemory", {"platformId": 1,"objectType": 0,"objectId": "123","memory": "我喜欢打篮球"})
            print(weather_response.content[0].text)

3.调用结果

相关推荐
零售ERP菜鸟1 小时前
范式革命:从“信息化”到“数字化”的本质跃迁
大数据·人工智能·职场和发展·创业创新·学习方法·业界资讯
光羽隹衡1 小时前
计算机视觉——Opencv(图像拼接)
人工智能·opencv·计算机视觉
SEO_juper1 小时前
2026内容营销破局指南:告别流量内卷,以价值赢信任
人工智能·ai·数字营销·2026
初恋叫萱萱1 小时前
数据即燃料:用 `cann-data-augmentation` 实现高效训练预处理
人工智能
一战成名9961 小时前
CANN 仓库揭秘:昇腾 AI 算子开发的宝藏之地
人工智能
hnult1 小时前
2026 在线培训考试系统选型指南:核心功能拆解与选型逻辑
人工智能·笔记·课程设计
A小码哥1 小时前
AI 设计时代的到来:从 PS 到 Pencil,一个人如何顶替一个团队
人工智能
阔皮大师2 小时前
INote轻量文本编辑器
java·javascript·python·c#
AIGCmitutu2 小时前
PS 物体底部阴影怎么做?3 步做出自然逼真的投影效果
人工智能·电子商务·photoshop·ps·美工
小法师爱分享2 小时前
StickyNotes,简单便签超实用
java·python