Spring AI 1.0.0 M5 版本发布

发布 | Mark Pollack | 2024 年 12 月 23 日 | ...

我们很高兴宣布 Spring AI 1.0.0 里程碑 5 版本发布

像往常一样,本次发布包含了一些新功能和 bug 修复,但我们将重点放在从设计角度审查代码库,目标是在 2025 年初发布 GA 版本。虽然我们通过在一个发布周期内废弃方法和类来尽量使过渡平稳,但我们知道存在一些破坏性变更,可能还有一些我们不知道的,请大家谅解。请参阅下面的“破坏性变更”部分。

新功能

Model Context Protocol (MCP) 支持 - 孵化中

MCP 对于使用 AI 工具和资源构建交互式应用程序具有颠覆性意义。它使您能够创建快速且灵活的应用程序,利用 AI 处理本地数据以及云端托管的服务。

虽然目前在 Spring AI 之外孵化,但我们很高兴地宣布实验性发布 Spring AI MCP 0.20 版本,这是一个用于 Model Context Protocol (MCP) 的 Java SDK。该项目提供了 Java/Spring 应用程序与兼容 MCP 的 AI 资源和工具之间的无缝集成。

有关架构和实现的更多详细信息,请访问 Model Context Protocol 文档。可以在我们的 spring-ai-examples 仓库中找到使用 MCP 与 Spring 的示例。

