logo
LLM基础-- RAG专题

LLM基础-- RAG专题

  • 发布时间:2024-12-10 10:30:49
  • 分类:人工智能

1.什么是RAG,它有什么特点

1.1 初识RAG

RAG(Retrieval Augmented Generation),即检索增强生成,是一种为生成式模型提供与外部世界互动解决方案的技术。其核心理念是通过找到用户提问最相关的知识或对话历史,并结合原始提问(查询),创造出信息丰富的提示(prompt),指导模型生成准确的输出。这一过程本质上应用了情境学习(In-Context Learning)的原理,使得模型能够根据具体的上下文环境进行学习和调整。

简单来说,RAG = 检索技术 + LLM 提示

这意味着当用户提出一个问题时,RAG系统首先会利用检索技术从大量的知识库中找到与问题最相关的信息片段。然后,这些信息片段被整合成一个结构化的提示,传递给大型语言模型(LLM)。LLM在接收到这个提示后,可以基于此生成更加精确、有针对性的回答。

1.2 RAG的特点

•关于 RAG有如下特点:

1.依赖大型语言模型来强化信息检索和输出:RAG需要结合大型语言模型(LLM)来进行信息检索和生成。如果单独使用RAG,它的能力会受到限制,因为RAG本身并不具备强大的自然语言处理能力。只有在强大语言模型的支持下,RAG才能更有效地生成和提供信息。例如,在回答专业领域的复杂问题时,LLM可以帮助理解问题的具体背景,并从中提取出有用的知识点用于生成答案。

2.能与外部数据有效集成:RAG能够很好地接入和利用外部数据库的数据资源,弥补通用大模型在某些垂直或专业领域的知识不足。对于行业特定术语和深度内容,RAG可以提供比普通大模型更为精准的答案。比如,在医疗咨询场景中,RAG可以通过连接医院内部的病例数据库,为医生提供最新的治疗方案建议;而在金融领域,则可以从交易记录中挖掘有价值的投资信息。

3.数据隐私和安全保障:在大多数情况下,RAG所连接的私有数据库不会参与到大模型的数据集训练过程中。因此,RAG不仅提升了模型的输出表现,还有效地保护了这些私有数据的隐私性和安全性,确保敏感信息不会暴露给大模型的训练环节。这对于涉及个人隐私或商业机密的应用尤为重要,如法律咨询、企业内部沟通等场景。

4.表现效果因多方面因素而异:RAG的效果受多个因素影响,包括但不限于,

○ 使用的语言模型性能:不同版本的大语言模型具有不同的理解和生成能力,直接影响到最终输出的质量。

○ 接入数据的质量:高质量的数据源意味着更好的检索结果,进而提高生成答案的准确性,这里的质量主要指数据结构与格式。

○ AI算法的先进性:先进的机器学习算法可以使检索过程更加智能高效,从而优化整体流程。

○ 检索系统的设计:良好的架构设计有助于提升系统的响应速度及用户体验。

1.3 RAG和大模型什么关系?

1.3.1 RAG作为大语言模型(LLM)的热门应用开发架构

RAG不仅是一种技术,更是大语言模型(LLM)在特定领域中实现高效应用的重要桥梁。它既是LLM较为热门的应用开发架构,也是其在垂直领域的应用拓展平台。通过结合强大的语言理解和生成能力,RAG能够为用户提供更加精准、个性化的服务。

1.3.2补足通用模型在垂直领域的知识短板

尽管大型语言模型拥有广泛的知识基础,但它们在处理特定行业或专业领域的复杂问题时,可能会遇到知识盲点或不精确的情况。RAG能够在LLM强大功能的基础上,通过扩展访问特定领域数据库或内部知识库,弥补这些不足。例如,在医疗、法律和金融等需要高度专业知识的行业中,RAG可以提供更准确、针对性更强的答案,从而提升用户体验和服务质量。

1.3.3 解决数据来源与隐私安全问题

在LLM的基础上,RAG通过数据内循环机制,更好地解决了数据来源的问题。这意味着RAG不仅可以从公共数据源获取信息,还能安全地利用私有数据进行检索和生成,而无需将敏感信息暴露给外部系统。这不仅增强了搜索与生成功能,同时也减少了行业用户对数据私密性和安全性的顾虑。因此,RAG成为了各类大模型落地项目不可或缺的技术组件。

1.3.4 减少模型幻觉并提升性能

RAG的应用有助于显著减少模型幻觉(模型基于错误或不存在的信息生成答案的现象)的发生。通过引入真实的、经过验证的数据,RAG确保了生成内容的真实性和可靠性,进而提升了大模型检索和生成的性能。这种改进对于提高用户信任度至关重要,尤其是在那些依赖准确信息决策的关键场景中。

1.3.5 推动商业化进程

由于训练成本相对较低,RAG已经迅速扩展到了多个应用场景,如企业信息库建设、AI文档问答、业务培训、科研等领域。搭配AI智能体(agent),RAG极大地加快了大模型的商业化进程。它使得企业和机构能够以更低的成本部署智能解决方案,同时享受高质量的服务体验。

1.3.6 进化为Self-RAG

为了进一步提高RAG的智能化程度和应用价值,研究人员在原有的检索增强生成体系基础上推出了Self-RAG(即自反思的检索增强生成方法)。Self-RAG不仅继承了传统RAG的优点,还引入了自我评估和学习机制,可以在没有人工干预的情况下自动优化检索策略和生成结果。这一进步代表了RAG技术的一大升级与进化,预示着未来更多的可能性和发展方向。

1.4 RAG的发展历程与技术演化

1.4.1 RAG的初创与发展

RAG的概念首次出现在2020年,当时研究人员提出了将预训练的检索器(retriever)与预训练的序列到序列(seq2seq)生成模型相结合,并进行端到端微调的新思路。这种方法旨在通过结合外部知识库来增强模型的表达能力和准确性,同时保持较高的效率和可解释性。早期的RAG系统主要关注开源的、非结构化的知识来源,这标志着RAG作为一项独立技术的诞生。

1.4.2 大型语言模型时代的RAG发展

随着大语言模型(LLM)时代的到来,特别是在2022年后,RAG技术得到了更广泛的应用和发展。ChatGPT等里程碑式产品的推出,不仅推动了自然语言处理(NLP)领域进入了一个新的纪元,也使得RAG成为提升聊天机器人和其他基于LLM应用的关键工具。这一时期,RAG的应用场景迅速扩展,从简单的问答系统发展到复杂的多轮对话管理、文档摘要、内容创作等多个方面。

1.4.3 RAG技术的演化

在高性能大模型逐渐普及的同时,其高昂的训练成本促使学术界和工业界寻求更加高效的方法来整合外部知识,以增强模型性能并降低成本。因此,推理截断的RAG(即在推理阶段加入RAG模块)开始受到重视。这种做法允许开发者在不需要重新训练整个大模型的情况下,利用现有的外部知识资源来改进模型输出的质量。此外,RAG的检索范围也在不断扩大,除了最初的开源、非结构化知识外,现在还包括了更多高质量的数据源,如专业领域的数据库和知识图谱,这些都有助于减轻LLM中的错误知识和幻觉问题。

