首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年07月27日 20:30

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

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

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

 

From:https://www.cnblogs.com/xuzeyu/p/18327513
本文地址: http://shuzixingkong.net/article/498
0评论
提交 加载更多评论
其他文章 Python 实现行为驱动开发 (BDD) 自动化测试详解
​ 在当今的软件开发领域,行为驱动开发(Behavior Driven Development,BDD)作为一种新兴的测试方法,逐渐受到越来越多开发者的关注和青睐。Python作为一门功能强大且易于使用的编程语言,在实现BDD方面也有着独特的优势。那么,如何利用Python实现BDD自动化测试呢?本
Python 实现行为驱动开发 (BDD) 自动化测试详解 Python 实现行为驱动开发 (BDD) 自动化测试详解 Python 实现行为驱动开发 (BDD) 自动化测试详解
利用Elasticsearch实现地理位置、城市搜索服务
最近用到一些简单的地理位置查询接口,基于当前定位获取用户所在位置信息(省市区),然后基于该信息查询当前区域的......提供服务。 然后就自己研究了下GIS,作为一个程序员。自己能不能实现这个功能呢?答案当然是可以。立即开干。 思路:找到数据,写入数据库,利用Elasticsearch强大的搜索能力
利用Elasticsearch实现地理位置、城市搜索服务 利用Elasticsearch实现地理位置、城市搜索服务
2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。 然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。 要求找出最多可以选
2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。 然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。 要求找出最多可以选出的元素数量。 输入:nums = [2,1,5,1,1]。 输出:3。 解释:我们将下标 0 和
2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。 然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。 要求找出最多可以选 2024-07-27:用go语言,给定一个正整数数组,最开始可以对数组中的元素进行增加操作,每个元素最多加1。 然后从修改后的数组中选出一个或多个元素,使得这些元素排序后是连续的。 要求找出最多可以选
暑假java自学进度总结03
一.今日所学: 1.标识符命名规则: 必须: 1&gt;由数字,字母,下划线,美元符组成; 2&gt;不能以数字开头; 3&gt;不能是关键字; 4&gt;区分大小写; 建议: 1&gt;命名方法,变量时用小驼峰命名法: *1.标识符是一个单词时,全部小写 *2.标识符是多个单词组合时,第一个单词小
《最新出炉》系列入门篇-Python+Playwright自动化测试-55- 上传文件 (非input控件)- 中篇
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等。所以宏哥打算按上传文件的分类对其进行一下讲解和分享。 2.上传文件的API(非input控件) Playwright是一个现代化的自动化测试工具,它支持多种浏览器和操作系统,可以帮助开发人
《最新出炉》系列入门篇-Python+Playwright自动化测试-55- 上传文件 (非input控件)- 中篇 《最新出炉》系列入门篇-Python+Playwright自动化测试-55- 上传文件 (非input控件)- 中篇 《最新出炉》系列入门篇-Python+Playwright自动化测试-55- 上传文件 (非input控件)- 中篇
微服务集成springsecurity实现认证
module:auth 1.添加依赖:spring-cloud-starter-security与spring-cloud-starter-oauth2 2.配置WebSecurityConfig:注入AuthenticationManager覆写configure 3.配置tokenConfig
APK包的加固手段收集(浅)
目录防止APK被调试加壳代码混淆:检测调试器:使用反调试技术:环境检测:使用Native代码:多层防护:防止APK被篡改签名校验:V1 签名机制V2 签名机制V3 签名机制动态完整性校验: 想要保护APK应用内的代码逻辑安全,需要做一定的APK加固操作。加固的常见操作有: 混淆 加密 隐藏 检测 .
[rCore学习笔记 018]实现特权级的切换
写在前面 本随笔是非常菜的菜鸡写的。如有问题请及时提出。 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 本节内容 因为risc-v存在硬件特权级机制,我们又要实现一个可以使得应用程序工作在用户级,使得操作系统工
[rCore学习笔记 018]实现特权级的切换 [rCore学习笔记 018]实现特权级的切换 [rCore学习笔记 018]实现特权级的切换