经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
手把手教你集成GraphRag.Net:打造智能图谱搜索系统
来源:cnblogs  作者:许泽宇  时间:2024/7/29 9:30:55  对本文有异议

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

        今天,我将向大家详细介绍如何在一个新的.NET项目中集成GraphRag.Net,这是一个参考GraphRag实现的.NET版本,能够实现图谱数据的存储、检索、和问答功能。

        在此之前,如果你还不熟悉GraphRag.Net的基本原理和实现,可以先参考我之前的文章。接下来,就让我们开始手把手集成GraphRag.Net的实践过程吧!

第一步:添加GraphRag.Net的NuGet包

        最简单的方式是通过命令行添加NuGet包:

  1. dotnet add package GraphRag.Net

  

        当然,你也可以通过Visual Studio 2022进行添加,方便图形化的操作。

 

第二步:配置项目

        在成功添加NuGet包后,我们需要在程序的启动文件中进行依赖注入配置。首先,在项目根目录添加以下三个配置文件,分别为:

  1. OpenAI配置:用于设置大模型接口的API密钥和端点。

  2. TextChunker配置:用于设置文档切片的参数。

  3. GraphDBConnection配置:用于设置数据库连接,默认支持SQLite和PostgreSQL。

appsettings.json中添加以下配置:

  1. {
  2. "OpenAI": {
  3. "Key": "sk-xxx",
  4. "Endpoint": "https://api.antsk.cn/",
  5. "ChatModel": "gpt-4o-mini",
  6. "EmbeddingModel": "text-embedding-ada-002"
  7. },
  8. "TextChunker": {
  9. "LinesToken": 100,
  10. "ParagraphsToken": 1000
  11. },
  12. "GraphDBConnection": {
  13. "DbType": "Sqlite", // "PostgreSQL"
  14. "DBConnection": "Data Source=graph.db",
  15. "GraphDBConnection": "graphmem.db",
  16. "VectorSize": 1536 // 仅在使用PostgreSQL时设置
  17. }
  18. }

  接着,在Program.cs中进行依赖注入:

  1. // OpenAI配置
  2. builder.Configuration.GetSection("OpenAI").Get<OpenAIOption>();
  3. // 文档切片配置
  4. builder.Configuration.GetSection("TextChunker").Get<TextChunkerOption>();
  5. // 配置数据库连接
  6. builder.Configuration.GetSection("GraphDBConnection").Get<GraphDBConnectionOption>();
  7.  
  8. // 注入AddGraphRagNet,这里需要注意,需要先注入配置文件后注入AddGraphRagNet
  9. builder.Services.AddGraphRagNet();

  

注意:必须先注入配置文件,然后再注入GraphRagNet,以确保一切工作都已配置完毕。

 

第三步:使用GraphRag.Net的核心功能

        在完成配置后,我们就可以开始使用GraphRag.Net提供的强大的图谱服务功能了。在需要使用的地方,注入IGraphService

  1. public class YourService
  2. {
  3. private readonly IGraphService _graphService;
  4.  
  5. public YourService(IGraphService graphService)
  6. {
  7. _graphService = graphService;
  8. }
  9.  
  10. // 以下是核心方法的使用示例
  11. }
  12.  
  13. //.net8新语法可以使用主构造函数进行注
  14. public class YourService(IGraphService _graphService)
  15. {
  16. // 以下是核心方法的使用示例
  17. }

  

在上面的示例中,我们可以调用以下核心方法:

查询所有索引

  1. var graphModel = _graphService.GetAllIndex();

查询索引下的图谱

  1. var graphModel = _graphService.GetAllGraphs(index);

插入文本数据到图谱(未切片)

  1. await _graphService.InsertGraphDataAsync(model.Index, model.Input);

插入文本数据到图谱(切片)

  1. await _graphService.InsertTextChunkAsync(index, txt);

生成社区摘要

  1. await _graphService.GraphCommunitiesAsync(index);

生成全局摘要

  1. await _graphService.GraphGlobalAsync(index);

不同的查询模式

我们提供了两种不同的查询模式,每种模式都有其优缺点:

搜索递归获取节点相关的所有边和节点进行图谱对话

  1. var result = await _graphService.SearchGraphAsync(model.Index, model.Input);

通过社区算法检索社区节点进行对话

  1. var result = await _graphService.SearchGraphCommunityAsync(model.Index, model.Input);

总结

        通过本文的介绍,我们了解了如何在一个新项目中集成GraphRag.Net。根据不同的应用场景,你可以选择不同的查询和摘要生成方法。由于当前导入仅支持文本数据,在实际项目中,可以结合Kernel Memory的自定义Handler来导入不同格式的文档。

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

 

原文链接:https://www.cnblogs.com/xuzeyu/p/18327513

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号