1.4.4RAG的增强阶段与数据源

从发展阶段来看,RAG可以应用于三个关键环节:预训练(Pre-training)微调(Fine-tuning)和推理(Inference)。每个阶段都可以通过不同类型的外部知识来增强模型的能力。具体来说:

预训练阶段:可以通过增加多样化的知识源来丰富模型的基础知识。

微调阶段:针对特定任务或领域,使用定制化的知识库来提高模型的专业性和准确性。

推理阶段:在实际应用中动态检索最相关的外部信息,确保生成的内容既准确又具有时效性。

至于数据源的选择,RAG可以从非结构化数据(如文本文件、网页)、结构化数据(如表格、数据库记录)以及由其他LLM生成的内容中获取知识。这种灵活性使得RAG能够适应多种应用场景的需求。

目前,业界对RAG的定义已经达成了一些基本共识:

检索阶段:利用编码模型根据用户的问题检索相关文档或知识片段,确保后续生成的内容有据可依。

生成阶段:将检索到的上下文信息作为条件输入给生成模型,使系统能够在此基础上生成更加精确、连贯的回答。

2.RAG技术体系的总体思路

参考:https://aibook.ren/archives/what-is-rag

3.详细介绍一下RAG的5个基本流程

RAG可分为5个基本流程

1.知识文档的准备

2.嵌入模型(embedding model)

3.向量数据库

4.查询检索

5.生产回答

1.知识文档的准备

确保信息源的多样性和可读性

在搭建RAG系统时,第一步是精心准备知识文档。这些文档可以来源于各种格式,包括但不限于Word文档、TXT文件、CSV数据表、Excel表格、PDF文件,甚至是图片和视频等多媒体内容。为了使这些丰富多样的信息能够被大语言模型理解,必须先将它们转换成纯文本形式

•使用专门工具处理不同类型的文件:对于PDF文件,我们可以利用专业的PDF提取器来抽取其中的文本内容;而对于图像或视频中的文字信息,则可以通过光学字符识别(OCR)技术进行转换。此外,还有针对结构化数据(如电子表格)的解析方法,确保所有类型的知识都能准确无误地纳入到系统的知识库中。

•文档切片以优化处理效率:由于原始文档可能非常庞大,直接对其进行处理可能会导致计算资源浪费,并影响检索速度。因此,在预处理阶段,还需要对较长的文档进行分块处理,即“文档切片”。通过合理划分文档,使得每个片段既能保持语义连贯性又不会过于冗长,从而提高后续检索的精度与效率。

2.嵌入模型

一旦完成了知识文档的准备工作,接下来就需要借助嵌入模型将非结构化的文本信息转化为计算机易于理解和操作的数值表示——向量。这个过程被称为“嵌入”(embedding),它不仅消除了人类语言中存在的大量歧义,还增强了机器对于句子之间关系的理解能力。

2.1 捕捉上下文依赖性

理解词汇的多重含义,嵌入模型的核心任务之一就是捕捉文本中的语境信息。自然语言充满了多义性和灵活性,同一个词汇在不同的句子中可能具有截然不同的含义。例如,“光盘”这个词既可以指“储存CD”,也可以指“把食物吃感觉”。一个优秀的嵌入模型应该能够根据周围词语的变化灵活调整该词对应的向量表示。这种能力使得模型可以更精确地衡量两个句子之间的相似度,从而提升检索结果的相关性和准确性。

动态适应语境变化,除了处理单个词汇的多义性外,嵌入模型还需要能够动态适应整个句子或段落的语境变化。这意味着当同一句话出现在不同背景下时,模型应生成不同的向量表示以反映其特定含义。通过这种方式,嵌入模型能够捕捉到更深层次的语义信息,使机器更好地理解文本的真实意图。

2.2 提升语义相似度计算的精度

从稀疏表示到密集表示,日常使用的自然语言往往包含大量的冗余信息和对表达词意无用的助词,这些因素增加了直接比较文本相似度的难度。而向量表示则更加密集、精确,能够有效捕捉到句子的上下文关系和核心含义。每个单词或短语都被映射为一个多维空间中的点,句子的整体意义则由这些点之间的相对位置决定。

量化语义差异通过将文本转换为向量形式,我们可以利用数学工具来量化语义上的差异。具体来说,可以通过计算两个向量之间的距离(如欧几里得距离)或夹角余弦值来评估它们之间的相似程度。这种方法不仅简化了语义对比的过程,而且提高了结果的可靠性和一致性。

2.3 作为用户查询与知识库之间的桥梁

连接问题与解答,经过嵌入处理后,用户的提问同样会被映射为向量形式。此时,系统就可以通过比较查询向量与其他已知知识项的向量差异,快速定位出最有可能满足需求的答案候选集。换句话说,嵌入模型起到了连接问题与解答的关键作用,确保了系统回答的准确性和相关性。

优化检索效率,由于向量表示的高效性和紧凑性,基于嵌入模型的检索可以在大规模数据集中迅速完成,大大提升了系统的响应速度和用户体验。同时,通过不断改进嵌入算法和技术,还可以进一步提高检索质量,为用户提供更加精准的服务。

2.4 市面上常见embedding模型

3.向量数据库

当所有的知识都被成功嵌入成向量之后,接下来要做的就是把这些高维数据妥善保存起来,顾名思义,向量数据库是专门设计用于存储和检索向量数据的数据库系统。以便随时调用。为此,我们引入了专门为向量设计的数据库——向量数据库。这类数据库具备以下优势:

支持大规模数据集的高效管理,相比于传统的基于字符串匹配的方式,向量数据库可以在极短的时间内完成对数百万甚至数十亿条记录的搜索操作。这对于处理广泛分布的知识点尤其重要,因为它保证了即使面对庞大的知识库也能迅速找到最佳匹配项。

优化检索性能,为了进一步加快检索速度并减少内存占用,现代向量数据库通常采用了一系列先进的索引技术和压缩算法。例如,局部敏感哈希(LSH)、近似最近邻搜索(ANN)等方法可以帮助系统在不影响准确性的前提下显著降低计算复杂度。

4.查询检索

有了充分准备好的知识库和高效的存储机制之后,现在可以开始处理实际的用户查询了。这一过程中包含了两个主要步骤:

查询向量化,首先,用户提出的问题会被送入预先训练好的嵌入模型中,生成相应的向量表示。这是因为在向量空间中,语义相近的概念往往对应着距离较近的点,因此通过这种方式可以更容易地发现潜在的相关性。

搜索相似项,接下来,系统会在向量数据库中查找那些与查询向量最为接近的知识项。这里所谓的“接近”,实际上是指两者之间的夹角余弦值较大或者欧氏距离较小。值得注意的是,虽然理想情况下我们希望找到完全一致的答案,但在实践中,更多时候是寻找足够相似的信息片段,然后由后续模块负责整合成完整的回答。

5.生成回答

最后一步是结合前面所获取的所有信息,构造出一个连贯且有意义的回答。具体来说,就是把用户的问题同之前检索到的相关知识片段结合起来,形成一个清晰明确的提示模板,再将其输入给大型语言模型(LLM)。LLM会基于这个提示模板,利用其强大的生成能力,最终输出符合预期的回答。

