自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

知識圖譜驅(qū)動!港大LightRAG終結(jié)企業(yè)碎片化檢索,效率飆升200%

人工智能
本文將深入探討LightRAG的原理,通過實戰(zhàn)演示如何基于LightRAG生成知識圖譜,同時展示如何進行查詢操作,幫助你全方位掌握這一工具。

1、前言

當(dāng)前的檢索增強生成(RAG)技術(shù)在實際應(yīng)用中面臨若干挑戰(zhàn)。傳統(tǒng)的RAG采用基于向量的扁平化數(shù)據(jù)表示,難以有效建模實體之間的復(fù)雜語義關(guān)系,導(dǎo)致在處理復(fù)雜領(lǐng)域知識時檢索精度不足。此外,傳統(tǒng)RAG在多實體關(guān)聯(lián)推理中容易出現(xiàn)邏輯斷層,且全量更新機制使得知識庫的維護成本隨數(shù)據(jù)規(guī)模指數(shù)增長。相比之下,LightRAG通過引入圖結(jié)構(gòu)和增量更新算法,大幅降低了計算開銷,提高了系統(tǒng)在實時數(shù)據(jù)更新和復(fù)雜推理場景中的應(yīng)用效能。

本文將深入探討LightRAG的原理,通過實戰(zhàn)演示如何基于LightRAG生成知識圖譜,同時展示如何進行查詢操作,幫助你全方位掌握這一工具。感興趣的話就繼續(xù)往下閱讀吧~

2、LightRAG簡介

2.1 什么是LightRAG

LightRAG(Lightweight Retrieval-Augmented Generation)是香港大學(xué)團隊開發(fā)的一種輕量級、高效的檢索增強生成(RAG)系統(tǒng)。它通過將圖結(jié)構(gòu)融入文本索引和檢索過程中,采用雙層檢索機制,增強了對復(fù)雜實體依賴關(guān)系的理解能力,同時提高了信息檢索的效率和響應(yīng)速度,項目指路:https://github.com/HKUDS/LightRAG

image.png

LightRAG的主要優(yōu)勢包括:

  1. 高效的知識圖譜構(gòu)建: LightRAG通過圖結(jié)構(gòu)差異分析實現(xiàn)增量更新算法,顯著降低了計算開銷,使知識庫維護更加高效。
  2. 雙層檢索機制: 該系統(tǒng)結(jié)合了低層次(具體實體和屬性)和高層次(廣泛主題和概念)的檢索策略,滿足了不同類型的查詢需求,提高了檢索的全面性和多樣性。
  3. 快速適應(yīng)動態(tài)數(shù)據(jù): LightRAG能夠在新數(shù)據(jù)到來時快速整合,無需重建整個知識庫,確保系統(tǒng)在動態(tài)環(huán)境中保持高效和準(zhǔn)確。

通過了解和使用LightRAG,您可以構(gòu)建高效、靈活且易于維護的知識圖譜系統(tǒng),提升信息檢索和生成任務(wù)的性能,特別是在處理復(fù)雜實體關(guān)系和動態(tài)數(shù)據(jù)更新的場景中。

2.2 LightRAG檢索和查詢流程圖

圖片

上述流程可以歸納為兩大步驟,分別為索引構(gòu)建流程查詢響應(yīng)流程

索引構(gòu)建流程:

這個階段的目標(biāo)是把所有資料整理好,方便后續(xù)快速查找,就像把圖書館的書按主題、內(nèi)容、關(guān)系整整齊齊地放好:

1. 把文本切塊 + 提取知識

  • 系統(tǒng)先把原始文檔分成一個個小段落(Chunk),方便處理。
  • 然后通過語言模型,從中找出關(guān)鍵的人名、地名、概念等,并發(fā)現(xiàn)它們之間的聯(lián)系(比如:“喬布斯 創(chuàng)辦 蘋果公司”)。
  • 最后去掉重復(fù)內(nèi)容,把圖譜結(jié)構(gòu)整理得更緊湊、更清晰。

