mirror of https://github.com/jeecgboot/jeecg-boot
AI默认切换成DeepSeek v3模型,提供更优的速度和质量
parent
d9737c891f
commit
8fc27bb261
|
@ -9,6 +9,7 @@ import com.unfbx.chatgpt.entity.chat.Message;
|
||||||
import com.unfbx.chatgpt.exception.BaseException;
|
import com.unfbx.chatgpt.exception.BaseException;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.SecurityUtils;
|
||||||
|
import org.jeecg.chatgpt.prop.AiChatProperties;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
import org.jeecg.common.exception.JeecgBootException;
|
import org.jeecg.common.exception.JeecgBootException;
|
||||||
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.common.system.vo.LoginUser;
|
||||||
|
@ -58,6 +59,11 @@ public class ChatServiceImpl implements ChatService {
|
||||||
|
|
||||||
private OpenAiStreamClient openAiStreamClient = null;
|
private OpenAiStreamClient openAiStreamClient = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ai聊天配置
|
||||||
|
* for [QQYUN-10943]【AI 重要】jeecg-boot-starter-chatgpt 支持deepseek等国产模型
|
||||||
|
*/
|
||||||
|
private AiChatProperties aiChatProperties;
|
||||||
//update-begin---author:chenrui ---date:20240131 for:[QQYUN-8212]fix 没有配置启动报错------------
|
//update-begin---author:chenrui ---date:20240131 for:[QQYUN-8212]fix 没有配置启动报错------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,17 +72,17 @@ public class ChatServiceImpl implements ChatService {
|
||||||
* @author chenrui
|
* @author chenrui
|
||||||
* @date 2024/2/3 23:08
|
* @date 2024/2/3 23:08
|
||||||
*/
|
*/
|
||||||
private OpenAiStreamClient ensureClient(){
|
private void ensureClient(){
|
||||||
if (null == this.openAiStreamClient){
|
if (null == this.openAiStreamClient){
|
||||||
//update-begin---author:chenrui ---date:20240625 for:[TV360X-1570]给于更友好的提示,提示未配置ai------------
|
//update-begin---author:chenrui ---date:20240625 for:[TV360X-1570]给于更友好的提示,提示未配置ai------------
|
||||||
try {
|
try {
|
||||||
this.openAiStreamClient = SpringContextUtils.getBean(OpenAiStreamClient.class);
|
this.openAiStreamClient = SpringContextUtils.getBean(OpenAiStreamClient.class);
|
||||||
|
this.aiChatProperties = SpringContextUtils.getBean(AiChatProperties.class);
|
||||||
} catch (Exception ignored) {
|
} catch (Exception ignored) {
|
||||||
sendErrorMsg("如果您想使用AI助手,请先设置相应配置!");
|
sendErrorMsg("如果您想使用AI助手,请先设置相应配置!");
|
||||||
}
|
}
|
||||||
//update-end---author:chenrui ---date:20240625 for:[TV360X-1570]给于更友好的提示,提示未配置ai------------
|
//update-end---author:chenrui ---date:20240625 for:[TV360X-1570]给于更友好的提示,提示未配置ai------------
|
||||||
}
|
}
|
||||||
return this.openAiStreamClient;
|
|
||||||
}
|
}
|
||||||
//update-end---author:chenrui ---date:20240131 for:[QQYUN-8212]fix 没有配置启动报错------------
|
//update-end---author:chenrui ---date:20240131 for:[QQYUN-8212]fix 没有配置启动报错------------
|
||||||
|
|
||||||
|
@ -138,6 +144,7 @@ public class ChatServiceImpl implements ChatService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendMessage(String topicId, String message) {
|
public void sendMessage(String topicId, String message) {
|
||||||
|
ensureClient();
|
||||||
String uid = getUserId();
|
String uid = getUserId();
|
||||||
if (StrUtil.isBlank(message)) {
|
if (StrUtil.isBlank(message)) {
|
||||||
log.info("参数异常,message为null");
|
log.info("参数异常,message为null");
|
||||||
|
@ -164,18 +171,16 @@ public class ChatServiceImpl implements ChatService {
|
||||||
throw new JeecgBootException("聊天消息推送失败uid:[{}],没有创建连接,请重试。~");
|
throw new JeecgBootException("聊天消息推送失败uid:[{}],没有创建连接,请重试。~");
|
||||||
}
|
}
|
||||||
//update-begin---author:chenrui ---date:20240625 for:[TV360X-1570]给于更友好的提示,提示未配置ai------------
|
//update-begin---author:chenrui ---date:20240625 for:[TV360X-1570]给于更友好的提示,提示未配置ai------------
|
||||||
OpenAiStreamClient client = ensureClient();
|
if (null != openAiStreamClient) {
|
||||||
if (null != client) {
|
|
||||||
OpenAISSEEventSourceListener openAIEventSourceListener = new OpenAISSEEventSourceListener(topicId, sseEmitter);
|
OpenAISSEEventSourceListener openAIEventSourceListener = new OpenAISSEEventSourceListener(topicId, sseEmitter);
|
||||||
ChatCompletion completion = ChatCompletion
|
ChatCompletion completion = ChatCompletion
|
||||||
.builder()
|
.builder()
|
||||||
.messages(msgHistory)
|
.messages(msgHistory)
|
||||||
.model(ChatCompletion.Model.GPT_3_5_TURBO.getName())
|
.model(aiChatProperties.getModel())
|
||||||
.build();
|
.build();
|
||||||
client.streamChatCompletion(completion, openAIEventSourceListener);
|
openAiStreamClient.streamChatCompletion(completion, openAIEventSourceListener);
|
||||||
redisTemplate.opsForHash().put(cacheKey, CACHE_KEY_MSG_CONTEXT, JSONUtil.toJsonStr(msgHistory));
|
redisTemplate.opsForHash().put(cacheKey, CACHE_KEY_MSG_CONTEXT, JSONUtil.toJsonStr(msgHistory));
|
||||||
//update-end---author:chenrui ---date:20240223 for:[QQYUN-8225]聊天记录保存------------
|
//update-end---author:chenrui ---date:20240223 for:[QQYUN-8225]聊天记录保存------------
|
||||||
Result.ok(completion.tokens());
|
|
||||||
}
|
}
|
||||||
//update-end---author:chenrui ---date:20240625 for:[TV360X-1570]给于更友好的提示,提示未配置ai------------
|
//update-end---author:chenrui ---date:20240625 for:[TV360X-1570]给于更友好的提示,提示未配置ai------------
|
||||||
}
|
}
|
||||||
|
|
|
@ -199,6 +199,13 @@ mybatis-plus:
|
||||||
minidao:
|
minidao:
|
||||||
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
||||||
jeecg:
|
jeecg:
|
||||||
|
# AI集成
|
||||||
|
ai-chat:
|
||||||
|
enabled: true
|
||||||
|
model: deepseek-chat
|
||||||
|
apiKey: ??
|
||||||
|
apiHost: https://api.deepseek.com
|
||||||
|
timeout: 60
|
||||||
# 平台上线安全配置
|
# 平台上线安全配置
|
||||||
firewall:
|
firewall:
|
||||||
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
||||||
|
@ -240,11 +247,6 @@ jeecg:
|
||||||
SMS_465391221:
|
SMS_465391221:
|
||||||
# 注册账号短信模板编码
|
# 注册账号短信模板编码
|
||||||
SMS_175430166:
|
SMS_175430166:
|
||||||
# ElasticSearch 6设置
|
|
||||||
elasticsearch:
|
|
||||||
cluster-name: jeecg-ES
|
|
||||||
cluster-nodes: 127.0.0.1:9200
|
|
||||||
check-enabled: false
|
|
||||||
# 在线预览文件服务器地址配置
|
# 在线预览文件服务器地址配置
|
||||||
file-view-domain: http://fileview.jeecg.com
|
file-view-domain: http://fileview.jeecg.com
|
||||||
# minio文件上传
|
# minio文件上传
|
||||||
|
@ -280,26 +282,16 @@ jeecg:
|
||||||
password:
|
password:
|
||||||
type: STANDALONE
|
type: STANDALONE
|
||||||
enabled: true
|
enabled: true
|
||||||
# ai-chat
|
|
||||||
ai-chat:
|
|
||||||
# 是否开启;必须。
|
|
||||||
enabled: false
|
|
||||||
# openAi接口秘钥,填写自己的apiKey;必须。
|
|
||||||
apiKey: "????"
|
|
||||||
# openAi域名,有代理就填代理的域名。默认:openAI官方apiHost
|
|
||||||
apiHost: "https://api.openai.com"
|
|
||||||
# 超时时间单位:s。默认 60s
|
|
||||||
timeout: 60
|
|
||||||
# 本地代理地址
|
|
||||||
# proxy:
|
|
||||||
# host: "http://127.0.0.1"
|
|
||||||
# port: "7890"
|
|
||||||
# 百度开放API配置
|
# 百度开放API配置
|
||||||
baidu-api:
|
baidu-api:
|
||||||
app-id: ??
|
app-id: ??
|
||||||
api-key: ??
|
api-key: ??
|
||||||
secret-key: ??
|
secret-key: ??
|
||||||
|
# ElasticSearch 6设置
|
||||||
|
elasticsearch:
|
||||||
|
cluster-name: jeecg-ES
|
||||||
|
cluster-nodes: 127.0.0.1:9200
|
||||||
|
check-enabled: false
|
||||||
#cas单点登录
|
#cas单点登录
|
||||||
cas:
|
cas:
|
||||||
prefixUrl: http://cas.example.org:8443/cas
|
prefixUrl: http://cas.example.org:8443/cas
|
||||||
|
|
|
@ -160,6 +160,13 @@ mybatis-plus:
|
||||||
minidao:
|
minidao:
|
||||||
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
||||||
jeecg:
|
jeecg:
|
||||||
|
# AI集成
|
||||||
|
ai-chat:
|
||||||
|
enabled: true
|
||||||
|
model: deepseek-chat
|
||||||
|
apiKey: ??
|
||||||
|
apiHost: https://api.deepseek.com
|
||||||
|
timeout: 60
|
||||||
# 平台上线安全配置
|
# 平台上线安全配置
|
||||||
firewall:
|
firewall:
|
||||||
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
||||||
|
@ -189,11 +196,6 @@ jeecg:
|
||||||
secretKey: ??
|
secretKey: ??
|
||||||
endpoint: oss-cn-beijing.aliyuncs.com
|
endpoint: oss-cn-beijing.aliyuncs.com
|
||||||
bucketName: jeecgdev
|
bucketName: jeecgdev
|
||||||
# ElasticSearch 6设置
|
|
||||||
elasticsearch:
|
|
||||||
cluster-name: jeecg-ES
|
|
||||||
cluster-nodes: 127.0.0.1:9200
|
|
||||||
check-enabled: false
|
|
||||||
# 在线预览文件服务器地址配置
|
# 在线预览文件服务器地址配置
|
||||||
file-view-domain: http://fileview.jeecg.com
|
file-view-domain: http://fileview.jeecg.com
|
||||||
# minio文件上传
|
# minio文件上传
|
||||||
|
@ -229,20 +231,11 @@ jeecg:
|
||||||
password:
|
password:
|
||||||
type: STANDALONE
|
type: STANDALONE
|
||||||
enabled: true
|
enabled: true
|
||||||
# ai-chat
|
# ElasticSearch 6设置
|
||||||
ai-chat:
|
elasticsearch:
|
||||||
# 是否开启;必须。
|
cluster-name: jeecg-ES
|
||||||
enabled: false
|
cluster-nodes: 127.0.0.1:9200
|
||||||
# openAi接口秘钥,填写自己的apiKey;必须。
|
check-enabled: false
|
||||||
apiKey: "????"
|
|
||||||
# openAi域名,有代理就填代理的域名。默认:openAI官方apiHost
|
|
||||||
apiHost: "https://api.openai.com"
|
|
||||||
# 超时时间单位:s。默认 60s
|
|
||||||
timeout: 60
|
|
||||||
# 本地代理地址
|
|
||||||
# proxy:
|
|
||||||
# host: "http://127.0.0.1"
|
|
||||||
# port: "7890"
|
|
||||||
#cas单点登录
|
#cas单点登录
|
||||||
cas:
|
cas:
|
||||||
prefixUrl: http://cas.example.org:8443/cas
|
prefixUrl: http://cas.example.org:8443/cas
|
||||||
|
|
|
@ -174,6 +174,13 @@ mybatis-plus:
|
||||||
minidao:
|
minidao:
|
||||||
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
||||||
jeecg:
|
jeecg:
|
||||||
|
# AI集成
|
||||||
|
ai-chat:
|
||||||
|
enabled: true
|
||||||
|
model: deepseek-chat
|
||||||
|
apiKey: ??
|
||||||
|
apiHost: https://api.deepseek.com
|
||||||
|
timeout: 60
|
||||||
# 平台上线安全配置
|
# 平台上线安全配置
|
||||||
firewall:
|
firewall:
|
||||||
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
||||||
|
@ -243,20 +250,6 @@ jeecg:
|
||||||
password:
|
password:
|
||||||
type: STANDALONE
|
type: STANDALONE
|
||||||
enabled: true
|
enabled: true
|
||||||
# ai-chat
|
|
||||||
ai-chat:
|
|
||||||
# 是否开启;必须。
|
|
||||||
enabled: false
|
|
||||||
# openAi接口秘钥,填写自己的apiKey;必须。
|
|
||||||
apiKey: "????"
|
|
||||||
# openAi域名,有代理就填代理的域名。默认:openAI官方apiHost
|
|
||||||
apiHost: "https://api.openai.com"
|
|
||||||
# 超时时间单位:s。默认 60s
|
|
||||||
timeout: 60
|
|
||||||
# 本地代理地址
|
|
||||||
# proxy:
|
|
||||||
# host: "http://127.0.0.1"
|
|
||||||
# port: "7890"
|
|
||||||
#cas单点登录
|
#cas单点登录
|
||||||
cas:
|
cas:
|
||||||
prefixUrl: http://cas.example.org:8443/cas
|
prefixUrl: http://cas.example.org:8443/cas
|
||||||
|
|
|
@ -199,6 +199,13 @@ mybatis-plus:
|
||||||
minidao:
|
minidao:
|
||||||
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
||||||
jeecg:
|
jeecg:
|
||||||
|
# AI集成
|
||||||
|
ai-chat:
|
||||||
|
enabled: true
|
||||||
|
model: deepseek-chat
|
||||||
|
apiKey: ??
|
||||||
|
apiHost: https://api.deepseek.com
|
||||||
|
timeout: 60
|
||||||
# 平台上线安全配置
|
# 平台上线安全配置
|
||||||
firewall:
|
firewall:
|
||||||
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
||||||
|
|
|
@ -199,6 +199,13 @@ mybatis-plus:
|
||||||
minidao:
|
minidao:
|
||||||
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
base-package: org.jeecg.modules.jmreport.*,org.jeecg.modules.drag.*
|
||||||
jeecg:
|
jeecg:
|
||||||
|
# AI集成
|
||||||
|
ai-chat:
|
||||||
|
enabled: true
|
||||||
|
model: deepseek-chat
|
||||||
|
apiKey: ??
|
||||||
|
apiHost: https://api.deepseek.com
|
||||||
|
timeout: 60
|
||||||
# 平台上线安全配置
|
# 平台上线安全配置
|
||||||
firewall:
|
firewall:
|
||||||
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
# 数据源安全 (开启后,Online报表和图表的数据源为必填)
|
||||||
|
@ -241,11 +248,6 @@ jeecg:
|
||||||
SMS_465391221:
|
SMS_465391221:
|
||||||
# 注册账号短信模板编码
|
# 注册账号短信模板编码
|
||||||
SMS_175430166:
|
SMS_175430166:
|
||||||
# ElasticSearch 设置
|
|
||||||
elasticsearch:
|
|
||||||
cluster-name: jeecg-ES
|
|
||||||
cluster-nodes: 192.168.1.188:9200
|
|
||||||
check-enabled: false
|
|
||||||
# 在线预览文件服务器地址配置
|
# 在线预览文件服务器地址配置
|
||||||
file-view-domain: http://127.0.0.1:8012
|
file-view-domain: http://127.0.0.1:8012
|
||||||
# minio文件上传
|
# minio文件上传
|
||||||
|
@ -286,7 +288,11 @@ jeecg:
|
||||||
app-id: ??
|
app-id: ??
|
||||||
api-key: ??
|
api-key: ??
|
||||||
secret-key: ??
|
secret-key: ??
|
||||||
|
# ElasticSearch 设置
|
||||||
|
elasticsearch:
|
||||||
|
cluster-name: jeecg-ES
|
||||||
|
cluster-nodes: 192.168.1.188:9200
|
||||||
|
check-enabled: false
|
||||||
#Mybatis输出sql日志
|
#Mybatis输出sql日志
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
|
|
|
@ -414,11 +414,11 @@
|
||||||
<artifactId>jimubi-spring-boot-starter</artifactId>
|
<artifactId>jimubi-spring-boot-starter</artifactId>
|
||||||
<version>${jimureport-spring-boot-starter.version}</version>
|
<version>${jimureport-spring-boot-starter.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- chatgpt -->
|
<!-- AI集成 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jeecgframework.boot</groupId>
|
<groupId>org.jeecgframework.boot</groupId>
|
||||||
<artifactId>jeecg-boot-starter-chatgpt</artifactId>
|
<artifactId>jeecg-boot-starter-chatgpt</artifactId>
|
||||||
<version>${jeecgboot.version}</version>
|
<version>3.7.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!--flyway 支持 mysql5.7+、MariaDB10.3.16-->
|
<!--flyway 支持 mysql5.7+、MariaDB10.3.16-->
|
||||||
<!--mysql5.6,需要把版本号改成5.2.1-->
|
<!--mysql5.6,需要把版本号改成5.2.1-->
|
||||||
|
|
Loading…
Reference in New Issue