•为了让LLM更好地理解上下文并给出恰当回应,我们需要精心设计提示模板。这不仅仅意味着简单地拼接问句和知识点,而是要考虑到如何引导模型关注重要的细节,避免产生误导性的结论。例如,可以通过添加指示语句来强调某些特定部分的重要性,或是提供额外背景信息帮助解释复杂的概念。

当一切准备就绪后,剩下的就是等待LLM为我们带来令人满意的答案了。当然,为了确保生成的内容既准确又自然流畅,还可以考虑引入一些辅助策略,比如限制生成长度、调整语气风格等,以此来增强用户体验。

4.如何评价RAG项目效果的好坏

4.1 针对检索环节的评估

MRR 平均倒数排名:查询(或推荐请求)的排名倒数

○平均倒数排名(Mean Reciprocal Rank,MRR)是一种常用的评估信息检索(information Retrieval, IR)系统表现的指标,尤其用于衡量搜索引擎、推荐系统等根据查询返回的多个结果中的相关性。

○结果列表中,第一个结果匹配,分数为1,第二个匹配分数为0.5,第n个匹配分数为1/n,如果没有匹配的句子分数为0。最终的分数为所有得分之和,再求平均。

MRR的意义

i.MRR值越高,表示系统对用户查询的响应越好,因为第一个相关结果更可能出现在较高的排名位置,

ii.如果第一个相关结果排名在前几个位置,倒数排名接近1,会提高MRR值。

iii.如果第一个相关结果排得很靠后,倒数排名就会较小,MRR值较低。

举个例子:

•假设我们有3个查询: 1.第一个查询的第一个相关结果排在第2位(倒数排名=1/2) 2.第二个查询的第一个相关结果排在第5位(倒数排名=1/5) 3.第三个查询的第一个相关结果排在第1位(倒数排名=1/1) •那么,MRR就会是 MRR=1/3(1/2+1/5+1/1)=1/3(0.5+0.2+1)=1/3x1.7=0.567 (2) 总结:

MRR衡量的是相关结果首次出现的位置(越靠前越好)

•适用于多结果排序任务,如搜索引擎查询、推荐系统等

Hits Rate 命中率:前k项中,包含正确信息的项的数目占比。

NDCG

•DCG的两个思想:

a.高关联度的结果比一般关联度的结果更影响最终的指标得分;

b.有高关联度的结果出现在更靠前的位置的时候,指标会越高;

1.参考:https://www.cnblogs.com/by-dream/p/9403984.html

4.2 针对生成环节的评估

非量化:完整性、正确性、相关性

量化:Rouge-L

•Rouge-L 是一种用于评价文本生成质量的指标,通常在自动摘要、机器翻译和文本生成任务中使用。它是Rouge(RecallOriented Understudyfor Gisting Evaluation)评估指标系列中的一种,专门通过最长公共子序列(Longest CommonSubseguence,Lcs)来测量生成文本和参考文本之间的相似性

•基本思想为由多个专家分别生成人工摘要,构成标准摘要集,将系统生成的自动摘要与人工生成的标准摘要相对比,通过统计二者之间重叠的基本单元(n元语法、词序列和词对)的数目,来评价摘要的质量

•Rouge-L 的计算主要包括两个方面:

a.召回率 (Recall):参考文本中与生成文本匹配的最长公共子序列的长度,与参考文本的总长度之比。

b.精确率 (Precision):生成文本中与参考文本匹配的最长公共子序列的长度,与生成文本的总长度之比。

•然后计算 F1 分数,即在召回率和精确率之间的调和平均,来作为 RougeL 的最终分数: Rouge-L=2 x(精确率 x 召回率)/(精确率+ 召回率)

•由于 Rouge-L注重最长公共子序列,这意味着它比 Rouge-1 或 Rouge-2更能衡量文本生成的结构和顺序是否与参考文本接近。因此,它在衡量文段的连贯性和句子顺序上具有优势。

5.在使用RAG时候,有哪些优化策略(上)

•RAG各个环节均有着极大的优化空间。下面我们将从之前讲的5个环节中穿插12个具体优化策略来依次讲解。

•下面介绍的方法均在AI开发框架langchain和LLamalndex中有具体实现,具体操作方法可参考官方文档。

Plain Text 5.1 知识文档准备阶段 a.数据清洗 b.分块处理

5.2嵌入模型阶段 a.嵌入模型

5.3 向量数据库阶段 a.元数据

5.4查询索引阶段(检索召回、重排) a.多级索引 b.索引/查询算法 c.查询转换 d.检索参数 e.高级检索策略 f.重排模型(Re-ranking)

5.5 生成回答阶段 a.提示词 b.大语言模型

5.1 知识文档准备阶段

a.数据清洗

高性能的RAG系统依赖于准确且清洁的原始知识数据。为了保证数据的质量,我们需要从两个方面入手:优化文档读取器多模态模型,以及执行基本的数据清洗操作。

优化文档读取器和多模态模型

对于不同类型的文件(如CSV表格、PDF文档等),单纯的文字转换可能会导致原始结构信息的丢失。例如,在处理CSV文件时,简单的文本化转换可能会破坏表格原有的○行列关系,从而影响后续分析的效果。因此,我们需要引入额外机制来恢复这些结构特性。具体措施包括但不限于:

▪使用分号或其他符号区分单元格内容,以保持表格的逻辑结构。

应用OCR技术识别图像中的文字,并结合上下文进行校正,确保提取的信息准确无误。

针对多媒体内容(如图片、视频),利用多模态模型将视觉或听觉信息转化为可解析的文本形式。

基本数据清洗操作 ○为了进一步提升数据质量,还需要对获取的知识文档进行一系列的基础清理工作,主要包括以下几个方面:

▪规范文本格式:统一文档内的字体、字号、段落排版等样式,确保一致性。

▪去除特殊字符与无关信息:清除不必要的符号、注释、广告等干扰项,只保留核心内容。

▪消除冗余:合并重复出现的条目,避免因重复记录造成的混淆。

实体解析:解决术语和专有名词的歧义问题,确保所有引用都指向唯一确定的对象。例如,“LLM”、“大语言模型”、“大模型”等同义词应当标准化为统一表述。

文档划分:根据主题分类整理文档,确保每个类别下的内容集中且明确。这有助于提高检索效率,因为即使是人类用户也能轻松找到所需信息。

数据增强:通过添加同义词、近义表达甚至翻译成其他语言版本,丰富语料库的内容多样性。这样做不仅增加了系统的灵活性,也提高了应对复杂查询的能力。

用户反馈循环:建立基于实际使用情况的更新机制,定期评估并修正数据库中的错误或过时信息。同时,鼓励用户提供评价,帮助系统不断改进和完善。

时间敏感数据管理:对于那些需要频繁更新的主题领域,及时删除或替换已失效的文档,确保提供的信息始终是最新的。这一做法特别适用于新闻报道、法律法规等领域,可以有效避免误导性结果。

b.分块处理

在RAG系统中,文档需要分割成多个文本块再进行向量嵌入。这一过程旨在保持语义上的连贯性的同时,尽可能减少嵌入内容中的噪声,从而更有效地找到与用户查询最相关的文档部分。分块策略的选择和实施对于确保信息的完整性和相关性至关重要。

