了解GraphRAG

转载:从零实现大模型-GraphRAG,构建LLM中的关系数据库

传统RAG

  LLM预训练和微调一般都是基于公开的互联网数据,不可能包含公司内部私有数据,如果你问有关某公司的运营情况,直接基于模型参数生成的回答可能和胡说八道没什么两样。

RAG(Retrieval-Augmented Generation,检索增强生成)的思想就是将私有数据作为参考信息传递给LLM。这些私有数据除了作为一种补充信息,也可以作为一种限制,能避免LLM产生幻觉。

  参考信息一般以文本、图片等非结构化形式存在。

  RAG的流程是:

  1. 首先要将文本划分成片段,然后将片段转换成向量存储到向量数据库中备用,这个向量就是这段文本语义信息的数字表示。
  2. 用户查询转换成向量,并与所有文本片段向量进行相似度计算,取出top k个片段。
  3. 将用户查询和k个文本片段组织成特定prompt格式输入到LLM中。

GraphRAG

  但传统的RAG仍有一些限制。

  例如,基于某个公司的运营数据搭建RAG,由于LLM上下文大小的限制,划分的文本片段不可能太大,所以每个文本片段不可能包含太多信息。

  如果你问某个员工去年的销售业绩,基于RAG,LLM很可能会给出准确回答,因为某个文本片段很可能包含了某个员工的年终总结信息。但如果你问该员工所在团队去年的销售情况呢?就算某个文本片段包含了该团队的销售数据,LLM也很难通过该员工找到团队的其它成员。

  微软最近提出的GraphRAG(Graph-based Retrieval Augmented Generation) 就是解决这个问题。

  GraphRAG就是将图和传统的RAG结合了起来

构造知识图谱

  图是由节点和边组成的,节点可以表示各种实体,边表示实体之间的关系。

  GraphRAG的核心就是构造知识图谱,可以通过GPT4或者使用像llamaindex(KnowledgeGraphIndex)这样的库构造知识图谱。

  将公司运营文档构造成知识图谱:

  1. 识别出文档中包含的实体以及实体之间的关系(员工,同事)
  2. 将实体进行聚类(同组同事)
  3. 对每个聚类进行总结(销售情况)
  4. 将实体进行向量化,转换到图向量空间
  5. 提取实体对应的原始文本,并转换成向量

查询

  当用户提问时,首先在知识图谱中找到与用户提问语义相关的实体,同时找到与实体相关的原始文本,最后将这些信息组织成特定prompt格式输入给LLM

随机推荐

  1. 大便系统怎样安装RPM包

    alien包转换工具 如果我们有很喜欢的RPM包,而又没有deb版本. 怎么办~? 可以同过alien来转换或者直接安装,这个小家伙可是个很方便的东西! 基本命令如下: 首先通过apt-get ins ...

  2. Java中序列化与反序列化

    序列化(Serialization)和反序列化(Deserialization)是计算机科学中用于数据存储和传输的两种基本操作. 序列化: 序列化是将对象的状态信息转换为可以存储或传输的形式的过程.简 ...

  3. 返璞归真!使用 alpinejs 开发交互式 web 应用,抛弃 node_modules 和 webpack 吧!

    前言 最近一直在使用 DjangoStarter 开发各种小项目,之前我是比较喜欢前后端分离的,后端用 Ninja API,前端 nextjs,开发起来也挺舒服的,交互体验也比较好. 不过我在网上冲浪 ...

  4. Halo 正式开源: 使用可穿戴设备进行开源健康追踪

    在飞速发展的可穿戴技术领域,我们正处于一个十字路口.市场上充斥着各式时尚.功能丰富的设备,声称能够彻底改变我们对健康和健身的方式.然而,在这些光鲜的外观和营销宣传背后,隐藏着一个令人担忧的现实:大多数 ...

  5. C#-公众号H5页面授权获取用户code、openid、unionid

    一:配置信息 公众号设置: 1:设置 IP白名单(所在的服务器ip).记录公众号APPID和APPsecret; 2:设置 网页授权域名; 二:页面授权----[html中获取code] 1:页面引入 ...

  6. brew之加速

    有没有出现这种场景:使用brew install 安装程序,一直卡在brew updating,这可能是使用着默认的github镜像源导致,那么我们就需要将其切换到国内 1.镜像切换(推荐中科大) 1 ...

  7. xtrabackup脚本

    xtrabackup是MySQL的一种物理备份工具,相对于mysqldump,备份和还原速度更快 , 我写了一份可以进行备份 + 还原的脚本 #!bin/bash all_bak_path=" ...

  8. MySQL底层概述—7.优化原则及慢查询

    大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模 ...

  9. Linux C/C++编程中的多线程编程基本概念

    8.2.1  操作系统和多线程 要在应用程序中实现多线程,必须有操作系统的支持.Linux 32位或64位操作系统对应用程序提供了多线程的支持,所以Windows NT/2000/XP/7/8/10是 ...

  10. 使用 SemanticKernel 对接 Ollma

    前面的 2 篇文章已经介绍了 ollama 的基本情况.我们也已经能在本地跟 LLM 进行聊天了.但是如何使用代码跟 LLM 进行交互呢?如果是 C# 选手那自然是使用 SK (SemanticKer ...