2025-04-08 15:58:29 +08:00
|
|
|
package service
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"StuAcaWorksAI/dao"
|
|
|
|
|
"StuAcaWorksAI/proto"
|
2025-04-09 14:53:16 +08:00
|
|
|
"StuAcaWorksAI/worker"
|
2025-04-08 15:58:29 +08:00
|
|
|
"errors"
|
|
|
|
|
"github.com/google/uuid"
|
2025-04-09 14:53:16 +08:00
|
|
|
"time"
|
2025-04-08 15:58:29 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func CreateKnowledgeBase(userID int, req proto.KnowledgeBaseReq) (dao.KnowledgeBase, error) {
|
|
|
|
|
//生成uuid
|
|
|
|
|
uuid := uuid.New().String()
|
|
|
|
|
sessionName := "知识库会话:" + req.Name
|
|
|
|
|
//创建会话
|
|
|
|
|
err, sessionID := CreateSession(userID, proto.SessionTypeKnowledgeBase, sessionName)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return dao.KnowledgeBase{}, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建知识库
|
|
|
|
|
base := dao.KnowledgeBase{AuthID: uint(userID), Name: req.Name, Description: req.Description, UUID: uuid, FileIDs: req.FileIDS, SessionID: sessionID}
|
|
|
|
|
knowledgeBase, err := dao.CreateKnowledgeBase(base)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return dao.KnowledgeBase{}, err
|
|
|
|
|
}
|
|
|
|
|
// 创建向量数据库,后面完成
|
|
|
|
|
|
|
|
|
|
return knowledgeBase, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新知识库
|
|
|
|
|
func UpdateKnowledgeBase(userID int, req proto.KnowledgeBaseReq) (dao.KnowledgeBase, error) {
|
|
|
|
|
//查找知识库
|
|
|
|
|
knowledgeBase, err := dao.GetKnowledgeBaseByID(req.ID)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return dao.KnowledgeBase{}, err
|
|
|
|
|
}
|
|
|
|
|
if knowledgeBase.AuthID != uint(userID) {
|
|
|
|
|
return dao.KnowledgeBase{}, errors.New("not authorized to update this knowledge base")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
knowledgeBase.Name = req.Name
|
|
|
|
|
knowledgeBase.Description = req.Description
|
|
|
|
|
knowledgeBase.FileIDs = req.FileIDS
|
|
|
|
|
|
|
|
|
|
return dao.UpdateKnowledgeBase(knowledgeBase)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取知识库列表
|
|
|
|
|
func GetKnowledgeBaseList(userID int) ([]dao.KnowledgeBase, error) {
|
|
|
|
|
knowledgeBases, err := dao.GetKnowledgeBaseList(userID)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
return knowledgeBases, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 删除知识库
|
|
|
|
|
func DeleteKnowledgeBase(userID int, req proto.KnowledgeBaseReq) error {
|
|
|
|
|
//查找知识库
|
|
|
|
|
knowledgeBase, err := dao.GetKnowledgeBaseByID(req.ID)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
if knowledgeBase.AuthID != uint(userID) {
|
|
|
|
|
return errors.New("not authorized to delete this knowledge base")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return dao.DeleteKnowledgeBase(knowledgeBase.ID)
|
|
|
|
|
}
|
2025-04-09 14:53:16 +08:00
|
|
|
|
|
|
|
|
// 将配置文件中支持的知识库处理服务器添加到集合
|
|
|
|
|
func AddKnowledgeBaseServer() {
|
|
|
|
|
set := "kbase_server_id_set"
|
|
|
|
|
var serverIDs []string
|
|
|
|
|
for _, server := range proto.Config.KBASE_SERVER {
|
|
|
|
|
serverIDs = append(serverIDs, server.ServerID)
|
|
|
|
|
}
|
|
|
|
|
worker.SetRedisSet(set, serverIDs, time.Hour)
|
|
|
|
|
}
|