更快、更强、更经济!超越GraphRAG的大模型RAG系统LightRAG开源啦! 原创

发布于 2024-11-14 10:01
浏览
0收藏

​在这个信息爆炸的时代,我们每天都被大量的数据和信息所包围。对于企业和研究人员来说,如何从这海量的信息中迅速地找到自己需要的针对性数据,已经成为了一个亟待解决的问题。幸运的是,香港大学的研究团队最近推出的LightRAG系统,为我们提供了一个新的解决方案。

LightRAG系统是基于RAG(Retrieval-Augmented Generation)的开源技术,它通过引入先进的双层检索范式和基于图的数据结构,大大提升了信息检索的全面性和效率。更为重要的是,它能够快速适应新数据,这在今天这个信息快速更新换代的时代尤为关键。

核心创新:基于图的数据结构

与传统的RAG系统相比,LightRAG的一个显著优势在于其基于图的数据结构。这种结构能够有效地捕捉数据中实体之间的复杂关系,从而使检索结果更加精确。举个例子,在医学领域,LightRAG能够识别“心脏病”与“心内科医生”之间的关系,这种精准度是传统方法难以实现的。

LightRAG 增强了分段检索系统 将文档转换为更小、更易于管理的片段。此策略允许快速 识别和访问相关 信息,而无需分析整个文档。接下来,我们利用LLMs 来识别和 提取各种实体(例如 名称、日期、位置和事件)以及它们之间的关系。这通过此收集的信息进程将用于创建一个全面的知识图谱,该图谱突出显示跨整个文档集合。基于图形的文本索引中使用的函数 paradigm 的描述如下:

更快、更强、更经济!超越GraphRAG的大模型RAG系统LightRAG开源啦!-AI.x社区

高效与经济兼备

在检索效率和资源消耗上,LightRAG同样表现出色。它通过减少不必要的计算和API调用,有效应对大量的信息查询请求,同时保持资源使用的经济性。在实际应用场景中,这意味着LightRAG能够快速更新并保持高效,即使是在资源受限的情况下也能够稳定运行。

灵活适应动态数据

LightRAG的设计还巧妙地解决了如何适应快速变化的外部数据库的问题。通过增量更新机制,系统只需对新增数据进行索引和合并,避免了对整个数据库的重新处理。这一策略不仅提升了系统的灵活性,也使得LightRAG能够在各种动态环境中稳定运行。

实验验证:超越现有模型

研究团队对LightRAG进行了详尽的实验评估,结果显示,在全面性和多样性等多个维度上,LightRAG显著优于目前主流的RAG模型。这一结果不仅验证了图结构在信息检索中的有效性,也为未来开发更多强大的AI模型提供了有力的参考。

Agriculture


CS


Legal


Mix




NaiveRAG

LightRAG

NaiveRAG

LightRAG

NaiveRAG

LightRAG

NaiveRAG

LightRAG

Comprehensiveness

32.69%

67.31%

35.44%

64.56%

19.05%

80.95%

36.36%

63.64%

Diversity

24.09%

75.91%

35.24%

64.76%

10.98%

89.02%

30.76%

69.24%

Empowerment

31.35%

68.65%

35.48%

64.52%

17.59%

82.41%

40.95%

59.05%

Overall

33.30%

66.70%

34.76%

65.24%

17.46%

82.54%

37.59%

62.40%


RQ-RAG

LightRAG

RQ-RAG

LightRAG

RQ-RAG

LightRAG

RQ-RAG

LightRAG

Comprehensiveness

32.05%

67.95%

39.30%

60.70%

18.57%

81.43%

38.89%

61.11%

Diversity

29.44%

70.56%

38.71%

61.29%

15.14%

84.86%

28.50%

71.50%

Empowerment

32.51%

67.49%

37.52%

62.48%

17.80%

82.20%

43.96%

56.04%

Overall

33.29%

66.71%

39.03%

60.97%

17.80%

82.20%

39.61%

60.39%


HyDE

LightRAG

HyDE

LightRAG

HyDE

LightRAG

HyDE

LightRAG

Comprehensiveness

24.39%

75.61%

36.49%

63.51%

27.68%

72.32%

42.17%

57.83%

Diversity

24.96%

75.34%

37.41%

62.59%

18.79%

81.21%

30.88%

69.12%

Empowerment

24.89%

75.11%

34.99%

65.01%

26.99%

73.01%

45.61%

54.39%

Overall

23.17%

76.83%

35.67%

64.33%

27.68%

72.32%

42.72%

57.28%


GraphRAG

LightRAG

GraphRAG

LightRAG

GraphRAG

LightRAG

GraphRAG

LightRAG

Comprehensiveness

45.56%

54.44%

45.98%

54.02%

47.13%

52.87%

51.86%

48.14%

Diversity

19.65%

80.35%

39.64%

60.36%

25.55%

74.45%

35.87%

64.13%

Empowerment

36.69%

63.31%

