langchain4j 学习系列(2)-调用远程deepseek

上一篇继续,langchain4j支持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>
View Code

二、注入相应实例

 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 }
View Code

三、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
View Code

这样就可以了,API controller部分无需调整。

四、langchain4j的优势

试想一个场景:假如我们做的是1个多租户的大型AI应用,有多个租户都使用deepseek,每个租户都有自己的api key,这时候如果还使用yaml配置文件写死,启动时全都创建好实例就太不灵活了。

这种情况下,运行时【动态注入】apiKey 及deepseek相关实例就很有必要了!

幸好,longchain4j的 OpenAiChatModelBuilder 提供了apiKey注入的能力

image

image

这样就可以了(注:目前为止spring-ai 1.0版本,都还未提供这个能力,见 spring-ai 学习系列(2)-调用远程deepseek )

 

文中代码:https://github.com/yjmyzz/longchain4j-study/tree/day02

posted @ 2025-09-28 20:08  菩提树下的杨过  阅读(39)  评论(0)    收藏  举报