了解GraphRAG
了解GraphRAG
- 开源地址:https://github.com/microsoft/graphrag
- 论文:From Local to Global: A Graph RAG Approach to Query-Focused Summarization
- 博客介绍:https://microsoft.github.io/graphrag/
传统RAG
LLM预训练和微调一般都是基于公开的互联网数据,不可能包含公司内部私有数据,如果你问有关某公司的运营情况,直接基于模型参数生成的回答可能和胡说八道没什么两样。
RAG(Retrieval-Augmented Generation,检索增强生成)的思想就是将私有数据作为参考信息传递给LLM。这些私有数据除了作为一种补充信息,也可以作为一种限制,能避免LLM产生幻觉。
参考信息一般以文本、图片等非结构化形式存在。
RAG的流程是:
- 首先要将文本划分成片段,然后将片段转换成向量存储到向量数据库中备用,这个向量就是这段文本语义信息的数字表示。
- 将用户查询转换成向量,并与所有文本片段向量进行相似度计算,取出top k个片段。
- 将用户查询和k个文本片段组织成特定prompt格式输入到LLM中。
GraphRAG
但传统的RAG仍有一些限制。
例如,基于某个公司的运营数据搭建RAG,由于LLM上下文大小的限制,划分的文本片段不可能太大,所以每个文本片段不可能包含太多信息。
如果你问某个员工去年的销售业绩,基于RAG,LLM很可能会给出准确回答,因为某个文本片段很可能包含了某个员工的年终总结信息。但如果你问该员工所在团队去年的销售情况呢?就算某个文本片段包含了该团队的销售数据,LLM也很难通过该员工找到团队的其它成员。
微软最近提出的GraphRAG(Graph-based Retrieval Augmented Generation) 就是解决这个问题。
GraphRAG就是将图和传统的RAG结合了起来。
构造知识图谱
图是由节点和边组成的,节点可以表示各种实体,边表示实体之间的关系。
GraphRAG的核心就是构造知识图谱,可以通过GPT4或者使用像llamaindex(KnowledgeGraphIndex)这样的库构造知识图谱。
将公司运营文档构造成知识图谱:
- 识别出文档中包含的实体以及实体之间的关系(员工,同事)
- 将实体进行聚类(同组同事)
- 对每个聚类进行总结(销售情况)
- 将实体进行向量化,转换到图向量空间
- 提取实体对应的原始文本,并转换成向量
查询
当用户提问时,首先在知识图谱中找到与用户提问语义相关的实体,同时找到与实体相关的原始文本,最后将这些信息组织成特定prompt格式输入给LLM。
随机推荐
- 2024ICPC 武汉邀请赛题解 更新至 8 题
目录 Preface Problem I. 循环苹果串 Problem K. 派对游戏 Problem B. 无数的我 Problem F. 订制服装 Problem E. 回旋镖 Problem D ...
- 题解:CF771A Bear and Friendship Condition
CF771A Bear and Friendship Condition 题解 算法 并查集,图的基本性质 分析 题目意思是,一旦有一些点联通,那么这些点必须两两直接相连.换句话讲,就是图中的每个联通 ...
- 2022年3月(202203)小米路由R3G(3G)刷openwrt和padavan的总结
本篇文章是本人这2天刷小米路由R3G的记录,中间可能有很多错误,欢迎留言指出. 1.千万别断电 2.刷机的时候要多等待 小米路由很多型号有着很强的可玩性,128M以上的ROM,256M以上的内存,R3 ...
- canvas绘制--圆角多边形
context.arcTo() arcTo() 方法在画布上创建介于两个切线之间的弧/曲线. JavaScript 语法: context.arcTo(x1,y1,x2,y2,r); 参数描述 参数 ...
- 数字IC知识点:处理多个时钟
1. 多时钟域 图1.多时钟域 对于工程师来说,开发含多个时钟(见图1)的设计是一种挑战. 这样的设计中可能有以下任何一个,或者全部类型的时钟关系: 时钟的频率不同 时钟频率相同,但相位不同 以上两种 ...
- Linux之SaltStack
SaltStack是基于Python开发的一套C/S架构配置管理工具(功能不仅仅是配置管理,如使用salt-cloud配置AWS EC2实例),它的底层使用ZeroMQ消息队列pub/sub方式通信, ...
- python之Marshmallow
文档说明:https://marshmallow.readthedocs.io marshmallow是一个用来将复杂的orm对象与python原生数据类型之间相互转换的库,简而言之,就是实现obje ...
- nginx之访问控制
Nginx的源码提供了ngx_http_auth_basic_module这个模块,它可以来解决web访问认证的问题.这个模块是默认就编译进nginx的,可以直接拿来使用. ngx_http_auth ...
- cnpm : 无法加载文件 cnpm.ps1
两种方法,本人用的第二种有效 一 安装 cnpm 命令行 npm install -g cnpm --registry=https://registry.npm.taobao.org 在使用 powe ...
- Python开发一个Instant Messaging(IM)(即时通讯)聊天工具:从理论到实践
一.引言 在现代社会中,即时通讯工具已经成为人们日常沟通的重要工具.开发一个IM聊天工具不仅能够提高我们的编程技能,还能让我们更好地理解即时通讯系统的原理.本文将详细介绍如何开发一个简单的IM聊天工具 ...