每日一个开源项目(第147篇):HyperGraphRAG - 用超图表示 N 元关系,RAG 的第三代范式

引言

"知识图谱的每条边只能连接两个节点------但现实世界的事实往往同时涉及三个、四个甚至更多实体。"

这是"每日一个开源项目"系列的第147篇文章 。今天的主角是 HyperGraphRAG------NeurIPS 2025 论文"Retrieval-Augmented Generation via Hypergraph-Structured Knowledge Representation"的官方实现。

RAG 技术的发展有一条清晰的演进线:

  • 第一代(Naive RAG):把文档切成 chunk,向量相似度检索
  • 第二代(GraphRAG / LightRAG):从文本提取知识图谱,用图结构做检索
  • 第三代(HyperGraphRAG):用超图替代知识图谱,用超边(hyperedge)表示 N 元关系

这篇文章要解释的核心问题是:知识图谱的"二元边"有什么局限,超图的"超边"如何解决这个问题,以及这个改变在实际 RAG 性能上带来了什么。

你将学到什么

  • 超图 vs 知识图谱的本质区别:为什么二元边表示 N 元事实时会损失信息
  • HyperGraphRAG 的三阶段流水线:知识超图构建 → 检索 → 生成
  • 在医疗、农业、CS、法律四个领域的基准测试结果
  • 与 GraphRAG、LightRAG、Naive RAG 的对比
  • 代码实现和快速上手

前置知识

  • 了解 RAG(检索增强生成)的基本概念
  • 了解知识图谱的基本概念(节点、边、三元组)
  • Python 基础

项目背景

项目简介

HyperGraphRAG 是第一个基于超图结构的 RAG 系统,发表于 NeurIPS 2025。它用超边(可以同时连接任意多个节点的边)替代知识图谱的二元边(只能连接两个节点的边),从而原生表示真实世界里的多实体关系。