在不考虑大模型输入长度限制和成本问题情况下,其目的是在保持语义上的连贯性的同时,尽可能减少嵌入内容中的噪声,从而更有效地找到与用户查询最相关的文档部分。如果分块太大,可能包含太多不相关的信息,从而降低了检索的准确性。相反,分块太小可能会丢失必要的上下文信息,导致生成的回应缺乏连贯性或深度。如果分块太大,可能包含太多不相关的信息,从而降低了检索的准确性。相反,分块太小可能会丢失必要的上下文信息,导致生成的回应缺乏连贯性或深度。

在RAG系统中实施合适的文档分块策略,旨在找到这种平衡,确保信息的完整性和相关性。一般来说,理想的文本块应当在没有周围上下文的情况下对人类来说仍然有意义,这样对语言模型来说也是有意义的。

分块方法的选择

固定大小的分块:这是最简单和直接的方法,我们直接设定块中的字数,并选择块之间是否重复内容。

通常我们会保持块之间的部分重叠(例如,50%的重叠率),以确保语义上下文不会因分块而丢失。与其他形式的分块相比,固定大小分块简单易用且不需要大量计算资源。

内容分块

根据文档的具体内容进行分块,例如依据标点符号(如句号)自然断开句子,或者使用高级自然语言处理库(如NLTK或spaCy)提供的句子分割功能。这种方法能够更好地反映原文本的逻辑结构,适用于需要精细控制的情况。内容驱动分块可以捕捉到更自然的语言单位,比如句子或段落,这对于保持语义完整性非常有帮助。此外,它还能根据文档的内容特点动态调整分块策略,提高灵活性。

递归分块

推荐用于大多数场景的方法。它通过反复应用分块规则递归分解文本,直到满足特定条件为止。例如,在LangChain框架中,首先会根据段落换行符(\n\n)初步分割文本;随后检查各块长度,若超过预定阈值,则继续以单个换行符(\n)作为边界进一步细分。这样的过程可以根据文本密度灵活调整块大小,既能捕捉细节又能兼顾整体连贯性。然而,这也要求开发者制定详细的规则来指导具体的分割行为。递归分块的优点在于其灵活性和适应性,尤其适合处理结构复杂、信息密集的文档。

从小到大分块

既然小的分块和大的分块各有各的优势,一种更为直接的解决方案是把同一文档进行从大到小所有尺寸的分割,然后把不同大小的分块全部存进向量数据库,并保存每个分块的上下级关系,进行递归搜索。

该方案尝试覆盖所有可能的块尺寸,从最小单位逐步扩大至整个文档,并记录每个层级的关系。尽管这种方法理论上提供了最全面的选择,但由于涉及大量重复存储,会导致较高的存储需求。因此,在实践中需权衡利弊慎重考虑。从小到大分块的优势在于它为后续检索提供了更多的选择余地,但其缺点是显著增加了系统的存储负担。这种方法适用于那些对检索精度要求极高且存储成本不是问题的应用场景。

因为我们要存储大量重复的内容,这种方案的缺点就是需要更大的储存空间。

特殊结构分块

针对具有特定格式的文档(如Markdown、LaTeX文件或编程代码),采用专门设计的分割器来确保其内部结构得以完整保留。这类工具能精确处理各种标记语言及语法元素,保障最终输出的准确性。特殊结构分块对于保持文档原有格式和语义关系非常重要,特别是在处理技术文档、学术论文等需要严格遵循特定格式的材料时显得尤为关键。

分块大小的选择

上述方法中无一例外最终都需要设定一个参数-块的大小,那么我们如何选择呢?选择合适的分块大小是构建有效RAG系统的关键环节之一。不同的嵌入模型有不同的最佳输入长度,例如OpenAI的text-embedding-ada-002模型在处理256或512字节大小的文本块时表现尤为出色。此外,文档类型和预期查询模式也会对分块策略产生影响:

•长篇文章或书籍:较大的分块有助于保留更多的上下文和主题连贯性,这对于理解复杂的叙述或论证至关重要。

•社交媒体帖子:较小的分块更适合捕捉每个帖子的精确语义,因为这些内容通常较为简短且独立。

可以总结,如果用户的查询通常是简短和具体的,较小的分块可能更为合适;相反,如果询较为复杂,可能需要更大的分块。实际上,在没有明确指引的情况下,建议先以128个字符左右作为初始测试基准,然后根据实际情况调整。通过不断的实验和优化,可以找到最适合当前应用场景的配置参数,以达到最佳性能。

5.2 嵌入模型阶段

嵌入模型是RAG系统中的关键组件,它帮助我们将文本转换为向量表示,从而实现语义上的相似度计算和信息检索。不同的嵌入模型带来的效果各异,选择合适的模型对于系统的性能至关重要。

5.2.1不同嵌入模型的优缺点

•静态词向量模型(如Word2Vec)

Word2Vec等静态词向量模型虽然功能强大,但在处理一词多义时存在局限性。例如,在句子“我买了一张光盘”中,“光盘”指的是具体的圆形盘片;而在“光盘行动”中,“光盘”则指的是一种倡导节约的行为——即把餐盘里的食物吃光。由于Word2Vec生成的词向量是静态的,一旦模型训练完成,每个词的向量表示就固定不变,这可能导致不同语境下的同一词汇具有相同的向量表示,从而影响理解准确性。

动态上下文感知模型(如BERT及其变体)

相比之下,引入自注意力机制的模型(如BERT、RoBERTa、DistilBERT等)能够提供动态的词义理解。这些模型可以根据上下文动态调整词义,使得同一个词在不同语境下有不同的向量表示。因此,在上述例子中,“光盘”这个词在两个句子中会有不同的向量,从而更准确地捕捉其语义。这种能力极大地提升了模型在复杂语言环境中的表现,特别是在处理多义词和长依赖关系时更为明显。

5.2.2 微调与垂直领域优化

有些项目为了使模型对特定垂直领域的词汇有更好的理解,可能会考虑对预训练的嵌入模型进行微调。然而,这种方法并非总是推荐的原因如下:

•数据质量要求高:高质量的训练数据对于微调的成功至关重要,但获取和准备这样的数据往往需要大量的时间和资源。

•成本高昂:微调过程不仅需要投入大量的人力物力,还可能因为数据不足或不适当而导致效果不佳,最终得不偿失。

•效果不确定性:即使经过微调,模型的表现也不一定能够显著提升,尤其是在数据集较小或领域过于专业的情况下。

因此,在大多数情况下,直接使用已经过大规模语料库预训练的通用嵌入模型可能是更为经济有效的选择。

5.2.3 如何选择合适的嵌入模型

面对众多可用的嵌入模型,如何做出最佳选择成为了摆在开发者面前的一个重要问题。推荐参考Hugging Face推出的嵌入模型排行榜MTEB(Multilingual Text Embedding Benchmark),该排行榜提供了多种模型在不同任务上的性能比较,可以帮助我们根据具体需求做出更明智的选择。此外,需要注意的是,并非所有嵌入模型都支持中文或其他非英文语言,因此在选择时应仔细查阅模型说明以确保兼容性。通过综合考虑模型的特点、应用场景以及资源限制等因素,我们可以为RAG系统挑选出最适合的嵌入模型,从而最大化其性能和实用性。

