手把手教你集成GraphRag.Net:打造智能图谱搜索系统
在人工智能和大数据发展的背景下,我们常常需要在项目中实现知识图谱的应用,以便快速、准确地检索和使用信息。
今天,我将向大家详细介绍如何在一个新的.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来导入不同格式的文档。
欢迎大家加入我们的交流社区,如果感兴趣,请关注我的公众号《许泽宇的技术分享》并发送“进群”来获取加入方式。期待与你们一起交流心得,共同进步!
手把手教你集成GraphRag.Net:打造智能图谱搜索系统的更多相关文章
- 手把手教你集成华为机器学习服务(ML Kit)人脸检测功能
当给自己拍一张美美的自拍照时,却发现照片中自己的脸不够瘦.眼睛不够大.表情不够丰富可爱-如果此时能够一键美颜瘦脸并且添加可爱的贴纸的话,是不是很棒? 当家里的小孩观看iPad屏幕时间过长或者眼睛离屏幕 ...
- 动手实践丨手把手教你用STM32做一个智能鱼缸
摘要:本文基于STM32单片机设计了一款基于物联网的智能鱼缸. 本文分享自华为云社区<基于STM32+华为云IOT设计的物联网鱼缸[玩转华为云]>,作者: DS小龙哥 . 1. 前言 为了 ...
- 手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能
/1 前言/ 在家闲着,做个小项目,基于Python,实现一个语聊小机器人,分享给大家.项目整体比较简单,官方文档介绍的非常详细,可快速上手. /2 目标/ 将图灵机器人放到桌面,实现工作助手/陪聊功 ...
- 手把手教你在VMware虚拟机中安装Ubuntu14.04系统
在VMware中创建完虚拟机之后,一般需要给虚拟机安装系统,比较受青睐的系统有Ubuntu和Centos,关于Centos系统的安装之前已经写过了,感兴趣的小伙伴可以戳这篇文章:靠谱的centos7. ...
- 手把手教你Android手机与BLE终端通信--连接,发送和接收数据
假设你还没有看上一篇 手把手教你Android手机与BLE终端通信--搜索,你就先看看吧,由于这一篇要接着讲搜索到蓝牙后的连接.和连接后的发送和接收数据. 评论里有非常多人问假设一条信息特别长,怎么不 ...
- 手把手教你如何在Ubuntu系统中安装Pycharm
前几天带大家一起安装了Ubuntu14.04系统,没来得及上车的伙伴可以戳这篇文章:手把手教你在VMware虚拟机中安装Ubuntu14.04系统.今天小编带大家一起在Ubuntu14.04中安装Py ...
- Android:手把手教你打造可缩放移动的ImageView(下)
在上一篇Android:手把手教你打造可缩放移动的ImageView最后提出了一个注意点:当自定义的MatrixImageView如ViewPager.ListView等带有滑动效果的ViewGrou ...
- 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发
每天记录一点:NetCore获得配置文件 appsettings.json 用NetCore做项目如果用EF ORM在网上有很多的配置连接字符串,读取以及使用方法 由于很多朋友用的其他ORM如S ...
- 手把手教你Pytest+Allure2.X定制报告详细教程,给自己的项目量身打造一套测试报告-02(非常详细,非常实用)
简介 前边一篇文章是分享如何搭建pytest+Allure的环境,从而生成一份精美的.让人耳目一新的测试报告,但是有的小伙伴或者童鞋们可能会问,我能不能按照自己的想法为我的项目测试结果量身打造一份属于 ...
- 手把手教你使用 Clion 开发 Linux C++ 项目
手把手教你使用 Clion 开发 Linux C++ 项目 关于CLion CLion是一款专为开发C及C++所设计的跨平台IDE.它是以IntelliJ为基础设计的,包含了许多智能功能来提高开发人员 ...
随机推荐
- .NET桌面程序混合开发之二:在原生WinFrom程序中使用WebView2
本文将介绍如何在WinForms中嵌入WebView2,并讲到WebView2的主要特征.点击了解更多WebView2的API. 1. 准备 Visual Studio 2017 及以上版本 WebV ...
- DP Record
从 2024/5/4 往后开始记录捏. T1. 给你一棵树,定义一个集合的权值为 \(\dfrac{\sum_{x\in S}V_x}{\sum_{x\in S}C_x}\).若一个点 \(\in S ...
- Unity3D 内存管理非代码技巧
在场景管理器新建 gameobjct 使用代码在类初始化时 NEW 普肉fai包(包)然后将相同的类NEW够挂载到 gameobjct子节点上 在操控列表中类的时候用for循环遍历操作移动还是怎么样( ...
- C# .NET Dictionary 将集合key以ascii码从小到大排序
.NET 不加参数,默认不是按ASC II 排序 .JAVA 默认是按ASC II 排序 . Array.Sort(arrKeys, string.CompareOrdinal); 按ASC II 排 ...
- cent browser 百分浏览器不能使用剪切板复制粘贴
cent browser 百分浏览器不能使用剪切板复制粘贴,查看剪切板的文本和图像. 解决方法: 1.进入设置-隐私设置和安全性-网站设置 2.查看各网站的权限及储存的数据 3.搜索你的网站,点击重置 ...
- core dump 路径定义以及监控
Core Dump 是什么? Core Dump 是指进程异常退出时,操作系统将进程的内存状态保存到文件中,这个文件就是 Core Dump 文件,中文一般翻译为"核心转储",哈, ...
- Vue3:项目创建
Vue 3 相对于 Vue 2 带来了许多改进和优点,这些改进主要是为了提高性能.开发体验和可维护性.但是对于创建项目,Vue3也可以采用跟Vue2相同的方式. 使用CLI创建 1. 安装Vue CL ...
- mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索
mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索那就是主表和从表的关联字段的编码方式不一样!!! 产生的现象: 解决之后,正确的使用了t2.or ...
- 《史记 XuYu列传》
前言 甲辰年二月十九,余记挂友人须臾.大醉,作此篇以悼念故友.忆往昔同窗之情,言语无不有经天纬地之能,举手投足间便可斩敌方上将.能文能武,乃当世之奇才,其言语中有大智慧.(文体并不重要) 吃饭时 Xu ...
- 记一次反向代理过滤sql注入
公司有一php系统,由于该系统是购买的,并且没人懂php,无法通过修改代码过滤sql注入问题 代码如下: public class Program { public static void Main( ...