LightRAG

2025-11-20

python

生活就像一部自行车,要保持平衡就得不断前行。——阿尔伯特·爱因斯坦

https://github.com/HKUDS/LightRAG

LightRAG:一套“轻、快、可组合”的图增强检索生成系统全剖析([EMNLP 2025] Simple and Fast Retrieval-Augmented Generation)

项目主页:HKUDS/LightRAG
论文(arXiv):LightRAG: Simple and Fast Retrieval-Augmented Generation (2410.05779)
当前仓库信息(截至读取时):Stars 23,806 · Forks 3,496 · Open Issues 168 · License MIT
主语言:Python
Topics:rag graphrag knowledge-graph llm retrieval-augmented-generation genai

LightRAG 是一套围绕“图 + 向量 + 多模态 + 高性能存储”展开的 Retrieval-Augmented Generation(RAG)工具集,强调极简 API、灵活存储后端选择、知识图谱(Knowledge Graph, KG)构建与查询模式混合(local/global/hybrid/mix/hybrid+rerank),让复杂知识检索与上下文拼装更透明、更可控。

本文基于其 README 与仓库提供的示例,系统性梳理:设计理念、功能结构、部署方式、核心编程范式、可扩展接口与最佳实践。


1. 核心理念概述

传统 RAG 通常只做“向量检索 + 拼 Prompt”,在长文本、多概念关联、跨实体关系问题上容易混淆或遗漏。LightRAG 引入并强化:

  • 双层检索:局部上下文(local)与全局关系(global)结合(hybrid/mix)
  • 知识图谱实体与关系的抽取与再利用
  • 可选的重排序(Reranker)提升检索精准度
  • 模块化存储:KV / Vector / Graph / Doc Status 四类存储各可切换不同后端
  • 工作空间(workspace)隔离:支持多租户或多应用并行
  • 多数据库 & 部署模式:本地文件、PostgreSQL(+pgvector+AGE)、Neo4J、Milvus、Qdrant、Faiss、MongoDB、Redis、Memgraph 等
  • 面向多种 LLM/Embedding 提供统一注入接口(OpenAI 兼容、Hugging Face、Ollama、LlamaIndex 等)

2. 最新功能动态(节选自 README News)

部分里程碑(精确引用节选):

  • 支持 Reranker(显著提升混合查询表现)
  • 小模型(如 Qwen3-30B-A3B)在 KG 抽取精度提升
  • 引入 RAGAS 评估框架与 Langfuse 可观测性
  • 支持文档删除 + KG 重建
  • 集成 RAG-Anything 多模态能力
  • 引入 Citation 功能(结果可溯源原始文档)
  • 支持 PostgreSQL 和 MongoDB 作为“一体化存储”
  • 提供 Web UI(插入 / 查询 / 可视化 KG)

这些演进说明 LightRAG 正在从“图增强 RAG 核心”扩展为“可观察、可评估、可编辑的企业级构建套件”。


3. 安装与部署方式

3.1 基础安装(Server 模式)

提供 Web UI + API:

1
2
3
4
# 推荐使用 uv(更快更可靠)
uv pip install "lightrag-hku[api]"
cp env.example .env # 修改其中的 LLM/Embedding 配置
lightrag-server

3.2 从源码安装(Server)

1
2
3
4
5
6
7
8
9
10
11
12
13
git clone https://github.com/HKUDS/LightRAG.git
cd LightRAG
uv sync --extra api
source .venv/bin/activate # Windows: .venv\Scripts\activate

cp env.example .env
# 构建前端
cd lightrag_webui
bun install --frozen-lockfile
bun run build
cd ..

lightrag-server

3.3 Docker Compose

1
2
3
4
5
git clone https://github.com/HKUDS/LightRAG.git
cd LightRAG
cp env.example .env
# 修改 .env 中的 LLM/Embedding 配置
docker compose up

3.4 Core 库安装(仅编程集成)

1
2
3
uv pip install lightrag-hku
# 或
pip install lightrag-hku

