SpringAI更新:廢棄tools方法、正式支持DeepSeek!
AI 技術發(fā)展很快,同樣 AI 配套的相關技術發(fā)展也很快。這不今天剛打開 Spring AI 的官網就發(fā)現它又又又又更新了,而這次更新距離上次更新 M7 版本才不過半個月的時間,那這次 Spring AI 給我們帶來了哪些驚喜呢?一起來看。
重點升級點
我們先來判斷 Spring AI M8 的重點升級點:
廢除了 tools 方法,取而代之的是 toolCallbacks 方法,寫法對比如下:
- 早期版本:
// Old code in M7 - no longer works correctly in M8
chatClient.prompt("What day is tomorrow?")
.tools(toolCallback)
.call()
.content();
- 最新版本:
// Updated code for M8
chatClient.prompt("What day is tomorrow?")
.toolCallbacks(toolCallback)
.call()
.content();
聊天記憶增強功能:
- InMemoryChatMemoryRepository(默認)。
- JdbcChatMemoryRepository 對于關系數據庫持久化支持。
- 改進的 ChatMemory API,實現更靈活的對話歷史管理。
- 新 ChatMemoryRepository 允許不同的存儲策略。
- 添加 MessageWindowChatMemory 用于維護歷史消息。
- 改進屬性命名以確保跨實現的一致性。
- 支持各種存儲后端:
增強的 MCP 工具回調配置:
- 在 MCP 客戶端屬性中添加了工具回調配置。
- 支持 MCP 服務器中的完成規(guī)范。
- 為 MCP 服務器添加了指令支持。
- 向 WebFlux 和 WebMvc 傳輸提供程序添加了 SSE 端點參數。
提示工程文檔增強:
- 添加提示工程模式文檔。
- 為開發(fā)人員提供有效提示設計的最佳實踐。
- 包括各種用例的示例和模式。
向量數據庫存儲功能增強:
- Cosmos DB Entra ID 支持和修復:
為 Cosmos DB 添加了 Azure Entra ID(以前稱為 Azure AD)身份驗證;
改進 Azure 部署的安全性和身份驗證選項。
- Cassandra 向量存儲改進:
修復了 Cassandra 聊天內存中的消息順序。
添加了更好的錯誤消息并修復了各種問題。
官方更新日志:https://spring.io/blog/2025/04/30/spring-ai-1-0-0-m8-released
DeepSeek SDK 正式發(fā)布
除了以上內容之外,官方的更新日志中沒提到的,還有對于 DeepSeek SDK 的正式發(fā)布,之前版本中雖然有關于 DeepSeek 的支持,但并不是真正的支持,只是讓 DeepSeek 使用 OpenAI 協議實現對 DeepSeek 的調用,而不是真正的 DeepSeek SDK 支持。
那么 OpenAI 協議和真正的 SDK 支持的區(qū)別是啥呢?
簡單來說,舉個簡單的例子你就明白了,就是 OpenAI 相當于你上班,因為你自己沒車,所以你只能蹭同事的車;而有了 SDK 的支持之后,相當于你有自己的車了,不需要在蹭別人的車了。
也就意味著,DeepSeek 可以和 OpenAI 或其他使用 OpenAI 協議的大模型并存了,之前是二選一,你(DeepSeek)使用了 OpenAI 協議,那么其他人就沒辦法使用 OpenAI 協議了,現在你有自己的 SDK 了,就可以和其他兼容 OpenAI 或 OpenAI 一起使用了。
DeepSeek 使用變化
DeepSeek SDK 的具體使用如下。
- 準備工作:在 DeepSeek 申請 APIKey。
- 添加依賴:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-deepseek-spring-boot-starter</artifactId>
</dependency>
- 設置配置信息:
spring.ai.deepseek.api-key=YOUR_API_KEY
spring.ai.deepseek.chat.options.model=deepseek-chat
spring.ai.deepseek.chat.options.temperature=0.8
- 編寫調用代碼:
@RestController
public class ChatController {
private final DeepSeekChatModel chatModel;
@Autowired
public ChatController(DeepSeekChatModel chatModel) {
this.chatModel = chatModel;
}
// 普通輸出
@GetMapping("/ai/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
return Map.of("generation", chatModel.call(message));
}
// 流式輸出
@GetMapping("/ai/generateStream")
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
var prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt);
}
}
小結
AI 發(fā)展速度很快,對各行各業(yè)的影響也很大,充分了解和掌握 AI 知識,對日常工作提效或以后跳槽都有很大的幫助,讓我們一起行動起來,擁抱這場 AI 盛宴吧。