一.背景

        在生成式 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.调用结果

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