Hotdry.
ai-systems

LightRAG:双层图检索实现简单快速RAG

LightRAG通过实体关系图构建和双层检索(local/global),实现低成本、高效RAG,支持增量更新与多存储,无需复杂索引。

LightRAG 是一种轻量级检索增强生成(RAG)框架,通过构建实体 - 关系知识图谱(KG)和双层检索机制,实现快速、低参数的知识检索。它避免了传统向量 RAG 对长文档的上下文丢失问题,以及 GraphRAG 的重建开销,特别适合动态知识库场景。

核心观点在于:LightRAG 将文档索引转化为图结构化过程,使用 LLM 提取实体(如人、地点)和关系(如 “观察”),生成键值对(KV)用于检索。这种图增强索引捕捉了跨文档的语义关联,支持 local(实体级细粒度)和 global(关系级全局)检索,hybrid 模式融合两者,提供全面上下文。

证据来自 EMNLP 2025 论文和 GitHub 实现:在 UltraDomain 数据集(农业、CS、法律、混合)上,LightRAG 在全面性(Comprehensiveness 67.6% vs NaiveRAG 32.4%)、多样性(Diversity 76.4% vs 23.6%)和赋能(Empowerment 67.6% vs 32.4%)指标全面超越 NaiveRAG、RQ-RAG、HyDE 和 GraphRAG。检索仅需 < 100 token 和 1 次 API 调用,而 GraphRAG 需社区级遍历。增量更新通过 union 操作,仅处理新实体 / 关系,避免全重建。

可落地参数与清单:

  1. 文档分块:chunk_token_size=1200,chunk_overlap_token_size=100(Tiktoken gpt-4o-mini 分词器),平衡召回与粒度。

  2. LLM / 嵌入要求

    • LLM:≥32B 参数,上下文≥32K(推荐 64K),索引用非推理模型(如 gpt-4o-mini),查询用更强模型。
    • 嵌入:BAAI/bge-m3(多语言),text-embedding-3-large;固定模型,避免维度变更需重建。
    • Reranker:BAAI/bge-reranker-v2-m3,提升混合查询。
  3. 查询参数(QueryParam)

    参数 默认 说明
    mode "global" local(实体)、global(关系)、hybrid(融合)、naive(纯向量)、mix(KG + 向量)
    top_k 60 实体 / 关系 TopK
    chunk_top_k 20 文本块 TopK
    max_entity_tokens 6000 实体令牌预算
    max_relation_tokens 8000 关系令牌预算
    max_total_tokens 30000 总上下文预算
    enable_rerank True 重排序
  4. 存储配置(初始化 LightRAG 时指定):

    • KV:JsonKVStorage(默认)、PGKVStorage、RedisKVStorage、MongoKVStorage。
    • Vector:NanoVectorDBStorage(默认,轻量)、PGVectorStorage、Milvus 等;cosine_better_than_threshold=0.2。
    • Graph:NetworkXStorage(默认)、Neo4JStorage(生产推荐)、PGGraphStorage。
    • DocStatus:JsonDocStatusStorage(默认)。
  5. 初始化与使用清单

    pip install lightrag-hku  # 或 uv pip install lightrag-hku[api](Server)
    export OPENAI_API_KEY=sk-...
    WORKING_DIR=./rag_storage
    rag = LightRAG(working_dir=WORKING_DIR, embedding_func=openai_embed, llm_model_func=gpt_4o_mini_complete)
    await rag.initialize_storages()  # 必须
    rag.insert("文档文本")  # 或批量、带ID、多模态(RAG-Anything)
    result = rag.query("查询", param=QueryParam(mode="hybrid", top_k=60))
    
    • 异步版:ainsert/aquery/apipeline_enqueue_documents(后台增量)。
    • 编辑 KG:rag.create_entity ("实体", {"type": "person"});merge_entities (["AI", "人工智能"], "AI")。
    • 删除:rag.delete_by_entity ("实体");adelete_by_doc_id ("doc_id")(重建共享实体)。
    • 缓存:enable_llm_cache=True;aclear_cache (modes=["local"])。
    • 评估:集成 RAGAS、Langfuse;TokenTracker 监控消耗。
  6. 部署与监控

    • Server:lightrag-server(WebUI+API,Ollama 兼容)。
    • Docker:docker compose up。
    • 生产:Neo4J(KG 高性能)、PostgreSQL(一站式)、embedding_batch_num=32、llm_model_max_async=4。
    • 阈值:cosine_threshold=0.2(向量召回)、similarity_threshold=0.95(QA 缓存)。
    • 回滚:删除 doc_id 重建;监控 RAGAS 指标(context_precision 等)。

风险:实体提取需强 LLM,否则准确率降;大规模文档初始索引 LLM 调用多(并行 max_parallel_insert=2~10)。优化:小 LLM 如 Qwen2.5-30B-A3B 提升提取准度。

资料来源:GitHub HKUDS/LightRAG;arXiv:2410.05779。

查看归档