手把手教你整合GraphRag.Net:打造智慧圖譜搜尋系統

许泽宇發表於2024-07-27

在人工智慧和大資料發展的背景下,我們常常需要在專案中實現知識圖譜的應用,以便快速、準確地檢索和使用資訊。

今天,我將向大家詳細介紹如何在一個新的.NET專案中整合GraphRag.Net,這是一個參考GraphRag實現的.NET版本,能夠實現圖譜資料的儲存、檢索、和問答功能。

在此之前,如果你還不熟悉GraphRag.Net的基本原理和實現,可以先參考我之前的文章。接下來,就讓我們開始手把手整合GraphRag.Net的實踐過程吧!

第一步:新增GraphRag.Net的NuGet包

最簡單的方式是透過命令列新增NuGet包:

dotnet add package GraphRag.Net

  

當然,你也可以透過Visual Studio 2022進行新增,方便圖形化的操作。

第二步:配置專案

在成功新增NuGet包後,我們需要在程式的啟動檔案中進行依賴注入配置。首先,在專案根目錄新增以下三個配置檔案,分別為:

  1. OpenAI配置:用於設定大模型介面的API金鑰和端點。

  2. TextChunker配置:用於設定文件切片的引數。

  3. 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來匯入不同格式的文件。

歡迎大家加入我們的交流社群,如果感興趣,請關注我的公眾號《許澤宇的技術分享》併傳送“進群”來獲取加入方式。期待與你們一起交流心得,共同進步!

相關文章