在人工智慧和大資料發展的背景下,我們常常需要在專案中實現知識圖譜的應用,以便快速、準確地檢索和使用資訊。
今天,我將向大家詳細介紹如何在一個新的.NET專案中整合GraphRag.Net,這是一個參考GraphRag實現的.NET版本,能夠實現圖譜資料的儲存、檢索、和問答功能。
在此之前,如果你還不熟悉GraphRag.Net的基本原理和實現,可以先參考我之前的文章。接下來,就讓我們開始手把手整合GraphRag.Net的實踐過程吧!
第一步:新增GraphRag.Net的NuGet包
最簡單的方式是透過命令列新增NuGet包:
dotnet add package GraphRag.Net
當然,你也可以透過Visual Studio 2022進行新增,方便圖形化的操作。
第二步:配置專案
在成功新增NuGet包後,我們需要在程式的啟動檔案中進行依賴注入配置。首先,在專案根目錄新增以下三個配置檔案,分別為:
-
OpenAI配置:用於設定大模型介面的API金鑰和端點。
-
TextChunker配置:用於設定文件切片的引數。
-
GraphDBConnection配置:用於設定資料庫連線,預設支援SQLite和PostgreSQL。
在appsettings.json
中新增以下配置:
{ "OpenAI": { "Key": "sk-xxx", "Endpoint": "https://api.antsk.cn/", "ChatModel": "gpt-4o-mini", "EmbeddingModel": "text-embedding-ada-002" }, "TextChunker": { "LinesToken": 100, "ParagraphsToken": 1000 }, "GraphDBConnection": { "DbType": "Sqlite", // "PostgreSQL" "DBConnection": "Data Source=graph.db", "GraphDBConnection": "graphmem.db", "VectorSize": 1536 // 僅在使用PostgreSQL時設定 } }
接著,在Program.cs
中進行依賴注入:
// OpenAI配置 builder.Configuration.GetSection("OpenAI").Get<OpenAIOption>(); // 文件切片配置 builder.Configuration.GetSection("TextChunker").Get<TextChunkerOption>(); // 配置資料庫連線 builder.Configuration.GetSection("GraphDBConnection").Get<GraphDBConnectionOption>(); // 注入AddGraphRagNet,這裡需要注意,需要先注入配置檔案後注入AddGraphRagNet builder.Services.AddGraphRagNet();
注意:必須先注入配置檔案,然後再注入GraphRagNet
,以確保一切工作都已配置完畢。
第三步:使用GraphRag.Net的核心功能
在完成配置後,我們就可以開始使用GraphRag.Net提供的強大的圖譜服務功能了。在需要使用的地方,注入IGraphService
:
public class YourService { private readonly IGraphService _graphService; public YourService(IGraphService graphService) { _graphService = graphService; } // 以下是核心方法的使用示例 } //.net8新語法可以使用主建構函式進行注 public class YourService(IGraphService _graphService) { // 以下是核心方法的使用示例 }
在上面的示例中,我們可以呼叫以下核心方法:
查詢所有索引
var graphModel = _graphService.GetAllIndex();
查詢索引下的圖譜
var graphModel = _graphService.GetAllGraphs(index);
插入文字資料到圖譜(未切片)
await _graphService.InsertGraphDataAsync(model.Index, model.Input);
插入文字資料到圖譜(切片)
await _graphService.InsertTextChunkAsync(index, txt);
生成社群摘要
await _graphService.GraphCommunitiesAsync(index);
生成全域性摘要
await _graphService.GraphGlobalAsync(index);
不同的查詢模式
我們提供了兩種不同的查詢模式,每種模式都有其優缺點:
搜尋遞迴獲取節點相關的所有邊和節點進行圖譜對話
var result = await _graphService.SearchGraphAsync(model.Index, model.Input);
透過社群演算法檢索社群節點進行對話
var result = await _graphService.SearchGraphCommunityAsync(model.Index, model.Input);
總結
透過本文的介紹,我們瞭解瞭如何在一個新專案中整合GraphRag.Net。根據不同的應用場景,你可以選擇不同的查詢和摘要生成方法。由於當前匯入僅支援文字資料,在實際專案中,可以結合Kernel Memory的自定義Handler來匯入不同格式的文件。
歡迎大家加入我們的交流社群,如果感興趣,請關注我的公眾號《許澤宇的技術分享》併傳送“進群”來獲取加入方式。期待與你們一起交流心得,共同進步!