MCPcopy Create free account
hub / github.com/53AI/53AIHub / saveKnowledgeChunkWithTransaction

Function saveKnowledgeChunkWithTransaction

api/controller/knowledge_management.go:107–232  ·  view source on GitHub ↗

saveKnowledgeChunkWithTransaction 使用事务保存知识点

(eid int64, userID int64, req *SaveKnowledgeChunkRequest)

Source from the content-addressed store, hash-verified

105
106// saveKnowledgeChunkWithTransaction 使用事务保存知识点
107func saveKnowledgeChunkWithTransaction(eid int64, userID int64, req *SaveKnowledgeChunkRequest) (*SaveKnowledgeChunkResult, error) {
108 var result *SaveKnowledgeChunkResult
109 var isUpdate bool = req.ChunkID != nil
110 var fileID int64
111
112 // 确定是否需要自动分检索块
113 autoSplitRetrieval := true // 默认值
114 if req.AutoSplitRetrieval != nil {
115 autoSplitRetrieval = *req.AutoSplitRetrieval
116 } else {
117 // 新增默认分,更新默认不分
118 autoSplitRetrieval = !isUpdate
119 }
120
121 err := model.DB.Transaction(func(tx *gorm.DB) error {
122 var knowledgeChunk *model.DocumentChunk
123
124 if isUpdate {
125 // 更新模式:获取现有分块信息
126 existingChunk, err := model.GetDocumentChunkByID(eid, *req.ChunkID)
127 if err != nil {
128 return fmt.Errorf("获取现有分块失败: %v", err)
129 }
130
131 fileID = existingChunk.FileID
132
133 existingChunk.Content = req.Content
134 existingChunk.IsManualEdited = true
135 if autoSplitRetrieval {
136 existingChunk.EmbeddingStatus = model.DocumentChunkEmbeddingStatusPending
137 existingChunk.VectorID = ""
138 }
139
140 tokenizerService := rag.NewTokenizerService()
141 tokenCount, err := tokenizerService.CountTokens(req.Content)
142 if err == nil {
143 existingChunk.TokenCount = tokenCount
144 }
145
146 if err := tx.Model(existingChunk).Updates(existingChunk).Error; err != nil {
147 return fmt.Errorf("更新分块失败: %v", err)
148 }
149
150 knowledgeChunk = existingChunk
151 } else {
152 fileID = req.FileID
153
154 tokenizerService := rag.NewTokenizerService()
155 tokenCount, err := tokenizerService.CountTokens(req.Content)
156 if err != nil {
157 tokenCount = 0
158 }
159
160 newChunk := &model.DocumentChunk{
161 Eid: eid,
162 FileID: fileID,
163 LibraryID: req.LibraryID,
164 Content: req.Content,

Callers 1

SaveKnowledgeChunkFunction · 0.85

Calls 4

CountTokensMethod · 0.95
ErrorfMethod · 0.80
CreateMethod · 0.45

Tested by

no test coverage detected