LightRAG 作为 EMNLP 2025 论文提出的简单高效 RAG 框架,通过双图索引(实体层与关系层)机制,结合学习到的查询融合策略,实现低资源环境下的快速检索增强生成。该方法针对传统 RAG 的扁平结构与上下文缺失问题,构建知识图谱(KG)以捕捉实体间复杂关系,同时采用双层检索(local 实体检索 + global 关系检索)融合,提升复杂查询的全面性和多样性。在低资源场景下,通过参数蒸馏(如小模型提取、缓存机制)显著降低 token 消耗与 API 调用,仅需 <100 token 和单次调用即可完成检索,远优于 GraphRAG 的多轮调用与全图重建。
核心观点在于,双图索引并非简单图构建,而是将文档分块(chunk_token_size=1200, overlap=100)后,使用 LLM 提取实体/关系,形成实体图(节点嵌入)和关系图(边嵌入)。查询时,提取 local_keywords(精确实体匹配)和 global_keywords(主题聚合),在向量存储中检索 top_k=60 实体/关系,再扩展邻接节点,形成融合上下文。该融合通过统一 token 预算控制(max_entity_tokens=6000, max_relation_tokens=8000, max_total_tokens=30000),避免 token 爆炸。证据显示,在 Agriculture/CS/Legal/Mix 数据集上,LightRAG 在全面性、多样性、赋能度等维度胜率达 50-85%,优于 NaiveRAG(胜率 <45%)、RQ-RAG 和 GraphRAG。
低资源优化是关键,通过知识蒸馏思想:索引阶段用轻量 LLM(如 gpt-4o-mini)进行实体提取(entity_extract_max_gleaning=1),启用 LLM 缓存(enable_llm_cache=True),并支持 Ollama 等本地模型。查询融合采用 hybrid/mix 模式,mix 模式默认启用 reranker(如 BAAI/bge-reranker-v2-m3),融合向量与图检索。蒸馏参数包括 embedding_batch_num=32、llm_model_max_async=4,结合 cosine_better_than_threshold=0.2,确保低端 GPU(如 6GB)运行(如 gemma2:2b,context=26k)。增量更新避免全重建,仅 union 新节点/边,支持 delete_by_entity/doc_id 等操作。
工程落地参数清单:
-
初始化参数:
- working_dir: "./rag_storage"
- embedding_func: openai_embed 或 ollama_embed (dim=1536/768)
- llm_model_func: gpt_4o_mini_complete (context≥32k)
- chunk_token_size=1200, overlap=100
- storage: vector="NanoVectorDBStorage", graph="NetworkXStorage" (生产用 Neo4J/PG)
-
查询融合参数(QueryParam):
- mode="hybrid" 或 "mix" (top_k=60, chunk_top_k=20)
- enable_rerank=True
- max_entity_tokens=6000, max_relation_tokens=8000
-
低资源蒸馏阈值:
- embedding_batch_num=16-32, llm_max_async=4
- similarity_threshold=0.95 (embedding_cache)
- cosine_threshold=0.2 (vector_db)
-
监控与回滚:
- TokenTracker 追踪消耗(context manager)
- RAGAS 评估:context_precision, faithfulness
- 异常:切换 embedding 前清 data_dir;rate limit 时 max_async=2
- 回滚:clear_cache(modes=["hybrid"]) 或 delete_by_doc_id
示例代码:
import asyncio
from lightrag import LightRAG, QueryParam
from lightrag.llm.openai import openai_embed, gpt_4o_mini_complete
rag = LightRAG(working_dir="./storage", embedding_func=openai_embed, llm_model_func=gpt_4o_mini_complete)
await rag.initialize_storages()
await rag.ainsert("文档内容")
result = await rag.aquery("复杂查询", param=QueryParam(mode="mix", enable_rerank=True))
生产部署:Docker compose up,支持 PostgreSQL/Neo4J 统一存储,Langfuse 追踪。风险:LLM 提取噪声(用 addon_params 限 entity_types=["person","org"]);规模大时用 Milvus/Qdrant 向量存储。整体,LightRAG 以 <1s 延迟、单 GPU 运行,完美适配低资源 RAG。
资料来源: