Knowledge Graph + RAG | Microsoft GraphRAG 實作與視覺化教學
探索 Microsoft GraphRAG 結合 Knowledge Graph 與 RAG 的強大技術,提升模型答案品質。了解其實作與視覺化教學,掌握實作步驟與最佳方法,讓您的企業問答系統更精確高效。立即閱讀,快速上手 GraphRAG,掌握資料檢索和問答技術的最新發展。
Knowledge Graph + RAG | Microsoft GraphRAG 實作與視覺化教學
想要將產業之知識整合到 LLM 中有許多方法,但考量到成本與效益,大部分企業級應用都會結合 RAG 進行,而近期,將 Knowledge Graph (KG) 結合 RAG 被越來越廣泛使用,儼然將會成為下一個熱門的技術,而就在這個風頭上時,7/2 Microsoft 終於將他們的 GraphRAG 開源,從技術文章發表到開源隔了近 5 個月左右,令人非常興奮想要測試其效果,因此這篇文章將向大家介紹 GraphRAG 的概念、優勢及實作步驟,並提供了多種視覺化方法,希望能幫助你快速實踐這項技術。
一. 什麼是 GraphRAG ?
GraphRAG 的核心概念在於將 Knowledge Graph 中存儲的數據與 LLM 結合,通過查詢圖數據庫來增強模型的答案品質。
Knowledge Graph 是一種結構化的知識表示方式,它由實體(Entities)和實體之間的關係(Relationships)組成,因此你可以在圖上看到實體之間的關聯性,如以下概念示意圖:
「權力遊戲」人物圖譜,來源:Weebly
之前的 OpenAI 人物關係圖,來源:科技工作講Tech Job N Talk
如果想深入了解圖和 KG ,建議可以去看查看 Neo4j 的 GraphAcademy 或參加 Deeplearning.ai 上的 Knowledge Graphs for RAG 課程,這些課程涵蓋了關於 RAG 和 KG 的內容,可以讓你快速了解該領域的相關知識。
二. 為甚麼使用 GraphRAG?
Knowledge Graph 最早可以追朔到 2012 年,Google 推出了他們第二代搜索引擎,並發表了一篇著名的博客文章「 Introducing the Knowledge Graph: things, not strings 」。他們發現,使用 KG 來組織網頁中的信息,可以實現能力的巨大飛躍。這一模式現在也在 GenAI 中逐漸發展,現在許多 GenAI 項目都因處理字符串而非事物的限制而遇到瓶頸。今天,前沿的 AI 工程師和學術研究人員也發現了谷歌曾發現的這一重要秘密:RAG 優化突破瓶頸的關鍵在於 KG,將具體事物的知識融入基於統計的文本技術中。
根據 Microsoft GraphRAG 的相關研究 ( Darren et al. , 2024 ) 表示,GraphRAG 能大幅改進了傳統 RAG 的 Retrieval 部分,將更高相關性的內容填充到上下文窗口中,提供更好的答案並捕捉證據來源;他們還發現,GraphRAG 比其他方法所需的 tokens 減少了 26% 到 97%,使其更具擴展性。
以下是 Microsoft Research Blog 的一個範例,你可以看到與普通的 RAG 相比,GraphRAG 的回答質量有顯著提升。
Microsoft Research Blog - GraphRAG: Unlocking LLM discovery on narrative private data
另一個值得注意的例子來自 Writer。他們近期發布了一份基於 RobustQA 框架的 RAG 基準報告( Mozolevskyi & AlShikh, 2024 ),對比了他們的 GraphRAG 方法與頂尖競爭對手的工具,由以下結果顯示,GraphRAG 的得分達到 86%,遠高於競爭對手的得分範圍(33% 至 76%),而且延遲時間相當或更低。
Mozolevskyi, D., & Alshikh, W. (2024) . Comparative Analysis of Retrieval Systems in the Real World.
簡而言之,GraphRAG 比起傳統的 RAG 主要有三大優勢:
- 提供更高的準確性和更完整的答案,這對運行時或生產環境非常有幫助。
- 建立 KG 之後,可以更輕鬆地構建及維護 RAG 應用程序,這對開發時間有顯著的優勢。
- 增強了可解釋性、可追溯性及訪問控制,這對治理層面帶來好處。
三. 如何使用 GraphRAG?
現在有許多框架可以實作 Knowledge Graph + RAG,如 LlamaIndex 的 Property Graph Index、Langchain 與 Neo4j 的集成,以及 Haystack 等。目前這個領域發展迅速,使用的方法也變得愈加簡便,而今天要介紹的是不久前才開源的 Microsoft GraphRAG。
GraphRAG 開源在 Github 中,他們也有寫詳細的 文件 ,有興趣也可以去查看。
另外如果你不想要花錢但想看 GraphRAG 效果的話,我把已經索引過的檔案放在 Github: GraphRAG-Visualization-Tutorial 上,可以直接下載來用。
步驟1. 環境設置
版本要求是 Python 3.10 到 3.12,我這邊使用 conda 建立環境。
1
2
conda create -n GraphRAG python=3.10
conda activate GraphRAG
接下來安裝 GraphRAG
1
pip install graphrag
步驟2. 準備資料夾與文件
首先我們要新增一個放文件的目錄 /ragtest/input
,新增完後我們將官方的參考文件下載下來,你可以在 這裡 下載那份文件,或使用以下指令創建下載。
注意一下,目前 Microsoft GraphRAG 只支援 .txt
, .pdf
文件會被忽略。
1
2
mkdir -p ./ragtest/input
curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt > ./ragtest/input/book.txt
步驟3. Workspace 初始化設置
現在我們需要做一些初始配置,這邊使用的是 預設配置 ,細節可以看到官方的 文檔 。
1
python -m graphrag.index --init --root ./ragtest
執行完畢後你會發現 ragtest 資料夾除了 input 資料夾外,還新增了一些東西。
接下來需要編輯 2 個文件
.env
:需要輸入 OpenAI API 或 Azure OpenAI 的 API key
1
GRAPHRAG_API_KEY=<API_KEY>
2. settings.yaml
:可以客製化整體 pipeline,包括 LLM 的種類等,我使用預設的,預設的 embedding model 是 text-embedding-3-small,LLM 是 gpt-4-turbo-preview。
步驟4. 執行 Indexing pipeline
設定好以上環境,同時也確保 input 資料夾中是你想要索引的 .txt
後,就可以執行以下指令。
注意:這階段會去 call OpenAI 的 API,需要付較多的費用,如果你想跳過,可以直接下載我已經執行過的 repo 。
1
python -m graphrag.index --root ./ragtest
大約會花14分鐘左右,完成後你會看到系統提示 Completed successfully
。
步驟5. 進行問答
接著我們就能對 GrpahRAG 進行問答,GrpahRAG 的 Query Engine 可以分為三部分,Local Search、Global Search、Question Generation,細節可以看 官方文件 。
以下是使用 Global Search 的方式提出進階問題的範例:
1
2
3
4
python -m graphrag.query \
--root ./ragtest \
--method global \
"What are the top themes in this story?"
回答的時間約耗時 50 秒,以下為 GrpahRAG 的回答:
四. 視覺化
如前面提到,KG 是一個圖,它顯示了 Entities 與 Entities之間的關係,有幾個方法可以視覺化上面建立的 GraphRAG。
方法1. 使用 yFiles Graphs
我們可以使用 yFiles Graphs 來幫助我們視覺化 GraphRAG,主要使用 jupyter 來執行,jupyter 我已經上傳到 Github 中,是來自 microsoft 編寫的,使用前請安裝 requirements.txt
中的套件:
1
pip install requirements txt
開啟 graph-visualization.ipynb 後,記得修改以下目錄位置,output 後面是你做索引的時間,你也可以下載我的 repo ,使用預設的即可。
1
INPUT_DIR = "output/20240719-162300/artifacts"
接著按照指示操作,你就可以看到你的 KG 視覺化圖表:
使用 yFiles Graphs 視覺化 GraphRAG
方法2. 產生 GraphML 後使用第三方軟體
你可以在執行 Indexing pipeline 前,修改 settings.yaml
,修改的地方如以下:
1
2
snapshots:
graphml: True
這樣索引完成後就會多產生一個 GraphML 檔案,GraphML 格式是一種開放標準,受到多個開源軟體工具的支持,因此你可以使用如 Gephi、yEd Graph Editor 等軟體開啟。
五. GraphRAG 價格?
以上示範的文件是從官方下載下來,大約 185KB 左右,在 openai 的後台可以看到,這是實作,大約花了 5.25 美元,以檔案的大小來看價格其實滿高的。
如果想要省點成本,建議可以更改 settings.yaml
中的 LLM,預設是 gpt-4-turbo-preview,如果你使用 gpt-4o,大約能省下一半的金額,可以參考以下價格表。
五. 結論
在這篇文章我們介紹了 GraphRAG 的概念、優勢及實作步驟與視覺化方法,讓大家能夠更直觀地了解和應用這項技術。
總結來說,KG + RAG 的結合已成為現代企業提升資料處理與問答系統效能的關鍵技術。Microsoft 的 GraphRAG 正是這一領域的前沿代表,透過結構化的知識圖譜,顯著提升了模型回答的準確性和相關性。且隨著 GenAI 的發展,在答案質量至關重要的應用中;或在需要解釋性的內部、外部或監管相關方的需求中;或在需要對數據訪問進行隱私和安全控制的應用中。
因此我大膽預測,未來,結合 KG 的 RAG 技術必將在資料檢索、問答系統以及智慧應用中發揮更重要的作用,成為引領 AI 發展的重要力量。
參考文獻
Edge, D., Trinh, H., Cheng, N., Bradley, J., Chao, A., Mody, A., Truitt, S., & Larson, J. (2024) . From Local to Global: A Graph RAG Approach to Query-Focused Summarization. ArXiv, abs/2404.16130 .
Xu, Z., Cruz, M.J., Guevara, M., Wang, T., Deshpande, M., Wang, X., & Li, Z. (2024) . Retrieval-Augmented Generation with Knowledge Graphs for Customer Service Question Answering. ArXiv, abs/2404.17723 .