microsoft graphrag

1. graphrag vs rag

一個(gè)典型的rag有三個(gè)步驟:

  • ?? 檢索:從論文庫中找出 GNN 和推薦系統(tǒng)相關(guān)的片段
  • ?? 增強(qiáng):構(gòu)造 prompt 輸入
  • ?? 生成:大模型總結(jié)出 3 個(gè)主要挑戰(zhàn),如冷啟動(dòng)問題、圖結(jié)構(gòu)稀疏性、計(jì)算效率瓶頸

微軟的graphrag有什么不同呢,常用說法是它用圖數(shù)據(jù)庫存儲(chǔ)了數(shù)據(jù),能跨越多個(gè)節(jié)點(diǎn)回答問題。我認(rèn)為這種說法不足以描述graphrag的本質(zhì),也經(jīng)常將對(duì)graphrag的理解帶入誤區(qū)。相比于傳統(tǒng)的rag,graphrag在使用方面和傳統(tǒng)rag并無不同,但是在自身技術(shù)構(gòu)造上,與傳統(tǒng)的RAG系統(tǒng)有二個(gè)不同點(diǎn):

  • 數(shù)據(jù)存儲(chǔ)使用圖數(shù)據(jù)庫,用節(jié)點(diǎn)和關(guān)系描述真實(shí)世界關(guān)系
  • 構(gòu)造圖數(shù)據(jù)和檢索數(shù)據(jù)均有LLM參與構(gòu)造和增強(qiáng)

第一點(diǎn)讓rag系統(tǒng)能反映真實(shí)世界的關(guān)系,第二點(diǎn)是graphrag與傳統(tǒng)rag的本質(zhì)不同,某種程度上,可以理解成這是一個(gè)rag智能體。

2. microsoft graphrag

2024年4月,微軟發(fā)布了論文《From Local to Global: A GraphRAG Approach to
Query-Focused Summarization》,并在今年開源了graphrag。

2.1 graphrag建立索引

graphrag的部件圖如下,有4個(gè)部件,其中我們最關(guān)注的是索引


graphrag部件圖

索引的結(jié)構(gòu)如下:


索引

其中工作流如下:
步驟名稱 目的 輸出工件
create_base_text_units 將文檔分塊到文本單元中 基本文本單位
create_final_documents 完成文檔元數(shù)據(jù) documents.parquet
extract_graph 基于 LLM 的實(shí)體/關(guān)系提取 原始實(shí)體和關(guān)系
finalize_graph 清理和刪除重復(fù)的圖形數(shù)據(jù) entities.parquet, relationships.parquet
extract_covariates 提取聲明(可選) covariates.parquet
create_communities 使用 Leiden 進(jìn)行社區(qū)檢測 communities.parquet
create_final_text_units 使用圖形數(shù)據(jù)增強(qiáng)文本單元 text_units.parquet
create_community_reports 生成社區(qū)摘要 community_reports.parquet
generate_text_embeddings 創(chuàng)建向量嵌入 嵌入 parquet 文件

從工作流我們可以看到,它將文檔切成文本塊,利用大模型抽取實(shí)體和關(guān)系,建立圖,并對(duì)圖使用算法分為社區(qū),對(duì)社區(qū)用大模型生成摘要,并創(chuàng)建向量加速檢索。

這里就是graphrag和傳統(tǒng)rag不同的地方,傳統(tǒng)rag就是存儲(chǔ)成key和answer,使用向量檢索,而graphrag將數(shù)據(jù)使用大模型構(gòu)建為圖,并分為社區(qū)生成摘要,回答復(fù)雜性問題。

2.2 graphrag檢索

graphrag有四種檢索,這里我們以local檢索為例,其流程如下:


本地檢索

可以看到local檢索就是先聚合查詢上下文,再使用大模型結(jié)構(gòu)化生成格式。
其中形成上下文的流程實(shí)際就是圖檢索過程,首先用向量匹配實(shí)體,在用圖檢索實(shí)體相關(guān)的關(guān)系實(shí)體聚合成上下文。上下文構(gòu)造過程如下:


上下文構(gòu)造

3. graphrag的使用

參考官網(wǎng),非常簡便:

  • 建立工程:graphrag init --root /xxx/
  • 建立索引:graphrag index --root /xxx/
    -- 查詢:graphrag query --method local --root /xxx/

幾條命令就搞定了建立索引到查詢。

另外它是高度可配置的,搞懂怎么配置大模型、輸入配置、流程配置,參考graphrag setting.yaml配置官網(wǎng)說明

4. graphrag的問題

從上面整個(gè)graphrag的流程我們可以看到,它與傳統(tǒng)的rag天然不同,圖存儲(chǔ)是修改了存儲(chǔ)結(jié)構(gòu),更貼合世界本質(zhì),但是rag+AI才是是它與傳統(tǒng)rag的本質(zhì)不同。

rag+AI既是graphrag的優(yōu)點(diǎn)也是致命缺點(diǎn),當(dāng)面對(duì)一個(gè)比較大的輸入的時(shí)候,與大模型的交互是非常頻繁的,等待時(shí)間非常長,使用的token是巨量的,如果使用付費(fèi)大模型,是非常燒錢的。要將graphrag工程化要走到路還很長,這可能也是微軟為何要把graphrag開源的原因。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容