构建一个使用Llama-Index、Llama 3和Qdrant的高级重排-RAG系统
尽管大型语言模型(LLMs)有能力生成有意义且语法正确的文本,但它们面临的一个挑战是幻觉。
在LLMs中,幻觉指的是它们倾向于自信地生成错误答案,制造出看似令人信服的虚假信息。这个问题自LLMs问世以来就普遍存在,并经常导致不准确和事实错误的输出。
为了解决幻觉问题,事实检查至关重要。一种用于为LLMs原型设计进行事实检查的方法包括三种方法:
- 提示工程
- 检索增强生成(RAG)
- 微调
在这种情况下,我们将利用RAG(检索增强生成)来缓解幻觉。
什么是 RAG?
RAG = 密集向量检索(R)+上下文学习(AG)
检索:为您的文档中提出的问题查找参考资料。
增强:将参考资料添加到您的提示中。
生成:改进对所提出的问题的回答。
在RAG中,我们通过将文本文档或文档片段的集合编码为称为向量嵌入的数值表示来处理它们。每个向量嵌入对应于一个单独的文档片段,并存储在一个称为向量存储的数据库中。负责将这些片段编码为嵌入的模型称为编码模型或双编码器。这些模型在广泛的数据集上进行了训练,使它们能够为文档片段创建强大的表示形式,即单个向量嵌入。为了避免幻觉,RAG利用了与LLMs的推理能力分开保存的事实知识源。这些知识是外部存储的,可以轻松访问和更新。
有两种类型的知识源:
- 参数化知识:这种知识是在训练过程中获得的,并且隐含地存储在神经网络的权重中。
- 非参数化知识:这种类型的知识存储在外部源中,例如向量数据库。
为什么要在微调之前使用RAG?
- 便宜:无需额外的训练。
- 更容易更新最新信息。
- 更可信赖,因为有事实可核查的参考资料。
优化工作流程总结了基于以下两个因素可以使用的方法:
内容优化:模型需要知道什么。
LLM优化:模型需要如何行动。
RAG 数据堆栈
📁 加载语言数据
� 处理语言数据
🤖 嵌入语言数据
🗂 将向量加载到数据库中
RAG 涉及的阶段
RAG涉及的阶段包括:
-
数据加载:这涉及从各种来源(如文本文件、PDF、网站、数据库或API)检索数据,并将其集成到您的管道中。Llama Hub提供了各种连接器来实现此目的。
-
索引:这个阶段侧重于为数据查询创建结构化格式。对于LLMs,索引通常涉及生成向量嵌入,这是数据含义的数值表示,以及其他元数据策略,以便促进准确和上下文相关的数据检索。
-
存储:在索引之后,通常的做法是存储索引和相关元数据,以避免将来需要重复索引。