2. 存進圖譜+向量庫

  • 所有概念和它們之間的關(guān)系會被保存成一張“知識圖譜”,像思維導(dǎo)圖一樣儲存在圖數(shù)據(jù)庫里。
  • 同時,每個概念和文本也會被轉(zhuǎn)成“向量”(一串?dāng)?shù)字),方便用數(shù)學(xué)方式快速找相似的內(nèi)容。

3. 動態(tài)更新

  • 當(dāng)新數(shù)據(jù)加入時,LightRAG采用增量更新算法,只更新相關(guān)部分,而無需重建整個知識庫。

a849e8cffedfe4449bcc2241165d08e9.jpeg

查詢響應(yīng)流程:

這個階段的任務(wù)是:當(dāng)用戶提出一個問題時,系統(tǒng)先理解問題在說什么,然后去“知識庫”里找答案,再組織成一段清晰自然的回復(fù)。

1. 先分析問題,分出兩類關(guān)鍵詞

  系統(tǒng)會分析用戶提問的句子,從中提取出兩種關(guān)鍵詞:

  • 局部關(guān)鍵詞:具體的內(nèi)容,比如“愛因斯坦”、“相對論”這種名詞。
  • 全局關(guān)鍵詞:更偏概念性的詞,比如“物理學(xué)原理”、“科學(xué)貢獻”。

2. 兩步查找,信息更全面

  • 局部檢索:先用具體的關(guān)鍵詞在“向量庫”里找最相關(guān)的小段落或知識點。
  • 全局檢索:再根據(jù)概念性關(guān)鍵詞,在知識圖譜中沿著關(guān)系擴展,找更多相關(guān)內(nèi)容。

3. 組織上下文,生成自然語言回答

  • 把剛才查到的信息拼成一個“上下文背景”,喂給語言模型(LLM)。
  • 系統(tǒng)會按照提前設(shè)定的“回答模板”來組織內(nèi)容,確?;卮疬B貫、有邏輯、信息完整。

cd77fcc9402029a670932a4b875273ac.jpeg

3、 LightRAG構(gòu)建檢索增強生成系統(tǒng)(生成知識圖譜)

3.1 本地安裝

本地安裝教程比較簡單,首先我們需要把項目克隆到本地,可以用git下載,也可以直接下載安裝包:

image.png