•MTEB排行榜链接:https://huggingface.co/spaces/mteb/leaderboard

5.3 向量数据库阶段(元数据)

当在向量数据库中存储向量数据时,某些数据库支持将向量与元数据(即非向量化的数据)一同存储。为向量添加元数据标注是一种提高检索效率的有效策略,它在处理搜索结果时发挥着重要作用。

5.3.1 元数据的作用和示例

•日期作为元数据标签,日期是一种常见的元数据标签,它能够帮助我们根据时间顺序进行筛选。例如,如果我们正在开发一款允许用户查询他们电子邮件历史记录的应用程序,在这种情况下,日期最近的电子邮件可能与用户的查询更相关。然而,从嵌入的角度来看,我们无法直接判断这些邮件与用户查询的相似度。通过将每封电子邮件的日期作为元数据附加到其嵌入中,我们可以在检索过程中优先考虑最近日期的邮件,从而提高搜索结果的相关性。

•章节或小节引用,对于结构化文档(如书籍、报告等),我们可以添加章节或小节的引用作为元数据。这有助于在检索时快速定位到特定部分的内容,使得用户能够更容易找到所需信息。例如,在一个法律场景中,如果用户询问关于合同法的问题,系统可以通过元数据直接指向相关章节,而无需遍历整个文档。

•文本的关键信息、小节标题或关键词,我们还可以添加文本的关键信息、小节标题或关键词作为元数据。这些元数据不仅有助于改进知识检索的准确性,还能为最终用户提供更加丰富和精确的搜索体验。例如,在学术文献检索系统中,添加作者、摘要、关键词等元数据可以显著提升用户查找相关研究论文的效率。此外,对于技术文档,提供API函数名或参数列表作为元数据可以帮助开发者更快地找到所需的代码片段。

5.3.2 利用元数据,有可能改善

•加快响应速度,当查询条件明确包含元数据信息时(如特定日期范围内的文•档),系统可以直接访问符合条件的数据集,减少不必要的计算开销。

•提升相关性,结合语义相似度和元数据特征,系统可以生成更为精准的结果,确保提供的答案既符合上下文又满足用户的实际需求。

•简化复杂查询,对于涉及多条件组合的复杂查询,元数据可以使检索逻辑更加清晰易懂,降低实现难度的同时提高准确率。

为了充分利用元数据的优势,在设计RAG系统时应考虑,根据应用场景确定哪些类型的元数据最能提升检索效果。例如,对于新闻文章,发布时间、作者和类别可能是重要的元数据;而对于编程教程,则函数名、语言版本等更为关键。确保所有文档都附带完整的元数据,并且格式统一,以避免因数据缺失或不一致导致的检索问题。随着时间和环境的变化,及时更新元数据以反映最新的情况,确保系统的持续有效性。定期评估元数据对检索性能的影响,根据反馈不断优化元数据的选择和使用方式,确保最佳用户体验。

5.4 查询索引阶段(检索召回、重排)

5.4.1 多级索引

在处理元数据无法充分区分不同上下文类型的情况下,多级索引与路由技术成为一种有效的解决方案。这种技术的核心思想是将庞大的数据和信息需求按类别划分,并在不同层级中组织,以实现更有效的管理和检索。通过建立多个针对不同数据类型和查询需求的索引,RAG系统能够根据查询的性质和上下文选择最合适的索引进行数据检索,从而提升检索质量和响应速度。

多级索引技术不仅依赖单一索引,而是构建了多层次、多类别的索引结构。这意味着系统可以根据不同的信息需求和数据特性创建专门的索引,例如:

•摘要类问题索引:用于处理需要快速获取概要或总结的问题。

•具体答案索引:专为那些直接寻求明确答案的查询设计。

•时间敏感问题索引:特别适用于需要考虑时效性的查询,如新闻事件、最新政策等。

通过将数据按类别组织,多级索引使得每个查询都能被引导到最适合它的索引中。这不仅提高了检索效率,还增强了结果的相关性和准确性。例如,在一个包含大量文献资料的学术数据库中,可以分别设置针对不同学科领域的索引,使用户更容易找到特定领域内的相关信息。

为了充分发挥多重索引的优势,必须配套加入多级路由机制。这一机制确保每个查询被高效引导至最合适的索引:

•智能路由决策:查询根据其特点被路由至一个或多个特定索引。例如,对于查询“最新上映的科幻电影推荐”,RAG系统可能首先将其路由至专门处理当前热点话题的索引,然后利用专注于娱乐和影视内容的索引来生成相关推荐。

•动态调整路由策略:随着系统的不断学习和发展,多级路由机制能够自动适应新的查询模式和数据分布情况,持续优化路由规则。

•资源分配与使用优化:多级路由机制不仅能提升处理效率,还能有效管理计算资源,确保对各类查询的精确匹配。假设我们搭建一个综合信息服务agent,支持多种类型的查询,包括但不限于新闻资讯、学术研究、产品评论等。在这个场景上:

•第一级索引:所有查询首先经过一个通用索引,这个索引负责初步筛选和分类,确定查询的大致方向。

•第二级索引:根据查询的具体特征,将请求路由至更专业的索引。例如,如果是关于某一产品的详细评价,则会转至专门的产品评论索引;如果是有关最新科学研究成果,则会转至学术论文索引。

•第三级索引:进一步细化,比如在学术论文索引内部再设立子索引,分别对应不同学科领域,确保最终结果高度相关且精准。

通过这样的多级索引和路由设计,系统能够在海量数据中迅速定位最相关的部分,为用户提供高质量的信息服务。所以来说,多级索引和路由技术可以进一步帮助我们对大规模数据进行高效处理和精准信息提取,从而提升用户体验和系统的整体性能

a.聚类

•当我们在网上购物时,通常不会在所有商品中盲目搜索,而是会选择进入特定的商品分类。

○ 比如“电子产品”或”服饰”,在一个更加细分的范畴内寻找心仪的商品。这个能帮我们大大缩小搜索范围。

•同样这种思路,聚类算法可以帮我们实现这个范围的划定。就比如说我们可以用K-mean算法把向量分为数个簇,当用户进行查询的时候,我们只需找到距离查询向量最近的簇,然后再这个簇中进行搜索。

当然聚类的方法并不保证一定正确,如下图,查询距离黄色簇的中心点更近,但实际上距离查询向量最近的,即最相似的点在紫色类。

• 有一些缓解这个问题的方法,例如增加聚类的数量,并指定搜索多个簇。

• 然而,任何提高结果质量的方法都不可避免地会增加搜索的时间和资源成本。

• 实际上,质量和速度之间存在着一种权衡关系。我们需要在这两者之间找到一个最优的平衡点,或者找到一个适合特定应用场景的平衡。不同的算法也对应着不同的平衡。

b.位置敏感哈希

• 沿着缩小搜索范围的思路,位置敏感哈希算法是另外一种实现的策略。

