接上一篇继续,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版本,都还未提供这个能力)