3.5 Kubernetes + Helm(可选)

仓库内 k8s-deploy/ 提供 Helm Chart 与脚本:

  • 轻量部署:使用内置 JsonKV + NanoVector + NetworkX 等文件级存储
  • 生产部署:结合 PostgreSQL + Neo4J 等外部数据库
    详见:k8s-deploy/README.md

轻量示例(Helm):

1
2
3
4
5
6
7
8
9
helm upgrade --install lightrag ./lightrag \
--namespace rag \
--set-string env.LIGHTRAG_KV_STORAGE=JsonKVStorage \
--set-string env.LIGHTRAG_VECTOR_STORAGE=NanoVectorDBStorage \
--set-string env.LIGHTRAG_GRAPH_STORAGE=NetworkXStorage \
--set-string env.LIGHTRAG_DOC_STATUS_STORAGE=JsonDocStatusStorage \
--set-string env.LLM_BINDING=openai \
--set-string env.LLM_MODEL=gpt-4o-mini \
--set-string env.EMBEDDING_MODEL=text-embedding-ada-002

4. 模型与技术栈要求(摘自 README 要点)

  • 建议索引阶段使用 ≥32B 参数级别 LLM,Context Length ≥32K(推荐 64K)
  • 查询阶段可使用较索引阶段更强的模型
  • Embedding 模型需在“索引”和“查询”阶段保持一致(否则需重建)
  • 推荐向量模型如:BAAI/bge-m3, text-embedding-3-large
  • 启用 Reranker(如 BAAI/bge-reranker-v2-m3 或 Jina 提供的模型)→ 默认查询模式可用 mix/hybrid

5. 快速体验(Core 示例)

下面示例演示:初始化、插入文本、执行查询(来自 README 提供片段,补充注释说明关键点)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import os, asyncio
from lightrag import LightRAG, QueryParam
from lightrag.llm.openai import gpt_4o_mini_complete, openai_embed
from lightrag.utils import setup_logger

setup_logger("lightrag", level="INFO")

WORKING_DIR = "./rag_storage"

async def initialize_rag():
rag = LightRAG(
working_dir=WORKING_DIR,
embedding_func=openai_embed,
llm_model_func=gpt_4o_mini_complete,
)
# 必须初始化存储
await rag.initialize_storages()
return rag

async def main():
rag = await initialize_rag()
await rag.ainsert("Your text")
result = await rag.aquery(
"What are the top themes in this story?",
param=QueryParam(mode="hybrid")
)
print(result)
await rag.finalize_storages()

if __name__ == "__main__":
os.environ["OPENAI_API_KEY"] = "sk-..." # 运行前设置真实 key
asyncio.run(main())

要点:

  • initialize_storages() 必须调用,否则存储层未准备好
  • ainsert 可异步插入文本(内部会切分 + 抽取实体关系)
  • QueryParam(mode="hybrid") 组合局部 + 全局检索
  • 程序结束调用 finalize_storages() 做清理(如连接关闭)

6. 查询参数(QueryParam)设计解读

核心字段(README 中定义):

  • mode: "local" | "global" | "hybrid" | "naive" | "mix" | "bypass"
    • local:上下文片段聚焦(实体局部)
    • global:基于图谱的关系层面
    • hybrid:融合 local + global
    • mix:结合KG与向量检索(且可能配合 Rerank)
    • naive:基础检索(不走复杂图逻辑)
  • only_need_context: 仅返回检索到的上下文
  • only_need_prompt: 仅返回构造的 Prompt
  • top_k, chunk_top_k: 控制检索范围
  • 统一 Token Budget:max_entity_tokens / max_relation_tokens / max_total_tokens
  • user_prompt: 在模板中追加用户定制的生成指令(避免混用检索与无关输出逻辑)
  • enable_rerank: 控制是否执行重排序

示例(用户自定义 Prompt):

1
2
3
4
5
6
7
query_param = QueryParam(
mode="hybrid",
user_prompt="Answer in bullet points and cite source IDs if available."
)

