基于SpringAI集成DeepSeek并实现动态模型切换的实践
构建可灵活切换模型的AI服务
本示例展示如何在Spring AI项目中集成DeepSeek API,并支持运行时动态选择不同模型,如 deepseek-chat、deepseek-coder 等,以满足多样化场景需求。
一、配置管理:声明可选模型列表
在 application.yml 中定义API密钥与默认模型,同时列出可用模型选项:
deepseek:
api-key: sk-xxxxx
base-url: https://api.deepseek.com/v1
default-model: deepseek-chat
supported-models:
- deepseek-chat
- deepseek-coder
- deepseek-math
二、服务层:支持动态模型注入
通过依赖注入和WebClient构建请求,将模型名称作为参数传入,实现按需调用:
@Service
public class AiModelHandler {
private final WebClient client;
private final String fallbackModel;
public AiModelHandler(WebClient.Builder builder, @Value("${deepseek.default-model}") String fallbackModel) {
this.client = builder.baseUrl("${deepseek.base-url}").build();
this.fallbackModel = fallbackModel;
}
public Mono<String> respond(String input, String modelChoice) {
String targetModel = modelChoice != null && !modelChoice.isBlank()
? modelChoice
: fallbackModel;
return client.post()
.uri("/chat/completions")
.header("Authorization", "Bearer ${deepseek.api-key}")
.bodyValue(Map.of(
"model", targetModel,
"messages", List.of(Map.of("role", "user", "content", input))
))
.retrieve()
.bodyToMono(Map.class)
.map(resp -> ((Map<?, ?>) resp.get("choices")).get(0))
.map(choiceObj -> ((Map<?, ?>) choiceObj).get("message"))
.map(msgObj -> ((Map<?, ?>) msgObj).get("content"))
.cast(String.class);
}
}
三、接口层:支持显式或隐式模型指定
提供统一入口,根据请求参数决定使用哪个模型:
@RestController
@RequestMapping("/ai")
public class ModelController {
private final AiModelHandler aiHandler;
public ModelController(AiModelHandler aiHandler) {
this.aiHandler = aiHandler;
}
@GetMapping("/ask")
public Mono<String> ask(
@RequestParam String query,
@RequestParam(required = false) String model) {
return aiHandler.respond(query, model);
}
}
四、调用测试示例
- 默认模型:
GET /ai/ask?query=你好 - 指定模型:
GET /ai/ask?query=写一个Python函数&model=deepseek-coder
五、增强功能建议
- 远程配置中心集成:将模型列表存于Nacos或Apollo,实现热更新。
- 智能路由策略:根据输入内容语义自动匹配最佳模型(如检测代码关键词则启用
deepseek-coder)。 - 容错降级机制:当目标模型返回错误时,自动回退至默认模型:
.onErrorResume(e -> aiHandler.respond(input, fallbackModel))
六、总结
通过将模型名称作为可变参数注入请求流程,实现了对DeepSeek多模型的灵活调用。结合配置管理与异常处理,系统具备良好的扩展性与稳定性,适用于需要按场景切换AI能力的生产环境。