LightRAG 类与管线 Orchestration
LightRAG 类与管线编排
相关源文件
本章引用的主要源码文件:
lightrag/__init__.pylightrag/api/__init__.pylightrag/base.pylightrag/lightrag.pylightrag/operate.pylightrag/prompt.pylightrag/utils.py
LightRAG 类作为整个框架的中央入口点和编排器。它管理存储后端的生命周期,提供用于文档入库和检索的高级 API,并协调将原始文本转换为与向量搜索集成的结构化知识图谱的多阶段管线。
LightRAG 类生命周期
LightRAG 类被定义为一个最终的 dataclass,它继承自多个混入类以提供专门功能:_RoleLLMMixin 用于大语言模型(LLM)配置,_StorageMigrationMixin 用于模式更新,以及 _PipelineMixin 用于文档处理 lightrag/lightrag.py:157-160。
初始化与存储设置
在实例化时,LightRAG 会配置其工作环境并初始化其存储组件。存储架构是可插拔的,允许用户为键值(KV)、向量和图数据指定不同的后端 lightrag/lightrag.py:171-181。
initialize_storages:此内部方法根据提供的配置字符串(例如JsonKVStorage、NetworkXStorage)实例化存储类。它使用工厂模式解析存储类,并调用它们各自的initialize()方法lightrag/lightrag.py:440-496。finalize_storages:此方法确保所有待处理操作都已提交,并释放资源。它会遍历所有已初始化的存储命名空间,并调用它们的finalize()和index_done_callback()方法lightrag/lightrag.py:516-525。
工作空间隔离
workspace 属性支持在同一存储后端内实现数据隔离。如果设置了该属性,它会使用工作空间名称作为前缀或命名空间标识符来对数据进行分区 lightrag/lightrag.py:186-188。
主要接口
该类暴露了三个主要的异步方法,用于与检索增强生成(RAG)系统进行交互:
| 方法 | 用途 | 关键参数 |
|---|---|---|
ainsert | 将原始文本入库到知识图谱和向量数据库中 | content(字符串或列表) |
aquery | 使用支持的查询模式之一执行检索增强生成(RAG)查询 | query(字符串),param(QueryParam) |
aquery_data | 检索原始上下文数据,而不生成大语言模型(LLM)响应 | query(字符串),param(QueryParam) |
来源:lightrag/lightrag.py:560,lightrag/lightrag.py:657,lightrag/lightrag.py:688
知识图谱构建管线
由 ainsert 触发的入库过程遵循一个结构化的管线,该管线在 lightrag/operate.py 中管理。此管线弥合了非结构化自然语言与正式图结构之间的差距。
管线流程:从文本到图谱
- 片段切分:使用
chunking_by_token_size将输入文本分割成更小的片段,以确保它们适合大语言模型(LLM)的上下文窗口lightrag/lightrag.py:588。 - 提取:对每个片段调用
extract_entities。它使用大语言模型(LLM)根据entity_extraction_system_prompt识别实体和关系lightrag/operate.py:106,lightrag/prompt.py:34。 - 合并与摘要:将提取的实体和关系合并到现有图谱中。如果同一实体存在多个描述,
_handle_entity_relation_summary会执行 map-reduce 摘要以创建统一的描述lightrag/operate.py:198-213。 - 索引:最终的实体、关系和片段被嵌入并存储在向量数据库(
entities_vdb、relationships_vdb、chunks_vdb)中lightrag/lightrag.py:465-475。
自然语言到代码实体的映射
下图说明了在构建过程中,自然语言概念如何映射到特定的代码实体和存储命名空间。
图:入库编排映射
来源:lightrag/lightrag.py:588-610,lightrag/operate.py:106-213,lightrag/base.py:180-200
_PipelineMixin 与异步编排
_PipelineMixin 提供了异步处理长时间运行文档任务的基础设施。它管理任务队列,并确保系统在大量入库期间保持响应 lightrag/lightrag.py:159。
关键管线机制
- 并发控制:使用
priority_limit_async_func_call和信号量来限制并行大语言模型(LLM)调用和存储操作的数量,防止速率限制问题lightrag/lightrag.py:120,lightrag/lightrag.py:255。 - 协作让步:
operate.py中的长时间运行循环会调用_cooperative_yield(通过asyncio.sleep(0)),以允许事件循环处理其他任务,例如心跳检查或状态查询lightrag/operate.py:46。 - 状态跟踪:使用
doc_status_storage监控文档在PENDING、PARSING、PROCESSING和COMPLETED等状态之间的进度lightrag/lightrag.py:180-181。
检索编排
当调用 aquery 时,编排会转向 kg_query。此函数协调关键词提取、子图检索和上下文组装。
图:检索数据流
来源:lightrag/lightrag.py:657-686,lightrag/operate.py:107-108
关键函数摘要
lightrag/lightrag.py:LightRAG.ainsert:添加数据的入口点lightrag/lightrag.py:560。LightRAG.aquery:查询的入口点lightrag/lightrag.py:657。lightrag/operate.py:extract_entities:基于大语言模型(LLM)的知识图谱提取逻辑lightrag/operate.py:106。kg_query:多模式知识图谱检索逻辑lightrag/operate.py:107。_handle_entity_relation_summary:用于合并图谱节点的 map-reduce 逻辑lightrag/operate.py:198。
来源:lightrag/lightrag.py,lightrag/operate.py,lightrag/base.py,lightrag/prompt.py