answer = rag.query("Summarize main characters", param=query_param)
print(answer)

7. 插入数据的多种方式

README 提供多种插入模式:

方式 说明
单文本插入 rag.insert("Text")
批量插入 rag.insert(["T1","T2",...])
自定义并发 LightRAG(..., max_parallel_insert=4)
指定自定义 ID rag.insert(["A","B"], ids=["IDA","IDB"])
增量管线 apipeline_enqueue_documents + apipeline_process_enqueue_documents
多文件类型 利用 textract 读取 PDF/DOCX/PPTX/CSV 等
Citation 溯源 rag.insert(docs, file_paths=paths)

Citation 示例:

1
2
3
documents = ["Doc content 1", "Doc content 2"]
paths = ["path/to/doc1.txt", "path/to/doc2.txt"]
rag.insert(documents, file_paths=paths)

检索后回答可带来源引用(依赖内部存储文件路径)。


8. 知识图谱(KG)编辑能力

LightRAG 支持对实体与关系的创建、修改、删除(增强可维护性与人工校正能力)。示例(创建):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
entity = rag.create_entity("Google", {
"description": "Google is a multinational technology company.",
"entity_type": "company"
})

product = rag.create_entity("Gmail", {
"description": "Gmail is an email service.",
"entity_type": "product"
})

relation = rag.create_relation("Google", "Gmail", {
"description": "Google develops and operates Gmail.",
"keywords": "develops operates service",
"weight": 2.0
})

场景价值:

  • 自定义修正自动抽取错误
  • 增强领域专用知识库(如医疗、法律、金融)
  • 用于 prompt 中构建更可靠上下文

9. 多模型接入方式

9.1 OpenAI 兼容接口

支持“OpenAI-like” 的 Chat/Embedding:

1
2
3
4
5
6
7
8
9
10
async def llm_model_func(prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs):
return await openai_complete_if_cache(
"solar-mini",
prompt,
system_prompt=system_prompt,
history_messages=history_messages,
api_key=os.getenv("UPSTAGE_API_KEY"),
base_url="https://api.upstage.ai/v1/solar",
**kwargs
)

9.2 Hugging Face

1
2
3
4
5
6
7
8
9
10
11
12
13
rag = LightRAG(
working_dir=WORKING_DIR,
llm_model_func=hf_model_complete,
llm_model_name="meta-llama/Llama-3.1-8B-Instruct",
embedding_func=EmbeddingFunc(
embedding_dim=384,
func=lambda texts: hf_embed(
texts,
tokenizer=AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2"),
embed_model=AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
)
)
)

9.3 Ollama(本地推理)

需先 ollama pull 模型 + embedding 模型:

1
2
ollama pull qwen2
ollama pull nomic-embed-text

示例:

1
2
3
4
5
6
7
8
9
10
rag = LightRAG(
working_dir=WORKING_DIR,
llm_model_func=ollama_model_complete,
llm_model_name="qwen2m",
llm_model_kwargs={"options": {"num_ctx": 32768}},
embedding_func=EmbeddingFunc(
embedding_dim=768,
func=lambda texts: ollama_embed(texts, embed_model="nomic-embed-text")
)
)

9.4 LlamaIndex 集成

快速复用其生态(OpenAI/多 Provider)。示例(模式调用 naive/local/global/hybrid)参见 README 节选。


10. Rerank 注入

rerank.py 提供驱动:

  • Cohere / vLLM:cohere_rerank
  • Jina AI:jina_rerank
  • 阿里云:ali_rerank

使用策略:

  1. 基向量检索拿初始候选
  2. 调用 Reranker 模型重排序提升相关度
  3. 结合 mix / hybrid 模式 → 更优上下文组装

11. 存储结构与后端选型

LightRAG 四类存储:

类型 职责 可选实现(部分来自 README)
KV_STORAGE 文档信息、LLM Cache、切分片段 JsonKVStorage / PGKVStorage / RedisKVStorage / MongoKVStorage
VECTOR_STORAGE 向量:实体 / 关系 / Chunk NanoVectorDBStorage / PGVectorStorage / Milvus / Faiss / Qdrant / MongoVectorDBStorage
GRAPH_STORAGE 实体关系图 NetworkXStorage / Neo4JStorage / PGGraphStorage(AGE) / MemgraphStorage
DOC_STATUS_STORAGE 文档处理状态 JsonDocStatusStorage / PGDocStatusStorage / MongoDocStatusStorage

Neo4J 优势:生产环境中性能较 PostgreSQL AGE 更好(README 提示)。
PostgreSQL 一体化:同时承担 KV/Vector/Graph(借助 pgvector + AGE)。
MongoDB:可用于 KV + Vector + 简单图(模拟实现)。
Redis:KV 缓存→需注意持久化策略(README 推荐配置如 maxmemory-policy 等)。

示例(Neo4J):

1
2
3
4
5
6
7
8
9
10
export NEO4J_URI="neo4j://localhost:7687"
export NEO4J_USERNAME="neo4j"
export NEO4J_PASSWORD="password"

rag = LightRAG(
working_dir=WORKING_DIR,
llm_model_func=gpt_4o_mini_complete,
graph_storage="Neo4JStorage"
)
await rag.initialize_storages()

12. 工作空间(workspace)隔离机制

用于多实例数据隔离:

  • 文件型:使用子目录区分(JsonKVStorage 等)
  • 集合型:前缀隔离(Redis/Mongo/Milvus/Qdrant 等)
  • 关系型:表字段增加 workspace(PostgreSQL 系列)
  • 图数据库:Neo4J 使用 Label 隔离

用途:

  • 支持多用户数据互不干扰
  • 可用于环境划分(dev/test/prod)
  • 方便批量清理某 workspace 下的所有数据

13. 高级使用场景与策略建议

场景 推荐模式 说明
短问题 + 局部细节 local 减少全局噪音,focused context
全局主题/总结 global 强调实体/关系图谱
复杂跨实体推理 hybrid 或 mix 融合向量与图谱双通道
大文档初次索引 选高上下文窗口 LLM,关闭推理型模型 提升实体关系抽取准确性
多模型协作 索引用中等模型,查询用更强模型 成本优化策略
精准检索提升 enable_rerank=True 利用 Reranker 排序增强相关性
快速调试 only_need_context=True 观察拼接上下文质量
Prompt 实验 only_need_prompt=True + user_prompt 微调输出格式再运行

14. Kubernetes 场景速览(数据库编排)

k8s-deploy/databases/README.md 提供基于 KubeBlocks 快速安装 Neo4J、PostgreSQL、Redis、Qdrant、MongoDB、Elasticsearch 等脚本:

  • 配置文件:00-config.sh 控制启用哪些 DB
  • 安装脚本:01-prepare.sh → 基础组件;02-install-database.sh → 真正部署
  • 验证:kubectl get clusters -n rag 观察状态
  • 连接:通过 Secrets 解码获取用户名密码、Port-Forward 后本地连接
    适用于希望统一在 K8s 里做所有数据层编排的企业级场景。

15. 常见坑与最佳实践

问题 可能原因 解决建议
查询结果上下文不理想 未启用 Rerank / top_k 太小 增大 top_k 或启用 Reranker
模型回答不引用来源 未插入 file_paths 使用 Citation 插入方式
切换 Embedding 后检索异常 Embedding 不一致 重建或清空旧索引数据目录
Neo4J 连接失败 URI/认证错误 确认 NEO4J_URI/USERNAME/PASSWORD 与容器端口映射
大量并发插入阻塞 max_parallel_insert 过大 控制为 2~4(README 推荐保守值)
长上下文截断 max_total_tokens 设定过低 调整 QueryParam Token 预算上限
LLM 响应慢 草率选择 reasoning 模型索引阶段 索引阶段用“非推理优化”标准模型

