package service import ( "context" "rag/dao" "rag/model/dto" "github.com/gogf/gf/v2/util/gconv" ) var Dataset = new(datasetService) type datasetService struct{} // Create 创建数据集 func (s *datasetService) Create(ctx context.Context, req *dto.CreateDatasetReq) (res *dto.CreateDatasetRes, err error) { id, err := dao.Dataset.Insert(ctx, req) if err != nil { return } return &dto.CreateDatasetRes{Id: id}, nil } // Update 更新数据集 func (s *datasetService) Update(ctx context.Context, req *dto.UpdateDatasetReq) (err error) { _, err = dao.Dataset.Update(ctx, req) return } // Delete 删除数据集 func (s *datasetService) Delete(ctx context.Context, req *dto.DeleteDatasetReq) (err error) { _, err = dao.Dataset.Delete(ctx, req) return } // List 数据集列表 func (s *datasetService) List(ctx context.Context, req *dto.ListDatasetReq) (res *dto.ListDatasetRes, err error) { list, total, err := dao.Dataset.List(ctx, req) if err != nil { return } res = &dto.ListDatasetRes{ Total: total, } err = gconv.Struct(list, &res.List) return } //// Search 搜索(示例,实际需要调用向量库) //func (s *datasetService) Search(ctx context.Context, req *dto.SearchReq) (res *dto.SearchRes, err error) { // // 1. 获取数据集信息 // kb, err := dao.Dataset.GetByID(ctx, req) // if err != nil { // return nil, err // } // // // 2. 获取文件块 // chunks, err := dao.Chunk.FindChunksByKBIDWithLimit(ctx, req.KBID, 0, req.TopK) // if err != nil { // return nil, err // } // // // 3. TODO: 使用向量检索(需要集成向量库) // // 暂时使用简单的关键词匹配 // results := make([]dto.SearchResult, 0) // for _, chunk := range chunks { // results = append(results, dto.SearchResult{ // Content: chunk.Content, // Score: 0.8, // TODO: 计算实际向量相似度 // DocumentID: chunk.DocumentID, // ChunkIndex: chunk.Index, // }) // } // // g.Log().Infof(ctx, "数据集[%s]搜索完成,查询:%s,结果数:%d", kb.Name, req.Query, len(results)) // // return &dto.SearchRes{Results: results}, nil //} // //// formatChunks 格式化文件块为上下文 //func (s *datasetService) formatChunks(chunks []*entity.DocumentChunk) string { // var sb strings.Builder // for i, chunk := range chunks { // sb.WriteString(fmt.Sprintf("[%d] %s\n\n", i+1, chunk.Content)) // } // return sb.String() //}