下載到本地后還是用Pycharm打開,配置一下環(huán)境(需要先建立虛擬環(huán)境LightRAG,怎么建的就不說了,實在不會的去看我這篇文章的3.1小節(jié):企業(yè)搶著要的AI方案:DeepSeek-R1微調(diào)實戰(zhàn),3天構(gòu)建行業(yè)內(nèi)容生成器

image.png

打開命令行:

image.png

運行以下命令安裝LightRAG Core:

pip install -e .

之后運行以下命令安裝LightRAG Server:

pip install -e ".[api]"

3.2 LightRAG構(gòu)建檢索增強生成系統(tǒng)(生成知識圖譜)實戰(zhàn)

在程序的examples目錄下面提供了很多構(gòu)建檢索增強生成系統(tǒng)(生成知識圖譜)的python示例文件:

image.png

首先我們需要下載一下用于生成知識圖譜的示例文件(狄更斯的圣誕頌歌):

curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt > ./book.txt

下載完成以后記得放到examples目錄下面。

3.2.1 基于ollama構(gòu)建檢索增強生成系統(tǒng)(生成知識圖譜)

基于ollama構(gòu)建檢索增強生成系統(tǒng)(生成支持圖譜)的python文件為lightrag_ollama_demo.py,官方就有相關(guān)視頻教我們怎么一步步生成知識圖譜和進行查詢操作:https://www.youtube.com/watch?v=g21royNJ4fw,如果你本地顯存很大,可以試一下,否則我不建議你去浪費時間,我就被卡了一下午,我的chat模型用的是deepseek-r1:1.5b,向量模型用的是nomic-embed-text:latest

圖片

報錯503,出于程序員的本能,我第一時間就想著用postman測一下這個接口能通嗎?測了以后是通的。

image.png

于是又去查了資料:

image.png

被自己蠢笑了,原本是本地電腦8G的顯存根本不夠.......

3.2.2 調(diào)用云端智普大模型構(gòu)建檢索增強生成系統(tǒng)(生成知識圖譜)

基于云端智普大模型生成知識圖譜的python文件為lightrag_zhipu_demo.py,加一行代碼配置一下智普大模型的apiKey就行:

os.environ["ZHIPUAI_API_KEY"] = ""

你實在不知道加哪里(純小白),就直接粘貼我這個代碼替換lightrag_zhipu_demo.py:

# 導(dǎo)入必要的標(biāo)準(zhǔn)庫
import os
import logging
import asyncio

# 從lightrag庫中導(dǎo)入LightRAG類和QueryParam類
from lightrag import LightRAG, QueryParam
# 從lightrag.llm.zhipu模塊中導(dǎo)入智普大模型的文本生成和嵌入函數(shù)
from lightrag.llm.zhipu import zhipu_complete, zhipu_embedding
# 從lightrag.utils模塊中導(dǎo)入EmbeddingFunc類,用于定義嵌入函數(shù)
from lightrag.utils import EmbeddingFunc
# 從lightrag.kg.shared_storage模塊中導(dǎo)入初始化管道狀態(tài)的函數(shù)
from lightrag.kg.shared_storage import initialize_pipeline_status

# 設(shè)置工作目錄
WORKING_DIR = "./dickens"

# 配置日志記錄,設(shè)置日志格式和日志級別為INFO
logging.basicConfig(format="%(levelname)s:%(message)s", level=logging.INFO)

# 如果工作目錄不存在,則創(chuàng)建該目錄
if not os.path.exists(WORKING_DIR):
    os.mkdir(WORKING_DIR)
    
# 設(shè)置智普大模型的API密鑰
os.environ["ZHIPUAI_API_KEY"] = ""

# 獲取環(huán)境變量中的API密鑰
api_key = os.environ.get("ZHIPUAI_API_KEY")
# 如果API密鑰未設(shè)置,則拋出異常提示用戶設(shè)置API密鑰
if api_key is None:
    raise Exception("Please set ZHIPU_API_KEY in your environment")

# 定義一個異步函數(shù),用于初始化LightRAG實例
async def initialize_rag():
    # 創(chuàng)建LightRAG實例
    rag = LightRAG(
        working_dir=WORKING_DIR,  # 設(shè)置工作目錄
        llm_model_func=zhipu_complete,  # 設(shè)置使用的語言模型函數(shù)
        llm_model_name="glm-4-flashx",  # 設(shè)置使用的語言模型名稱
        llm_model_max_async=4,  # 設(shè)置最大異步請求數(shù)
        llm_model_max_token_size=32768,  # 設(shè)置模型處理的最大token數(shù)量
        # 設(shè)置嵌入函數(shù)
        embedding_func=EmbeddingFunc(
            embedding_dim=2048,  # 設(shè)置嵌入向量的維度
            max_token_size=8192,  # 設(shè)置模型處理的最大token數(shù)量
            func=lambda texts: zhipu_embedding(texts),  # 使用智普的嵌入函數(shù)
        ),
    )

    # 初始化存儲系統(tǒng)
    await rag.initialize_storages()
    # 初始化管道狀態(tài)
    await initialize_pipeline_status()

    # 返回初始化好的LightRAG實例
    return rag

# 定義主函數(shù)
def main():
    # 使用異步事件循環(huán)初始化LightRAG實例
    rag = asyncio.run(initialize_rag())

    # 讀取本地文本文件并將其內(nèi)容插入到LightRAG中
    with open("./book.txt", "r", encoding="utf-8") as f:
        rag.insert(f.read())

    # 使用不同的查詢模式進行檢索并打印結(jié)果
    # 樸素檢索:基礎(chǔ)查詢模式
    print(
        rag.query(
            "What are the top themes in this story?", param=QueryParam(mode="naive")
        )
    )

    # 局部檢索:局部檢索模式,僅查找與輸入相關(guān)的區(qū)域
    print(
        rag.query(
            "What are the top themes in this story?", param=QueryParam(mode="local")
        )
    )

    # 全局檢索:全局檢索模式,擴展到整個知識圖譜的關(guān)系
    print(
        rag.query(
            "What are the top themes in this story?", param=QueryParam(mode="global")
        )
    )

    # 混合檢索:混合模式,結(jié)合局部與全局信息
    print(
        rag.query(
            "What are the top themes in this story?", param=QueryParam(mode="hybrid")
        )
    )

# 如果當(dāng)前模塊是主模塊,則調(diào)用主函數(shù)
if __name__ == "__main__":
    main()

上述代碼展示了如何使用LightRAG框架構(gòu)建一個基于智普大模型的檢索增強生成系統(tǒng)。首先,設(shè)置工作目錄并配置智普API密鑰。然后,定義了一個異步函數(shù)initialize_rag,用于初始化LightRAG實例,包括設(shè)置語言模型、嵌入函數(shù)和其他參數(shù)。在main函數(shù)中,讀取本地文本文件,將其內(nèi)容插入到LightRAG中,并執(zhí)行多種查詢模式(如naive、local、global、hybrid),以獲取不同層次的檢索結(jié)果。整個流程實現(xiàn)了從文本處理、嵌入生成到多模式檢索的功能。

不知道智普大模型的apiKey怎么申請的可以點擊這個網(wǎng)址:https://www.bigmodel.cn/usercenter/proj-mgmt/apikeys

image.png

填入apiKey后運行代碼,代碼運行完畢后會在工作目錄生成結(jié)果文件:

圖片

以下是對各文件功能的解釋(細節(jié)圖我就不截了,可以生成出來自己去看文件細節(jié)):

  1. graph_chunk_entity_relation.graphml
  2. 該文件以GraphML格式存儲知識圖譜的圖形結(jié)構(gòu),包括實體節(jié)點及其相互關(guān)系。這種格式便于使用圖形處理工具進行可視化和分析。
  3. kv_store_doc_status.json
  4. 此JSON文件記錄文檔處理的狀態(tài)信息,例如文檔是否已成功處理或是否存在錯誤。這有助于跟蹤文檔的處理進度和狀態(tài)。
  5. kv_store_full_docs.json
  6. 存儲原始文檔的完整內(nèi)容。該文件包含了所有輸入文檔的文本數(shù)據(jù),便于后續(xù)的檢索和處理。
  7. kv_store_llm_response_cache.json
  8. 用于緩存大型語言模型(LLM)的響應(yīng)結(jié)果,以提高系統(tǒng)的響應(yīng)速度和效率,避免對相同請求進行重復(fù)計算。
  9. kv_store_text_chunks.json
  10. 存儲將文檔拆分成的小塊(chunks)后的文本數(shù)據(jù)。將長文檔拆分為較小的塊有助于提高處理效率和檢索精度。
  11. vdb_chunks.json
  12. 包含文本塊的向量化表示。通過將文本塊轉(zhuǎn)換為向量,可以在向量數(shù)據(jù)庫中進行高效的相似度搜索和檢索。
  13. vdb_entities.json
  14. 存儲知識圖譜中實體的向量表示。將實體轉(zhuǎn)換為向量形式,有助于在檢索和推理過程中快速匹配和識別相關(guān)實體。
  15. vdb_relationships.json
  16. 記錄知識圖譜中實體之間關(guān)系的向量表示。通過將關(guān)系表示為向量,可以在圖譜中進行高效的關(guān)系檢索和推理。

這些文件共同構(gòu)成了LightRAG系統(tǒng)的數(shù)據(jù)存儲和管理架構(gòu),支持知識圖譜的構(gòu)建、更新和查詢等功能。

運行g(shù)raph_visual_with_html.py,就可以生成可視化的知識圖譜html頁面:

# 導(dǎo)入pipmaster庫,用于簡化Python包的安裝和管理
import pipmaster as pm

# 檢查并安裝pyvis庫,如果尚未安裝
if not pm.is_installed("pyvis"):
    pm.install("pyvis")
# 檢查并安裝networkx庫,如果尚未安裝
if not pm.is_installed("networkx"):
    pm.install("networkx")

# 導(dǎo)入networkx庫,用于創(chuàng)建和操作復(fù)雜的網(wǎng)絡(luò)圖
import networkx as nx
# 從pyvis.network模塊導(dǎo)入Network類,用于在瀏覽器中展示網(wǎng)絡(luò)圖
from pyvis.network import Network
# 導(dǎo)入random模塊,用于生成隨機數(shù)
import random

# 讀取GraphML格式的圖文件,創(chuàng)建一個NetworkX圖對象G
G = nx.read_graphml("./dickens/graph_chunk_entity_relation.graphml")

# 創(chuàng)建一個Pyvis的Network對象,用于在瀏覽器中展示網(wǎng)絡(luò)圖
net = Network(height="100vh", notebook=True)

# 將NetworkX圖對象G轉(zhuǎn)換為Pyvis網(wǎng)絡(luò)
net.from_nx(G)

# 遍歷網(wǎng)絡(luò)中的所有節(jié)點,為每個節(jié)點添加隨機顏色和提示信息
for node in net.nodes:
    # 為節(jié)點分配一個隨機顏色
    node["color"] = "#{:06x}".format(random.randint(0, 0xFFFFFF))
    # 如果節(jié)點有"description"屬性,將其設(shè)置為鼠標(biāo)懸停時顯示的提示信息
    if "description" in node:
        node["title"] = node["description"]

# 遍歷網(wǎng)絡(luò)中的所有邊,為每條邊添加提示信息
for edge in net.edges:
    # 如果邊有"description"屬性,將其設(shè)置為鼠標(biāo)懸停時顯示的提示信息
    if "description" in edge:
        edge["title"] = edge["description"]

# 將網(wǎng)絡(luò)圖保存為HTML文件,并在瀏覽器中展示
net.show("knowledge_graph.html")

上述代碼使用 networkx創(chuàng)建圖結(jié)構(gòu),利用pyvis將其轉(zhuǎn)換為交互式網(wǎng)絡(luò)圖,并在瀏覽器中顯示。代碼首先檢查并安裝所需的pyvisnetworkx庫,隨后讀取存儲在./dickens/graph_chunk_entity_relation.graphml的圖數(shù)據(jù)文件。通過pyvisNetwork類,將networkx圖對象轉(zhuǎn)換為可視化網(wǎng)絡(luò),隨機為每個節(jié)點分配顏色,并設(shè)置節(jié)點和邊的提示信息。最終,生成的交互式網(wǎng)絡(luò)圖被保存為knowledge_graph.html 文件,用戶可在瀏覽器中打開并與之交互。

image.png

把鼠標(biāo)移動到節(jié)點上還能查看詳情:

image.png

4、LightRAG查詢

在lightrag_zhipu_demo.py中選擇你想要的查詢模式(注釋其他模式),輸入問題即可進行查詢(我選的是global模式):

image.png

我的問題是:

這個故事的主題是什么?

LightRAG的回答:

這個故事的主題是道德救贖和人物轉(zhuǎn)變。通過講述吝嗇鬼斯克魯奇在圣誕節(jié)的經(jīng)歷,以及他與三位圣誕靈的相遇,故事展現(xiàn)了斯克魯奇從自私、冷酷到慷慨、仁慈的轉(zhuǎn)變。圣誕節(jié)作為一個象征性的節(jié)日,強調(diào)了慷慨、善良和對他人的關(guān)懷。故事傳達了深刻的道德教訓(xùn),即人們可以通過反思和改變自己的行為來獲得救贖。以下是幾個重要的主題:
1. 道德救贖:斯克魯奇在故事中經(jīng)歷了深刻的道德轉(zhuǎn)變,他從最初的冷漠和吝嗇,最終轉(zhuǎn)變?yōu)橐粋€慷慨和仁慈的人。
2. 人物轉(zhuǎn)變:斯克魯奇的轉(zhuǎn)變是故事的核心,它展示了一個人在經(jīng)歷啟示后如何改變自己的性格和行為。
3. 圣誕節(jié)的象征意義:圣誕節(jié)作為一個節(jié)日,象征著慷慨、善良和社區(qū)的團結(jié),對斯克魯奇的性格轉(zhuǎn)變起到了重要的推動作用。
4. 社會批判:故事通過描繪斯克魯奇對窮人和慈善事業(yè)的冷漠態(tài)度,對社會的不平等和貧富差距進行了批判。
5. 人性的復(fù)雜性:斯克魯奇的形象展示了人性的復(fù)雜性,即使是一個冷酷的人也有機會改變自己,成為更好的人。
以上主題共同構(gòu)成了《圣誕頌歌》的核心內(nèi)容,使其成為一部經(jīng)典的文學(xué)作品。

