LightRAG 是一个由香港大学数据科学学院团队开发的开源Python框架,旨在简化和加速检索增强生成(RAG)应用的构建过程。 它通过将知识图谱与传统的向量检索技术相结合,为大语言模型(LLM)提供更精确、更具上下文关联性的信息,从而提升生成内容的质量。 该框架的核心特点是其轻量化和模块化设计,它将复杂的RAG流程分解为文档解析、索引构建、信息检索、内容重排和文本生成等多个独立的组件。这种设计不仅降低了开发者的使用门槛,还提供了高度的灵活性,允许用户根据具体需求轻松替换或自定义不同的模块,例如集成不同的向量数据库、图数据库或大语言模型。 LightRAG专为需要处理复杂信息和深度关系的场景设计,致力于解决传统RAG系统中文本信息碎片化、缺乏深层联系的问题。
機能一覧
- モジュール設計: 将RAG流程分解为文档解析、索引、检索、重排和生成等清晰的模块,易于理解和定制。
- 知识图谱集成: 能够从非结构化文本中自动提取实体和关系,构建知识图谱,从而实现对信息更深层次的理解和关联。
- 双层检索机制: 结合了基于向量的相似度搜索和基于知识图谱的关联检索,能够同时处理针对具体细节(局部)和宏观概念(全局)的查询。
- 灵活的存储选项: 支持多种存储后端,包括用于键值对存储的Json、PostgreSQL、Redis;用于向量存储的FAISS、Chroma、Milvus;以及用于图存储的Neo4j、PostgreSQL AGE等。
- 模型兼容性强: 支持接入多种大语言模型(LLM)和嵌入模型(Embedding Model),包括OpenAI、Hugging Face和Ollama等平台提供的模型。
- マルチファイル・フォーマット対応: 能够处理包括PDF、DOCX、PPTX、CSV和纯文本在内的多种文档格式。
- 視覚化ツール: 提供Web界面,支持知识图谱的可视化探索,让用户能直观地看到数据之间的关联。
- マルチモーダル機能: 通过与RAG-Anything集成,扩展了对图像、表格、公式等多模态内容的处理能力。
ヘルプの使用
LightRAG 是一个功能强大且易于使用的框架,旨在帮助开发者快速搭建基于自有知识库的智能问答系统。它最大的特色是结合了知识图谱,使得检索结果不仅相关,而且逻辑关系更强。下面将详细介绍其安装和使用流程。
取り付け
开始使用 LightRAG 非常简单,可以通过 Python 的包管理器 pip 直接安装。推荐安装包含API和Web界面的完整版本,这样可以体验到包括知识图谱可视化在内的全部功能。
- PyPI経由でのインストール:
ターミナルを開き、以下のコマンドを実行する:pip install "lightrag-hku[api]"
这条命令会安装 LightRAG 的核心库以及其服务器所需的相关依赖。
- 環境変数の設定:
安装完成后,需要配置运行环境。LightRAG 提供了一个环境文件模板env.example
。你需要将它复制为.env
文件,并根据你的情况修改配置,最关键的是设置大语言模型(LLM)和嵌入模型(Embedding Model)的API密钥。cp env.example .env
接着用文本编辑器打开
.env
文件,填入你的OPENAI_API_KEY
或其他模型的访问凭证。 - サービス開始:
配置完成后,直接在终端运行以下命令即可启动 LightRAG 服务:lightrag-server
服务启动后,你就可以通过浏览器访问其提供的Web界面,或通过API与其交互。
コア使用プロセス
LightRAG 的核心编程流程遵循一个清晰的 RAG 逻辑:数据投喂 -> 索引构建 -> 查询生成。下面通过一个简单的Python代码示例来演示如何使用 LightRAG Core 实现一个完整的问答流程。
- 初始化 LightRAG 实例
首先,你需要导入必要的模块并创建一个 LightRAG 实例。在初始化时,必须指定工作目录(用于存放数据和缓存)、嵌入函数和LLM函数。import os import asyncio from lightrag import LightRAG, QueryParam from lightrag.llm.openai import gpt_4o_mini_complete, openai_embed from lightrag.kg.shared_storage import initialize_pipeline_status # 设置工作目录 WORKING_DIR = "./rag_storage" if not os.path.exists(WORKING_DIR): os.mkdir(WORKING_DIR) # 设置你的OpenAI API密钥 os.environ["OPENAI_API_KEY"] = "sk-..." async def initialize_rag(): # 创建LightRAG实例,并注入模型函数 rag = LightRAG( working_dir=WORKING_DIR, embedding_func=openai_embed, llm_model_func=gpt_4o_mini_complete, ) # 重要:必须初始化存储和处理管道 await rag.initialize_storages() await initialize_pipeline_status() return rag
銘記する:
initialize_storages()
歌で応えるinitialize_pipeline_status()
这两个初始化步骤是必需的,否则程序会报错。 - 投喂数据 (Insert)
初始化完成后,你就可以向 LightRAG 中添加你的文本数据了。ainsert
方法接收一个字符串或字符串列表。async def feed_data(rag_instance): text_to_insert = "史蒂芬·乔布斯是一位美国商业巨头和发明家。他是苹果公司的联合创始人、董事长和首席执行官。乔布斯被广泛认为是微型计算机革命的先驱。" await rag_instance.ainsert(text_to_insert) print("数据投喂成功!")
在这一步,LightRAG 会在后台自动对文本进行分块、提取实体和关系、生成向量嵌入,并构建知识图谱。
- 查询数据 (Query)
数据投喂并建立索引后,就可以进行查询了。aquery
方法接收一个问题,并通过QueryParam
对象来控制查询的行为。async def ask_question(rag_instance): query_text = "谁是苹果公司的联合创始人?" # 使用QueryParam配置查询模式 # "hybrid" 模式结合了向量搜索和图检索,推荐使用 query_params = QueryParam(mode="hybrid") response = await rag_instance.aquery(query_text, param=query_params) print(f"问题: {query_text}") print(f"答案: {response}")
- 组合并运行
最后,我们将以上步骤整合到一个主函数中并使用asyncio
来运行。async def main(): rag = None try: rag = await initialize_rag() await feed_data(rag) await ask_question(rag) except Exception as e: print(f"发生错误: {e}") finally: if rag: # 程序结束时释放存储资源 await rag.finalize_storages() if __name__ == "__main__": asyncio.run(main())
查询模式详解
LightRAG 提供了多种查询模式,以适应不同的应用场景:
naive
: 基础的向量搜索模式,适用于简单的问答。local
: 侧重于与查询直接相关的实体信息,适合需要精确、具体答案的场景。global
: 侧重于实体之间的关系和全局知识,适合需要宏观、关联性答案的场景。hybrid
: 结合了local
歌で応えるglobal
的优点,是功能最全面、效果通常也最好的模式。mix
: 集成了知识图谱和向量检索,是大多数情况下的推荐模式。
通过在 QueryParam
セットアップ mode
参数,你可以灵活地切换这些模式,以达到最佳的查询效果。
アプリケーションシナリオ
- 智能客服与问答系统
企业可以将产品手册、帮助文档、历史客服记录等内部资料注入LightRAG,构建一个能够准确、快速回答客户问题的智能客服机器人。 由于结合了知识图谱,系统不仅能找到答案,还能理解问题背后的关联信息,提供更全面的解答,例如在回答一个产品功能问题时,可以一并提供相关的使用技巧或常见问题链接。 - 企业内部知识库管理
对于拥有海量内部文档(如技术文档、项目报告、规章制度)的企业,LightRAG可以将其转化为一个结构化的、可智能查询的知识库。 员工可以用自然语言提问,快速定位到需要的信息,甚至发现不同文档之间隐藏的联系,极大地提升了信息检索效率和知识利用率。 - 科研与文献分析
研究人员可以利用LightRAG处理大量的学术论文和研究报告。 系统能够自动抽取出关键的实体(如技术、学者、实验)、概念及其关系,并构建成知识图谱。这使得研究人员可以轻松地进行跨文档的知识探索,例如查询“某个技术在不同研究中的应用”或“两位学者之间的合作关系”,从而加速科研进程。 - 金融与法律文档分析
在金融和法律等专业领域,文档通常内容复杂、体量巨大。LightRAG能够帮助分析师或律师快速从年报、招股书、法律条款等文件中提取关键信息,并梳理其中的逻辑关系。 例如,可以快速找出合同中的所有责任方及其对应的权责条款,或者分析多家公司财报中关于同一项业务的描述,从而辅助决策。
品質保証
- LightRAG 与 LangChain 或 LlamaIndex 这类通用框架有什么不同?
LightRAG 的核心区别在于它专注于将知识图谱深度整合到 RAG 流程中,旨在解决传统 RAG 信息碎片化的问题。 而 LangChain 和 LlamaIndex 是功能更广泛、更通用的LLM应用开发框架,它们提供了大量的工具和集成选项,但学习曲线也相对陡峭。LightRAG 则更轻量级,目标是为开发者提供一个简单、快速且高效的、以内置知识图谱为特色的RAG解决方案。 - 使用 LightRAG 对大语言模型(LLM)有什么特殊要求吗?
是的,由于 LightRAG 需要利用 LLM 从文档中提取实体和关系来构建知识图谱,这对模型的指令遵循能力和上下文理解能力有较高要求。 官方建议使用参数量至少达到320亿的模型,并且上下文窗口长度至少为32KB,推荐64KB,以确保能处理较长的文档并准确完成实体抽取任务。 - LightRAG 支持哪些类型的数据库?
LightRAG 的存储层是模块化的,支持多种数据库实现。对于键值存储(KV Storage),它支持本地JSON文件、PostgreSQL、Redis和MongoDB。对于向量存储(Vector Storage),支持NanoVectorDB(默认)、FAISS、Chroma、Milvus等。对于图存储(Graph Storage),它支持NetworkX(默认)、Neo4j以及带有AGE插件的PostgreSQL。这种设计让用户可以根据自己的技术栈和性能需求灵活选择。 - 我可以在 LightRAG 中使用自己的模型吗?比如部署在 Hugging Face 或 Ollama 上的模型?
可以。LightRAG 设计了灵活的模型注入机制,允许用户集成自定义的LLM和嵌入模型。 仓库的示例代码中已经提供了如何接入 Hugging Face 和 Ollama 模型的范例。你只需要编写一个符合其接口规范的调用函数,并在初始化 LightRAG 实例时将其传入即可,这使得它能够与各类开源或私有化部署的模型无缝对接。