45.09%

54.91%

42.81%

57.19%

52.94%

47.06%

Overall

43.62%

56.38%

45.98%

54.02%

45.70%

54.30%

51.86%

48.14%

简单尝鲜

安装

源码安装(推荐)

cd LightRAG
pip install -e .

通过PyPI安装

pip install lightrag-hku

准备工作

因为我使用的是OpenAI, 所以设置对应的环境变量export OPENAI_API_KEY="sk-...",

这里我的测试集用的是西游记的节选,地址是:https://libart.lyu.edu.cn/2010/1202/c1449a24647/page.htm

样例代码

lightrag目前支持4种查询模式:

  1. naive
  2. local
  3. global
  4. hybrid

import os
from lightrag import LightRAG, QueryParam
from lightrag.llm import gpt_4o_mini_complete, gpt_4o_complete

#########
# Uncomment the below two lines if running in a jupyter notebook to handle the async nature of rag.insert()
# import nest_asyncio 
# nest_asyncio.apply() 
#########

WORKING_DIR = "./books"


if not os.path.exists(WORKING_DIR):
    os.mkdir(WORKING_DIR)

rag = LightRAG(
    working_dir=WORKING_DIR,
    llm_model_func=gpt_4o_mini_complete  # Use gpt_4o_mini_complete LLM model
    # llm_model_func=gpt_4o_complete  # Optionally, use a stronger model
)

with open("./book.txt") as f:
    rag.insert(f.read())

# Perform naive search
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="naive")))

# Perform local search
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="local")))

# Perform global search
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="global")))

# Perform hybrid search
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="hybrid")))

当然,你也可以选择本地model, 比如使用Hugging Face的模型:

from lightrag.llm import hf_model_complete, hf_embedding
from transformers import AutoModel, AutoTokenizer

# Initialize LightRAG with Hugging Face model
rag = LightRAG(
    working_dir=WORKING_DIR,
    llm_model_func=hf_model_complete,  # Use Hugging Face model for text generation
    llm_model_name='meta-llama/Llama-3.1-8B-Instruct',  # Model name from Hugging Face
    # Use Hugging Face embedding function
    embedding_func=EmbeddingFunc(
        embedding_dim=384,
        max_token_size=5000,
        func=lambda texts: hf_embedding(
            texts,
            tokenizer=AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2"),
            embed_model=AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
        )
    ),
)

或者使用Ollama模型:

from lightrag.llm import ollama_model_complete, ollama_embedding

# Initialize LightRAG with Ollama model
rag = LightRAG(
    working_dir=WORKING_DIR,
    llm_model_func=ollama_model_complete,  # Use Ollama model for text generation
    llm_model_name='your_model_name', # Your model name
    # Use Ollama embedding function
    embedding_func=EmbeddingFunc(
        embedding_dim=768,
        max_token_size=8192,
        func=lambda texts: ollama_embedding(
            texts,
            embed_model="nomic-embed-text"
        )
    ),
)

LightRAG的优缺点

1、解决的问题:

  • 全面信息理解:通过多跳子图的全局信息提取,能在多领域复杂查询中表现出色。
  • 检索效率高:相比传统文本分块遍历方法,利用图和向量的集成,大幅减少检索时间和计算开销。
  • 快速适应新信息:增量更新算法使系统能及时整合新数据,保持实时性和有效性。

2、缺点:

  • 检索方式:无法自动判断query为细节问题或抽象性问题,只有使用LLM才能做出自动化判断。

3、与GraphRAG的不同点:

  • 架构设计:LightRAG专注于图结构的向量化实现,避免了GraphRAG的社区遍历。
  • 检索方式:LightRAG采用双层检索框架,通过向量化的关键词匹配,实现局部和全局信息的高效整合,降低了计算和存储开销。

总结

LightRAG和GraphRAG都利用图结构来增强RAG的效果,但它们在实现方式检索策略适用场景上有显著差异。GraphRAG采用模块化社区结构分层回答策略,更适合于全局性理解和多层次的复杂问题分析;而LightRAG则侧重于向量化图索引增量更新机制,适用于高效、动态的数据环境。用户可以根据具体的应用需求选择合适的架构,以实现最优的检索和回答效果。

在实验中,微软开源的GraphRAG表现出较低的效率,正如论文中所提到的,它需要大量资源,难以支持大型知识库的工程应用,且检索速度较慢。而LightRAG的资源消耗较少,检索效率相对更高,尽管两者的检索效果可能相差不大,但LightRAG在实际工程中更具实用性。

但是个人觉得,RAG在实际应用中仍需根据情况不断优化,完全依赖LightRAG也存在局限性。关键在于借鉴LightRAG的优化思路,并将其灵活应用于实际场景。

本文转载自公众号AI 博物院 作者:longyunfeigu

原文链接:​​https://mp.weixin.qq.com/s/bBvpYlRlPXJcLxEwxcnXcg​​​


©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
相关推荐