作者/团队介绍

  • 第一作者 : Haoran Luo(haoran.luo@ieee.org
  • 发表 : NeurIPS 2025(Advances in Neural Information Processing Systems, vol. 38, pp. 152206--152234)
  • arXiv: 2503.21322
  • License: MIT

项目数据

  • ⭐ GitHub Stars: 415+
  • 🔬 发表于: NeurIPS 2025
  • 📄 License: MIT
  • 🐍 语言: Python 100%

核心概念:超图 vs 知识图谱

在深入流水线之前,先把核心概念说清楚。

知识图谱的局限:二元边

传统知识图谱用三元组表示事实:(主体, 关系, 客体),每条边连接恰好两个节点。

css 复制代码
知识图谱的三元组表示:
Alice  ─[合著者]─→  paper_X
Bob    ─[合著者]─→  paper_X
Carol  ─[合著者]─→  paper_X
paper_X ─[发表于]─→ NeurIPS
paper_X ─[发表时间]─→ 2025

5条独立的二元边,5次提取,关系被拆散了

这样表示有根本性的信息损失:"Alice、Bob 和 Carol 共同合著了论文 X"这个整体事实被拆成了五条孤立的边。检索时如果只找到其中两三条,重建完整关系就困难了。

超图的解决方式:超边

超图允许一条边(超边)连接任意多个节点,直接表示 N 元事实:

css 复制代码
超图的超边表示:
{Alice, Bob, Carol, paper_X, NeurIPS, 2025}
     ─────────[共同合著]─────────→
         单条超边,完整保留 N 元关系

超边把涉及这个事实的所有实体打包在一起,不需要分解。检索这条超边就能得到完整的关系上下文。

更形象的对比

scss 复制代码
场景:一场会议
  参与者:Alice、Bob、Carol
  时间:2025-06-15
  地点:北京
  议题:产品路线图讨论

知识图谱处理:
  (Alice, 参与, 会议_001)
  (Bob, 参与, 会议_001)
  (Carol, 参与, 会议_001)
  (会议_001, 时间, 2025-06-15)
  (会议_001, 地点, 北京)
  (会议_001, 议题, 产品路线图讨论)
  ← 6 条边,关系被打散

超图处理:
  超边:{Alice, Bob, Carol, 2025-06-15, 北京, 产品路线图讨论}
  关系:共同参与会议
  ← 1 条超边,完整保留 N 元关系

系统架构:三阶段流水线

阶段一:知识超图构建(Indexing)

python 复制代码
from hypergraphrag import HyperGraphRAG

rag = HyperGraphRAG(working_dir="expr/my_project")

# 插入文档,触发知识超图构建
rag.insert(documents)

构建过程:

  1. 文档分块:把输入文档切成 chunk
  2. N 元事实提取 :用 LLM 从每个 chunk 里提取 N 元关系事实
    • 不只提取 (主体, 关系, 客体) 三元组
    • 提取同时涉及 N 个实体的完整事实
  3. 超边构造 :把每个 N 元事实转化为一条超边
    • 超边包含:所有相关实体节点 + 关系类型 + 来源
  4. 超图存储:把节点集和超边集持久化到工作目录

阶段二:超图检索(Retrieval)

python 复制代码
# 查询
result = rag.query("Alice 和 Bob 在 2025 年共同发表了哪些论文?")

检索过程与知识图谱的关键差异:

复制代码
知识图谱检索:
  找到 Alice 节点
  → 找到所有连接 Alice 的二元边
  → 找到包含 Bob 的边
  → 求交集
  → 多跳路径推理,容易漏掉

超图检索:
  找到 Alice 节点
  → 找到包含 Alice 的所有超边
  → 超边里已经包含了 Bob、论文、时间等完整上下文
  → 直接定位到相关超边,无需多跳推理

阶段三:生成(Generation)

检索到的超边内容作为上下文,传给 LLM 生成最终答案:

yaml 复制代码
检索结果(超边):
  实体:{Alice, Bob, paper_X, NeurIPS, 2025}
  关系:co-authored
  摘要:Alice 和 Bob 合著了 paper_X,发表于 NeurIPS 2025,
        内容涉及超图结构的知识表示

传给 LLM 的上下文已经是结构化的完整 N 元关系,
不是从多条二元边拼凑出来的碎片

基准测试结果

论文在四个领域的数据集上评测,与 Naive RAG、GraphRAG、LightRAG 对比:

评测领域:医疗、农业、计算机科学、法律

评测指标:答案准确率、检索效率、生成质量

结论:HyperGraphRAG 在四个领域上全面超越:

  • 比 Naive RAG(向量检索):更好的多实体关系理解
  • 比 GraphRAG:减少了因二元分解导致的关系损失
  • 比 LightRAG:在复杂 N 元关系场景下显著提升

这些领域选择是有道理的:

  • 医疗:一个病人同时服用多种药物产生的相互作用,是典型的 N 元关系(不是"A 和 B 相互作用"就能表达的)
  • 法律:合同里涉及多方当事人的条款、多个法律条文共同约束的事项
  • 计算机科学:算法、数据结构、应用场景、性能约束同时关联的技术事实
  • 农业:作物生长条件(土壤、气候、肥料、病虫害同时交互影响)

RAG 范式演进

yaml 复制代码
第一代:Naive RAG
  文档 → 向量化 → 向量数据库
  查询 → 相似度检索 → 返回 chunks
  问题:语义层面检索,缺乏结构性知识

第二代:GraphRAG(Microsoft)/ LightRAG(HKUDS)
  文档 → 提取知识图谱(三元组)→ 图数据库
  查询 → 图遍历 → 结构化上下文
  问题:二元边无法原生表示 N 元关系,复杂事实被拆散

第三代:HyperGraphRAG(NeurIPS 2025)
  文档 → 提取 N 元事实 → 超图(超边)
  查询 → 超边检索 → 完整 N 元关系上下文
  优势:保留了关系的完整性,减少多跳推理的噪声积累

这个演进方向有其必然性:现实世界的知识本来就不是二元的。一篇论文的引用关系涉及多个作者、多个机构、多个日期;一个法律判决涉及原告、被告、法官、法规、事实;一个商业合同涉及多方当事人、多个条款、多个日期节点。


快速开始

安装

bash 复制代码
git clone https://github.com/LHRLAB/HyperGraphRAG
cd HyperGraphRAG

conda create -n hypergraphrag python=3.11
conda activate hypergraphrag

pip install -r requirements.txt

配置 OpenAI API

bash 复制代码
export OPENAI_API_KEY=your_key

基本使用

python 复制代码
from hypergraphrag import HyperGraphRAG
import asyncio

async def main():
    rag = HyperGraphRAG(working_dir="expr/test")
    
    # 构建超图
    with open("your_document.txt", "r") as f:
        content = f.read()
    await rag.ainsert(content)
    
    # 查询
    result = await rag.aquery("你的问题")
    print(result)

asyncio.run(main())

局限性和适用场景

适合

  • 文档中包含大量多实体关系的场景(医疗记录、法律文书、学术论文)
  • 需要跨多个实体进行复杂推理的查询
  • 现有 GraphRAG 在关系检索准确率上达到瓶颈的场景

需要权衡的

  • 超图构建比普通知识图谱提取更复杂,需要 LLM 识别 N 元事实(成本和时间更高)
  • 目前依赖 OpenAI API(可扩展为其他 LLM)
  • 研究代码,不是生产级框架(项目 readme 注明为研究实现)

项目地址与资源


总结

HyperGraphRAG 的贡献可以用一句话概括:用超边替代二元边,让 RAG 系统能原生表示 N 元关系

这个改变听起来是图结构的细节,但对于现实世界文档里充满多实体关系的场景,它解决的是信息压缩损失的根本问题------GraphRAG 把 N 元事实分解成多条二元边的时候,整体关系就已经丢了,后续的检索和推理都在用不完整的信息。

NeurIPS 2025 的发表说明这个方向在学术界得到了认可。对于正在使用 GraphRAG 或 LightRAG 遇到复杂关系检索瓶颈的开发者,这是一个值得了解和实验的研究方向。


探索 PrimeSkills ------ 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。

欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。

相关推荐
甲维斯3 小时前
Github + 阿里云oss实现类似codex的自动更新!
人工智能
阿里云大数据AI技术5 小时前
光轮智能 × 阿里云:共建 Physical AI 云上数据、评测与持续学习基础设施
人工智能·机器学习
机器之心5 小时前
实锤了:Claude Code偷查用户,时区、中国AI实验室全是关键词
人工智能·openai
网易云信5 小时前
Cursor点燃个人开发者,企业级AI为何频频受挫?Agent工厂从提效工具到AI员工的跃迁
人工智能·开源
网易云信5 小时前
解锁触手可及的温暖:网易智企 x Wander Puffs AI 云游泡芙
人工智能
转转技术团队5 小时前
从 PRD 到可验证代码:AI 需求开发闭环实践
人工智能
机器之心5 小时前
飞书让表格变成「AI同事」加入群聊,不打开表就能用表
人工智能·openai