DeepSeek 接入
大约 2 分钟
第五章:接入 DeepSeek(OpenAI-compatible)与多模型切换
5.1 DeepSeek 的工程优势:OpenAI-compatible
对工程团队来说,“兼容 OpenAI API”意味着:
- 可以直接复用 OpenAI integration(依赖、配置、流式)
- 业务代码几乎不改,只改
baseUrl、apiKey、modelName - 后续做多模型路由更容易
5.2 Spring Boot:用 base-url 切换到 DeepSeek
5.2.1 依赖
依然使用 OpenAI starter:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.12.2-beta22</version>
</dependency>5.2.2 application.yml(示例)
langchain4j:
open-ai:
chat-model:
base-url: https://api.deepseek.com/v1
api-key: ${DEEPSEEK_API_KEY:}
model-name: deepseek-chat
temperature: 0.2
streaming-chat-model:
base-url: https://api.deepseek.com/v1
api-key: ${DEEPSEEK_API_KEY:}
model-name: deepseek-chat
temperature: 0.25.3 纯 Java:同一个 Builder,换 baseUrl
package com.example.langchain4j.deepseek;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import java.time.Duration;
public class DeepSeekChatExample {
public static void main(String[] args) {
String apiKey = System.getenv("DEEPSEEK_API_KEY");
if (apiKey == null || apiKey.isBlank()) {
throw new IllegalStateException("请先设置环境变量 DEEPSEEK_API_KEY");
}
ChatLanguageModel model = OpenAiChatModel.builder()
.baseUrl("https://api.deepseek.com/v1")
.apiKey(apiKey)
.modelName("deepseek-chat")
.timeout(Duration.ofSeconds(60))
.temperature(0.2)
.build();
System.out.println(model.chat("给我一个电商退款流程的关键节点(最多 6 个)。"));
}
}5.4 多模型切换:不要在 Controller 里 if/else
推荐做一个“模型路由器”,业务层只关心“用哪个模型做哪个任务”:
package com.example.langchain4j.routing;
import dev.langchain4j.model.chat.ChatLanguageModel;
import java.util.Map;
import org.springframework.stereotype.Component;
@Component
public class ChatModelRouter {
private final Map<String, ChatLanguageModel> models;
public ChatModelRouter(Map<String, ChatLanguageModel> models) {
this.models = models;
}
public ChatLanguageModel byName(String name) {
ChatLanguageModel model = models.get(name);
if (model == null) {
throw new IllegalArgumentException("未知模型:" + name);
}
return model;
}
}你可以用 Spring 的 @Qualifier 或自定义 Bean 名称,让不同供应商的 ChatLanguageModel 并存,路由器按任务选择。
5.5 本章小结
你已经完成了第三家模型的接入,并把“多模型切换”的工程位置放对了。下一章开始我们进入“更像工程而不是 API 调用”的部分:prompt 模板化与约束,避免业务 prompt 失控。
