开发指南:图建模、GraphRAG 与 GNN 工程实践
前置阅读
请先完成 快速开始 中的小图与两跳查询练习。
本章定位
本指南面向要把图工程落到可演进代码与数据流水线的开发者。覆盖:建模策略、导入与约束、查询与索引、知识图谱流水线、GraphRAG 架构、GNN 训练与服务化、API 设计。仍以知识教学为主,不讲授子站本身的部署运维。
1. 建模策略:三种中心与混合
1.1 实体为中心
把业务对象直接映射为节点:User、Product、Company。优点是直观;风险是节点爆炸与关系语义过载(所有事实都挂在实体之间的边上)。
适用:关系类型稳定、属性变化不频繁、查询以邻域与路径为主。
1.2 事件为中心
把「下单」「登录」「转账」「发表」建模为事件节点,实体通过参与边连接。
适用:强时序、多参与方、需要按时间窗分析的风控与审计。
1.3 文档—图混合
原文在文档库/对象存储,图中只存实体、关系与指向原文的 source_uri。GraphRAG 场景几乎总是这种混合。
1.4 建模 检查表
| 问题 | 若回答「是」 | 建议 |
|---|---|---|
| 该概念会被单独查询/聚合吗? | 是 | 倾向节点 |
| 只是描述性字段吗? | 是 | 倾向属性 |
| 关系有时间、地点、角色吗? | 是 | 事件节点或边属性 |
| 会出现百万级邻居吗? | 是 | 边分片/类型拆分/预聚合 |
| 需要跨系统互操作本体吗? | 是 | 考虑 RDF/OWL 或双模 |
2. Schema、约束与演化
属性图虽灵活,生产系统仍需要显式契约:
CREATE CONSTRAINT person_id IF NOT EXISTS
FOR (p:Person) REQUIRE p.id IS UNIQUE;
CREATE INDEX company_name IF NOT EXISTS
FOR (c:Company) ON (c.name);
演化原则:
- 加法优先:新边类型、新可选属性优于破坏性改名。
- 版本化边:重大语义变更用新类型(
WORKS_AT_V2)双写,再迁移。 - 废弃流程:标记 → 停止写入 → 读切换 → 删除旧边。
- 契约测试:用一组黄金查询做 CI,Schema 变更必须跑通。
RDF 侧则维护 SHACL/OWL 约束,并在入库前做验证。
3. 导入流水线
3.1 小批量 vs 大批量
| 规模 | 手段 | 注意 |
|---|---|---|
| < 10 万边 | LOAD CSV / 驱动批处理 | 事务大小适中 |
| 百万~亿 | 离线 bulk import | 先停查询或用专用窗口 |
| 持续增量 | CDC → 消息队列 → upsert | 幂等键与乱序处理 |
幂等是生命线:用业务主键 MERGE,避免重复跑导入产生双倍边。
3.2 质量门禁(导入后必跑)
- 计数:各标签节点数、各类型边数 vs 源系统。
- 孤儿:有边引用但不存在的端点(应为零)。
- 度分布:P50/P95/P99 与 Top20。
- 黄金查询:3~5 条业务路径,结果集哈希对比。
- 新鲜度:最新事件时间戳与源系统延迟。
4. 查询工程
4.1 模式编写准则
- 始终带标签与关系类型。
- 从选择性高的端点出发(唯一 id 优于模糊名字)。
- 变长路径设上限,并优先
shortestPath等专用算子。 - 过滤条件下推:能在扩展前过滤就不要在末尾 WHERE 海量中间结果。
4.2 参数化与安全
// 正确:参数
MATCH (p:Person {id: $id})-[:KNOWS]->(f)
RETURN f.id;
// 错误:字符串拼接用户输入 → 注入风险
图查询注入与 SQL 注入同级危险:可导致全图导出或恶意删除。
4.3 分页与结果控制
深分页 SKIP 100000 昂贵。优先键集分页(按 id/时间游标)或限制路径枚举数量。对可视化 API,默认硬限制返回节点/边上限。
5. 知识图谱工程流水线
5.1 抽取
- 结构化:R2RML / 自定义 SQL→图映射。
- 半结构化:JSON/XML 路径抽取。
- 非结构化:规则 + 统计模型 + LLM 少样本;LLM 输出必须经校验器(类型、值域、必填谓词)。
5.2 实体链接与融合
消歧需要上下文:文本「苹果」可能是公司或水果。保留候选列表与分数,低置信进入人工队列。融合时定义 canonical id,并把来源列表挂在边上:sources、confidence、extracted_at。
5.3 推理
| 类型 | 例子 | 风险 |
|---|---|---|
| 规则/OWL | 传递性 locatedIn | 规则冲突 |
| 路径排序 | 多跳关系可信度 | 稀疏长尾 |
| KG 嵌入 | TransE/RotatE 补全 | 不可解释 |
生产建议:自动补全的边进入「建议层」,高风险域(医疗、金融)需人工或强规则确认后才升「正式层」。
6. GraphRAG 开发架构
6.1 参考流水线
- 离线:文档切块 → 实体/关系抽取 → 写图;块向量化 → 写向量库;可选 Louvain 社区摘要。
- 在线:问题理解 → 实体链接 → 子图检索(跳数/边类型白名单)→ 向量补充 → 重排 → 提示词组装 → 生成 → 引用校验。