RAGFlow (https://github.com/infiniflow/ragflow) 在本周发布了 0.6 版本,解决了自开源以来在易用性,稳定性上等等面临的诸多问题。从下个版本开始,RAGFlow 将开始向 RAG 深层次演进。当下 RAG 仍然处于一个搭建 PoC 容易,但实际应用难的局面,这其中根本原因在于 RAG 本身面临诸多挑战,主要包括:
- 数据质量问题。RAGFlow 提供了开源的数据清洗和切分工具,有助于缓解这方面的问题,这方面 RAGFlow 的内置模型会继续迭代和进化。
- 数据召回问题。主要是针对对话意图明确的场景下,需要提供多路召回方法方便用户提取到准确的上下文。目前RAGFlow 采用能够提供多路召回能力的数据库,可以缓解这方面的问题。
- 寻找答案困难。在很多情况下,利用问题内容本身去检索,并不能真正找到答案的上下文,这两者之间存在语义空间的 GAP。
针对上面的最后一点,可以在多方面做工作,比如:
- 引入外部知识图谱做查询改写,识别用户意图。
- 引入 Agent 机制,让对话跟 LLM 产生更多交互和反省机制,从而提升回答质量。
- 增加召回上下文,让 LLM 可以在更长的上下文窗口找到答案。
以上这些工作,都在 RAGFlow 未来的规划中。今天我们要讲的是在 RAGFlow 正在开发的版本上 (main 分支,docker dev tag),针对上面的第三点,提供了的一个实验性功能,就是本文标题所提到的基于 RAPTOR 实现长上下文 RAG。
RAPTOR 来自于今年初的一篇论文《Recursive Abstractive Processing for Tree Organized Retrieval》,它介绍了一种文档增强预处理的方法:对文档内容做层次化聚类,如图所示:
在原始文档被切分成 Chunks 之后,RAPTOR 基于这些 Chunks 进一步聚类,这个聚类是递归和层次化进行的:图中叶子节点(蓝色的区块)代表起始 Chunks,叶子基于 embedding 进行聚类总结成更高层次的信息整合,并递归执行,最终形成从原始叶子开始的“树”。聚类的结果是摘要内容,这些摘要可用 LLM 生成。采用聚类并生成摘要内容是因为它能够捕捉到文本的高层次和细节方面,这对于处理复杂的主题查询和问答任务中的多步推理更有价值。对于聚类后的内容,RAPTOR 论文提到了两种检索处理形式,如下图所示:
第一种是保持树结构,在查询时按照树结构,从根节点开始分层检索。这种检索实现比较复杂,而且对于多路召回并不友好。
第二种是把树状结构平铺,统一检索。这种实现比较简单,而且很方便跟多路召回融合在一起。
根据论文的实验结果,推荐采用第二种,因此 RAGFlow 也直接采用了平铺结构。具体实现中,RAGFlow 在基于Deepdoc 的文档解析预处理阶段完成后,可选择性的打开 RAPTOR 开关进行聚类并生成摘要,随后把这些生成的内容跟原始的 Chunking 结果合并,然后共同送到数据库,分别建立全文索引和向量索引,后续的操作跟常规的 RAG 没有区别。
需要指出的是,默认情况下,RAPTOR 开关并没有打开,需要手动打开开关:
这样做的原因是因为需要针对聚类结果生成摘要,这会消耗用户的 LLM Token,因此当用户更追求对于长上下文窗口内更好的上下文理解时,可选择打开开关。
下图是一个样例返回:图中的左边方框中内容,就是 LLM 根据聚类结果生成的信息摘要,RAGFlow将这些摘要也以可视化的方式呈现给用户。这些摘要与原始数据一起被用到 RAG 的检索过程中,从而可以获得更好的提示词信息。
为什么采用 RAPTOR 可以更好的理解上下文?这是因为在聚类后的树状结构中,上层节点具备对文本更加宏观的理解,对于一些需要多跳问答(Multi-Hop QA,意思是并不能直接从检索对应的上下文找到答案),以及需要跨Chunk 进行总结的场景非常友好。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。