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.调用结果

相关推荐
一定要AK41 分钟前
Spring 入门核心笔记
java·笔记·spring
A__tao41 分钟前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
墨染天姬41 分钟前
【AI】端侧AIBOX可以部署哪些智能体
人工智能
研究点啥好呢1 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
AI成长日志1 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
凯尔萨厮1 小时前
创建SpringWeb项目(Spring2.0)
spring·mvc·mybatis
2501_948114241 小时前
2026年大模型API聚合平台技术评测:企业级接入层的治理演进与星链4SAPI架构观察
大数据·人工智能·gpt·架构·claude
小小工匠1 小时前
LLM - awesome-design-md 从 DESIGN.md 到“可对话的设计系统”:用纯文本驱动 AI 生成一致 UI 的新范式
人工智能·ui
迷藏4941 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
黎阳之光1 小时前
黎阳之光:视频孪生领跑者,铸就中国数字科技全球竞争力
大数据·人工智能·算法·安全·数字孪生