• 在传统的哈希算法中,我们通常希望每个输入对应一个唯一的输出值,并努力减少输出值的重复。

• 然而,在位置敏感哈希算法中,我们的目标恰恰相反,我们需要增加输出值碰撞的概率

• 这种碰撞正是分组的关键,哈希值相同的向量将被分配到同一个组中,也就是同一个"桶"里。此外,这种哈希函数还需满足另一个条件:空间上距离较近的向量更有可能被分入同一个桶。这样在进行搜索时,只需获取目标向量的哈希值,找到相应的桶,并在该桶内进行搜索即可。

c. 量化乘积

上面我们介绍了两种牺牲搜索质量来提高搜索速度的方法,但除了搜索速度外,内存开销也是一个巨大挑战。

在实际应用场景中,每个向量往往都有上千个维度,据数量可达上亿。每条数据都对应着一个实际的的信息,因此不可能删除数据来减少内存开销,那唯一的选择只能是把每个数据本身大小缩减。有一种乘积量化的方法可以帮我们完成这点。

图像有一种有损压缩的方法是把一个像素周围的几个像素合并,来减少需要储存的信息。同样我们可以在聚类的方法之上改进一下,用每个簇的中心点来代替簇中的数据点。虽然这样我们会丢失向量的具体值信息,但考虑到聚类中心点和簇中向量相关程度,再加上可以不断增加簇的数量来减少信息损失,所以很大程度上我们可以保留原始点的信息。而这样做带来的好处是十分可观的。

如果我们给这些中心点编码,我们就可以用单个数字储存一个向量来减少存储的空间。而我们把每个中心向量值和他的编码值记录下来形成一个码本,这样每次使用某个向量的时候,我们只需用他的编码值通过码本找到对应的的中心向量的具体值。虽然这个向量已经不再是当初的样子了,但就像上面所说,问题不大。而这个把向量用其所在的簇中心点表示的过程就是量化。

d.分层导航小世界

从客户的角度来看,内存开销可能并不是最重要的考量因素。他们更加关注的是应用的最终效果,也就是回答用户问题的速度和质重

导航小世界(Navigable Small World,NSW)算法正是这样一种用内存换取更快速度和更高质量的实现方式。

这个算法的思路和“六度分割理论”类似 -- 你和任何一个陌生人之间最多只隔六个人,也就是说,最多通过六个人你就能够认识任何一个陌生人。

我们可以将人比作向量点,把搜索过程看作是从一个人找到另一个人的过程。在查询时,我们从一个选定的起始点A开始,然后找到与A相邻且最接近查询向量的点B,导航到B点,再次进行类似的判断,如此反复,直到找到一个点C,其所有相邻节点都没有比它更接近目标。最终这个点C便是我们要找的最相似的向量。

5.4.3 查询转换

在RAG系统中,用户的查询问题被转化为向量,然后在向量数据库中进行匹配。不难想象,查询的措辞会直接影响搜索结果的质量。为了提升召回效果,可以采用以下几种方法对问题进行重写和优化:

a. 结合历史对话的重新表述

在向量空间中,对于人类来说看似相同的两个问题其向量表示可能并不相似。因此,直接利用大型语言模型(LLM)重新表述问题是提高检索质量的一种有效手段。此外,在多轮对话场景中,用户的提问中的某个词可能会指代上文中的部分信息。通过将历史信息和用户提问一并交给LLM重新表述,可以更好地捕捉上下文语境,从而生成更准确的查询向量。

应用场景:当用户提出一个较为模糊或简短的问题时,结合历史对话可以提供更多背景信息,帮助LLM生成更具体的查询。

示例:假设用户在一轮对话中提到“我想了解一下张三的教育经历”,随后又问“他去了哪些学校?”此时,系统可以结合前一句的上下文,生成更为详细的查询:“张三在哪几所学校接受过教育?”

b. 假设文档嵌入 (HyDE)

假设文档嵌入(Hypothetical Document Embedding, HyDE)的核心思想是接收用户提问后,先让LLM在没有外部知识的情况下生成一个假设性的回复。然后,将这个假设性回复和原始查询一起用于向量检索。尽管假设回复可能包含虚假信息,但它蕴含着LLM认为相关的信息和文档模式,有助于在知识库中寻找类似的文档。通过为传入查询生成一个假想文档,从而增强和改善相似性搜索。

应用场景:当查询涉及较新的事件或特定领域知识时,LLM可以通过假设性回复补充潜在的相关信息,增加检索到合适文档的机会

示例:如果用户询问“最近有哪些关于AI伦理的新研究?” LLM可能会生成一段假设性回复,其中包含了它认为相关的关键词和概念,这些内容可以帮助找到最新的学术论文或新闻报道

c. 退后提示 (Step Back Prompting)

如果原始查询太复杂或返回的信息过于广泛,可以选择生成一个抽象层次更高的“退后”问题,与原始问题一起用于检索,以增加返回结果的数量。这就是退后提示的思想。

应用场景:当面对非常具体或复杂的查询时,退后提示可以帮助简化问题,使其更容易处理

示例:原问题是“张三在1954年8月至1954年11月期间去了哪所学校?”这类问题对于LLM来说很容易答错。但如果退一步,站在更高层次对问题进行抽象,提出一个新的问题:“张三的教育历史是怎样的?”那么LLM可以先列出所有相关信息,然后再结合原始问题给出更精确的答案

d. 多查询检索/多路召回 (Multi Query Retrieval)

多查询检索/多路召回也是一种不错的方法。使用LLM生成多个搜索查询,特别适用于一个问题可能需要依赖多个子问题的情况。这种方法可以通过多种角度接近目标信息,确保不会遗漏关键数据。

应用场景:当查询涉及多个方面或有多个潜在答案时,多查询检索可以提供更全面的结果覆盖

示例:假设用户询问“如何在家制作披萨?” LLM可以根据不同步骤生成多个查询,如“如何准备披萨面团?”、“披萨配料的选择有哪些?”以及“披萨烘烤的最佳温度是多少?” 这些查询可以分别进行检索,最终整合成一份完整的指南

5.4.4 检索参数

终于我们把查询问题准备好了,可以进入向量数据库进行检索。在具体的检索过程中,我们可以根据向量数据库的特定设置来优化一些检索参数,以下是一些常见的可设定参数:

a.稀疏和稠密搜索权重

稠密搜索即通过向量进行搜索。然而,在某些场景下可能存在限制,此时可以尝试使用原始字符串进行关键字匹配的稀疏搜索

一种有效的稀疏搜索算法是最佳匹配25(BM25),它基于统计输入短语中的单词频率,频繁出现的单词得分较低,而稀有的词被视为关键词,得分会较高。我们可以结合稀疏和稠密搜索得出最终结果。

向量数据库通常允许设定两者对最终结果评分的权重比例,如0.6表示40%的得分来自稀疏搜索,60%来自稠密搜索。

b.结果数量(topK)

•检索结果的数量是另一个关键因素。

足够的检索结果可以确保系统覆盖到用户查询的各个方面。在回答多方面或复杂问题时,更多的结果提供了丰富的语境,有助于RAG系统更好地理解问题的上下文和隐含细节

•但需注意,结果数量过多可能导致信息过载,降低回答准确性并增加系统的时间和资源成本

