Overseas access: www.kdjingpai.com
Bookmark Us

LightRAG 是一个由香港大学数据科学学院团队开发的开源Python框架,旨在简化和加速检索增强生成(RAG)应用的构建过程。 它通过将知识图谱与传统的向量检索技术相结合,为大语言模型(LLM)提供更精确、更具上下文关联性的信息,从而提升生成内容的质量。 该框架的核心特点是其轻量化和模块化设计,它将复杂的RAG流程分解为文档解析、索引构建、信息检索、内容重排和文本生成等多个独立的组件。这种设计不仅降低了开发者的使用门槛,还提供了高度的灵活性,允许用户根据具体需求轻松替换或自定义不同的模块,例如集成不同的向量数据库、图数据库或大语言模型。 LightRAG专为需要处理复杂信息和深度关系的场景设计,致力于解决传统RAG系统中文本信息碎片化、缺乏深层联系的问题。

 

Function List

  • modular design: 将RAG流程分解为文档解析、索引、检索、重排和生成等清晰的模块,易于理解和定制。
  • 知识图谱集成: 能够从非结构化文本中自动提取实体和关系,构建知识图谱,从而实现对信息更深层次的理解和关联。
  • 双层检索机制: 结合了基于向量的相似度搜索和基于知识图谱的关联检索,能够同时处理针对具体细节(局部)和宏观概念(全局)的查询。
  • 灵活的存储选项: 支持多种存储后端,包括用于键值对存储的Json、PostgreSQL、Redis;用于向量存储的FAISS、Chroma、Milvus;以及用于图存储的Neo4j、PostgreSQL AGE等。
  • 模型兼容性强: 支持接入多种大语言模型(LLM)和嵌入模型(Embedding Model),包括OpenAI、Hugging Face和Ollama等平台提供的模型。
  • Multi-file format support: 能够处理包括PDF、DOCX、PPTX、CSV和纯文本在内的多种文档格式。
  • Visualization tools: 提供Web界面,支持知识图谱的可视化探索,让用户能直观地看到数据之间的关联。
  • multimodal capability: 通过与RAG-Anything集成,扩展了对图像、表格、公式等多模态内容的处理能力。

Using Help

LightRAG 是一个功能强大且易于使用的框架,旨在帮助开发者快速搭建基于自有知识库的智能问答系统。它最大的特色是结合了知识图谱,使得检索结果不仅相关,而且逻辑关系更强。下面将详细介绍其安装和使用流程。

mounting

开始使用 LightRAG 非常简单,可以通过 Python 的包管理器 pip 直接安装。推荐安装包含API和Web界面的完整版本,这样可以体验到包括知识图谱可视化在内的全部功能。

  1. Installation via PyPI:
    Open a terminal and execute the following command:

    pip install "lightrag-hku[api]"
    

    这条命令会安装 LightRAG 的核心库以及其服务器所需的相关依赖。

  2. Configuring Environment Variables:
    安装完成后,需要配置运行环境。LightRAG 提供了一个环境文件模板 env.example。你需要将它复制为 .env 文件,并根据你的情况修改配置,最关键的是设置大语言模型(LLM)和嵌入模型(Embedding Model)的API密钥。

    cp env.example .env
    

    接着用文本编辑器打开 .env 文件,填入你的 OPENAI_API_KEY 或其他模型的访问凭证。

  3. Starting services:
    配置完成后,直接在终端运行以下命令即可启动 LightRAG 服务:

    lightrag-server
    

    服务启动后,你就可以通过浏览器访问其提供的Web界面,或通过API与其交互。

Core Usage Process

LightRAG 的核心编程流程遵循一个清晰的 RAG 逻辑:数据投喂 -> 索引构建 -> 查询生成。下面通过一个简单的Python代码示例来演示如何使用 LightRAG Core 实现一个完整的问答流程。

  1. 初始化 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
    

    take note ofinitialize_storages() cap (a poem) initialize_pipeline_status() 这两个初始化步骤是必需的,否则程序会报错。

  2. 投喂数据 (Insert)
    初始化完成后,你就可以向 LightRAG 中添加你的文本数据了。ainsert 方法接收一个字符串或字符串列表。

    async def feed_data(rag_instance):
    text_to_insert = "史蒂芬·乔布斯是一位美国商业巨头和发明家。他是苹果公司的联合创始人、董事长和首席执行官。乔布斯被广泛认为是微型计算机革命的先驱。"
    await rag_instance.ainsert(text_to_insert)
    print("数据投喂成功!")
    

    在这一步,LightRAG 会在后台自动对文本进行分块、提取实体和关系、生成向量嵌入,并构建知识图谱。

  3. 查询数据 (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}")
    
  4. 组合并运行
    最后,我们将以上步骤整合到一个主函数中并使用 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 cap (a poem) global 的优点,是功能最全面、效果通常也最好的模式。
  • mix: 集成了知识图谱和向量检索,是大多数情况下的推荐模式。

