You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring AI集成DeepSeek客户端时DeepSeekChatModel Bean缺失的问题排查

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.propertiesapplication.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);
    }
}

这里RetryTemplateObservationRegistry都是Spring Boot自动配置的默认Bean,不需要我们手动创建,直接注入就行。

我当时的问题是依赖版本不匹配,starter版本比Spring AI核心版本低了一个小版本,导致自动配置类的逻辑不兼容,更新版本后就正常创建Bean了。你可以按照上面的步骤一步步排查,应该能解决问题。

火山引擎 最新活动