c.相似度度量方法

•计算两个向量相似度的方法也是一个可选参数。这包括使用欧式距离和jaccard距离计算两个向量的差异,以及利用余弦相似度衡量夹角的相似性。

•通常,余弦相似度更受青睐,因为它不受向量长度的影响,只反映方向上的相似度。这使得模型能够忽略文本长度差异,专注于内容的语义相似性。

•需要注意的是,并非所有嵌入模型都支持所有度量方法,具体可参考所用嵌入模型的说明。

5.4.5 高级检索策略

在RAG系统中,向量数据库检索是核心环节,但如何具体开发或改进整个系统的策略则是更为关键和复杂的步骤。这部分内容足够写成一篇独立的文章。为了保持简洁,我们在此只讨论一些常用或者新提出的高级检索策略。

a.上下文压缩

当文档分块过大时,可能会包含太多不相关的信息,这不仅增加了LLM调用的成本,还可能导致响应质量下降。上下文压缩的思想是通过LLM的帮助,根据上下文对单个文档内容进行压缩,或者对返回结果进行一定程度的过滤,仅保留相关信息。这种方法可以显著减少传递给LLM的数据量,从而降低计算资源消耗并提高响应速度。上下文压缩,适用于处理大型文档或长篇文本,确保传递给LLM的信息既精简又相关。

示例:在一个包含大量无关细节的法律文件中,系统可以通过上下文压缩提取出与用户查询最相关的条款或段落,如“合同中的违约责任条款”或“知识产权保护的具体规定”。

b.句子窗口搜索

相反,如果文档分块太小,可能会导致上下文信息缺失。而句子窗口搜索提供了一种解决方案,其核心思想是在提问匹配好分块后,将该分块周围的块作为上下文一并交给LLM进行输出,以增加LLM对文档上下文的理解。当需要保持一定的上下文连贯性而又不想让文档分块过大的情况下可以使用。

示例:对于文学作品中的引用查询,系统可以将引用所在段落及其前后若干句一同传递给LLM,以便更准确地理解引用的意义。例如,查询“鲁迅作品中关于‘国民性’的描述”,系统不仅可以找到具体的引用,还能提供上下文帮助理解

c.父文档搜索

父文档搜索是一种类似的方法,首先将文档分为尺寸较大的主文档,再把主文档分割 为更短的子文档两个层级。用户问题会与子文档匹配,然后将该子文档所属的主文档和用户提问发送给LLM。这种方法有助于在保持一定上下文完整性的前提下,快速定位到相关部分。适合处理结构化程度较高的文档,如书籍、报告等。

示例:在一个技术手册中查找特定功能的操作说明时,系统可以先匹配到具体的章节,然后再从该章节中进一步细化到具体的段落,如“Windows操作系统中如何设置防火墙规则”

d.自动合并

自动合并是在父文档搜索基础上更进一步的复杂解决方案。首先对文档进行结构切割,例如按三层树状结构进行切割,顶层节点的块大小为1024,中间层的块大小为512,底层叶子节点的块大小为128。在检索时只拿叶子节点和问题进行匹配,当某个父节点下的多数叶子节点都与问题匹配上,则将该父节点作为结果返回。适用于处理多层次结构化的文档,确保既能覆盖广泛又能深入细节。

示例:在一个企业内部的知识库中查找跨部门流程时,系统可以根据不同层级的节点逐步缩小范围,最终找到最相关的文档片段,如“HR部门招聘流程”与“IT部门技术支持流程”的交集。

e.多向量检索

•多向量检索不仅会给一个知识文档转化成多个向量存入数据库,这些向量不仅包括文档在不同大小的分块,还可以包括该文档的摘要、用户可能提出的问题等有助于检索的信息。每个向量代表了文档的不同方面,使得系统能够更全面地考虑文档内容,并在回答复杂或多方面的查询时提供更精确的结果。当查询涉及多个角度或有多个潜在答案时,多向量检索可以帮助系统更精准地定位相关内容。

示例:对于一个综合性的研究论文,系统可以分别为其摘要、方法论、结论等部分生成不同的向量,以便更好地应对不同类型的问题,如“论文的研究方法是什么?”或“论文的主要发现有哪些?”

f.多代理检索

多代理检索是将多种优化策略结合使用的智能代理方案。例如,可以选取子问题查询、多级索引和多向量查询相结合的方式:

1.子问题查询代理:负责将用户提问拆解为多个小问题。

2.文档代理:对每个子问题进行多向量或多索引检索。

3.排名代理:将所有检索的文档总结再交给LLM。

这样做不仅可以取长补短,还能综合多种方法解决问题。比如,子问题查询引擎在探索每个子查询时可能会缺乏深度,尤其是在相互关联或关系数据中。相反,文档代理递归检索在深入研究特定文档和检索详细答案方面表现出色,以此来综合多种方法解决问题。适用于复杂查询场景,特别是那些需要整合多个来源或类型的信息的情况。

示例:在一个综合性的问答平台上,系统可以利用多代理检索来处理涉及多个领域的复合型问题,如“全球气候变化对农业生产和经济发展的长期影响”。 需要注意的是现在网络上存在不同结构的多代理检索,具体在多代理选取哪些优化步骤尚未有确切定论,我们可以结合使用场景进行探索。

g. SeIf-RAG

自反思搜索增强是一个新的RAG框架,其与传统RAG最大的区别在于通过检索评分和反思评分来提高检索质量。它分为三个步骤:

1.检索:使用检索评分评估用户提问是否需要检索,如果需要,LLM将调用外部检索模块查找相关文档。

2.生成:LLM分别为每个检索到的知识块生成答案。

3.批评:为每个答案生成反思评分,评估检索到的文档是否相关。

4.最终输出:将评分高的文档作为最终结果一并交给LLM。

这种机制允许系统自我评估和调整,确保提供的答案既准确又相关,同时减少了不必要的检索操作。适用于需要高精度和高召回率的查询场景,特别是在面对不确定或模糊问题时。

示例:在一个医疗咨询平台中,Self-RAG可以帮助医生更快地找到最相关的病例和治疗建议,同时确保信息的质量。例如,“针对高血压患者的个性化治疗方案”。

5.4.6 重排模型

在完成语义搜索的优化步骤后,我们能够检索到语义上最相似的文档。然而,一个关键问题值得我们深思:语义最相似是否总代表最相关?答案是不一定。例如,当用户查询“最新上映的科幻电影推荐”时,可能得到的结果是“科幻电影的历史演变”。虽然从语义上看,这两者都涉及科幻电影这一主题,但后者并未直接回应用户关于最新电影的查询需求。这种情况下,尽管语义匹配度高,结果的相关性却较低,无法真正满足用户的实际需求。

