速看!新版SpringAI的兩個(gè)致命問題
無論是使用最新正式版的 Spring AI,還是最新正式版 Spring AI Alibaba,在實(shí)現(xiàn)自定義 MCP 服務(wù)器端和客戶端的時(shí)候,一定要注意這兩個(gè)問題,不然你會發(fā)現(xiàn)你的 MCP 服務(wù)器端能啟動(dòng),但客戶端就是連接不上,并且控制臺也都是誤報(bào)信息。
注意事項(xiàng)一
自定義 MCP 服務(wù)器端添加依賴時(shí),如果是非標(biāo)準(zhǔn) stdio 模式,當(dāng)前項(xiàng)目一定要記得排除掉 spring-boot-starter-web 依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
也就是說,你的 spring-ai-starter-mcp-server-webflux 依賴不能和 spring-boot-starter-web 依賴并存,以下是錯(cuò)誤配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
</dependency>
因?yàn)楫?dāng)有 spring-boot-starter-web 依賴時(shí)會默認(rèn)使用 tomcat 啟動(dòng)服務(wù),這樣項(xiàng)目雖然啟動(dòng)了,但 mcp service 服務(wù)并未啟動(dòng),mcp service 服務(wù)是使用 netty 啟動(dòng)的,如下圖所示:
圖片
圖片
注意事項(xiàng)二
Spring AI 正式版之后,在使用客戶端注冊 MCP 工具時(shí)要使用 ToolCallbacks 而不是 Tools,如果在新版本中使用后者就會啟動(dòng)報(bào)錯(cuò)。
錯(cuò)誤用法
@Bean
public ChatClient chatClient(ChatModel chatModel, ToolCallbackProvider tools) {
return ChatClient
.builder(chatModel)
.defaultTools(tools.getToolCallbacks())
.build();
}
或者以下方式也是錯(cuò)誤的:
@Bean
public ChatClient chatClient(ChatModel chatModel, ToolCallbackProvider tools) {
return ChatClient
.builder(chatModel)
.defaultTools(tools)
.build();
}
正確用法
@Bean
public ChatClient chatClient(ChatModel chatModel, ToolCallbackProvider tools) {
return ChatClient
.builder(chatModel)
.defaultToolCallbacks(tools.getToolCallbacks())
.build();
}
小結(jié)
在進(jìn)行 Spring AI 或 Spring AI Alibaba 老項(xiàng)目升級時(shí),或使用最新正式版框架時(shí),一定要注意這兩個(gè)問題,不然就會導(dǎo)致自定義的 MCP 服務(wù)能啟動(dòng),但客戶端就是連接不上的問題。