大家好,检索增强生成(RAG)技术,作为一种融合大型语言模型(LLM)和外部数据优势的智能系统构建工具,已经变得越来越重要。在这一技术领域,LightRAG是个引人注目的亮点。这款高效的RAG框架借助知识图谱和向量检索技术,极大地增强了文档交互的效能。本文将为大家解读LightRAG的运作机制,比较它与传统方法如GraphRAG的优劣,以及如何在本地搭建LightRAG环境。
1.LightRAG简介
LightRAG是个精炼的RAG框架,专门用于通过检索关键知识片段来构建响应,并且整合了知识图谱和嵌入技术。
与那些将文档简单拆分成独立片段的传统RAG系统不同,LightRAG进一步深化了这一过程——创建了实体与实体之间的关系对,将文本中的概念紧密联系起来。
与微软的GraphRAG相比,两者有相似之处,但LightRAG在速度和成本上更具优势,并且支持对图谱进行增量更新,无需每次都重新生成整个图谱。
2.选择LightRAG的理由
传统的RAG系统在处理文档时,会将其分割成多个独立的块进行检索,但这种方法往往忽视了这些块之间的上下文联系。当问题的解答需要跨越多个块时,就难以给出准确的回答。
LightRAG通过创建知识图谱巧妙地解决了这一难题,它能够清晰地描绘出数据中实体间的相互关系,从而在处理复杂问题时提供了更为精确的答案。
3.GraphRAG的局限与LightRAG的优势
虽然GraphRAG是个创新的产品,但其在资源消耗上还是较为密集。
它依赖于数百次的API调用,并且常常需要使用成本较高的模型,例如GPT-4o。每当数据更新时,GraphRAG都需要重新构建整个图谱,这无疑增加了额外的成本。
相比之下,LightRAG则展现了其独特的优势:
-
高效调用:LightRAG减少了API调用次数,并采用了更为轻量级的模型,比如GPT-4-mini,降低了资源消耗。
-
增量更新:LightRAG支持对图谱进行增量更新,无需每次都重建整个图谱,这样既节省了时间也减少了成本。
-
双层检索:LightRAG实现了本地和全局的双层检索,进一步提升了响应的质量和准确性。
综上所述,LightRAG在效率和成本上都展现出了明显的优势,使其成为更加实用的选择。
4.保持更新
在技术和新闻这样日新月异的领域,信息的时效性至关重要。LightRAG通过其增量更新系统巧妙地应对了这一挑战,无需在每次有新信息时都重建整个知识库。它能够迅速地实时融入新数据,确保即使在动态变化的环境中,提供的答案也能保持最新和相关。
5.更快、更智能的图谱检索
LightRAG结合了图谱和向量搜索技术(这是一种快速定位相关信息的高级方法),确保了响应的准确性和速度。系统能够高效地整合相关思想,并通过去重功能剔除冗余信息,确保用户能够直接获得最关键的内容。
6.LightRAG的重要性
测试表明,LightRAG在准确性和响应速度上都大大超越了旧版的RAG模型。它能够优雅地整合新信息,确保您每次都能获得最新且具有上下文感知的答案。这种能力使得LightRAG成为了那些需要快速、精准响应的应用领域的颠覆者,比如聊天机器人、个人助理和动态搜索工具等。
7 LightRAG工作流程
LightRAG的工作流程主要分为两大环节:索引和检索。
7.1 索引过程:构建知识图谱
在LightRAG中,数据索引涉及以下几个步骤:
-
分块:将文档切割成小块,以便更精细地处理。
-
实体识别:在每个小块中,LLM识别出实体,比如人名、地点或概念。
-
关系提取:确定这些实体间的关系,形成实体-关系的键值对。
-
知识图谱构建:将这些键值对整合成图结构,并去除重复节点和冗余关系,以优化图谱。
-
嵌入存储:将描述和关系转化为向量,存储在向量数据库中,如LightRAG默认的Nano Vector数据库。
7.2 双层检索:细节与全局并重
LightRAG采用双层检索策略,结合本地和全局查询:
-
低层检索:聚焦于单个实体相关的节点,以回答具体问题,提取精确细节,例如电动汽车的具体统计数据或法规。
-
高层检索:识别整个图谱中的总体主题和连接,关注更广泛的议题,如环境趋势或城市交通的发展前景。
这种双层检索机制确保了系统能够提供既全面又深入的答案,兼顾事实和背后的深层上下文。
8.本地使用Openai模型部署LightRAG
8.1 获取LightRAG代码
首先需要获取LightRAG的代码,可以通过以下两种方式之一:
克隆仓库:
git clone https://github.com/HKUDS/LightRAG.git
cd LightRAG
从PyPI安装:
pip install lightrag-hku
8.2 创建虚拟环境
为了保持项目依赖的整洁,建议使用conda或virtualenv创建一个虚拟环境:
conda create -n lightrag python=3.12
conda activate lightrag
8.3 安装依赖
在虚拟环境中,安装所需的依赖包:
pip install -e .
8.4 数据索引与查询执行
接下来,将通过实例查尔斯·狄更斯的《圣诞颂歌》,来演示如何在LightRAG中进行数据索引和查询操作。
首先确保环境中已经安装了必要的库,并设置好了工作环境:
import os
from lightrag import LightRAG, QueryParam
from lightrag.llm import gpt_4o_mini_complete, gpt_4o_complete
#########
# 如果在Jupyter Notebook中运行,请取消注释以下两行以处理异步特性
# import nest_asyncio
# nest_asyncio.apply()
#########
WORKING_DIR = "./dickens"
if not os.path.exists(WORKING_DIR):
os.mkdir(WORKING_DIR)
rag = LightRAG(
working_dir=WORKING_DIR,
llm_model_func=gpt_4o_mini_complete # 使用gpt_4o_mini_complete LLM模型
# llm_model_func=gpt_4o_complete # 可选,使用更强大的模型
)
with open("./book.txt") as f:
rag.insert(f.read())
# 执行简单搜索
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="naive")))
# 执行本地搜索
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="local")))
# 执行全局搜索
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="global")))
# 执行混合搜索
print(rag.query("What are the top themes in this story?", param=QueryParam(mode="hybrid")))
查询模式说明:
-
naive:标准RAG模式
-
local:基于实体邻域的检索
-
global:更广泛的全局实体关系检索
-
hybrid:结合本地和全局模式
如果想要使用免费且私密的模型,可以按照以下方式操作:
import os
from lightrag import LightRAG, QueryParam
from lightrag.llm import ollama_model_complete, ollama_embedding
from lightrag.utils import EmbeddingFunc
WORKING_DIR = "./dickens"
if not os.path.exists(WORKING_DIR):
os.mkdir(WORKING_DIR)
rag = LightRAG(
working_dir=WORKING_DIR,
llm_model_func=ollama_model_complete,
llm_model_name="your_model_name",
embedding_func=EmbeddingFunc(
embedding_dim=768,
max_token_size=8192,
func=lambda texts: ollama_embedding(texts, embed_model="nomic-embed-text"),
),
)
with open("./book.txt", "r", encoding="utf-8") as f:
rag.insert(f.read())
# 执行简单搜索
print(
rag.query("What are the top themes in this story?", param=QueryParam(mode="naive"))
)
# 执行本地搜索
print(
rag.query("What are the top themes in this story?", param=QueryParam(mode="local"))
)
# 执行全局搜索
print(
rag.query("What are the top themes in this story?", param=QueryParam(mode="global"))
)
# 执行混合搜索
print(
rag.query("What are the top themes in this story?", param=QueryParam(mode="hybrid"))
)
这样就可以根据自己的需求,选择使用Openai模型或者ollama模型来部署和运行LightRAG了。
9.LightRAG的核心应用场景
LightRAG在处理复杂文档和进行实体分析的领域中发挥着重要作用。以下是几个关键的应用实例:
-
法律研究:在法律领域,LightRAG能够提取法律条文、案例和先例之间的联系,为法律研究提供支持。
-
医疗保健:在医疗保健行业,LightRAG分析患者数据、症状和治疗方案,以发现新的医疗见解。
-
农业:在农业领域,LightRAG组织并检索关于作物、土壤和天气模式的信息,助力农业决策。
这些应用展示了LightRAG在不同行业中的实际价值和潜力。
LightRAG标志着检索增强生成技术的新篇章,它以轻量级和经济实惠的方式,集成了知识图谱和向量检索功能。相较于GraphRAG,LightRAG在实用性和成本效益上更胜一筹,这得益于其增量更新、双层检索的能力,以及与本地或小型模型的兼容性。无论是处理大规模数据集,还是要生成智能化、具有上下文感知的回答,LightRAG都能提供一个强大的开源解决方案。