Spring AI 在 1.0.0 及以上 的推荐做法:
给每个模型单独声明一个 ChatModel Bean,然后用 限定名 或 动态选项 切换。下面给出两种常用姿势,复制即可跑。
一、静态切换(多 Bean,代码里指名使用)
-
配置两个模型
yaml
复制
spring:
ai:
openai:
base-url: https://api.moonshot.cn/v1
api-key: ${MOON_KEY}
chat:
options:
model: moonshot-v1-8k # 默认
temperature: 0.3
deepseek:
ai:
openai:
base-url: https://api.deepseek.com
api-key: ${DS_KEY}
chat:
options:
model: deepseek-chat
temperature: 0.7
-
显式声明两个 ChatModel
java
复制
@Configuration
public class MultiModelConfig {
/* ---------- Moonshot ---------- */
@Bean("moonChatModel")
public OpenAiChatModel moonshotChatModel(
@Value("${deepseek.ai.openai.base-url}") String baseUrl,
@Value("${deepseek.ai.openai.api-key}") String apiKey) {
return new OpenAiChatModel(
OpenAiApi.builder().baseUrl(baseUrl).apiKey(apiKey).build(),
OpenAiChatOptions.builder()
.model("moonshot-v1-32k")
.temperature(0.3)
.build());
}
/* ---------- DeepSeek ---------- */
@Bean("dsChatModel")
public OpenAiChatModel deepseekChatModel(
@Value("${deepseek.ai.openai.base-url}") String baseUrl,
@Value("${deepseek.ai.openai.api-key}") String apiKey) {
return new OpenAiChatModel(
OpenAiApi.builder().baseUrl(baseUrl).apiKey(apiKey).build(),
OpenAiChatOptions.builder()
.model("deepseek-chat")
.temperature(0.7)
.build());
}
}
-
使用时按名注入
java
复制
@RestController
@RequestMapping("/bot")
class ChatController {
@Resource(name = "moonChatModel")
private ChatModel moonModel;
@Resource(name = "dsChatModel")
private ChatModel dsModel;
@GetMapping("/moon")
public String moon(@RequestParam String q) {
return ChatClient.builder(moonModel).build()
.prompt().user(q).call().content();
}
@GetMapping("/ds")
public String ds(@RequestParam String q) {
return ChatClient.builder(dsModel).build()
.prompt().user(q).call().content();
}
}
二、动态切换(单 ChatClient,运行时换模型)
java
复制
@Autowired // 默认自动配置的那个
private ChatClient chatClient;
@GetMapping("/chat")
public String chat(@RequestParam String q,
@RequestParam(defaultValue = "moonshot-v1-8k") String model) {
return chatClient.prompt()
.user(q)
.options(OpenAiChatOptions.builder()
.model(model) // 运行时指定
.temperature(0.5)
.build())
.call()
.content();
}
请求示例
GET /chat?q=你好&model=moonshot-v1-32k
GET /chat?q=你好&model=deepseek-chat
三、小结
表格
复制
| 场景 | 做法 |
|---|---|
| 固定模型/不同业务 | 多 ChatModel Bean + @Qualifier |
| 用户侧随时切换 | 单 ChatClient + .options(...) |
| 密钥/地址不同 | 手动 new OpenAiChatModel(...) |
一句话:“多 Bean 静态注入”或“单 Client 动态 options”——Spring AI 官方只推荐这两种方式,其余自己封装即可。
1253

被折叠的 条评论
为什么被折叠?



