ModelConfig.java
4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package com.xly.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.xly.agent.DynamicTableNl2SqlAiAgent;
import com.xly.agent.SceneSelectorAiAgent;
import dev.langchain4j.model.ollama.OllamaChatModel;
import dev.langchain4j.model.ollama.OllamaStreamingChatModel;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import java.time.Duration;
@Configuration
public class ModelConfig {
@Value("${langchain4j.ollama.base-url}")
private String chatModelUrl;
@Value("${langchain4j.ollama.chat-model-name}")
private String chatModelName;
@Value("${langchain4j.ollama.sql-model-name}")
private String sqlModelName;
// ====================== 主对话模型 ======================
@Bean
@Primary
public OllamaChatModel chatLanguageModel() {
return OllamaChatModel.builder()
.baseUrl(chatModelUrl)
.modelName(chatModelName)
.temperature(0.1)
.topP(0.95)
.timeout(Duration.ofSeconds(120))
.maxRetries(2)
.logRequests(true)
.logResponses(true)
.build();
}
// ====================== 自由闲聊模型 ======================
@Bean("chatiModel")
public OllamaChatModel chatiModel() {
return OllamaChatModel.builder()
.baseUrl(chatModelUrl)
.modelName(chatModelName)
.temperature(0.7)
.topP(0.9)
.timeout(Duration.ofSeconds(60))
.maxRetries(2)
.build();
}
// ====================== SQL 专用模型 ======================
@Bean("sqlChatModel")
public OllamaChatModel sqlChatModel() {
return OllamaChatModel.builder()
.baseUrl(chatModelUrl)
.modelName(sqlModelName)
.temperature(0.0)
.topP(0.95)
.numPredict(4096)
.timeout(Duration.ofSeconds(120))
.maxRetries(3)
.build();
}
// ====================== 流式对话模型 ======================
@Bean("streamingChatModel")
@Primary
public OllamaStreamingChatModel streamingChatModel() {
return OllamaStreamingChatModel.builder()
.baseUrl(chatModelUrl)
.modelName(chatModelName)
.temperature(0.3)
.topP(0.9)
.numPredict(1024)
.timeout(Duration.ofSeconds(60))
.build();
}
// ====================== 流式 SQL 模型 ======================
@Bean("streamingSqlModel")
public OllamaStreamingChatModel streamingSqlModel() {
return OllamaStreamingChatModel.builder()
.baseUrl(chatModelUrl)
.modelName(sqlModelName)
.temperature(0.2)
.topP(0.95)
.numPredict(2048)
.timeout(Duration.ofSeconds(120))
.build();
}
// ====================== JSON ======================
@Bean
@Primary
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
return mapper;
}
// ====================== 动态 SQL Agent ======================
@Bean
public DynamicTableNl2SqlAiAgent dynamicTableNl2SqlAiAgent(
@Qualifier("sqlChatModel") OllamaChatModel sqlModel) {
return AiServices.builder(DynamicTableNl2SqlAiAgent.class)
.chatModel(sqlModel)
.chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))
.build();
}
// ====================== 场景选择 Agent ======================
@Bean
public SceneSelectorAiAgent sceneSelectorAiAgent(
@Qualifier("chatLanguageModel") OllamaChatModel chatLanguageModel) {
return AiServices.builder(SceneSelectorAiAgent.class)
.chatModel(chatLanguageModel)
.chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(10))
.build();
}
}