微軟GraphRAG 端到端使用及自用工具類

文章目錄

    • 一. 環境準備
      • 1.安裝 Python 環境
      • 2.安裝依賴
      • 3.配置 LLM API Key
    • 二. 初始化項目
    • 三. 文檔上傳 & 索引構建
    • 四. 問答(CLI 方式)
      • 示例:
    • 五. 代碼中調用 GraphRAG
      • 工具概覽
      • 核心工具詳解
      • 1. simple_graphrag_integration.py - 智能問答核心
      • 2. view_graph.py - 基礎數據查看
      • 3. visualize_graph.py - 圖譜可視化
      • 4. export_to_neo4j.py - Neo4j數據庫導入
      • 5. export_to_csv_for_neo4j.py - CSV批量導出
      • 6. parquet_viewer.py - 文件查看轉換
      • 7. view_communities.py - 社區分析
    • 六. Tips

之前我寫過一篇端到端構建知識圖譜的文章,有人在后臺問我關于GraphRAG的相關使用,今天我來講一下微軟的GraphRAG的使用。以及我自己寫的一些工具類,我把它們封裝成了每個都可以單獨使用的文件,有需要的可以直接拿來用 倉庫鏈接。

一. 環境準備

1.安裝 Python 環境

要求 Python 3.10+(推薦 3.11)。

# 建議創建虛擬環境
python3 -m venv graphrag_env
source graphrag_env/bin/activate  # Linux/Mac
graphrag_env\Scripts\activate     # Windows

2.安裝依賴

GraphRAG 使用 poetry 管理依賴。

pip install poetry# 克隆官方倉庫
git clone https://github.com/microsoft/graphrag.git
cd graphrag# 安裝依賴
poetry install

3.配置 LLM API Key

GraphRAG 默認支持 Azure OpenAIOpenAI

新建 .env 文件(或在環境變量里設置):

OPENAI_API_KEY=your_openai_key
OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_API_MODEL=gpt-4o-mini   # 或 gpt-4o, gpt-5 等
OPENAI_EMBEDDING_MODEL=text-embedding-3-small

如果用 Azure OpenAI,替換為:

AZURE_OPENAI_API_KEY=your_azure_key
AZURE_OPENAI_ENDPOINT=https://xxx.openai.azure.com/
AZURE_OPENAI_DEPLOYMENT=gpt-4o
AZURE_OPENAI_EMBEDDING_DEPLOYMENT=text-embedding-3-small

二. 初始化項目

在工作目錄(例如 ~/my_graphrag)執行:

graphrag init --root ./my_graphrag

它會生成一個 settings.yaml 配置文件和數據目錄結構:

my_graphrag/├── settings.yaml├── input/         # 放文檔├── output/        # 索引和結果└── state/         # 中間狀態

如果沒有對應的目錄結構手動創建 mkdir -p my_graphrag/input


三. 文檔上傳 & 索引構建

把你要問答的文檔(txt/pdf/markdown 等)放到 input/ 目錄。

例如:

input/└── demo.txt

然后執行索引構建:

  graphrag index --root ./my_graphrag

GraphRAG 會自動完成:

  • 文檔切分(text units)
  • 實體 & 關系抽取
  • 構建知識圖譜
  • 社區檢測 & 摘要生成
  • 向量存儲

最終結果會放在 output/ 目錄。

在這里插入圖片描述


四. 問答(CLI 方式)

GraphRAG 支持 local / global / drift 三種查詢模式。

示例:

# 本地檢索(local)
graphrag query --root ./my_graphrag --method local -q "請總結一下報告中公司的主要業務?"# 全局檢索(global)
graphrag query --root ./my_graphrag --method global -q "公司和競爭對手的差異是什么?"# 漂移搜索(drift)
graphrag query --root ./my_graphrag --method drift -q "哪些部門與AI相關?"

結果會直接輸出在終端


五. 代碼中調用 GraphRAG

環境搭建好以后,就可以在我們的項目中根據需要來使用GraphRAG的能力,下邊我羅列了一些工具類。

工具概覽

工具名稱主要功能適用場景
simple_graphrag_integration.py核心查詢服務在應用中集成 GraphRAG 問答功能
view_graph.py基礎數據查看快速了解知識圖譜的基本統計信息
visualize_graph.py圖譜可視化生成知識圖譜的網絡圖像
view_communities.py社區分析查看和分析圖譜中的社區結構
parquet_viewer.py文件查看器查看和轉換 GraphRAG 輸出文件
export_to_neo4j.pyNeo4j 集成將知識圖譜導入到 Neo4j 數據庫
export_to_csv_for_neo4j.pyCSV 導出生成 Neo4j 兼容的批量導入文件

核心工具詳解

1. simple_graphrag_integration.py - 智能問答核心

