首页 > 其他分享 >手把手教你集成GraphRag.Net:打造智能图谱搜索系统

手把手教你集成GraphRag.Net:打造智能图谱搜索系统

时间:2024-07-27 21:44:13浏览次数:8  
标签:graphService GraphRag 手把手 await 图谱 Net model

        在人工智能和大数据发展的背景下,我们常常需要在项目中实现知识图谱的应用,以便快速、准确地检索和使用信息。

        今天,我将向大家详细介绍如何在一个新的.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来导入不同格式的文档。

      欢迎大家加入我们的交流社区,如果感兴趣,请关注我的公众号《许泽宇的技术分享》并发送“进群”来获取加入方式。期待与你们一起交流心得,共同进步!

 

标签:graphService,GraphRag,手把手,await,图谱,Net,model
From: https://www.cnblogs.com/xuzeyu/p/18327513

相关文章

  • 经典CNN模型(九):MobileNetV3(PyTorch详细注释版)
    一.MobileNetV3神经网络介绍MobileNetV3是MobileNet系列的第三代模型,由Google在2019年提出,旨在进一步优化模型的效率和性能,特别是在移动设备和边缘计算设备上。与前一代相比,MobileNetV3引入了多项改进,包括使用神经架构搜索(NeuralArchitectureSearch,NAS)、自适......
  • 一款.NET开源、跨平台的DASH/HLS/MSS下载工具
    前言今天大姚给大家分享一款.NET开源(MITLicense)、免费、跨平台的DASH/HLS/MSS下载工具,并且支持点播和直播(DASH/HLS)的内容下载:N_m3u8DL-RE。网络流媒体传输协议介绍DASHDASH是一种基于HTTP的自适应流媒体网络传输协议,它允许流媒体内容以多个编码和比特率的形式进行分发,客户端......
  • skynet热更新之inject
    游戏服务器的热更新是一种常见的需求,skynet可以通过inject的方式,来修改一个服务的消息处理函数,达到热更新的效果。skynet内置服务debug_consoleskynet自带了一个调试控制台服务。inject注入代码需要先启动这个服务。skynet.newservice("debug_console","127.0.0.1","9666")......
  • LSTNet RuntimeError:输入和参数张量不在同一设备上
    我克隆了一个githubrepo它运行一个pytorch深度学习模块,我定制了这部分以将模块和数据发送到GPU。train_dataset=MarketDataset(train_data,history_len=history_len)train_data_loader=DataLoader(train_dataset,batch_size=batch_size,shuffle=True)model......
  • Asp .Net Core 系列:详解授权以及实现角色、策略、自定义三种授权和自定义响应
    什么是授权(Authorization)?在ASP.NETCore中,授权(Authorization)是控制对应用资源的访问的过程。它决定了哪些用户或用户组可以访问特定的资源或执行特定的操作。授权通常与身份验证(Authentication)一起使用,身份验证是验证用户身份的过程,授权与身份验证相互独立,但是,授权需要一种身......
  • Profinet远程IO模块:模拟量模块_安装与接线说明
    XD系列插片式远程IO模块是兴达易控技术研发的分布式扩展模块。XD系列成套系统主要由耦合器、各种功能IO模块、电源辅助模块以及终端模块组成。有多种通讯协议总线的耦合器,例如PROFINET、Ether0AT、EthernetIP、00linkIE以及modbusT0P等。IO模块可分为多通道数字量输入模块、数......
  • 【Kubernetes】初识K8S基础
    目录一.K8S概述1.K8S背景物理机的缺点虚拟机特点(解决了物理机的缺点)虚拟机缺点容器化特点(解决了虚拟机的缺点)容器化缺点2.K8S基本概念2.1.作用2.2.特点二.K8S 集群架构与组件1.集群架构介绍2.核心组件2.1.Master组件Kube-apiserver:是所有服务请求的统一访问入......
  • 在.net 8中使用HttpClientFactory时日志记录请求body和响应body
     1、定义DelegatingHandlerpublicclassLoggingHandler:DelegatingHandler{privatereadonlyILogger<LoggingHandler>_logger;publicLoggingHandler(ILogger<LoggingHandler>logger){_logger=logger;}protectedov......
  • 【YOLOv8改进- Backbone主干】BoTNet:基于Transformer,结合自注意力机制和卷积神经网络
    YOLOv8目标检测创新改进与实战案例专栏专栏目录:YOLOv8有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLOv8基础解析+创新改进+实战案例介绍摘要我们提出了BoTNet,这是一种概念上简单但功能强大的骨干......
  • mobilenet为什么不适合做int8量化
    MobileNet在进行INT8量化时遇到的挑战主要有以下几个原因:网络结构复杂性:MobileNet使用深度可分离卷积(DepthwiseSeparableConvolutions)来减少计算量和参数数量。这种卷积方式使得权重分布更加稀疏且多样化,可能在量化过程中失去一些细微的精度。激活函数和特征图范围......