30秒快速回答: 知识图谱是把知识组织成一张「网络」的技术——每个「节点」是一个实体(人、公司、概念),每条「边」是实体间的关系。比如「乔布斯 → 创立 → 苹果公司 → 推出 → iPhone」。这种结构化方式让 AI 不仅能「模糊匹配」,还能「精确推理」——比如问「乔布斯的公司推出的第一款手机是什么?」
为什么 LLM 需要知识图谱?
LLM 的局限在知识图谱面前暴露得很清楚:
| 能力 | LLM 纯文本 | LLM + 知识图谱 |
|---|---|---|
| 精确事实 | 可能幻觉 | 图数据确保准确性 |
| 多跳推理 | 弱(推理链可能断裂) | 强(显式路径推理) |
| 数据更新 | 需重新训练 | 实时增删改 |
| 可解释性 | 差(黑箱) | 好(可追踪推理路径) |
| 结构化查询 | 弱 | 强(Cypher/SPARQL) |
典型案例
问题:「苹果公司的现任 CEO 毕业于哪所大学?」
纯 LLM 可能:
- 记忆过时(以为是乔布斯)
- 编造答案(幻觉)
- 推理链断裂
LLM + 知识图谱:
苹果公司 --(CEO)--> Tim Cook --(毕业于)--> 杜克大学
推理路径清晰、可验证、可追溯
知识图谱的核心结构
三元组(Triple)
(头实体) --[关系]--> (尾实体)
示例:
(Elon Musk) --[创立]--> (SpaceX)
(SpaceX) --[发射]--> (猎鹰9号)
(Python) --[是一门]--> (编程语言)
本体(Ontology)与 Schema
-- Neo4j Cypher 定义 Schema
-- 节点类型(实体类型)
CREATE (:Person {name: "Elon Musk", birth: 1971})
CREATE (:Company {name: "Tesla", founded: 2003})
CREATE (:Product {name: "Model 3", type: "汽车"})
-- 关系类型
CREATE
(p:Person)-[:CREATED]->(c:Company),
(c)-[:PRODUCES]->(prod:Product),
(p)-[:CE0_OF]->(c);
实战:用 Neo4j 构建知识图谱
# 安装: pip install neo4j langchain-neo4j
from neo4j import GraphDatabase
import os
# 1. 连接 Neo4j(社区版免费)
driver = GraphDatabase.driver(
"bolt://localhost:7687",
auth=("neo4j", "your_password")
)
# 2. 创建知识图谱
def build_tech_kg(driver):
"""构建一个科技公司知识图谱"""
with driver.session() as session:
# 创建公司节点
companies = [
("Apple", "AAPL", 1976, "消费电子"),
("Google", "GOOGL", 1998, "互联网"),
("Microsoft", "MSFT", 1975, "软件"),
("Tesla", "TSLA", 2003, "汽车")
]
for name, ticker, year, industry in companies:
session.run("""
MERGE (c:Company {name: $name})
SET c.ticker = $ticker,
c.founded = $year,
c.industry = $industry
""", name=name, ticker=ticker, year=year, industry=industry)
# 创建创始人关系
founders = [
("Steve Jobs", "Apple", "联合创始人"),
("Elon Musk", "Tesla", "CEO"),
("Bill Gates", "Microsoft", "联合创始人"),
("Larry Page", "Google", "联合创始人")
]
for person, company, role in founders:
session.run("""
MERGE (p:Person {name: $person})
MERGE (c:Company {name: $company})
MERGE (p)-[:FOUNDED {role: $role}]->(c)
""", person=person, company=company, role=role)
# 创建产品关系
products = [
("Apple", "iPhone", "智能手机"),
("Google", "Gemini", "AI模型"),
("Microsoft", "Copilot", "AI助手"),
("Tesla", "Model 3", "电动汽车")
]
for company, product, ptype in products:
session.run("""
MERGE (c:Company {name: $company})
MERGE (p:Product {name: $product})
MERGE (c)-[:PRODUCES]->(p)
SET p.type = $type
""", company=company, product=product, type=ptype)
print("知识图谱构建完成!")
build_tech_kg(driver)
# 3. 查询:多跳推理
def multi_hop_query(driver, question: str):
"""知识图谱多跳推理"""
with driver.session() as session:
# 示例:「Tesla 的 CEO 创建了哪些产品?」
result = session.run("""
MATCH (p:Person)-[:FOUNDED]->(c:Company {name: "Tesla"})
MATCH (c)-[:PRODUCES]->(prod:Product)
RETURN p.name AS founder, prod.name AS product, prod.type AS type
""")
return [(r["founder"], r["product"], r["type"]) for r in result]
results = multi_hop_query(driver, "")
for founder, product, ptype in results:
print(f"{founder} 的 Tesla 生产了 {product}({ptype})")
GraphRAG:知识图谱 + LLM
2024 年微软的 GraphRAG 是知识图谱 + RAG 的里程碑:
传统 RAG(文本检索):
问题 → 向量检索 → 相关文本碎片 → LLM 回答
问题:碎片间关系丢失
GraphRAG(图谱增强检索):
问题 → 图遍历 + 向量检索 → 结构化实体 + 关系 + 文本 → LLM 回答
优势:实体间关系显式保留,多跳推理更准确
GraphRAG 的三大能力
- 实体提取:从文档自动提取实体和关系
- 社区检测:对图做 Leiden 聚类,生成不同粒度的「主题摘要」
- 全局理解:跨文档回答「数据集的主要主题有哪些?」
LLM 自动构建知识图谱
# 用 LLM 从文本中提取知识图谱三元组
from openai import OpenAI
import json
client = OpenAI()
def extract_triples(text: str) -> list[tuple]:
"""用 LLM 从文本中提取三元组"""
prompt = f"""
从以下文本中提取所有「实体-关系-实体」三元组:
文本:{text}
输出 JSON 格式:
triples
规则:
- 实体用全名(如「埃隆·马斯克」而非「马斯克」)
- 关系用简洁动词(如「创立」「出生于」「位于」)
"""
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
response_format={"type": "json_object"}
)
return json.loads(response.choices[0].message.content)["triples"]
text = "埃隆·马斯克于 2004 年加入特斯拉,成为董事长。"
triples = extract_triples(text)
print(triples)
# [["埃隆·马斯克", "加入", "特斯拉"], ...]
2026 年知识图谱趋势
| 趋势 | 说明 | 代表 |
|---|---|---|
| GraphRAG | 图谱 + RAG 融合 | Microsoft GraphRAG |
| LLM 构建 KG | LLM 自动提取知识图谱 | LangChain GraphIndex |
| 知识图谱 + Agent | Agent 用 KG 做精确推理 | 多个 Agent 框架集成 |
| 时序知识图谱 | 引入时间维度的动态 KG | 金融、舆情分析 |
| 多模态 KG | 包含图片/视频的图谱 | 视觉推理 |
常见问题
Q: 知识图谱和向量数据库怎么选?
不是「二选一」,而是「双引擎」:
- 向量数据库:模糊语义匹配(「类似的东西」→ 适合 RAG 检索)
- 知识图谱:精确关系推理(「A 的 B 的 C 是什么?」→ 适合多跳推理)
- 最佳实践:两者结合(GraphRAG)
Q: 构建知识图谱成本高吗?
传统方法(人工标注)成本高,但 2025-2026 年的 LLM 自动提取技术已将成本大幅降低。对于中小规模(数万实体),用 LangChain LLMGraphTransformer 几小时就能完成。
Q: Neo4j 是唯一选择吗?
不是。主流图数据库包括:Neo4j(最成熟)、Amazon Neptune(AWS 生态)、TigerGraph(高性能)、ArangoDB(多模型)。对于轻量级场景,SQLite + 自建索引也够用。
下一步建议: 安装 Neo4j Desktop,用本文代码构建一个「你关注领域的知识图谱」,然后用 GraphRAG 做一次全局问答,体验「图+LLM」的推理能力。