feat(rag): 大文件 RAG 做深 —— 并发入库/图谱窗口化 + Bleve落盘 + file_id治理
几十万字文件从"广而浅"到准生产级: - 向量化串行→并发分批保序(embedAll);几十万字上千块快数倍 - 图谱整篇喂LLM(爆上下文只抽开头)→窗口化并发抽(extractGraphWindowed), 全覆盖;窗口/封顶/并发 env 可配;图谱可单配便宜模型(GRAPH_CHAT_*,未配回退主chat) - Bleve 内存索引(重启即丢、三路退两路)→落盘 scorch(env BLEVE_PATH,失败退内存兜底) - 下游键改稳定 file_id:Neo4j 关系打 file_id(实体仍 kb+name 共享); 新增 kb_delete 工具 + Engine.DeleteDoc 级联删 Milvus/Bleve/Neo4j - 单测:窗口化/去重/env可配/落盘持久/图谱模型回退 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -115,6 +115,17 @@ func (m *milvusStore) deleteDoc(ctx context.Context, kb, doc string, dim int) {
|
||||
}
|
||||
}
|
||||
|
||||
// deleteByFile 按 file_id 删某文档的全部向量块(级联删用,无需 dim)。集合不存在/未加载时静默忽略。
|
||||
func (m *milvusStore) deleteByFile(ctx context.Context, kb, fileID string) {
|
||||
if fileID == "" {
|
||||
return
|
||||
}
|
||||
expr := fmt.Sprintf("kb == %q && doc == %q", kb, fileID)
|
||||
if err := m.cli.Delete(ctx, collection, "", expr); err != nil {
|
||||
log.Printf("[rag] 按 file_id 删除向量失败(忽略): %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// insert 写入若干 (kb, doc, text, vector)。
|
||||
// 若集合在运行期被丢失(如 Milvus 重启)→ 清缓存、重建集合后重试一次,避免必须重启进程才能恢复。
|
||||
func (m *milvusStore) insert(ctx context.Context, kb, doc string, texts []string, vecs [][]float32) error {
|
||||
|
||||
Reference in New Issue
Block a user