diff --git a/internal/ai/rag/index.go b/internal/ai/rag/index.go index 69e6c99..bd3a0ba 100644 --- a/internal/ai/rag/index.go +++ b/internal/ai/rag/index.go @@ -151,7 +151,8 @@ func (s *index) RemoveFAQIndex(ctx context.Context, faqID int64) error { return nil } -func (s *index) RemoveKnowledgeBaseIndexByChunkModels(ctx context.Context, knowledgeBaseID int64, chunks []models.KnowledgeChunk) error { +func (s *index) RemoveKnowledgeBaseIndex(ctx context.Context, knowledgeBaseID int64) error { + chunks := repositories.KnowledgeChunkRepository.FindByKnowledgeBaseID(sqls.DB(), knowledgeBaseID) if len(chunks) == 0 { return nil } diff --git a/internal/repositories/knowledge_chunk_repository.go b/internal/repositories/knowledge_chunk_repository.go index 566a527..0304e71 100644 --- a/internal/repositories/knowledge_chunk_repository.go +++ b/internal/repositories/knowledge_chunk_repository.go @@ -118,6 +118,11 @@ func (r *knowledgeChunkRepository) FindByFaqID(db *gorm.DB, faqID int64) (list [ return } +func (r *knowledgeChunkRepository) FindByKnowledgeBaseID(db *gorm.DB, knowledgeBaseID int64) (list []models.KnowledgeChunk) { + db.Where("knowledge_base_id = ?", knowledgeBaseID).Order("id asc").Find(&list) + return +} + func (r *knowledgeChunkRepository) FindByVectorIDs(db *gorm.DB, vectorIDs []string) (list []models.KnowledgeChunk) { if len(vectorIDs) == 0 { return nil diff --git a/internal/services/knowledge_base_service.go b/internal/services/knowledge_base_service.go index 90c6147..b2d4cd4 100644 --- a/internal/services/knowledge_base_service.go +++ b/internal/services/knowledge_base_service.go @@ -137,11 +137,11 @@ func (s *knowledgeBaseService) DeleteKnowledgeBase(id int64) error { return errorsx.Forbidden(fmt.Sprintf("知识库已被 %d 个 AI Agent 引用,请先解除绑定", len(referencingAgents))) } - chunks := repositories.KnowledgeChunkRepository.Find(sqls.DB(), sqls.NewCnd().Eq("knowledge_base_id", id)) + if err := rag.Index.RemoveKnowledgeBaseIndex(context.Background(), id); err != nil { + return err + } + if err := sqls.WithTransaction(func(ctx *sqls.TxContext) error { - if err := repositories.KnowledgeChunkRepository.DeleteByKnowledgeBaseID(ctx.Tx, id); err != nil { - return err - } if err := repositories.KnowledgeDocumentRepository.DeleteByKnowledgeBaseID(ctx.Tx, id); err != nil { return err } @@ -153,7 +153,7 @@ func (s *knowledgeBaseService) DeleteKnowledgeBase(id int64) error { return err } - return rag.Index.RemoveKnowledgeBaseIndexByChunkModels(context.Background(), id, chunks) + return nil } func (s *knowledgeBaseService) UpdateSort(ids []int64) error {