Through the use of the QueryParam set up in mode 参数,你可以灵活地切换这些模式,以达到最佳的查询效果。

application scenario

  1. 智能客服与问答系统
    企业可以将产品手册、帮助文档、历史客服记录等内部资料注入LightRAG,构建一个能够准确、快速回答客户问题的智能客服机器人。 由于结合了知识图谱,系统不仅能找到答案,还能理解问题背后的关联信息,提供更全面的解答,例如在回答一个产品功能问题时,可以一并提供相关的使用技巧或常见问题链接。
  2. 企业内部知识库管理
    对于拥有海量内部文档(如技术文档、项目报告、规章制度)的企业,LightRAG可以将其转化为一个结构化的、可智能查询的知识库。 员工可以用自然语言提问,快速定位到需要的信息,甚至发现不同文档之间隐藏的联系,极大地提升了信息检索效率和知识利用率。
  3. 科研与文献分析
    研究人员可以利用LightRAG处理大量的学术论文和研究报告。 系统能够自动抽取出关键的实体(如技术、学者、实验)、概念及其关系,并构建成知识图谱。这使得研究人员可以轻松地进行跨文档的知识探索,例如查询“某个技术在不同研究中的应用”或“两位学者之间的合作关系”,从而加速科研进程。
  4. 金融与法律文档分析
    在金融和法律等专业领域,文档通常内容复杂、体量巨大。LightRAG能够帮助分析师或律师快速从年报、招股书、法律条款等文件中提取关键信息,并梳理其中的逻辑关系。 例如,可以快速找出合同中的所有责任方及其对应的权责条款,或者分析多家公司财报中关于同一项业务的描述,从而辅助决策。

QA

  1. LightRAG 与 LangChain 或 LlamaIndex 这类通用框架有什么不同?
    LightRAG 的核心区别在于它专注于将知识图谱深度整合到 RAG 流程中,旨在解决传统 RAG 信息碎片化的问题。 而 LangChain 和 LlamaIndex 是功能更广泛、更通用的LLM应用开发框架,它们提供了大量的工具和集成选项,但学习曲线也相对陡峭。LightRAG 则更轻量级,目标是为开发者提供一个简单、快速且高效的、以内置知识图谱为特色的RAG解决方案。
  2. 使用 LightRAG 对大语言模型(LLM)有什么特殊要求吗?
    是的,由于 LightRAG 需要利用 LLM 从文档中提取实体和关系来构建知识图谱,这对模型的指令遵循能力和上下文理解能力有较高要求。 官方建议使用参数量至少达到320亿的模型,并且上下文窗口长度至少为32KB,推荐64KB,以确保能处理较长的文档并准确完成实体抽取任务。
  3. LightRAG 支持哪些类型的数据库?
    LightRAG 的存储层是模块化的,支持多种数据库实现。对于键值存储(KV Storage),它支持本地JSON文件、PostgreSQL、Redis和MongoDB。对于向量存储(Vector Storage),支持NanoVectorDB(默认)、FAISS、Chroma、Milvus等。对于图存储(Graph Storage),它支持NetworkX(默认)、Neo4j以及带有AGE插件的PostgreSQL。这种设计让用户可以根据自己的技术栈和性能需求灵活选择。
  4. 我可以在 LightRAG 中使用自己的模型吗?比如部署在 Hugging Face 或 Ollama 上的模型?
    可以。LightRAG 设计了灵活的模型注入机制,允许用户集成自定义的LLM和嵌入模型。 仓库的示例代码中已经提供了如何接入 Hugging Face 和 Ollama 模型的范例。你只需要编写一个符合其接口规范的调用函数,并在初始化 LightRAG 实例时将其传入即可,这使得它能够与各类开源或私有化部署的模型无缝对接。
0Bookmarked
0kudos

Can't find AI tools? Try here!

Just type in the keyword Accessibility Bing SearchYou can quickly find all the AI tools on this site.

Top

en_USEnglish