Spring AI 1.0.0 M8 釋出

釋出 | Mark Pollack | 2025年4月30日 | ...

在審查了 M7 之後的 API 設計和棄用資訊後,我們確定了幾項重大更改將在 RC1 版本中成為破壞性更改。因此,我們引入了這個額外的里程碑,為開發者提供一個過渡版本,其中棄用的 API 與其替換項共存,從而在 RC1 釋出之前實現更平滑的升級體驗。

以下是本次釋出的主要變更。

  • 升級說明
  • 您可以使用 OpenRewrite 指令碼自動升級到 1.0.0-M8。該指令碼有助於應用許多此版本所需的程式碼更改。請訪問 Arconia Spring AI Migrations 來查詢指令碼和使用說明。

破壞性變更

在從 Spring AI 1.0 M7 升級到 1.0 M8 時,先前註冊了工具回撥的使用者會遇到破壞性更改,導致工具呼叫功能無聲地失敗。這尤其影響了使用已棄用的 tools() 方法的程式碼。

示例

以下是一個在 M7 中有效但在 M8 中不再按預期工作的程式碼示例

// Old code in M7 - no longer works correctly in M8
chatClient.prompt("What day is tomorrow?")
    .tools(toolCallback)
    .call()
    .content();

如何修改您的程式碼

要修復升級到 M8 時出現此問題,您需要更新程式碼以使用新的 toolCallbacks() 方法

// Updated code for M8
chatClient.prompt("What day is tomorrow?")
    .toolCallbacks(toolCallback)
    .call()
    .content();

此更改的原因

Spring AI 團隊重新命名了過載的 tools() 方法,以提高畫質晰度並避免方法分派時的歧義。之前的 API 設計在 Java 編譯器需要根據引數型別在多個過載方法之間進行選擇時,會導致混淆。

M7 到 M8 的方法對映

舊方法如何對映到新方法

  1. tools(String... toolNames)toolNames(String... toolNames)

    • 用於引用在其他地方註冊的工具(例如,透過帶有 @Description@Bean
  2. tools(ToolCallback... toolCallbacks)toolCallbacks(ToolCallback... toolCallbacks)

    • 用於內聯工具回撥註冊
  3. tools(List<ToolCallback> toolCallbacks)toolCallbacks(List<ToolCallback> toolCallbacks)

    • 當您有一個工具回撥集合時使用
  4. tools(ToolCallbackProvider... toolCallbackProviders)toolCallbacks(ToolCallbackProvider... toolCallbackProviders)

    • 用於實現 ToolCallbackProvider 介面的物件
  5. tools(Object... toolObjects) 保持不變

    • 僅用於帶有 @Tool 註解的方法的物件

改進的錯誤處理

最新的 PR (spring-projects/spring-ai#2964) 中,tools(Object... toolObjects) 方法現在會在提供的物件上找不到 @Tool 方法時丟擲異常,而不是無聲地失敗。這有助於開發者立即識別遷移問題。

遷移總結

如果您正在從 M7 升級到 M8

  1. 將所有對 .tools(toolCallback) 的呼叫替換為 .toolCallbacks(toolCallback)
  2. 將所有對 .tools(toolCallbackProvider) 的呼叫替換為 .toolCallbacks(toolCallbackProvider)
  3. 將所有對 .tools("toolName") 的呼叫替換為 .toolNames("toolName")

這些更改將確保您的工具呼叫功能在升級到 Spring AI 1.0 M8 後繼續正常工作。

新功能

  1. 聊天記憶體增強
  • 增強的聊天記憶體架構
    • 改進的 ChatMemory API,用於更靈活的對話歷史管理
    • 新的 ChatMemoryRepository 介面允許不同的儲存策略
    • 添加了 MessageWindowChatMemory,用於維護訊息視窗
    • 改進了屬性命名,以在實現之間保持一致
    • 支援各種儲存後端
      • InMemoryChatMemoryRepository(預設)
      • JdbcChatMemoryRepository,用於關係型資料庫
    • 有關聊天記憶體配置的更多詳細資訊,請參閱 記憶體型別記憶體儲存
  1. 模板渲染*
  • 引入 TemplateRenderer 用於提示模板化
    • 用於模板渲染的靈活新 API,可在不同的模板引擎之間提供一致的介面
    • 包括新的 StTemplateRenderer,支援內建函式和自定義驗證選項。在此 檢視如何使用它。
    • 直接整合到 ChatClient 中,以簡化提示模板化
    • 添加了 NoOpTemplateRenderer,用於不需要模板化的場景
    • 相關: "在 ChatClient 中配置 TemplateRenderer"、"更新文件以提及 NoOpTemplateRenderer"
  1. MCP 改進
  • 增強的 MCP 工具回撥配置
    • 將工具回撥配置新增到 MCP 客戶端屬性
    • 支援 MCP 伺服器中的完成規範
    • 為 MCP 伺服器添加了說明支援
    • 為 WebFlux 和 WebMvc 傳輸提供商添加了 SSE 端點引數
  1. 提示工程模式
  • 新增提示工程模式文件
    • 關於高階提示工程技術的全新綜合文件
    • 為開發者提供有效提示設計的最佳實踐
    • 包括各種用例的示例和模式
  1. 向量儲存增強
  • Cosmos DB Entra ID 支援和修復
    • 為 Cosmos DB 添加了 Azure Entra ID(前身為 Azure AD)身份驗證
    • 改進了 Azure 部署的安全和身份驗證選項
  • Cassandra 向量儲存改進
    • 修復了 Cassandra 聊天記憶體中的訊息順序
    • 添加了更好的錯誤訊息並修復了各種問題

棄用

需要注意的重要棄用資訊包括

  1. Chat Client 增強:

    • ChatClient 已更新,以確保使用者和系統提示始終在顧問執行之前進行渲染。此更改用 ChatClientRequestChatClientResponse 替換了 AdvisedRequestAdvisedResponse API。
  2. 提示模板化和顧問:

    • 與提示建立和顧問自定義相關的類和方法已被棄用,取而代之的是構建器模式和 TemplateRenderer 介面。
  3. QuestionAnswerAdvisor 棄用:

    • 棄用了依賴於簡單 userTextAdvise 字串的建構函式和構建器方法。
  4. 聊天記憶體配置:

    • spring.ai.chat.memory.jdbc.initialize-schema 屬性已被棄用,取而代之的是 spring.ai.chat.memory.repository.jdbc.initialize-schema
  5. 文件處理:

    • DocumentPostProcessor API 取代了 DocumentCompressorDocumentRankerDocumentSelector 等已棄用的 API。
  6. 聊天記憶體棄用:

    • ChatMemory 中的 @Deprecated List<Message> get(String conversationId, int lastN); 已被棄用。

貢獻者

還有許多其他重構、錯誤修復、文件增強等工作由眾多貢獻者完成。如果您的 PR 尚未被處理,我們會盡快處理,請耐心等待。感謝

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助您加速進步。

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視所有