知识图谱 GraphRAG
Molore的知识图谱由上游抽取引擎 graphifyy(钉版 graphifyy==0.9.16,backend/requirements.txt)加一层宿主治理构成:引擎负责把语料逐篇提取为概念节点与关系边,宿主层(backend/app/services/graphify_service.py)负责语料导出、增量建图、覆盖率守卫、版本快照、置信度隔离、证据血缘与自进化调度。它要解决的问题是:让 LLM 批量抽取这种「可能半路失败、可能缩图、可能重复实体」的长任务,在个人知识库场景做到可断点续建、可回滚、可审计、低成本。
核心概念
| 概念 | 说明 |
|---|---|
| 语义图 | graphifyy 抽取的概念节点 + 13 谓词关系边,需构建,消耗模型调用 |
| 物理图(相似度图) | 向量相似度成边 + UMAP 2D 投影,零 LLM 实时生成,不要求构建 |
| 谓词本体 | 13 个收敛谓词(is_a / part_of / contains / causes / supports / …),事实源 app/services/graph_predicates.py |
| 置信度 | 边分 EXTRACTED(提取)/ INFERRED(推断)/ AMBIGUOUS(存疑),权重 0.9 / 0.6 / 0.35 |
| 隔离区 | AMBIGUOUS 边默认不进主图与对话扩展,读侧过滤零 schema 变更 |
| 增量建图 | 带入旧 manifest + graph.json,按内容 hash 判变更,只抽变化内容 |
| 覆盖率守卫 | 新图节点数不及旧图一半则不 swap,防余额耗尽类事故换出残图 |
| 版本快照 | 每次 swap 前自动留底,snapshots/ 保留最近 5 份,可一键回滚 |
语料与谓词本体
- 语料 = note / clip / knowledge / document 四类内容(
VALID_TYPES,graphify_service.py:100),门槛与向量前拦门同口径:active + 抽取成功 + 文本 ≥200 字(图片文档 ≥20 字)。仓库模式「仅入库检索」(index_only)的内容不进图谱语料。 - 13 谓词本体层(
graph_predicates.py:25):is_a / part_of / causes / supports / contradicts / depends_on / derives_from / applies_to / extends / contains / compares_with / references / related_to(兜底)。旧词经方向安全的映射表归一。 - 传递闭包:
TRANSITIVE_PREDICATES = {is_a, part_of, contains}(传递保真才进此表,causes/supports 永不进)。图谱扩展沿传递谓词 BFS 最多 2 跳,权重每跳 ×0.7 衰减,多跳边标注跳数(endpoints/llm/graph_expansion.py:96-171)。 - 图谱扩展只在关系意图下开火:
_relation_intent规则识别前移,非关系意图跳过扩展,消掉 junk 邻居注入面;扩展非空时渲染「图谱推理路径」区块,via 带关系语义 + evidence 证据句。
增量建图与产物治理
| 阶段 | 关键机制 | 代码位置 |
|---|---|---|
| 语料导出 | 四类内容写 graphify_data/{space}/corpus/*.md | graphify_service.py |
| 增量带入 | 旧产物的 manifest.json + graph.json 复制进构建目录,上游按内容 hash 判变更;删除源走 build_merge(prune_sources) 剪枝 | graphify_service.py:757-783 |
| 模型戳记准入 | swap 后写 _meta.json 记录构建模型;模型变更或缺戳记退全量重建 | graphify_service.py:766,911 |
| 零变更早退 | 内容 hash 全未变时宿主层直接早退,不起构建 | graphify_service.py(宿主层) |
| 覆盖率守卫 | 新图节点不及旧图一半不 swap;增量 + 有删除源的合法缩图放行留痕 | graphify_service.py:860-885 |
| 快照留底 | swap 前自动快照旧图,{space}/snapshots/ 留 5 份 | snapshot_graph,graphify_service.py:986 |
| 回滚 | 产物恢复 + 三张派生表幂等重建(无 LLM 纯聚合) | rollback_snapshot,graphify_service.py:1045 |
两条硬纪律:快照永远放 corpus/ 之外(备份进语料目录会被当语料扫出垃圾节点);构建是后台任务,旧图在构建期间可读,进程重启后断点续建、语义缓存命中不重复扣费。
置信度隔离区与证据血缘
- 隔离区:AMBIGUOUS 边默认不进主图、不进对话扩展;
include_quarantined=1时全量返回并打标,图谱页 2D 有「显示低置信边」开关;质量指标含quarantined_edges(graphify_service.py:1171-1183)。读侧过滤,产物不动。 - 边证据血缘:
graph_edges带evidence_doc_id/evidence_chunk_ids,由边的source_file解析回填;推理路径可附证据句(graphify_service.py:1213-1270)。 - 实体消歧审计:
entity_dedup_audit(app/services/graph_audit_service.py:44)生成三段诊断报表(同名漏网组 / 高相似未合并候选对 / 汇总),只读诊断不动数据,报告页折叠区块展示,展开才拉取。
文档入图与双图渲染
- 文档入图:
document进VALID_TYPES(09-17 P2-4),文档作为节点入语义图并可回溯原文;图片文档富化image_url,节点详情显示缩略图。音频不做(无音频资产)。 - 物理图:向量相似度成边,UMAP 2D 投影,全程零 LLM。UMAP/numba 计算子进程化(
app/services/physical_graph_umap.py,python -m调用),内存峰值随子进程退出释放——云端主进程基线从 780MB 降到 413MB,产物有水位失效 + 落盘缓存,重算是少数。 - 前端:2D 用 Canvas 自绘(命令录制与光栅合成两段性能账,贵的东西烘位图),3D 用 React Three Fiber 自研星系(
GalaxyScene.tsx)。知识网络页四个视图页签:3D相似 / 3D语义 / 2D相似 / 2D语义(GraphGalaxyPage.tsx:267-270)。 - 图谱模块页签:知识网络 / 智能查询 / 路径探索 / 图谱报告 / 跨脑桥梁 / 标签图谱 / 百科(
GraphLayout.tsx;简洁版无「智能查询」)。
自进化防抖
- 开启自进化后,写入不再立即重建——全量重建等于全语料逐篇 LLM 提取。防抖口径:停笔静默 300 秒(
_EVOLVE_QUIET_SECONDS)且距上次成功构建 ≥1800 秒(_EVOLVE_MIN_INTERVAL)才真正起建,期间写入只置 dirty 并重排计时器(graphify_service.py:1564-1568)。 - 查库失败不清 dirty 标记,排定的重建不得静默消失;构建期间有新内容写入,本次完成后补建一轮。
- 构建模型走推理档黑名单(
REASONING_MODEL_PATTERNS,见模型管理与双通道计费);平台模型构建前预估费用,余额不足开工前直接提示。
下一步
- 模型管理与双通道计费:构建模型通道、推理档黑名单、估价与扣费
- 检索引擎与向量存储:关系意图分轨如何调用图谱扩展
- LLM Wiki:百科条目作为 wiki 节点进图谱
- 知识图谱(用户指南):构建、智能查询、路径探索的操作说明