主要類:

# 基礎服務
service = SimpleGraphRAGService("./graphrag/my_graphrag")
result = service.query("什么是RAG?", method="auto")# 聊天機器人
chatbot = SimpleGraphRAGChatBot("./graphrag/my_graphrag")
response = chatbot.chat("介紹一下這個知識庫")

查詢方法:

  • local - 基于相關實體回答具體問題
  • global - 基于社區報告回答概括性問題
  • auto - 自動選擇最適合的方法

核心功能:

  • 自然語言問答
  • 上下文智能構建
  • 對話歷史管理
  • 多種查詢策略

2. view_graph.py - 基礎數據查看

def view_entities():df = pd.read_parquet("./graphragmy_graphrag/output/entities.parquet")print(f"總實體數: {len(df)}")print(df[['title', 'type', 'description']].head())def view_relationships():df = pd.read_parquet("./graphragmy_graphrag/output/relationships.parquet")print(f"總關系數: {len(df)}")print(df[['source', 'target', 'description']].head())

輸出示例:

=== 實體信息 ===
總實體數: 68title    type                description
0                 RAG  CONCEPT  檢索增強生成技術...
1                 LLM  CONCEPT  大語言模型...

3. visualize_graph.py - 圖譜可視化

def create_network_graph():"""創建網絡圖可視化"""# 讀取數據entities_df = pd.read_parquet("my_graphrag/output/entities.parquet")relationships_df = pd.read_parquet("my_graphrag/output/relationships.parquet")# 創建圖G = nx.Graph()for _, entity in entities_df.iterrows():G.add_node(entity['title'])for _, rel in relationships_df.iterrows():G.add_edge(rel['source'], rel['target'])# 可視化plt.figure(figsize=(15, 10))pos = nx.spring_layout(G, k=3, iterations=50)nx.draw(G, pos, with_labels=True, node_color='lightblue')plt.savefig('knowledge_graph.png', dpi=300)

生成文件: knowledge_graph.png - 高分辨率知識圖譜圖像

4. export_to_neo4j.py - Neo4j數據庫導入

class Neo4jExporter:def __init__(self, uri, user, password):self.driver = GraphDatabase.driver(uri, auth=(user, password))def create_entities(self, entities_df):"""創建實體節點"""with self.driver.session() as session:for _, entity in entities_df.iterrows():query = """CREATE (e:Entity {title: $title,type: $type,description: $description})"""session.run(query, **entity.to_dict())def create_relationships(self, relationships_df):"""創建關系"""with self.driver.session() as session:for _, rel in relationships_df.iterrows():query = """MATCH (a:Entity {title: $source})MATCH (b:Entity {title: $target})CREATE (a)-[r:RELATED_TO {description: $description}]->(b)"""session.run(query, **rel.to_dict())

常用Cypher查詢:

-- 查找最重要的實體
MATCH (n:Entity)
RETURN n.title, COUNT { (n)--() } as connections
ORDER BY connections DESC LIMIT 10-- 查找兩個實體間的最短路徑
MATCH path = shortestPath((a:Entity {title: 'RAG'})-[*]-(b:Entity {title: 'LLM'}))
RETURN path

5. export_to_csv_for_neo4j.py - CSV批量導出

def export_for_neo4j_csv():"""導出Neo4j兼容的CSV文件"""# 讀取數據entities_df = pd.read_parquet("my_graphrag/output/entities.parquet")relationships_df = pd.read_parquet("my_graphrag/output/relationships.parquet")# 準備節點CSVnodes_df = entities_df[['title', 'type', 'description']].copy()nodes_df.columns = ['title:ID', 'type', 'description']nodes_df[':LABEL'] = 'Entity'# 準備關系CSVrels_df = relationships_df[['source', 'target', 'description']].copy()rels_df.columns = [':START_ID', ':END_ID', 'description']rels_df[':TYPE'] = 'RELATED_TO'# 保存文件nodes_df.to_csv('neo4j_nodes.csv', index=False)rels_df.to_csv('neo4j_relationships.csv', index=False)

Neo4j導入命令:

neo4j-admin database import full \--nodes=neo4j_nodes.csv \--relationships=neo4j_relationships.csv \neo4j

6. parquet_viewer.py - 文件查看轉換

def view_parquet_info(file_path):"""查看parquet文件信息"""df = pd.read_parquet(file_path)print(f"文件: {file_path}")print(f"行數: {len(df)}, 列數: {len(df.columns)}")print(f"列信息: {list(df.columns)}")print(df.head(3))def convert_to_csv(parquet_path):"""轉換為CSV格式"""df = pd.read_parquet(parquet_path)csv_path = parquet_path.replace('.parquet', '.csv')df.to_csv(csv_path, index=False, encoding='utf-8')return csv_path

