Spring AI集成ChatGroq自定义配置时遭遇API密钥错误与OpenAiApi构造器参数不匹配问题
看起来你在Spring AI里自定义配置ChatGroq的时候碰到了两个头疼的问题,我来帮你一步步拆解解决:
问题1:BeanCreationException - OpenAI API key必须设置
问题原因
你已经禁用了Spring AI默认的Chat Client(spring.ai.chat.client.enabled=false),但Spring AI的自动配置还包含了音频相关的自动配置类(比如OpenAiAudioSpeechAutoConfiguration)。这些自动配置类会尝试创建OpenAI的音频模型Bean,而它们默认需要读取OpenAI的API密钥配置,但你并没有设置,所以就抛出了这个错误。
解决方案
有两种简单的解决方式,选一种适合你的就行:
方案A:禁用不需要的OpenAI自动配置类
如果你完全不需要Spring AI的OpenAI音频功能,直接在启动类里排除相关的自动配置类:
import org.springframework.ai.model.openai.autoconfigure.OpenAiAudioSpeechAutoConfiguration; import org.springframework.ai.model.openai.autoconfigure.OpenAiAudioTranscriptionAutoConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(exclude = { OpenAiAudioSpeechAutoConfiguration.class, OpenAiAudioTranscriptionAutoConfiguration.class }) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
方案B:配置一个占位符API密钥
如果你不想修改启动类,可以在application.properties里加一个dummy的OpenAI API密钥,只是用来让自动配置类通过初始化(实际不会用到这个密钥,因为你用的是Groq的自定义配置):
# 占位符,避免音频自动配置报错 spring.ai.openai.api-key=dummy # 你的Groq配置 spring.ai.chat.client.enabled=false groq.api-key=<your-actual-groq-api-key> groq.base-url=https://api.groq.com/openai
问题2:OpenAiApi构造器参数不匹配
问题原因
你看到的官方文档可能对应了旧版本的Spring AI,而你当前使用的新版本中OpenAiApi的构造器参数已经更新了,不再支持直接传入(String baseUrl, String apiKey)这种简单形式,而是需要更完整的参数列表(包括ApiKey对象、RestClientBuilder等)。
解决方案
推荐使用Builder模式来创建OpenAiApi,这是最简洁且兼容不同版本的方式,就像你最开始代码里写的那样(我稍微优化一下):
@Configuration public class ChatClientConfig { @Value("${groq.api-key}") private String groqApiKey; @Value("${groq.base-url}") private String groqBaseUrl; @Bean public OpenAiChatModel customGroqChatClient() { OpenAiApi groqOpenAiApi = OpenAiApi.builder() .baseUrl(groqBaseUrl) .apiKey(ApiKey.create(groqApiKey)) .build(); return OpenAiChatModel.builder() .openAiApi(groqOpenAiApi) .build(); } }
如果一定要用构造器方式(不推荐,因为参数多且易变),需要按新版本的要求传入所有必要参数:
import org.springframework.ai.openai.api.ApiKey; import org.springframework.web.client.DefaultResponseErrorHandler; import org.springframework.web.client.RestClient; import org.springframework.web.reactive.function.client.WebClient; // 构造器方式示例 String baseUrl = "https://api.groq.com/openai"; String apiKey = System.getenv("GROQ_API_KEY"); OpenAiApi groqOpenAiApi = new OpenAiApi( baseUrl, ApiKey.create(apiKey), null, // 自定义请求头,不需要就传null null, // 组织ID,不需要就传null null, // 默认模型,不需要就传null RestClient.builder(), WebClient.builder(), new DefaultResponseErrorHandler() );
最后提醒
不同版本的Spring AI API可能会有差异,建议你:
- 确保查看的官方文档和你使用的Spring AI版本完全对应
- 优先使用Builder模式创建客户端,因为它比直接调用构造器更灵活、更易维护
内容来源于stack exchange

