分享
构建无向量RAG系统(无需嵌入向量,无需向量数据库)
输入“/”快速插入内容
构建无向量RAG系统(无需嵌入向量,无需向量数据库)
用户4242
用户4242
3月28日修改
🔗 原文链接:
https://x.com/TheVixhal/status/2037...
本文中,我们将借助分层页面索引技术,构建一套无需向量、基于推理的RAG系统。该系统会把文档转化为树形结构,再由大语言模型(LLM)通过推理遍历该树形结构以获取答案,全程无需嵌入向量,也无需相似度检索。
这与我们在现实生活中查找信息的方式十分相似。当你想在课本中查找某个知识点时,不会从头逐页翻阅,而是先打开目录,找到对应章节,查看其下的小节,再直接定位到所需内容。
页面索引(PageIndex)的工作原理亦是如此。你向其输入一份文档,它会将文档构建为树形结构——每个分支对应一个章节,每个叶节点对应具体文本内容;当你提出问题时,大语言模型便会逐层遍历这棵树,最终找到准确答案。
完整代码:
https://github.com/vixhal-baraiya/pageindex-rag
(如果你觉得这个有帮助,别忘了点个⭐星哦。)
计划
在我们敲下第一行代码之前,这是完整的计划。
步骤1:将文档解析为层次化树形结构。
我们将文档发送给大语言模型(LLM),并要求它将文本拆分为顶级章节。然后,对于每个足够长、可以进一步拆分的章节,我们再次将其发送给大语言模型,以获取子章节。这就为我们生成了一个多级树结构。短章节保持为叶子节点。长章节则成为带有子节点的内部节点。
步骤2:自下而上总结每个节点。
我们从叶子节点到根节点遍历树结构。每个叶子节点都会得到一个由大语言模型生成的简短的原始文本摘要。每个内部节点都会得到一个由其子节点摘要构建的摘要。根节点最终会得到整个文档的摘要。
步骤3:保存索引。
我们将树序列化为一个JSON文件。这就是索引。我们构建一次,然后重复使用它。
步骤4:通过遍历树来检索。
在查询时,我们从根节点开始。我们向大语言模型展示所有子节点的摘要,并询问应该进入哪一个。我们移动到该子节点。我们重复这个过程,直到到达一个叶子节点。叶子节点的原始文本就是我们检索到的上下文。
步骤5:生成答案。
我们将检索到的上下文和问题传递给大语言模型(LLM),然后得到答案。
架构
让我们来看看数据是如何在系统中流动的。
索引时间(运行一次)
查询时间(每个问题的运行次数)