python 调用 spring ai sse mcp
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 的交互常面临诸多痛点:
- 协议适配复杂:Spring AI 的 SSE 流式输出与 MCP 协议封装,缺乏 Python 侧的原生对接方案,需手动处理 HTTP 请求头、流式数据解析、协议格式转换等底层细节,开发成本高且易出错;
- 流式传输断裂风险:Python 与 Spring AI 的网络通信中,若未妥善处理 SSE 的连接保持、数据分片接收等逻辑,易出现流式响应中断、数据丢失或乱序问题,影响用户体验;
- 上下文与状态同步困难:多轮 AI 交互中,Python 侧需维护对话上下文,并通过 MCP 协议准确传递给 Spring AI,传统手动封装方式易出现上下文丢失或格式不兼容,导致模型生成结果偏差;
- 企业级需求适配不足:企业场景中,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.调用结果

更多推荐


所有评论(0)