什么是RAG
RAG 是预训练的 LLM 与外部(可搜索的)知识库的组合。在推理时,我们可以在此知识库中搜索相关的文本上下文,并将其添加到 LLM 的提示词中。然后,LLM 可以使用其上下文学习能力来利用这个添加的上下文并产生更真实/更扎实的输出。
RAG步骤
- 加载文件
- 读取文本
- 文本分割
- 文本向量化
- 问句向量化
- 在文本向量中匹配出与问句向量最相似的 top k 个
- 匹配出的文本作为上下文和问题一起添加到 prompt 中
- 提交给 LLM 生成回答
这种简单的方法有效,但构建高性能的 RAG 应用程序需要更多。以下是我们可以通过几种途径来完善我们的 RAG。
优化RAG
- 读取文本,额可以对文本做一些处理,用于 RAG 的数据可能来自不同格式的多个来源(例如 pdf、markdown 等),这可能会导致噪声(例如,徽标、图标、特殊符号和代码块)从而使 LLM 感到困惑。我们可以通过创建数据预处理(NLP)来解决这个问题。
- 文本切割:设置适当的块间重叠、多粒度文档块切分、基于语义的文档切分、文档块摘要。
- 在检索阶段使用 混合搜索:归根结底,RAG 的检索组件只是一个搜索引擎。因此,我们可以通过使用搜索中的想法来大幅改进检索。例如,我们可以执行词法和向量检索(即混合检索),以及通过重排模型重新排序以检索最相关的数据。
- 提示工程:优化模板增加提示词约束、提示词改写
- 数据收集:我们部署了 RAG 应用程之后序,我们就可以开始收集可用于改进应用程序的数据。例如,我们可以在具有相关文本块的输入查询对上微调检索模型,根据高质量输出微调 LLM。