LightRAG:基于图结构索引的智能检索增强生成系统
LightRAG 是一种基于图结构索引和双层检索机制的检索增强生成系统,旨在提升大型语言模型在信息检索中的准确性和效率。它通过捕捉实体间的复杂依赖关系,全面理解信息,处理具体和抽象查询。系统具备快速适应新数据的能力,基于增量更新算法及时整合新数据,无需重建整个知识库。支持多种搜索模式,包括朴素、本地、全局及混合搜索,适用于动态环境下的知识管理。

LightRAG 是一种基于图结构索引和双层检索机制的检索增强生成系统,旨在提升大型语言模型在信息检索中的准确性和效率。它通过捕捉实体间的复杂依赖关系,全面理解信息,处理具体和抽象查询。系统具备快速适应新数据的能力,基于增量更新算法及时整合新数据,无需重建整个知识库。支持多种搜索模式,包括朴素、本地、全局及混合搜索,适用于动态环境下的知识管理。

LightRAG 是由香港大学研究团队开发的一种检索增强生成(Retrieval-Augmented Generation, RAG)系统。该系统通过结合图结构索引和双层检索机制,显著提升了大型语言模型在信息检索方面的准确性和效率。与传统基于向量搜索的 RAG 不同,LightRAG 能够捕捉实体之间的复杂关系,全面理解信息,无论是具体还是抽象的查询都能处理,确保用户得到既相关又丰富的回答。
此外,LightRAG 具备快速适应新数据的能力,在动态环境中保持高效和准确。通过增量更新算法,系统能够及时整合新数据,而无需重建整个知识库,这对于需要频繁更新信息的场景尤为重要。
LightRAG 使用图结构来索引文本数据。节点代表实体,边代表实体间的关系。这种结构能够更好地捕捉和表示复杂的依赖关系,使得系统不仅能匹配关键词,还能理解语义关联。
系统结合了低层次(具体实体和属性)和高层次(广泛主题和概念)的检索策略。
当新数据到来时,系统会增量式地更新知识图谱。它识别新实体和新关系,并将其融入现有结构中,无需从头开始重建,极大地提高了数据处理的效率。
利用大型语言模型识别文本中的实体和关系,生成键值对,优化检索过程。这一过程通常包括命名实体识别(NER)和关系抽取(RE)。
git clone https://github.com/HKUDS/LightRAG.git
cd LightRAG
pip install -e .
pip install lightrag-hku
在运行代码前,请确保已设置 API 密钥。
export OPENAI_API_KEY="sk-..."
下载示例文本文件,例如《圣诞颂歌》。
curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt > ./book.txt
使用以下 Python 代码片段进行初始化和数据插入。
from lightrag import LightRAG, QueryParam
# 初始化 RAG 实例,指定工作目录
rag = LightRAG(working_dir="./dickens")
# 读取并插入文本内容
with open("./book.txt") as f:
rag.insert(f.read())
LightRAG 支持多种搜索模式,以适应不同的查询需求。
# 执行朴素搜索 (Naive)
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="naive")))
# 执行本地搜索 (Local)
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="local")))
# 执行全局搜索 (Global)
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="global")))
# 执行混合搜索 (Hybrid)
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="hybrid")))
| 搜索方式 | 描述 | 适用场景 |
|---|---|---|
| 朴素搜索 (Naive) | 直接根据查询关键词进行搜索,不考虑实体间的关系。 | 适用于简单、直接的查询,不需要深入理解实体间的关系。 |
| 本地搜索 (Local) | 在实体及其直接相邻的实体之间进行搜索,考虑实体间的基本关系。 | 适用于需要理解实体间直接关系的查询,但不需要全局视角。 |
| 全局搜索 (Global) | 在整个知识图谱中进行搜索,考虑实体间的全局关系。 | 适用于需要全局视角,理解实体间复杂关系的查询。 |
| 混合搜索 (Hybrid) | 结合本地搜索和全局搜索的优点,既考虑实体间的直接关系,也考虑全局关系。 | 适用于需要全面理解实体间关系的查询,适用于大多数场景。 |
支持一次性插入多个文本片段,提高数据处理效率。
rag.insert(["TEXT1", "TEXT2", "TEXT3"])
在不重新构建整个知识库的情况下,添加新的文档。
rag = LightRAG(working_dir="./dickens")
with open("./newText.txt") as f:
rag.insert(f.read())
可以通过 QueryParam 调整检索参数,如最大上下文长度、温度等。
param = QueryParam(
mode="hybrid",
max_token_for_text_unit=4000,
max_token_for_global_context=4000,
max_token_for_local_context=4000
)
result = rag.query("Query here", param=param)
相比传统的向量数据库 RAG 方案,LightRAG 具有以下优势:
Q: 如何更换嵌入模型?
A: 可以在初始化 LightRAG 时传入自定义的 embedding 函数或模型名称。
Q: 内存占用过高怎么办?
A: 建议定期清理旧的工作目录或使用分布式部署。同时,合理设置 max_token 参数可以控制单次检索的数据量。
Q: 支持中文吗? A: 是的,LightRAG 支持多语言,但建议使用针对中文优化的嵌入模型以获得最佳效果。
LightRAG 代表了检索增强生成技术的一个重要发展方向。它通过引入图结构索引,解决了传统 RAG 在处理复杂关系和多跳推理时的不足。其增量更新机制使其非常适合动态知识管理场景。对于希望构建高精度、高适应性 AI 应用的企业和开发者来说,LightRAG 是一个值得深入研究和采用的工具。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online