Spring AI集成DeepSeek客户端时DeepSeekChatModel Bean缺失的问题排查
我之前在集成Spring AI和DeepSeek的时候也碰到过一模一样的问题,当时折腾了好一阵才找到根源,给你分享下我排查的思路和解决方案:
1. 先检查依赖是否正确引入
Spring AI的第三方模型集成基本都是靠starter包来自动配置Bean的,如果你只引入了Spring AI核心包,没加DeepSeek的starter,自动配置类根本不会生效,自然就找不到DeepSeekChatModel的Bean。
比如Maven项目要确保pom.xml里有这个依赖(版本要和你用的Spring AI核心版本一致):
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-deepseek-spring-boot-starter</artifactId> <version>${spring-ai.version}</version> </dependency>
Gradle项目则是:
implementation "org.springframework.ai:spring-ai-deepseek-spring-boot-starter:${springAiVersion}"
如果已经加了starter,再确认下版本有没有冲突,比如Spring AI的核心版本和starter版本不一致也可能导致自动配置失效。
2. 核对配置文件的属性是否正确且完整
自动配置类会根据配置文件里的属性来创建Bean,要是关键属性没配置或者拼写错了,自动配置的条件就不满足,Bean也不会被创建。
你需要确保application.properties或application.yml里至少配置了API密钥:
# application.properties spring.ai.deepseek.api-key=你的DeepSeek API密钥 # 如果用的是自定义部署的DeepSeek服务,还要配置base-url # spring.ai.deepseek.base-url=https://你的服务地址/v1
检查下有没有拼写错误,比如把deepseek写成deep-seek或者其他,属性名错了的话自动配置类根本读不到配置,就不会创建Bean。
3. 确认自动配置类是否生效
有时候依赖和配置都对,但自动配置类因为某些条件没满足没启动,这时候可以给应用加上--debug启动参数,然后在控制台的自动配置报告里找DeepSeekAutoConfiguration相关的内容:
- 如果看到
Positive matches下面有DeepSeekAutoConfiguration,说明自动配置生效了,那问题可能出在其他地方; - 如果在
Negative matches里,报告里会明确说明不生效的原因,比如“缺少api-key配置”“某个依赖缺失”之类的,根据提示修复就行。
4. 实在不行就手动创建Bean
如果自动配置确实不管用,那我们可以手动配置DeepSeekChatModel的Bean。其实它依赖的大部分组件Spring Boot都有默认实现,我们只需要补充关键的部分:
创建一个配置类,手动组装Bean:
import org.springframework.ai.deepseek.DeepSeekApi; import org.springframework.ai.deepseek.DeepSeekChatModel; import org.springframework.ai.deepseek.DeepSeekChatOptions; import org.springframework.ai.tool.DefaultToolCallingManager; import org.springframework.ai.tool.ToolCallingManager; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.retry.support.RetryTemplate; import io.micrometer.observation.ObservationRegistry; @Configuration public class DeepSeekCustomConfig { @Value("${spring.ai.deepseek.api-key}") private String apiKey; @Value("${spring.ai.deepseek.base-url:https://api.deepseek.com/v1}") private String baseUrl; // 创建DeepSeekApi实例 @Bean public DeepSeekApi deepSeekApi() { return DeepSeekApi.builder() .apiKey(apiKey) .baseUrl(baseUrl) .build(); } // 默认的聊天选项,可以根据自己的需求调整参数 @Bean public DeepSeekChatOptions deepSeekChatOptions() { return DeepSeekChatOptions.builder() .withTemperature(0.7f) // 调整生成温度 .withMaxTokens(1024) // 最大生成token数 .build(); } // 如果Spring没有自动配置ToolCallingManager,手动创建默认实现 @Bean public ToolCallingManager toolCallingManager() { return new DefaultToolCallingManager(); } // 手动创建DeepSeekChatModel Bean @Bean public DeepSeekChatModel deepSeekChatModel(DeepSeekApi deepSeekApi, DeepSeekChatOptions deepSeekChatOptions, ToolCallingManager toolCallingManager, RetryTemplate retryTemplate, ObservationRegistry observationRegistry) { return new DeepSeekChatModel(deepSeekApi, deepSeekChatOptions, toolCallingManager, retryTemplate, observationRegistry); } }
这里RetryTemplate和ObservationRegistry都是Spring Boot自动配置的默认Bean,不需要我们手动创建,直接注入就行。
我当时的问题是依赖版本不匹配,starter版本比Spring AI核心版本低了一个小版本,导致自动配置类的逻辑不兼容,更新版本后就正常创建Bean了。你可以按照上面的步骤一步步排查,应该能解决问题。




