Knowledge Graph
Knowledge Graph 是用图结构组织知识的方式,节点是实体,边是关系。它能表达"张三-属于-技术部"这样的结构化知识,补充向量搜索的不足。
#type / concept
#status / evergreen
#tech / ai
[!info] related notes
- 所属 MOC: RAG Engineering MOC
- 相关: Vector Database, Hybrid Search
Knowledge Graph
一句话定义
Knowledge Graph 是用图结构组织知识的方式。节点是实体(人、产品、概念),边是关系(属于、导致、包含)。它能表达”张三-属于-技术部-开发-产品A”这样的结构化知识。
核心原理
知识图谱 vs 向量搜索
| 向量搜索 | 知识图谱 | |
|---|---|---|
| 知识表示 | 非结构化文本 | 结构化实体和关系 |
| 检索方式 | 语义相似度 | 图遍历 |
| 优势 | 自然语言查询 | 多跳推理 |
| 劣势 | 不擅长关系查询 | 构建成本高 |
应用场景
问: "技术部有哪些人参与了产品A的开发?"
向量搜索: 可能找到包含"技术部"和"产品A"的文档,但不一定有人员列表
知识图谱:
技术部 --[属于]--> 张三
技术部 --[属于]--> 李四
张三 --[参与开发]--> 产品A
→ 精确回答: 张三
图数据库示例 (Neo4j)
// 创建实体
CREATE (zhang:Person {name: "张三"})
CREATE (tech:Department {name: "技术部"})
CREATE (productA:Product {name: "产品A"})
// 创建关系
CREATE (zhang)-[:BELONGS_TO]->(tech)
CREATE (zhang)-[:WORKS_ON]->(productA)
// 查询
MATCH (p:Person)-[:BELONGS_TO]->(d:Department {name: "技术部"}),
(p)-[:WORKS_ON]->(prod:Product {name: "产品A"})
RETURN p.name
常见坑
- 构建成本高: 需要从非结构化文本中提取实体和关系
- 维护困难: 实体和关系需要持续更新
- 不适合所有场景: 自然语言问答还是向量搜索更好