基于博文 Advanced RAG Techniques: an Illustrated Overview 的学习和练习的记录。
中文内容可以查看博主@宝玉的译文 高级 RAG 技术:图解概览 [译]
系列笔记:
RAG 学习笔记(一)
高级 RAG
高级 RAG 架构如下图所示
图中,绿色元素为 RAG 核心技术点,蓝色元素为文本。(本架构图对一些细节进行省略,不宜按照本图进行实施)
RAG 核心技术点
- 分块和矢量化
- 搜索索引构建
- 重排序和过滤
- 查询转换
- 聊天引擎
- 查询路由
- RAG 中的 Agent
- 响应合成
下面将详细说明个技术点
分块和向量化
分块
文档分块的原因:
Transformer 模型输入的长度是固定的,能够表达的语义信息也是固定的,粒度小的文本内容(一句话或者几句话),生成的向量更能够表达文本的含义。
分块的大小是需要考量的参数。
- 影响因素:模型的选择,及模型 token 的容量。比如 Bert-based Sentence Transforms 模型最可以有 512 个token,而 OpenAI ada-002 可以接受 8191 个token。
- 需要在“获取到足够的上下文信息以供 LLM 生成回答”和“确保文本嵌入足够具体,以便有效地执行检索”之间找到平衡
扩展内容:
- 选择块大小时的各种考虑因素 Chunking Strategies for LLM Applications
- LlamaIndex 中对于文本分块的实现 NodeParser class
向量化
将文本块转化成向量的过程就是 Embedding。
可以从榜单 MTEB leaderboard 找到最新、效果最好的 Embedding 模型。
作者推荐查询优化过(search optimized)的模型,比如 bge-large 、E5 embedding 系列模型。
实例
LlamaIndex 分块和向量化过程的样例:Ingestion Pipeline