接上一篇继续,longchain4j支持open-ai兼容的各种模式,包括deepseek
一、修改pom依赖

1 <!-- LongChain4j OpenAI Integration (支持DeepSeek) --> 2 <dependency> 3 <groupId>dev.langchain4j</groupId> 4 <artifactId>langchain4j-open-ai</artifactId> 5 <version>${longchain4j.version}</version> 6 </dependency>
二、注入相应实例

1 package com.cnblogs.yjmyzz.longchain4j.study.config; 2 3 import dev.langchain4j.model.chat.ChatModel; 4 import dev.langchain4j.model.chat.StreamingChatModel; 5 import dev.langchain4j.model.openai.OpenAiChatModel; 6 import dev.langchain4j.model.openai.OpenAiStreamingChatModel; 7 import org.springframework.beans.factory.annotation.Value; 8 import org.springframework.context.annotation.Bean; 9 import org.springframework.context.annotation.Configuration; 10 11 import java.time.Duration; 12 13 /** 14 * DeepSeek配置类 15 * 用于配置LongChain4j与DeepSeek大模型的连接 16 * 17 * @author 菩提树下的杨过 18 * @version 1.0.0 19 */ 20 @Configuration 21 public class DeepSeekConfig { 22 23 @Value("${deepseek.api-key:your-deepseek-api-key-here}") 24 private String apiKey; 25 26 @Value("${deepseek.base-url:https://api.deepseek.com}") 27 private String baseUrl; 28 29 @Value("${deepseek.model:deepseek-chat}") 30 private String model; 31 32 @Value("${deepseek.timeout:60}") 33 private Integer timeoutSeconds; 34 35 @Value("${deepseek.temperature:0.7}") 36 private Double temperature; 37 38 @Value("${deepseek.max-tokens:2048}") 39 private Integer maxTokens; 40 41 /** 42 * 配置DeepSeek聊天模型 43 * 44 * @return ChatModel实例 45 */ 46 @Bean 47 public ChatModel chatModel() { 48 return OpenAiChatModel.builder() 49 .apiKey(apiKey) 50 .baseUrl(baseUrl) 51 .modelName(model) 52 .temperature(temperature) 53 .maxTokens(maxTokens) 54 .timeout(Duration.ofSeconds(timeoutSeconds)) 55 .logRequests(true) 56 .logResponses(true) 57 .build(); 58 } 59 60 /** 61 * 配置DeepSeek流式聊天模型 62 * 63 * @return StreamingChatModel实例 64 */ 65 @Bean 66 public StreamingChatModel streamingChatModel() { 67 return OpenAiStreamingChatModel.builder() 68 .apiKey(apiKey) 69 .baseUrl(baseUrl) 70 .modelName(model) 71 .temperature(temperature) 72 .maxTokens(maxTokens) 73 .timeout(Duration.ofSeconds(timeoutSeconds)) 74 .logRequests(true) 75 .logResponses(true) 76 .build(); 77 } 78 }
三、yaml配置调整

1 # DeepSeek配置 2 deepseek: 3 api-key: ${DEEPSEEK_API_KEY:your-deepseek-api-key-here} 4 base-url: https://api.deepseek.com 5 model: deepseek-chat 6 timeout: 60 7 temperature: 0.7 8 max-tokens: 2048
这样就可以了,API controller部分无需调整。
四、longchain4j的优势
试想一个场景:假如我们做的是1个多租户的大型AI应用,有多个租户都使用deepseek,每个租户都有自己的api key,这时候如果还使用yaml配置文件写死,启动时全都创建好实例就太不灵活了。
这种情况下,运行时【动态注入】apiKey 及deepseek相关实例就很有必要了!
幸好,longchain4j的 OpenAiChatModelBuilder 提供了apiKey注入的能力
这样就可以了(注:目前为止spring-ai 1.0版本,都还未提供这个能力)
文中代码:https://github.com/yjmyzz/longchain4j-study/tree/day02