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 社群所有即將舉行的活動。

檢視所有