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 的三大能力

  1. 实体提取:从文档自动提取实体和关系
  2. 社区检测:对图做 Leiden 聚类,生成不同粒度的「主题摘要」
  3. 全局理解:跨文档回答「数据集的主要主题有哪些?」

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」的推理能力。