5、 結(jié)語

通過對LightRAG技術(shù)的探索與應(yīng)用,我們不僅成功地構(gòu)建了一個高效的知識圖譜系統(tǒng),還進一步理解了RAG(檢索增強生成)技術(shù)在實際應(yīng)用中的潛力與挑戰(zhàn)。LightRAG通過引入圖結(jié)構(gòu)和增量更新機制,大大提升了知識圖譜的構(gòu)建效率與查詢精度,特別是在處理復(fù)雜領(lǐng)域知識時,展現(xiàn)了其獨特的優(yōu)勢。此外,LightRAG通過結(jié)合檢索與生成的雙層機制,能夠在保持語義連貫性的同時,實現(xiàn)對多實體、多層次關(guān)系的深入理解。無論是在文本生成、信息檢索還是知識圖譜的可視化等方面,LightRAG都為我們提供了新的思路和工具,推動了智能系統(tǒng)在處理復(fù)雜問題時的表現(xiàn)。

責(zé)任編輯:龐桂玉 來源: 后端小肥腸
相關(guān)推薦

2017-03-06 16:48:56

知識圖譜構(gòu)建存儲

2021-01-19 10:52:15

知識圖譜

2025-04-27 00:10:00

AI人工智能知識圖譜

2023-09-27 09:00:00

大型語言模型自然語言處理

2021-01-25 10:36:32

知識圖譜人工智能

2024-06-03 07:28:43

2024-02-26 00:00:00

RAG系統(tǒng)圖譜

2024-01-29 00:25:59

人工智能結(jié)構(gòu)化編碼

2024-05-16 08:23:26

大語言模型知識圖譜人工智能

2024-06-17 07:49:53

2024-06-03 10:53:18

LLMRAGGraphRAG

2021-01-18 10:50:29

知識圖譜人工智能深度學(xué)習(xí)

2017-04-13 11:48:05

NLP知識圖譜

2017-05-04 13:18:18

深度學(xué)習(xí)知識圖譜

2019-05-07 10:01:49

Redis軟件開發(fā)

2021-02-01 22:41:05

語義網(wǎng)知識圖譜

2024-10-08 10:37:12

語言數(shù)據(jù)自然語言

2025-02-13 09:01:03

2024-10-14 14:45:00

數(shù)據(jù)模型

2021-04-12 11:47:21

人工智能知識圖譜
點贊
收藏

51CTO技術(shù)棧公眾號