Spring AI 1.0.0 M5 发布

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

我们很高兴地宣布 Spring AI 1.0.0 Milestone 5 发布。

与往常一样,本次发布包含多项新功能和错误修复。然而,我们更加注重从设计角度审视代码库,目标是在 2025 年初正式发布(GA)。虽然我们已尝试通过在一个发布周期内弃用方法和类来平稳过渡,但仍存在一些我们已知(也可能有一些我们未知的)的破坏性变更,请您谅解。请参阅下方的“破坏性变更”部分。

新功能

模型上下文协议 (MCP) 支持 - 孵化中

MCP 是构建使用 AI 工具和资源的交互式应用程序的变革性技术。它使您能够创建既快速又灵活的应用程序,利用 AI 来处理您的本地数据以及托管在云中的服务。

尽管目前 MCP 独立于 Spring AI 孵化,但我们很高兴宣布 Spring AI MCP 版本 0.20 的实验性发布。这是一个用于 模型上下文协议 (MCP) 的 Java SDK。该项目提供了 Java/Spring 应用程序与 MCP 兼容的 AI 资源和工具之间的无缝集成。

有关架构和实现的更多详细信息,请访问 模型上下文协议文档。在我们的 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)。

新的模型支持

  • 添加了 Zhipuai Embedding-3 模型,支持可配置的维度 (#1880)。
  • 添加了 Ollama 模型:QWEN_2_5_7B、LLAMA3_2_VISION_11b、LLAMA3_2_VISION_90b (#1783)。
  • 将 Pixtral 模型添加到 MistralAi:PIXTRAL 和 PIXTRAL_LARGE (#1783)。
  • 将 Claude 3.5 Sonnet V2 模型添加到 Bedrock (#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:实现了 com.github.victools.jsonschema.generator.Module for Kotlin。通过利用 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)。

错误修复

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

弃用与移除

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

破坏性变更

最明显的破坏性变更在于更改了每个向量存储实现的包名称。不幸的是,它们之前都使用了相同的包名,但位于不同的独立伪件中,这是不被允许的。

`MilvusVectorStore` 已从 `org.springframework.ai.vectorstore` 迁移到 `org.springframework.ai.vectorstore.milvus`。

在许多类中(尤其侧重于向量存储和聊天选项)的构建器模式使用上进行了一致性调整。

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

其他破坏性变更包括:

  • `Document` 现在仅支持单个文本或媒体内容实例。这使得注入管道与嵌入的处理更加简单易懂。同样,之前已弃用的 `Document` 的 embedding 字段已被移除 (#1883)。

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

贡献者

大量贡献者对代码进行了其他重构、错误修复和文档增强。如果您的 PR 尚未处理,我们将尽快处理,请耐心等待。感谢以下贡献者:

路线图

M5 发布未能完成我们希望在设计重构方面进行的所有工作,因此我们将在 2025 年 1 月初发布最后一个 M6 版本,以解决这些问题,随后发布 1.0.0 RC1,并尽快发布 1.0.0 GA 版本。

设计重点领域包括:

  • 将项目结构分解为更精细的伪件,例如将 VectorStore 移至其独立的伪件。
  • VectorStore API:当前的 API 应支持删除和更新操作,并能够访问底层向量存储客户端 API(如果存在)。此外,搜索的参数化应更完善,相似搜索可以有多种选项,并且这些选项应能在运行时而非配置时选择。
  • 聊天内存:当前的实现未与 Spring 的 Caching 抽象集成,检索应基于策略,例如 token 数量,而非消息数量。

迎接 2025

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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

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

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

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

查看所有