首页 > 其他分享 >轻量高效的知识图谱RAG系统:LightRAG

轻量高效的知识图谱RAG系统:LightRAG

时间:2024-12-17 22:31:13浏览次数:5  
标签:RAG func LightRAG llm embedding model 轻量 id

LightRAG是港大Data Lab提出一种基于知识图谱结构的RAG方案,相比GraphRAG具有更快更经济的特点。

架构


1 索引阶段:对文档进行切分处理,提取其中的实体和边分别进行向量化处理,存放在向量知识库
2 检索阶段:对用于输入分别提取局部和全局关键词,分别用于检索向量知识库中的实体和边关系,同时结合相关的chunk进行总结

下载方式

1 源码安装

cd LightRAG
pip install -e .

2 pypi源安装

pip install lightrag-hku

需要额外手动安装多个包,不太方便。建议从源码安装,可以直接下载所有依赖

模型支持

1 支持兼容openai规范的接口

async def llm_model_func(
    prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs
) -> str:
    return await openai_complete_if_cache(
        "solar-mini",
        prompt,
        system_prompt=system_prompt,
        history_messages=history_messages,
        api_key=os.getenv("UPSTAGE_API_KEY"),
        base_url="https://api.upstage.ai/v1/solar",
        **kwargs
    )

async def embedding_func(texts: list[str]) -> np.ndarray:
    return await openai_embedding(
        texts,
        model="solar-embedding-1-large-query",
        api_key=os.getenv("UPSTAGE_API_KEY"),
        base_url="https://api.upstage.ai/v1/solar"
    )

2 支持hg部署模型

from lightrag.llm import hf_model_complete, hf_embedding
from transformers import AutoModel, AutoTokenizer
from lightrag.utils import EmbeddingFunc


# 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")
        )
    ),
)

3 支持ollama模型

from lightrag.llm import ollama_model_complete, ollama_embedding
from lightrag.utils import EmbeddingFunc

# 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"
        )
    ),
)

修改了模型需要重新构建新目录,否则部分参数会报错

基本操作

查询参数

可以设置查询时的参数,如检索模式、topk等

class QueryParam:
    mode: Literal["local", "global", "hybrid", "naive"] = "global"
    only_need_context: bool = False
    response_type: str = "Multiple Paragraphs"
    # Number of top-k items to retrieve; corresponds to entities in "local" mode and relationships in "global" mode.
    top_k: int = 60
    # Number of tokens for the original chunks.
    max_token_for_text_unit: int = 4000
    # Number of tokens for the relationship descriptions
    max_token_for_global_context: int = 4000
    # Number of tokens for the entity descriptions
    max_token_for_local_context: int = 4000

print(rag.query("What are the top themes in this story?", param=QueryParam(mode="naive")))

增量添加文档数据

与初始化图谱类似,执行insert操作即可。

with open("./newText.txt") as f:
    rag.insert(f.read())

添加自定义图谱

除了从文档创建图谱外,LightRAG还支持以离线的方式添加实体或者关系以及原始chunk。

custom_kg = {
    "entities": [
        {
            "entity_name": "CompanyA",
            "entity_type": "Organization",
            "description": "A major technology company",
            "source_id": "Source1"
        },
        {
            "entity_name": "ProductX",
            "entity_type": "Product",
            "description": "A popular product developed by CompanyA",
            "source_id": "Source1"
        }
    ],
    "relationships": [
        {
            "src_id": "CompanyA",
            "tgt_id": "ProductX",
            "description": "CompanyA develops ProductX",
            "keywords": "develop, produce",
            "weight": 1.0,
            "source_id": "Source1"
        }
    ],
    "chunks": [
        {
            "content": "ProductX, developed by CompanyA, has revolutionized the market with its cutting-edge features.",
            "source_id": "Source1",
        },
        {
            "content": "PersonA is a prominent researcher at UniversityB, focusing on artificial intelligence and machine learning.",
            "source_id": "Source2",
        },
        {
            "content": "None",
            "source_id": "UNKNOWN",
        },
    ],
}

rag.insert_custom_kg(custom_kg)

删除实体

# 删除特定名称的实体
rag.delete_by_entity("Project Gutenberg")

总结

