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

檢視全部