7. view_communities.py - 社區分析

def view_community_reports():"""查看社區報告"""df = pd.read_parquet("my_graphrag/output/community_reports.parquet")print(f"社區總數: {len(df)}")for i, row in df.iterrows():print(f"\n--- 社區 {i} ---")print(f"標題: {row.get('title', 'N/A')}")print(f"層級: {row.get('level', 'N/A')}")content = str(row.get('full_content', ''))[:200] + '...'print(f"內容摘要: {content}")

這套工具集提供了完整的GraphRAG數據處理和應用集成解決方案,從基礎查看到高級分析,滿足不同層次的使用需求。

六. Tips

  1. 選擇方法

    • local → 適合精準事實類問答(小范圍)
    • global → 適合總結、綜合類問題(大范圍)
    • drift → 資源有限時的折中選擇
  2. Prompt 調整
    修改 settings.yaml 里的 prompts 部分,能優化答案風格。

  3. 文檔更新
    如果增加/修改文檔,只需再次運行:

    graphrag index --root ./my_graphrag
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95421.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95421.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sqlserver2008導入excel表數據遇到的問題

1.如果表格為.xlsx格式時可能會提示“沒有為此鏈接管理提供列”,無法點擊下一步的話,建議可以使用.csv格式 .csv格式可能也會存在此提示,但是可以不用管 2.導入.csv數據時,字段為int時,填null導入不進去的話可以給個0作…

Unity游戲打包——打包流程

本文由 NRatel 歷史筆記整理而來,如有錯誤歡迎指正。一、基本流程二、組合步驟把上述每步做成獨立的輸入輸出邏輯 y fuc(x)然后,控制/組合其過程,可靈活產生不同的流程:1、單渠道出測試包2、單渠道出正式包3、單渠道包熱更三、構…

卷積神經網絡(二):手寫數字識別項目(一)

文章目錄手寫數字識別項目一、準備數據集二、定義模型三、模型訓練3.1 導入依賴庫3.2 設備設置(CPU/GPU 自動選擇)3.3 超參數定義3.4數據集準備1.獲取數據集2.劃分訓練集與驗證集3.創建 DataLoader(按批次加載數據)3.5模型初始化與…

批量給文件夾添加文件v2【件批量復制工具】

代碼功能介紹 這個代碼的功能就是一個,給某個文件夾里面添加某個文件(含父級文件夾下的每一個子文件夾) 舉個例子,父級文件夾是:“D:\Desktop\1,要添加的文件路徑是:D:\1.txt” 則最后會把文件…

Qt實現2048小游戲:看看AI如何評估棋盤策略實現“人機合一

2048 是一款經典的數字益智游戲,其簡單的規則背后蘊含著豐富的策略性。該項目不僅完整實現了 2048 的核心玩法,還包含了一個基于啟發式評估和蒙特卡洛方法的智能 AI 玩家。 我們將從項目整體架構入手,逐一解析游戲核心邏輯、UI 渲染、事件處理、AI 策略等關鍵模塊,并通過展…

封裝紅黑樹實現mysetmymap

1. 源碼分析 set實例化rb_tree時第二個模板參數給的是key&#xff0c;map實例化rb_tree時第?個模板參數給的是 pair<const key,T>&#xff0c;這樣一顆紅黑樹既可以實現key搜索場景的set&#xff0c;也可以實現key/value搜索場 景的map源碼里面模板參數是用T代表value&…

以OWTB為核心以客戶為基礎的三方倉運配一體化平臺分析V0.2

一、系統概述以OWTB&#xff08;Order-Warehouse-Transportation-Billing&#xff0c;訂單-倉儲-運輸-結算&#xff09;為核心的三方倉運配一體化平臺&#xff0c;是專為第三方物流企業打造的深度定制化解決方案。該平臺以第三方倉運配為主線&#xff0c;以多客戶/多SKU/個性化…

技術框架之腳手架實現

一、 序言在日常的企業級Java開發中&#xff0c;我們經常會發現自己在重復地做著一些項目初始化工作&#xff1a;創建相似的項目結構、引入一堆固定的依賴包、編寫通用的配置文件、拷貝那些幾乎每個項目都有的基礎工具類和日志配置。這些工作不僅枯燥乏味&#xff0c;而且容易出…

小迪安全v2023學習筆記(七十七講)—— 業務設計篇隱私合規檢測重定向漏洞資源拒絕服務

文章目錄前記WEB攻防——第七十七天業務設計篇&隱私合規檢測&URL重定向&資源拒絕服務&配合項目隱私合規 - 判斷規則&檢測項目介紹案例演示URL重定向 - 檢測判斷&釣魚配合介紹黑盒測試看業務功能看參數名goole語法搜索白盒測試跳轉URL繞過思路釣魚配合資…