● 在构建图谱的过程中为每个实体节点和关系边生成一个文本的键值对。每个索引键是一个单词或短语,用于高效检索,对应的值是一个经过总结外部数据后生成的文本段落,,有助于文本生成。
● 增量更新算法使得在新增文档的适合无需重新构建图谱,这使得LightRAG具有更显著的经济性和便捷性。

标签:RAG,func,LightRAG,llm,embedding,model,轻量,id
From: https://www.cnblogs.com/deeplearningmachine/p/18613540

相关文章

  • Drag and Drop API 实现 JavaScript 中的原生拖放功能
    理解什么是拖放,我们先做个简单的实验。鼠标移动到页面左上角“CSDN”图片上方,点击左键不放开,拖动鼠标,发现图片随着鼠标移动,松开鼠标时,图片消失。一、拖放(DragandDrop)有什么作用?在JavaScript中,拖放(DragandDrop)是一种用户界面交互模式,允许用户通过鼠标选择、拖动和......
  • VS code轻量级开发平台配置(C/C++版)
    写c++代码一直用VS,后来发现太麻烦了,转站vs code。按照步骤安装,问题不大。我也是跟着一个博主学习安装的,一起学习。一、VS code下载下载链接:DownloadVisualStudioCode-Mac,Linux,Windows对应选择适合自己电脑的版本,安装路径自定义时不要包含中文字符,其他的直接下一......
  • Fleck:一个轻量级的C#开源WebSocket服务端库
    推荐一个简单易用、轻量级的C#开源WebSocket服务端库,方便我们快速实现WebSocket的开发。01项目简介Fleck是一个用C#编写的轻量级WebSocket服务器库。它提供了一个简单而直观的API,使得开发者可以轻松地在他们的应用程序中集成WebSocket功能,比如一些常见的实时通信应用,在......
  • 电脑开机或打开程序提示缺少Microsoft.Windows.Storage.Core.dll文件问题
    在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包文件不完整造成,原因可能是某些系统防护软件将重要的DLL文件识别为可疑,阻止并放入了隔离单里,还有一些常见的DLL文件缺少是因为系统没有安装齐全的微软运行库,还有部分情况是因为......
  • Containerd容器管理工具(轻量级、工业容器管理工具)
    一、Containerd介绍前言早在2016年3月,Docker1.11的DockerEngine里就包含了containerd,而现在则是把containerd从DockerEngine里彻底剥离出来,作为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器运行基础设施。和原先包含在DockerEngine里containerd相比......
  • What is Retrieval-Augmented Generation(RAG)?
    Retrieval-AugmentedGeneration:检索增强生成我们先探讨什么是Generation,而后再来理解Retrieval-Augmented。Generation是指大语言模型生成文本,以响应用户的查询信息(query,也可以理解为prompt)。然而,在生成文本的过程中,大模型可能会出现一些不好的行为。下面是一个有趣的例子:......
  • 如何让 localStorage 数据实现实时响应
    重大事项......
  • Send_Email:一款轻量化可定制模板的邮件批量发送工具
    免责声明本工具仅供学习、测试及研究使用,严禁用于任何形式的非法或未经授权的用途。如因违规使用导致任何后果,责任自负,请遵守相关法律法规。以下文章来源于薛定谔的安全,作者iak3ecSend_Email:一款轻量化可定制模板的邮件批量发送工具|可用于攻防钓鱼或其他邮件个性化的场景......
  • LameUI:轻量级嵌入式图形用户界面的绝佳选择
    在信息技术迅猛发展的今天,嵌入式系统逐渐成为各种智能设备的核心。这些系统往往面临资源有限的挑战,因此在开发用户界面时,使用轻量级、易于实现的库显得尤为重要。在这种背景下,LameUI应运而生。作为一个轻量级且平台无关的图形用户界面库,LameUI旨在为开发者提供简便的UI解决方......
  • HarmonyOS Next V2 状态管理 AppStorageV2 和 PersistenceV2
    HarmonyOSNextV2状态管理AppStorageV2和PersistenceV2前言在HarmonyOS应用开发过程中,我们已经学习过了不少关于状态管理相关的技术,如@ObservedV2装饰器和@Trace装饰器:类属性变化观测@ComponentV2装饰器:自定义组件@Local装饰器:组件内部状态@Param:组件外部输入@Once:初......