16. 进阶:多后端混合策略示例

以下示例演示选择 PostgreSQL 做 KV + 向量存储,Neo4J 做图存储(适合已有数据库集群的生产环境):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
rag = LightRAG(
working_dir="./workspaceA",
kv_storage="PGKVStorage",
vector_storage="PGVectorStorage",
graph_storage="Neo4JStorage",
doc_status_storage="PGDocStatusStorage",
embedding_func=openai_embed,
llm_model_func=gpt_4o_mini_complete
)

await rag.initialize_storages()
rag.insert("Large domain-specific corpus ...")
resp = rag.query("Explain cross-entity financial risk linkage", param=QueryParam(mode="mix"))
print(resp)

策略说明:

  • 图数据走 Neo4J → 更丰富关系查询与 Cypher 扩展(后续可自己集成)
  • 向量 & KV 留在 PG → 简化运维(单主机/集群)
  • 适合对图结构要求高且已有关系型资源的团队

17. 与其他生态的协同思考

虽然 README 未展开对比,但 LightRAG 的特性可以与以下生态形成协同:

  • 与 LlamaIndex / LangChain:作为底层 Graph+Hybrid 引擎被集成
  • 与 Langfuse:可观测性(README 已支持)
  • 与 RAGAS:评估检索质量与上下文覆盖度
  • 与 组织内部数据湖/ETL:通过批量插入与 Pipeline 异步处理构建持续更新知识层

18. 总结与价值回顾

LightRAG 值得关注的关键点:

  1. “图 + 向量”双引擎模式实际落地(非纯学术概念)
  2. 多模式检索(local/global/hybrid/mix)与 Rerank 组合让上下文更干净
  3. 存储后端抽象层完整,便于按资源条件渐进式升级(从 Json 到 Neo4J/PostgreSQL/Milvus)
  4. 工作空间隔离 → 面向多租户 / 多项目并行场景
  5. 支持实体/关系编辑 → 使知识图谱不是“只读黑箱”
  6. 示例与部署脚本(Docker/K8s/Helm)完备 → 降低试用门槛
  7. 评估 & 观测体系接入(RAGAS、Langfuse) → 企业级可控性提升
  8. 多模型接入(OpenAI、Hugging Face、Ollama、LlamaIndex) → 减少厂商锁定

本质上,它把复杂 RAG 场景的“可见性”(图谱结构、检索路径、上下文组织、存储抽象)透明化,从而让开发者不再被“向量黑盒”困住。


19. 下一步你可以做什么?

目标 操作建议
快速试用 安装 Server → 插入几篇文档 → WebUI 里做 hybrid 查询
精准调试 使用 only_need_context=True 分析上下文来源
数据进化 利用 Citation + 编辑实体/关系迭代知识图
评估优化 接入 RAGAS → 分析检索召回与回答质量
成本优化 索引用中等模型,查询用更高质量模型(分阶段策略)
生产推进 切换到 Neo4J + PGVector + Redis(Cache)组合
多模态实验 集成 RAG-Anything(图像/表格/公式)

20. 参考链接(全部来自 README 或项目声明)

  • 仓库主页:HKUDS/LightRAG
  • 论文(arXiv):2410.05779
  • Web UI / API:lightrag-server
  • 示例目录:examples/
  • Kubernetes 部署:k8s-deploy/
  • Docker 镜像(历史):LightRAG Docker Images
  • RAG 多模态: RAG-Anything
  • 视频介绍(README 链接)
  • Discord 社区(README 中提供)
  • 中文版 README:README-zh.md(仓库内)

最后:LightRAG 不只是“又一个 RAG 框架”,它更像是一个“图 + 多存储 + 多模型”可组合实验平台。若你正被复杂结构化知识、跨域长文本问答、企业内部多数据源整合困扰,它值得一次系统评估与 PoC。

祝你构建出下一个“可解释、可扩展、提质降本”的智能知识应用。🚀