用AI做旅游攻略,真能比人肉整理靠譜?

大家好&#xff0c;我是極客團長&#xff01; 作為一個沉迷研究 “AI 工具怎么滲透日常生活” 的科技博主&#xff0c;我開了個 AI 解決生活小事系列。 前兩期聊了用 AI 寫新聞博客、扒商業報告&#xff0c;后臺一堆人催更&#xff1a;能不能搞點接地氣的&#xff1f;比如&am…

Axure RP 9 Mac 交互原型設計

原文地址&#xff1a;Axure RP 9 Mac 交互原型設計 安裝教程 Axure RP 9是一款功能強大的原型設計和協作工具。 它不僅能夠幫助用戶快速創建出高質量的原型設計&#xff0c;還能促進團隊成員之間的有效協作&#xff0c;從而極大地提高數字產品開發的效率和質量。 擁有直觀易…

多線程——線程狀態

目錄 1.線程的狀態 1.1 NEW 1.2 RUNNABLE 1.3 BLOCKED 1.4 WAITING 1.5 TIMED_WAITING 1.6 TERMINATED 2.線程狀態的相互轉換 在上期的學習中&#xff0c;已經理解線程的啟動&#xff08;start()&#xff09;、休眠&#xff08;sleep()&#xff09;、中斷&#xff08;i…

IMX6ULL的設備樹文件簡析

先分析一個完整的設備樹&#xff0c;是怎么表達各種外設信息的。以imux6ull開發板為例進行說明。這個文件里就一個設備信息才這么點內容&#xff0c;是不是出問題了&#xff1f;當然不是&#xff0c;我們知道dts文件是可包含的&#xff0c;所以&#xff0c;最終形成的一個完整文…

【ARM】PACK包管理

1、 文檔目標對 pack 包的管理有更多的了解。2、 問題場景客戶在安裝了過多的 pack 包導致軟件打開比較慢&#xff0c;各種 pack 包顏色的區別&#xff0c;及圖標不同。3、軟硬件環境1&#xff09;、軟件版本&#xff1a;Keil MDK 5.392&#xff09;、電腦環境&#xff1a;Wind…

【Kubernetes】知識點4

36. 說明K8s中Pod級別的Graceful Shutdown。答&#xff1a;Graceful Shutdown&#xff08;優雅關閉&#xff09;是指當 Pod 需要終止時&#xff0c;系統給予運行中的容器一定的時間來等待業務的應用的正常關閉&#xff08;如保存數據、關閉連接、釋放資源等&#xff09;&#x…

Paraverse平行云實時云渲染助力第82屆威尼斯電影節XR沉浸式體驗

今年&#xff0c;Paraverse平行云實時云渲染平臺LarkXR&#xff0c;為享有盛譽的第82屆威尼斯國際電影節&#xff08;8月27日至9月6日&#xff09;帶來沉浸式體驗。 LarkXR助力我們的生態伙伴FRENCH TOUCH FACTORY&#xff0c;實現ITHACA容積視頻的XR交互演示&#xff0c;從意大…

大數據開發計劃表(實際版)

太好了&#xff01;我將為你生成一份可打印的PDF版學習計劃表&#xff0c;并附上項目模板與架構圖示例&#xff0c;幫助你更直觀地執行計劃。 由于當前環境無法直接生成和發送文件&#xff0c;我將以文本格式為你完整呈現&#xff0c;你可以輕松復制到Word或Markdown中&#xf…

GitLab 18.3 正式發布,更新多項 DevOps、CI/CD 功能【二】

沿襲我們的月度發布傳統&#xff0c;極狐GitLab 發布了 18.3 版本&#xff0c;該版本帶來了通過直接轉移進行遷移、CI/CD 作業令牌的細粒度權限控制、自定義管理員角色、Kubernetes 1.33 支持、通過 API 讓流水線執行策略訪問 CI/CD 配置等幾十個重點功能的改進。下面是對部分重…

Docker學習筆記(二):鏡像與容器管理

Docker 鏡像 最小的鏡像 hello-world 是 Docker 官方提供的一個鏡像&#xff0c;通常用來驗證 Docker 是否安裝成功。 先通過 docker pull 從 Docker Hub 下載它。 [rootdocker ~]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-wor…

STM32F103C8T6開發板入門學習——寄存器和庫函數介紹

學習目標&#xff1a;STM32F103C8T6開發板入門學習——寄存器和庫函數介紹學習內容&#xff1a; 1. 寄存器介紹 1.1 存儲器映射 存儲器本身無固有地址&#xff0c;是具有特定功能的內存單元。它的地址是由芯片廠商或用戶分配&#xff0c;給存儲器分配地址的過程就叫做存儲區映射…