更快、更強、更經(jīng)濟!超越GraphRAG的大模型RAG系統(tǒng)LightRAG開源啦! 原創(chuàng)
?在這個信息爆炸的時代,我們每天都被大量的數(shù)據(jù)和信息所包圍。對于企業(yè)和研究人員來說,如何從這海量的信息中迅速地找到自己需要的針對性數(shù)據(jù),已經(jīng)成為了一個亟待解決的問題。幸運的是,香港大學(xué)的研究團隊最近推出的LightRAG系統(tǒng),為我們提供了一個新的解決方案。
LightRAG系統(tǒng)是基于RAG(Retrieval-Augmented Generation)的開源技術(shù),它通過引入先進的雙層檢索范式和基于圖的數(shù)據(jù)結(jié)構(gòu),大大提升了信息檢索的全面性和效率。更為重要的是,它能夠快速適應(yīng)新數(shù)據(jù),這在今天這個信息快速更新?lián)Q代的時代尤為關(guān)鍵。
核心創(chuàng)新:基于圖的數(shù)據(jù)結(jié)構(gòu)
與傳統(tǒng)的RAG系統(tǒng)相比,LightRAG的一個顯著優(yōu)勢在于其基于圖的數(shù)據(jù)結(jié)構(gòu)。這種結(jié)構(gòu)能夠有效地捕捉數(shù)據(jù)中實體之間的復(fù)雜關(guān)系,從而使檢索結(jié)果更加精確。舉個例子,在醫(yī)學(xué)領(lǐng)域,LightRAG能夠識別“心臟病”與“心內(nèi)科醫(yī)生”之間的關(guān)系,這種精準(zhǔn)度是傳統(tǒng)方法難以實現(xiàn)的。
LightRAG 增強了分段檢索系統(tǒng) 將文檔轉(zhuǎn)換為更小、更易于管理的片段。此策略允許快速 識別和訪問相關(guān) 信息,而無需分析整個文檔。接下來,我們利用LLMs 來識別和 提取各種實體(例如 名稱、日期、位置和事件)以及它們之間的關(guān)系。這通過此收集的信息進程將用于創(chuàng)建一個全面的知識圖譜,該圖譜突出顯示跨整個文檔集合。基于圖形的文本索引中使用的函數(shù) paradigm 的描述如下:
高效與經(jīng)濟兼?zhèn)?/h2>
在檢索效率和資源消耗上,LightRAG同樣表現(xiàn)出色。它通過減少不必要的計算和API調(diào)用,有效應(yīng)對大量的信息查詢請求,同時保持資源使用的經(jīng)濟性。在實際應(yīng)用場景中,這意味著LightRAG能夠快速更新并保持高效,即使是在資源受限的情況下也能夠穩(wěn)定運行。
靈活適應(yīng)動態(tài)數(shù)據(jù)
LightRAG的設(shè)計還巧妙地解決了如何適應(yīng)快速變化的外部數(shù)據(jù)庫的問題。通過增量更新機制,系統(tǒng)只需對新增數(shù)據(jù)進行索引和合并,避免了對整個數(shù)據(jù)庫的重新處理。這一策略不僅提升了系統(tǒng)的靈活性,也使得LightRAG能夠在各種動態(tài)環(huán)境中穩(wěn)定運行。
實驗驗證:超越現(xiàn)有模型
研究團隊對LightRAG進行了詳盡的實驗評估,結(jié)果顯示,在全面性和多樣性等多個維度上,LightRAG顯著優(yōu)于目前主流的RAG模型。這一結(jié)果不僅驗證了圖結(jié)構(gòu)在信息檢索中的有效性,也為未來開發(fā)更多強大的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
準(zhǔn)備工作
因為我使用的是OpenAI, 所以設(shè)置對應(yīng)的環(huán)境變量export OPENAI_API_KEY="sk-...",
這里我的測試集用的是西游記的節(jié)選,地址是:https://libart.lyu.edu.cn/2010/1202/c1449a24647/page.htm
樣例代碼
lightrag目前支持4種查詢模式:
- naive
- local
- global
- 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")))
當(dāng)然,你也可以選擇本地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的優(yōu)缺點
1、解決的問題:
- 全面信息理解:通過多跳子圖的全局信息提取,能在多領(lǐng)域復(fù)雜查詢中表現(xiàn)出色。
- 檢索效率高:相比傳統(tǒng)文本分塊遍歷方法,利用圖和向量的集成,大幅減少檢索時間和計算開銷。
- ?快速適應(yīng)新信息:增量更新算法使系統(tǒng)能及時整合新數(shù)據(jù),保持實時性和有效性。
2、缺點:
- 檢索方式:無法自動判斷query為細(xì)節(jié)問題或抽象性問題,只有使用LLM才能做出自動化判斷。
3、與GraphRAG的不同點:
- 架構(gòu)設(shè)計:LightRAG專注于圖結(jié)構(gòu)的向量化實現(xiàn),避免了GraphRAG的社區(qū)遍歷。
- 檢索方式:LightRAG采用雙層檢索框架,通過向量化的關(guān)鍵詞匹配,實現(xiàn)局部和全局信息的高效整合,降低了計算和存儲開銷。
總結(jié)
LightRAG和GraphRAG都利用圖結(jié)構(gòu)來增強RAG的效果,但它們在實現(xiàn)方式、檢索策略和適用場景上有顯著差異。GraphRAG采用模塊化社區(qū)結(jié)構(gòu)和分層回答策略,更適合于全局性理解和多層次的復(fù)雜問題分析;而LightRAG則側(cè)重于向量化圖索引和增量更新機制,適用于高效、動態(tài)的數(shù)據(jù)環(huán)境。用戶可以根據(jù)具體的應(yīng)用需求選擇合適的架構(gòu),以實現(xiàn)最優(yōu)的檢索和回答效果。
在實驗中,微軟開源的GraphRAG表現(xiàn)出較低的效率,正如論文中所提到的,它需要大量資源,難以支持大型知識庫的工程應(yīng)用,且檢索速度較慢。而LightRAG的資源消耗較少,檢索效率相對更高,盡管兩者的檢索效果可能相差不大,但LightRAG在實際工程中更具實用性。
但是個人覺得,RAG在實際應(yīng)用中仍需根據(jù)情況不斷優(yōu)化,完全依賴LightRAG也存在局限性。關(guān)鍵在于借鑒LightRAG的優(yōu)化思路,并將其靈活應(yīng)用于實際場景。
?
本文轉(zhuǎn)載自公眾號AI 博物院 作者:longyunfeigu
原文鏈接:??https://mp.weixin.qq.com/s/bBvpYlRlPXJcLxEwxcnXcg???
