一個更小、更快、更乾淨的 GraphRAG!!

nano-GraphRAG 簡介

nano-GraphRAG:一款簡潔且易於定製的 GraphRAG 實現。

😭 GraphRAG 確實功能強大,但官方的實現版本閱讀與修改起來頗爲不易。 

😊 本項目爲您呈現了一個更爲精簡、高效、清晰的 GraphRAG 版本,同時保留了其核心特性。 

🎁 nano-GraphRAG 的代碼量大約只有 800 行,除了測試和示例之外。 

👌 短小精悍,易於擴展,支持異步操作,且完全採用類型註解。

Github 地址:https://github.com/gusye1234/nano-graphrag

nano-GraphRAG 部署和使用

第一、安裝

pip install nano-graphrag

第二、下載查爾斯 · 狄更斯的《聖誕頌歌》副本

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

第三、使用下面的 Python 代碼片段

from nano_graphrag import GraphRAG, QueryParam
graph_func = GraphRAG(working_dir="./dickens")
with open("./book.txt") as f:
    graph_func.insert(f.read())
# Perform global graphrag search
print(graph_func.query("What are the top themes in this story?"))
# Perform local graphrag search (I think is better and more scalable one)
print(graph_func.query("What are the top themes in this story?", param=QueryParam(mode="local")))

下次你從相同的工作目錄初始化 GraphRAG 時,它將自動重新加載所有上下文。

第四、增量更新

with open("./book.txt") as f:
    book = f.read()
    half_len = len(book) // 2
    graph_func.insert(book[:half_len])
    graph_func.insert(book[half_len:])

nano-GraphRAG 使用內容的 MD5 哈希作爲鍵,因此不會有重複的區塊。

然而,每次你進行插入操作時,圖的社區將被重新計算,社區報告也將被重新生成。

**和 GraphRAG 對比測試
**

對比一:Index 索引對比

相對都比較慢,都超過了 10 分鐘。

對比二:Local Search 對比

1、大喬和曹操的關係

大喬與曹操的關係在歷史和文學中顯得複雜,儘管他們互動不多。
大喬以孫策之妻和美貌著稱,吸引了曹操的關注。曹操對大喬的興趣更多是象徵性的,而非真實情感。
作爲孫家一員,大喬與曹操間存在間接敵對。她的地位和時代背景,使她與曹操的關係具有歷史和文化意義,
反映了三國時期女性與政治的聯繫。總體來說,這種關係更多是文學和歷史構建,而非實際互動。

對比三:Global Search 對比

1、大喬和曹操的關係

### 大喬與曹操的關係
大喬,喬公之女,以美貌著稱,成爲曹操垂涎的對象[Data: Reports (41)]#### 曹操的野心
曹操欲將大喬安置於銅雀臺,展示其權力與慾望[Data: Reports (269)]#### 喬公與曹操
喬公既是大喬之父,也是曹操之友,這關係複雜化了曹操對大喬的追求[Data: Reports (41)]### 結論
大喬與曹操的關係主要圍繞曹操的慾望和其計劃,以及喬公與曹操的友誼所引發的潛在衝突[Data: Reports (41, 269)]
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/9GdjLLVZvKhyUv84qh0M0Q