mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-04-19 06:43:39 +00:00
Compare commits
13 Commits
54e7999fe3
...
827ac48826
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
827ac48826 | ||
|
|
f906645708 | ||
|
|
c17e16dd0f | ||
|
|
837236f1cc | ||
|
|
60793b957a | ||
|
|
fa4dc87e76 | ||
|
|
4ac63c3268 | ||
|
|
c22b9fdb9c | ||
|
|
ff0a3d1016 | ||
|
|
67303cf5be | ||
|
|
5bd95b496a | ||
|
|
8fcaa7c90c | ||
|
|
27398c1000 |
@@ -240,9 +240,9 @@ springdoc:
|
|||||||
# persistAuthorization: true
|
# persistAuthorization: true
|
||||||
info:
|
info:
|
||||||
# 标题
|
# 标题
|
||||||
title: '标题:RuoYi-Vue-Plus多租户管理系统_接口文档'
|
title: '标题:ruoyi-ai 接口文档'
|
||||||
# 描述
|
# 描述
|
||||||
description: ' 用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...'
|
description: ''
|
||||||
# 版本
|
# 版本
|
||||||
version: '版本号: ${ruoyi.version}'
|
version: '版本号: ${ruoyi.version}'
|
||||||
# 作者信息
|
# 作者信息
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public class OssClient {
|
|||||||
}
|
}
|
||||||
this.client = build.build();
|
this.client = build.build();
|
||||||
|
|
||||||
createBucket();
|
// createBucket();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
if (e instanceof OssException) {
|
if (e instanceof OssException) {
|
||||||
throw e;
|
throw e;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class ChatModelServiceImpl implements IChatModelService {
|
|||||||
* 查询聊天模型
|
* 查询聊天模型
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ChatModelVo queryById(Long id){
|
public ChatModelVo queryById(Long id) {
|
||||||
return baseMapper.selectVoById(id);
|
return baseMapper.selectVoById(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ public class ChatModelServiceImpl implements IChatModelService {
|
|||||||
/**
|
/**
|
||||||
* 保存前的数据校验
|
* 保存前的数据校验
|
||||||
*/
|
*/
|
||||||
private void validEntityBeforeSave(ChatModel entity){
|
private void validEntityBeforeSave(ChatModel entity) {
|
||||||
// 判断是否包含*号
|
// 判断是否包含*号
|
||||||
if (entity.getApiKey().contains("*")) {
|
if (entity.getApiKey().contains("*")) {
|
||||||
// 重新设置key信息
|
// 重新设置key信息
|
||||||
@@ -116,7 +116,7 @@ public class ChatModelServiceImpl implements IChatModelService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||||
if(isValid){
|
if (isValid) {
|
||||||
//TODO 做一些业务上的校验,判断是否需要校验
|
//TODO 做一些业务上的校验,判断是否需要校验
|
||||||
}
|
}
|
||||||
return baseMapper.deleteBatchIds(ids) > 0;
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
@@ -129,6 +129,7 @@ public class ChatModelServiceImpl implements IChatModelService {
|
|||||||
public ChatModelVo selectModelByName(String modelName) {
|
public ChatModelVo selectModelByName(String modelName) {
|
||||||
return baseMapper.selectVoOne(Wrappers.<ChatModel>lambdaQuery().eq(ChatModel::getModelName, modelName));
|
return baseMapper.selectVoOne(Wrappers.<ChatModel>lambdaQuery().eq(ChatModel::getModelName, modelName));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过模型分类获取模型信息
|
* 通过模型分类获取模型信息
|
||||||
*/
|
*/
|
||||||
@@ -145,8 +146,8 @@ public class ChatModelServiceImpl implements IChatModelService {
|
|||||||
return baseMapper.selectVoOne(
|
return baseMapper.selectVoOne(
|
||||||
Wrappers.<ChatModel>lambdaQuery()
|
Wrappers.<ChatModel>lambdaQuery()
|
||||||
.eq(ChatModel::getCategory, category)
|
.eq(ChatModel::getCategory, category)
|
||||||
.orderByDesc(ChatModel::getPriority)
|
.orderByDesc(ChatModel::getPriority),
|
||||||
.last("LIMIT 1")
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,8 +160,8 @@ public class ChatModelServiceImpl implements IChatModelService {
|
|||||||
Wrappers.<ChatModel>lambdaQuery()
|
Wrappers.<ChatModel>lambdaQuery()
|
||||||
.eq(ChatModel::getCategory, category)
|
.eq(ChatModel::getCategory, category)
|
||||||
.lt(ChatModel::getPriority, currentPriority)
|
.lt(ChatModel::getPriority, currentPriority)
|
||||||
.orderByDesc(ChatModel::getPriority)
|
.orderByDesc(ChatModel::getPriority),
|
||||||
.last("LIMIT 1")
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ public class ChatTokenServiceImpl implements IChatTokenService {
|
|||||||
return baseMapper.selectOne(
|
return baseMapper.selectOne(
|
||||||
new LambdaQueryWrapper<ChatUsageToken>()
|
new LambdaQueryWrapper<ChatUsageToken>()
|
||||||
.eq(ChatUsageToken::getUserId, userId)
|
.eq(ChatUsageToken::getUserId, userId)
|
||||||
.eq(ChatUsageToken::getModelName, modelName)
|
.eq(ChatUsageToken::getModelName, modelName),
|
||||||
.last("limit 1")
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ public class ChatTokenServiceImpl implements IChatTokenService {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void resetToken(Long userId,String modelName) {
|
public void resetToken(Long userId, String modelName) {
|
||||||
ChatUsageToken chatToken = queryByUserId(userId, modelName);
|
ChatUsageToken chatToken = queryByUserId(userId, modelName);
|
||||||
chatToken.setToken(0);
|
chatToken.setToken(0);
|
||||||
baseMapper.updateById(chatToken);
|
baseMapper.updateById(chatToken);
|
||||||
@@ -47,9 +47,9 @@ public class ChatTokenServiceImpl implements IChatTokenService {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void editToken(ChatUsageToken chatToken) {
|
public void editToken(ChatUsageToken chatToken) {
|
||||||
if(chatToken.getId() == null){
|
if (chatToken.getId() == null) {
|
||||||
baseMapper.insert(chatToken);
|
baseMapper.insert(chatToken);
|
||||||
}else {
|
} else {
|
||||||
baseMapper.updateById(chatToken);
|
baseMapper.updateById(chatToken);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,7 +115,6 @@ public class PromptTemplateServiceImpl implements IPromptTemplateService {
|
|||||||
LambdaQueryWrapper<PromptTemplate> queryWrapper = Wrappers.lambdaQuery(PromptTemplate.class);
|
LambdaQueryWrapper<PromptTemplate> queryWrapper = Wrappers.lambdaQuery(PromptTemplate.class);
|
||||||
queryWrapper.eq(PromptTemplate::getCategory, category);
|
queryWrapper.eq(PromptTemplate::getCategory, category);
|
||||||
queryWrapper.orderByDesc(PromptTemplate::getUpdateTime);
|
queryWrapper.orderByDesc(PromptTemplate::getUpdateTime);
|
||||||
queryWrapper.last("limit 1");
|
return baseMapper.selectVoOne(queryWrapper, false);
|
||||||
return baseMapper.selectVoOne(queryWrapper);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@ package org.ruoyi.mapper;
|
|||||||
|
|
||||||
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.ruoyi.core.mapper.BaseMapperPlus;
|
import org.ruoyi.core.mapper.BaseMapperPlus;
|
||||||
import org.ruoyi.domain.KnowledgeInfo;
|
import org.ruoyi.domain.KnowledgeInfo;
|
||||||
import org.ruoyi.domain.vo.KnowledgeInfoVo;
|
import org.ruoyi.domain.vo.KnowledgeInfoVo;
|
||||||
@@ -15,4 +16,10 @@ import org.ruoyi.domain.vo.KnowledgeInfoVo;
|
|||||||
@Mapper
|
@Mapper
|
||||||
public interface KnowledgeInfoMapper extends BaseMapperPlus<KnowledgeInfo, KnowledgeInfoVo> {
|
public interface KnowledgeInfoMapper extends BaseMapperPlus<KnowledgeInfo, KnowledgeInfoVo> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据kid查询知识库
|
||||||
|
* @param kid 知识库id
|
||||||
|
* @return KnowledgeInfo
|
||||||
|
*/
|
||||||
|
KnowledgeInfo selectByKid(@Param("kid") String kid);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public interface IKnowledgeInfoService {
|
|||||||
/**
|
/**
|
||||||
* 删除知识库
|
* 删除知识库
|
||||||
*/
|
*/
|
||||||
void removeKnowledge(String id);
|
void removeKnowledge(String kid);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传附件
|
* 上传附件
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="org.ruoyi.mapper.KnowledgeInfoMapper">
|
||||||
|
<select id="selectByKid" resultType="org.ruoyi.domain.KnowledgeInfo">
|
||||||
|
SELECT * FROM knowledge_info WHERE kid = #{kid}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@@ -102,9 +102,9 @@ public class KnowledgeController extends BaseController {
|
|||||||
/**
|
/**
|
||||||
* 删除知识库
|
* 删除知识库
|
||||||
*/
|
*/
|
||||||
@PostMapping("/remove/{id}")
|
@PostMapping("/remove/{kid}")
|
||||||
public R<String> remove(@PathVariable String id) {
|
public R<String> remove(@PathVariable String kid) {
|
||||||
knowledgeInfoService.removeKnowledge(id);
|
knowledgeInfoService.removeKnowledge(kid);
|
||||||
return R.ok("删除知识库成功!");
|
return R.ok("删除知识库成功!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ public class ImageServiceImpl implements IChatService {
|
|||||||
@Override
|
@Override
|
||||||
public SseEmitter chat(ChatRequest chatRequest, SseEmitter emitter) {
|
public SseEmitter chat(ChatRequest chatRequest, SseEmitter emitter) {
|
||||||
// 从数据库获取 image 类型的模型配置
|
// 从数据库获取 image 类型的模型配置
|
||||||
ChatModelVo chatModelVo = chatModelService.selectModelByCategory(ChatModeType.IMAGE.getCode());
|
ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel());
|
||||||
if (chatModelVo == null) {
|
if (chatModelVo == null) {
|
||||||
log.error("未找到 image 类型的模型配置");
|
log.error("未找到 image 类型的模型配置");
|
||||||
emitter.completeWithError(new IllegalStateException("未找到 image 类型的模型配置"));
|
emitter.completeWithError(new IllegalStateException("未找到 image 类型的模型配置"));
|
||||||
|
|||||||
@@ -226,11 +226,12 @@ public class KnowledgeInfoServiceImpl implements IKnowledgeInfoService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void removeKnowledge(String id) {
|
public void removeKnowledge(String kid) {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
KnowledgeInfo knowledgeInfo = baseMapper.selectById(id);
|
KnowledgeInfo knowledgeInfo = baseMapper.selectByKid(kid);
|
||||||
|
|
||||||
check(knowledgeInfo);
|
check(knowledgeInfo);
|
||||||
map.put("kid", knowledgeInfo.getId());
|
map.put("kid", knowledgeInfo.getKid());
|
||||||
// 删除向量数据
|
// 删除向量数据
|
||||||
vectorStoreService.removeById(String.valueOf(knowledgeInfo.getId()), knowledgeInfo.getVectorModelName());
|
vectorStoreService.removeById(String.valueOf(knowledgeInfo.getId()), knowledgeInfo.getVectorModelName());
|
||||||
// 删除附件和知识片段
|
// 删除附件和知识片段
|
||||||
|
|||||||
@@ -60,6 +60,23 @@ services:
|
|||||||
networks:
|
networks:
|
||||||
- ruoyi-net
|
- ruoyi-net
|
||||||
|
|
||||||
|
minio:
|
||||||
|
image: minio/minio
|
||||||
|
container_name: ruoyi-ai-minio
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
- "9090:9090"
|
||||||
|
environment:
|
||||||
|
- MINIO_ACCESS_KEY=ruoyi
|
||||||
|
- MINIO_SECRET_KEY=ruoyi123
|
||||||
|
volumes:
|
||||||
|
- ./data/minio:/data
|
||||||
|
- ./data/minio-config:/root/.minio
|
||||||
|
command: server /data --console-address ":9090"
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- ruoyi-net
|
||||||
|
|
||||||
ruoyi-backend:
|
ruoyi-backend:
|
||||||
image: ruoyi-ai-backend:v2.0.5
|
image: ruoyi-ai-backend:v2.0.5
|
||||||
container_name: ruoyi-ai-backend
|
container_name: ruoyi-ai-backend
|
||||||
|
|||||||
28
script/docker/minio/docker-compose.yml
Normal file
28
script/docker/minio/docker-compose.yml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
---
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
minio:
|
||||||
|
image: minio/minio
|
||||||
|
container_name: minio
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
- "9090:9090"
|
||||||
|
environment:
|
||||||
|
- MINIO_ACCESS_KEY=ruoyi
|
||||||
|
- MINIO_SECRET_KEY=ruoyi123
|
||||||
|
volumes:
|
||||||
|
- minio_data:/data
|
||||||
|
- minio_config:/root/.minio
|
||||||
|
command: server /data --console-address ":9090"
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- minio-net
|
||||||
|
|
||||||
|
networks:
|
||||||
|
minio-net:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
minio_data:
|
||||||
|
minio_config:
|
||||||
8
script/sql/update/fix-upload-bucket.sql
Normal file
8
script/sql/update/fix-upload-bucket.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
-- 默认开启本地minio
|
||||||
|
UPDATE `ruoyi-ai`.sys_oss_config t
|
||||||
|
SET t.status = '1'
|
||||||
|
WHERE t.oss_config_id = 4;
|
||||||
|
|
||||||
|
UPDATE `ruoyi-ai`.sys_oss_config t
|
||||||
|
SET t.status = '0'
|
||||||
|
WHERE t.oss_config_id = 1;
|
||||||
Reference in New Issue
Block a user