主要模型增强功能

  • 通过 Voice-to-Text 和 Text-to-Speech (TTS) 添加了 OpenAI 音频功能,并支持 gpt-4-audio-preview 模型 (#1842)。查看这篇关于 Marvin the Paranoid Android 聊天机器人的博客文章。该指南演示了如何构建一个支持音频输入和输出的交互式聊天机器人,展示了如何处理 MP3/WAV 文件并生成听起来自然的响应。以下是如何向模型发送音频输入
    // Prepare the audio resource
    var audioResource = new ClassPathResource("speech1.mp3");
    
    // Create a user message with audio and send it to the chat model
    String response = chatClient.prompt()
            .user(u -> u.text("What is this recording about?")
                        .media(MimeTypeUtils.parseMimeType("audio/mp3"), audioResource))                    
            .options(OpenAiChatOptions.builder()
                .withModel(OpenAiApi.ChatModel.GPT_4_O_AUDIO_PREVIEW).build())
            .call()
            .content();
    
    以下是如何从文本生成音频输出
    // Generate an audio response
    ChatResponse response = chatClient
        .prompt("Tell me a joke about the Spring Framework")
        .options(OpenAiChatOptions.builder()
            .withModel(OpenAiApi.ChatModel.GPT_4_O_AUDIO_PREVIEW)
            .withOutputModalities(List.of("text", "audio"))
            .withOutputAudio(new AudioParameters(Voice.ALLOY, AudioResponseFormat.WAV))
            .build())
        .call()
        .chatResponse();
    
    // Access the audio transcript
    String audioTranscript = response.getResult().getOutput().getContent();
    
    // Retrieve the generated audio
    byte[] generatedAudio = response.getResult().getOutput().getMedia().get(0).getDataAsByteArray();
    
  • 添加了对 Amazon Bedrock Nova 模型的支持 - 新一代基础模型。查看我们的详细指南和示例
    • Nova Pro (amazon.nova-pro-v1:0):高性能模型,支持文本、图像和视频到文本处理,具有 300K token 上下文
    • Nova Lite (amazon.nova-lite-v1:0):均衡性能模型,支持文本、图像和视频到文本处理,具有 300K token 上下文
    • Nova Micro (amazon.nova-micro-v1:0):成本优化的纯文本模型,具有 128K token 上下文。集成功能使开发人员能够以最小的努力无缝访问构建复杂的对话应用程序。
  • 添加了对 Amazon Bedrock Converse API 的支持,包括 Claude 3 模型、工具/函数调用、系统消息、流式响应和图像输入支持 (#1650)
  • 在 Anthropic ChatModel 中添加了对 PDF 和文档内容类型的支持 (#1821)

新增模型支持

  • 添加了具有可配置维度的智谱 Embedding-3 模型 (#1880)
  • 添加了 Ollama 模型:QWEN_2_5_7B, LLAMA3_2_VISION_11b, LLAMA3_2_VISION_90b (#1783)
  • 在 MistralAi 中添加了 Pixtral 模型:PIXTRAL 和 PIXTRAL_LARGE (#1783)
  • 在 Bedrock 中添加了 Claude 3.5 Sonnet V2 模型 (#1586)

向量存储

  • 添加了对 MariaDB 向量存储的支持 (#1830)
  • 添加了 Oracle Coherence 向量存储实现 (#1627)
  • 添加了对 Azure Cosmos DB 向量存储的支持 (#1580)
  • 改进了 Milvus 向量存储,支持自定义字段名 (#1616)

RAG (检索增强生成)

  • 引入了模块化 RAG 架构和新组件
    • 带有 QueryTransformer API 的查询分析模块 (#1703)
    • 带有 DocumentRetriever 接口的检索模块 (#1604)
    • 用于上下文数据增强的 Query Augmentor API (#1644)
    • 增强的 RetrievalAugmentationAdvisor (#1704)

有关新 RAG 架构和实现细节的全面信息,请查看我们更新的文档。如需实践经验,请在这些示例应用程序中探索实用的 RAG 实现。

Kotlin 支持

  • 为 JSON schema 生成实现 KotlinModule:实现了用于 Kotlin 的 com.github.victools.jsonschema.generator.Module。通过利用 Kotlin 反射,这增加了从 Kotlin 类生成 JSON schema 的支持。该模块根据 Kotlin 的类型处理可空性、默认值和必需属性 (#1766)
  • 添加了对 ChatClient 的 Kotlin 支持,带有类型安全的响应 (#1729)

查看我们的Kotlin 示例,了解这些功能的实际应用。

其他功能

  • 改进了跨多个响应的 token 使用量计算和跟踪 (#1905)
  • 添加了对 Ollama JSON 结构化输出的支持 (#1937)
  • 增强了对 Mistral AI 的多模态支持 (#1930)

改进

代码质量与架构

  • 增强了 ChatClient API 的空安全性和可预测性 (#1651)
  • 改进了 ChatOptions/FunctionCallingOptions 的继承层次结构 (#1994)
  • 引入了 FunctionCallback.Builder 接口 (#1732)
  • 统一了所有向量存储实现的构建器类名称 (#1993)
  • 添加了对 BiFunction 类类型解析的支持 (#1588)

文档与示例

  • 更新了向量数据库提供商列表 (#1639)
  • 改进了 OpenSearch 文档 (#1598)

测试与基础设施

  • 添加了 RAG 模块的集成测试 (#1703)
  • 改进了 Ollama 测试容器管理 (#1693)
  • 增强了两个模块的测试覆盖率 (#1794)

Bug 修复

  • 修复了 Azure OpenAI 聊天模型函数调用 token 使用量问题 (#1916)
  • 修复了 ElasticsearchVectorStore 中 KnnSearch 的参数类型不正确问题 (#1915)
  • 修复了 Chroma 查询/删除操作 (#1779)
  • 修复了 OpenSearch 客户端索引映射问题 (#1725)
  • 修复了 SpringAiRetryAutoConfiguration 中 @ConditionalOnClass 条件不正确问题 (#1657)

废弃与移除

  • 废弃了 PaLM API 支持,推荐使用新的替代方案 (#1664)
  • 移除了废弃的输出解析器,推荐使用转换器 (#1596)
  • 移除了核心模块中不必要的依赖 (#1891)

破坏性变更

最明显的破坏性变更是每个向量存储实现的包名发生了变化。遗憾的是,它们之前都使用了相同的包名,但位于不同的独立 artifact 中,这是不允许的。

因此,MilvusVectorStore 已从 org.springframework.ai.vectorstore 移至 org.springframework.ai.vectorstore.milvus

许多类中都对构建器模式的使用进行了对齐,但重点放在了向量存储和聊天选项上。

MilvusVectorStore vectorStore = MilvusVectorStore.builder(milvusServiceClient, embeddingModel)
  .initializeSchema(true)
  .build();

其他破坏性变更包括

  • Document 现在仅支持文本或媒体内容的单个实例。这使得嵌入注入 pipeline 的流程更容易理解。类似地,之前已废弃的 Document 的嵌入字段已被移除。(#1883)

  • 更改了 TokenCountBatchingStrategy 构造函数参数 (#1670)

贡献者

还有许多贡献者进行了全面的重构、bug 修复和文档增强。如果您的 PR 尚未被处理,我们将尽快处理,请耐心等待。感谢以下贡献者:

路线图

我们在 M5 版本中未能完成所有预期的设计重构,因此将在 2025 年 1 月初发布最后一个 M6 版本来解决这些问题,然后尽快发布 1.0.0 RC1 和 1.0.0 GA 版本。

设计的重点领域是

  • 将项目结构拆分为更细粒度的 artifact,例如将 VectorStore 移至其自身的 artifact。
  • VectorStore API:当前 API 应支持删除和更新操作,并应能访问底层的向量存储客户端 API(如果可用)。此外,还需要更好地对搜索进行参数化,相似性搜索可以有多个选项,这些选项应在运行时选择,而非配置时。
  • 聊天记忆:当前实现未与 Spring 的缓存抽象集成,检索应基于策略(例如 token 数量),而非消息数量。

迎接 2025

对于 Spring AI 来说,这是令人惊叹的一年。我们感谢社区的支持和贡献。期待 2025 年更加精彩!

获取 Spring 新闻稿

订阅 Spring 新闻稿,保持联系

订阅

领先一步

VMware 提供培训和认证,助您快速进步。

了解更多

获取支持

Tanzu Spring 通过一份简单的订阅即可为 OpenJDK™、Spring 和 Apache Tomcat® 提供支持和二进制文件。

了解更多

即将举办的活动

查看 Spring 社区所有即将举办的活动。

查看全部