1.1.0
Spring AI 1.1.0 正式发布,累计合并 705 个提交,涉及 1270 个文件(+86,805 / -13,742 行)。作为 1.0.x 后的首个次版本升级,1.1.0 引入了统一的文本转语音(TTS)抽象、ElevenLabs 集成、OpenAI 多项能力增强以及 MCP 架构重构。
核心抽象
统一文本转语音(TTS)API
1.1.0 在 spring-ai-model 中新增 org.springframework.ai.audio.tts 包,为文本转语音提供统一抽象:
| 接口/类 | 说明 |
|---|---|
TextToSpeechModel | 同步 TTS 模型接口,call(TextToSpeechPrompt) 返回 TextToSpeechResponse |
StreamingTextToSpeechModel | 流式 TTS 模型接口,返回 Flux<Speech> |
TextToSpeechPrompt | TTS 请求封装,包含 TextToSpeechMessage 列表和 TextToSpeechOptions |
TextToSpeechResponse | TTS 响应,包含 Speech 对象和 TextToSpeechResponseMetadata |
Speech | 语音结果,封装音频数据(byte[] / Resource)和音频格式 |
TextToSpeechOptions | TTS 选项接口,支持 model、voice、speed、responseFormat 等 |
DefaultTextToSpeechOptions | 默认选项实现,Builder 模式 |
破坏性变更:OpenAI 模块原有的
SpeechModel/SpeechPrompt/SpeechMessage/Speech已移除,迁移至统一的TextToSpeechModel接口。
增强响应转换器
新增多个 ResponseTextCleaner 实现,用于清理模型输出中的格式化标记:
| 转换器 | 说明 |
|---|---|
MarkdownCodeBlockCleaner | 移除 Markdown 代码块标记(```json ... ``` → ...) |
ThinkingTagCleaner | 移除模型推理标签(<thinking>...</thinking>) |
WhitespaceCleaner | 规整多余空白字符 |
CompositeResponseTextCleaner | 组合多个 Cleaner 链式处理 |
BeanOutputConverter 新增 withResponseTextCleaner() 方法,支持在 JSON 解析前自动清理响应文本。
模型厂商
OpenAI
1.1.0 对 OpenAI 集成进行了大幅增强:
extraBody——OpenAiChatOptions新增extraBody字段,允许传入任意额外请求体参数(如reasoning_effort、verbosity等),通过@JsonAnySetter反序列化灵活支持 OpenAI API 扩展reasoningContent—— 支持推理模型的思考内容输出promptCacheKey/safetyIdentifier—— 新增提示缓存和安全标识符支持OpenAiFileApi—— 全新文件 API(413 行),支持文件上传、列表、检索、删除,为多模态输入和微调场景铺路- TTS 迁移 ——
OpenAiAudioSpeechModel重构为实现统一的TextToSpeechModel接口
ElevenLabs(新增)
新增 ElevenLabs TTS 集成:
ElevenLabsSpeechModel:实现TextToSpeechModel接口- 自动配置:
spring-ai-autoconfigure-model-elevenlabs - Starter:
spring-ai-starter-model-elevenlabs - 配置前缀:
spring.ai.elevenlabs
MCP 协议
架构重构
MCP 自动配置在 1.1.0 中进行了全面重构,从单模块拆分为六模块:
客户端:common → httpclient / webflux
服务端:common → webmvc / webflux
每个传输实现独立为单独的自动配置模块,职责更清晰、扩展更容易。
新增传输方式
- Streamable HTTP 传输 —— 新增
StreamableHttpClientTransport,支持标准 HTTP 协议的 MCP 通信(McpStreamableHttpClientProperties) - SSE HTTP Client 传输 —— 新增
SseHttpClientTransport,基于 JDKHttpClient的 SSE 客户端
Tool Callback 增强
- 工具回调缓存 —— 新增
McpAsyncToolsChangeEventEmmiter/McpSyncToolsChangeEventEmmiter,基于事件驱动机制缓存工具列表,减少重复获取开销 - 客户端注解扫描 —— 新增
McpClientAnnotationScannerAutoConfiguration,自动扫描@McpTool注解并注册为工具回调 ObjectProvider注入 ——ToolCallbackProvider注入改用ObjectProvider,延迟初始化更健壮
连接详情抽象
新增 McpSseClientConnectionDetails 接口和 PropertiesMcpSseClientConnectionDetails 实现,将 SSE 连接配置从属性读集中管理,便于外部化配置和测试。
聊天记忆
MongoDB 持久化(新增)
新增 MongoChatMemoryRepository,支持 MongoDB 作为聊天记忆后端:
- Starter:
spring-ai-starter-model-chat-memory-repository-mongodb - 自动索引创建:
MongoChatMemoryIndexCreator - 元数据返回增强:查询结果现包含完整元数据
Bug Fix 汇总
| 问题 | 修复 |
|---|---|
| OpenAI TTS 缺乏统一抽象 | 新增 TextToSpeechModel 接口,重构 OpenAiAudioSpeechModel |
| MCP 工具频繁重复获取 | 新增事件驱动缓存机制 |
| MCP 缺少 Streamable HTTP 支持 | 新增 HTTP 传输实现 |
BeanOutputConverter 被代码块标记干扰 | 新增 ResponseTextCleaner 链式清理 |
| MongoDB 聊天记忆索引未自动创建 | 修复 MongoChatMemoryIndexCreator 扫描 |
PgVectorSchemaValidator 可见性不当 | 改为 package-private |
| AnthropicChatModel 冗余调试日志 | 移除 verbose 级别日志 |
| OpenAI API 异常响应未正确处理 | 新增畸形响应处理逻辑 |
基础设施
- Spring Boot 3.5.7 —— 基于 Spring Boot 3.5.7 构建
- MCP SDK 0.16.0 —— 升级 MCP 协议 SDK
- CI/CD —— 新增快速 CI 工作流(
fast-continuous-integration.yml),支持选择性模块构建
Spring AI 1.1.0 作为次版本升级,在保持向后兼容性的前提下,引入了统一的 TTS 抽象、ElevenLabs 集成和 MCP 架构重构,为后续功能扩展奠定了更坚实的基础。