为了缓解这个问题,重排(Re-ranking)模型应运而生。重排模型通过对初始检索结果进行更深入的相关性评估和排序,确保最终展示给用户的结果更加符合其查询意图。该过程会考虑更多的特征,如查询意图、词汇的多重语义、用户的历史行为和上下文信息等。通过引入重排模型,可以有效提升检索结果的相关性和准确性,更好地满足用户的需求。在实践中,使用RAG构建系统时都应考虑尝试重排方法,以评估其是否能够提高系统性能。具体来说,选择合适的重排模型至关重要,根据具体的业务场景和技术栈,可以选择最适合的重排模型,如BERT-based Re-ranker、LightGBM等。此外,持续监控与优化也是必不可少的一步,定期评估重排模型的效果,并根据用户反馈和新数据不断改进模型参数和特征工程。最后,集成用户反馈机制同样重要,建立有效的用户反馈渠道,收集用户对检索结果的意见,用于进一步优化重排模型。以查询“最新上映的科幻电影推荐”为例,

1.首次检索阶段,系统基于关键词返回一系列初步结果,包括但不限于:

○科幻电影的历史文章

○科幻小说介绍

○最新电影的新闻报道

○电影评论和推荐列表

2.重排阶段,模型对这些结果进行深入分析,利用多种特征进行评估,例如:

○查询意图:识别用户具体想要获取的信息类型(如最新的电影推荐)

○词汇的多重语义:区分“科幻电影”的不同含义,如经典作品与新片的区别

○用户的历史行为:参考用户过去的观影偏好、评分记录等信息

○上下文信息:结合当前热门话题、季节性因素等外部条件

经过评估后,模型将最相关、最符合用户查询意图的结果(如最新上映的科幻电影列表、评论或推荐)排在前面,同时将那些关于科幻电影历史或不太相关的内容排在后面。这样,重排模型就能有效提升检索结果的相关性和准确性,更好地满足用户的需求。在实践中,使用RAG构建系统时都应考虑尝试重排方法,以评估其是否能够提高系统性能

5.5 生成回答阶段

5.5.1 提示词

• 大语言模型的解码器部分通常基于给定输入来预测下一个词

• 这意味着设计提示词或问题的方式将直接影响模型预测下一个词的概率。这也给了我们一些启示:通过改变提示词的形式,可以有效地影响模型对不同类型问题的接受程度和回答方式,比如修改提示语,让LLM知道它在做什么工作,是十分有帮助的。

• 为了减少模型产生主观回答和幻觉的概率,一般情况下,RAG系统中的提示词中应明确指出回答仅基于搜索结果,不要添加任何其他信息。例如,可以设置提示词如:

"你是一名智能客服。你的目标是提供准确的信息,并尽可能帮助提问者解决问题。你应保持友善,但不要过于啰嗦。请根据提供的上下文信息,在不考虑已有知识的情况下,回答相关查询。"

• 你也可以根据场景需要,也可以适当让模型的回答融入一些主观性或其对知识的理解。

• 此外,使用少量样本(few-shot)的方法,将想要的问答例子加入提示词中,指导LLM如何利用检索到的知识,也是提升LLM生成内容质量的有效方法。这种方法不仅使 模型的回答更加精准,也提高了其在特定情境下的实用性。

5.5.2大语言模型

最后一步让LLM生成回答

在RAG(Retrieval-Augmented Generation)系统中,大型语言模型(LLM, Large Language Model)作为生成响应的核心组件,其选择对系统的性能有着决定性的影响。当挑选适合的LLM时,我们需要综合考虑多个因素,包括模型类型、推理成本与能力、上下文长度、总结能力、输出质量以及格式约束等,以确保LLM能在特定应用场景中发挥最优效果。

针对不同的应用场景,可以选择预训练的通用大语言模型或专为特定领域定制的专有模型。通用模型具备广泛的知识和灵活性,但可能在专业问题上不如专有模型那样准确和可靠。后者则经过特定领域的数据训练,能提供更加精确的答案。因此,在选择LLM时,应根据具体的应用场景来决定是采用通用模型还是专有模型,以满足特定的需求。这一步骤至关重要,因为它直接影响到后续所有交互的质量和效率。

考虑到大语言模型的推理过程计算密集,选择时必须评估推理成本,并在性能与成本之间找到最佳平衡点。优秀的推理能力使LLM能够处理复杂问题,进行逻辑推断和决策,这对于应对模糊或复杂的请求尤为关键。这意味着LLM不仅要能解析用户查询并从中抽取相关知识,还要有足够的灵活性来适应各种类型的查询,基于有限信息作出合理假设,提供精准且有意义的回答。通过这种方式,LLM可以显著提升用户体验,即使面对复杂的信息需求也能给出满意的答复。

高质量的输出对于用户体验至关重要。这不仅要求文本流畅、连贯且准确,还包括LLM对不同风格和语气的理解及模仿能力。例如,在教育应用中需要正式而详细的解释,而在娱乐应用中则可以使用轻松幽默的方式。此外,模型应尽量避免生成偏见内容或不适当的信息。为了实现这一点,可以选择那些遵循特定指导原则或允许通过微调定制化的LLM,确保输出既符合预期又具有吸引力。通过优化输出质量,我们可以进一步增强用户对系统的信任和依赖。

良好的总结能力使LLM可以从大量信息中提炼出核心要点,提供简洁而有价值的内容。这对希望快速获得清晰答案的用户尤为重要。优秀的LLM能够在面对庞大或复杂的数据集时,有效地筛选出最重要信息,以精炼的形式呈现给用户,提高效率的同时也增强了用户的满意度,减少了他们自己梳理信息的工作量。这种能力不仅提升了信息传递的速度,也使得用户更容易理解和吸收所接收的信息。

在某些应用中,如文档生成、表格填写或代码片段创建,正确的格式对于信息的有效传递至关重要。具备强大格式约束能力的LLM能够遵循HTML标签、Markdown语法、JSON结构等各种格式规则,生成易于解析的内容。这种能力还体现在对文本长度、段落分布、标题层次等方面的要求上,有助于提升信息展示的清晰度和逻辑性,从而增强用户体验。通过确保生成内容的格式正确,我们能够进一步保证信息传递的有效性和准确性。

上下文长度直接影响到模型的性能和效果。虽然较长的上下文提供了更多的背景信息,但也增加了复杂度和计算成本。因此,在部署RAG系统时,需要根据具体的场景和需求确定合适的上下文长度,以达到最佳的响应质量和速度。合理的上下文长度设置不仅能提高生成内容的相关性,还能有效控制计算资源的消耗,使系统运行更加高效。

利用专门的开发框架,如Llamalndex或LangChain,可以更便捷地搭建和优化RAG系统。这些工具提供了丰富的功能,如定义回调函数、查看使用的上下文信息、检查检索结果来源等,帮助管理和调试LLM的应用,从而提升系统的整体性能和用户体验。通过整合这些先进的开发工具和技术,我们可以更好地管理和优化LLM在RAG场景中的应用,确保系统稳定运行,同时不断改进和扩展其功能。

所以,构建高效的RAG系统离不开对上述各方面的综合考量。通过精心选择适合的LLM类型,权衡推理成本,重视输出质量,强化总结和格式约束能力,并结合上下文长度的调整,以及借助专业开发框架的支持,我们可以打造一个既专业又高效的RAG解决方案。这一过程不仅需要技术上的精益求精,也需要对用户需求的深刻理解,以确保最终提供的服务能够真正满足用户期望,带来优质的互动体验。

ai问答
电话
电话号码
企业微信
企微企微