cover_image

揭开RAG的神秘面纱:重新定义信息检索的革命性技术

价格平台团队 大淘宝技术
2025年03月19日 07:59
图片



随着人工智能技术的快速发展,检索增强生成(RAG)作为一种结合检索与生成的创新技术,正在重新定义信息检索的方式。本文深入探讨了RAG的核心原理及其在实际应用中的挑战与解决方案。文章首先分析了通用大模型在知识局限性、幻觉问题和数据安全性等方面的不足,随后详细介绍了RAG通过“检索+生成”模式如何有效解决这些问题。具体而言,RAG利用向量数据库高效存储与检索目标知识,并结合大模型生成合理答案。此外,文章还对RAG的关键技术进行了全面解析,包括文本清洗、文本切块、向量嵌入、召回优化及提示词工程等环节。最后,针对RAG系统的召回效果与模型回答质量,本文提出了多种评估方法,为实际开发提供了重要参考。通过本文,读者可以全面了解RAG技术的原理、实现路径及其在信息检索领域的革命性意义。



图片
引言


检索增强生成(Retrieval Augmented Generation,简称 RAG)已经成为当前最热门的 LLM 应用方案。然而,当我们将大模型应用于实际业务场景时,会发现通用的基础大模型基本无法满足我们的实际需求,主要有以下几方面原因:
  • 知识的局限性:模型的知识完全来源于其训练数据,而现有主流大模型(如 ChatGPT、文心一言、通义千问)的训练集主要基于公开网络数据,对于实时性、非公开或离线数据则无法获取,因此无从掌握。

  • 幻觉问题:所有 AI 模型的底层原理基于数学概率,其输出本质上是一系列数值运算,大模型亦是如此。这使得它在缺乏某些知识或不擅长的场景下,可能会给出不准确的回答。而这种幻觉问题的辨别较为困难,因为使用者需要具备相关领域的知识。

  • 数据安全性:对企业而言,数据安全至关重要。没有企业愿意承担数据泄露的风险,因此不愿将私有数据上传至第三方平台进行训练。这使得完全依赖通用大模型的应用方案在数据安全与效果之间不得不进行权衡。

而RAG是解决上述问题的一套有效方案。


图片

RAG核心技术


  整体流程


RAG 的架构如图所示。简单来说,RAG 通过检索获取相关知识,并将其融入 Prompt,使大模型能够参考这些知识,从而给出合理回答。因此,RAG 的核心可以理解为“检索 + 生成”。其中,检索主要利用向量数据库的高效存储和检索能力,召回目标知识;生成则依靠大模型和 Prompt 工程,合理运用召回的知识,生成目标答案。


图片


完整的RAG应用流程主要包含两个阶段:
  • 数据预阶段:文本清洗->文本切块->向量嵌入(embedding)->向量存储
  • 应用阶段:用户提问->数据召回->注入Prompt->LLM生成答案->效果评估

  数据预处理


RAG 的架构如图所示。简单来说,RAG 通过检索获取相关知识,并将其融入 Prompt,使大模型能够参考这些知识,从而给出合理回答。因此,RAG 的核心可以理解为“检索 + 生成”。其中,检索主要利用向量数据库的高效存储和检索能力,召回目标知识;生成则依靠大模型和 Prompt 工程,合理运用召回的知识,生成目标答案。

  • 文本清洗


在 RAG 的工作流程中,文本清洗是一个重要的预处理步骤,旨在提高模型对输入数据的理解和处理能力。文本清洗通常包括以下几个方面:
  1. 去除杂音:去掉文本中的无关信息或者噪声,比如多余的空格、HTML 标签和特殊符号等。
  2. 标准化格式:将文本转换为统一的格式,如将所有字符转为小写,或者统一日期、数字的表示。
  3. 处理标点符号和分词:处理或移除不必要的标点符号,并对文本进行适当的分词处理。
  4. 去除停用词:移除那些对语义没有特别贡献的常用词汇,例如“的”、“在”、“而”等。
  5. 拼写纠错:纠正文本中的拼写错误,以确保文本的准确性和一致性。
  6. 词干提取和词形还原:将词语简化为词干或者词根形式,以减少词汇的多样性并保持语义的一致性。

这些清洗步骤有助于提高文本质量,使其更适合检索系统和生成模型的处理,从而提升最终生成结果的准确性和相关性。在 RAG 框架中,经过清洗的文本将用于更高效的信息检索和生成任务。


  • 文本切块


在构建向量数据库的过程中,首先需要将包含知识的长文本拆分为较小的片段,然后通过文本向量化模型进行处理并存储。虽然文本切分看似简单,但它对大模型最终回答的效果有显著影响。接下来,我们将讨论两种情况:文本切分过长和文本切分过短。


文本切块过长

在 Transformer 架构中,文本被表示为向量,其中每个词对应一个特定的向量。为了获取一段文本的整体向量表示,常见的方法是对句中的词向量求平均。然而,当句子长度过长时,平均化过程可能会导致细节和语义信息的丢失,进而降低召回的准确率。此外,在使用大型模型进行检索和生成(RAG)任务时,如果模型在总结文本内容方面的能力较弱,长文本的召回会限制可供大模型分析的文本块数量。长文本的向量化本身就容易丢失信息,如果同时减少召回文本的数量,无法涵盖有用知识点的风险就会增加,最终可能影响大模型生成答案的质量。


文本切块过短

对短文本进行向量化更有利于保留文本中细粒度的语义信息。然而,这种方式也存在一些问题,比如容易丢失段落和文档层面的主题信息,以及跨段落的上下文信息。对大模型输入这些碎片化的文本块,不利于大模型进行总结。


通过上述分析,我们可以得出一个结论:为向量数据库中的文本采用合适的切分策略,能够确保召回的内容更契合用户的查询意图,从而使大模型更准确地生成正确答案。接下来,我们将介绍几种常见的文本切块策略。需要特别指出的是,并不存在所谓的“最佳”切块策略,选择时需要根据具体应用场景进行分析和实验。


固定大小文本切块

固定大小的文本切块是一种简单的文本分割方法,只需确定每个块的大小即可。然而,在实际使用中,为了减少块与块之间的上下文信息丢失,最好让块之间有些重叠。此外,仅仅按照字数来截断文本而不考虑段落或句子内部的连贯性,可能会影响文本嵌入的效果。因此,为了尽量保持上下文的完整性,文本块的大小可以稍微偏离预设的大小。


特殊格式文本切块

有时候需要对诸如 HTML、Markdown、LaTeX等具有特殊内在结构的文本进行切块。在进行切块时,应充分考虑其结构信息,以减少因文本切块而导致的上下文信息损失。


基于深度学习模型的文本切块

为了让预训练语言模型学习两个句子之间的关系,我们可以在预训练过程中设置一个简单的任务:给模型输入两个句子,预测第二个句子是否是第一个句子的续接句。基于这个方法,可以设计一种简单的文本切分策略,即以句子为最小单位。在完整的文本中,通过滑动窗口依次将相邻的两个句子输入到预训练语言模型进行预测。如果预测结果显示这两个句子之间的关系较弱,那么就在这里进行文本切分。


目前基于预训练语言模型的优化也比较多,比如Cross-Segment模型,该方法充分利用了更长的上下文信息,预测效率也有提升。首先,利用 BERT 模型分别获取每个句子的向量表示。然后,将连续的多个句子的向量表示同时输入到另一个 BERT 或 LSTM 模型中,一次性预测每个句子是否文本分段的边界。又比如SeqModel 利用 BERT 对多个句子同时编码,建模了更长的上下文之间的依赖关系之后再计算句向量。还有达摩院提出的以BERT为底座的ROM模型。


  向量嵌入


  • 向量索引技术


向量嵌入只是从图像、文本和音频转换而来的数值表示。简单来说,针对每个项目创建一个单独的数学向量,捕捉该项目的语义或特征。这些向量嵌入更容易被计算系统理解,并与机器学习模型兼容,以理解不同项目之间的关系和相似性。


图片

用于存储这些嵌入向量的数据库称为向量数据库。这些数据库利用嵌入的数学属性,将相似的项目存储在一起。使用不同的技术来将相似的向量存储在一起,将不相似的向量分开。这些就是向量索引技术。


什么是特征向量


向量是一种将实体和应用代数化的表示。向量将实体间的关系抽象成向量空间中的距离,距离的远近代表相似程度。例如:身高、年龄、性别、地域等。

除了图像、文本和音频,理论上所有包含文本在内的任意数据都可以向量化,引用一句网上的热门词就是「万物皆可Embedding」。


什么是向量索引


向量索引通过将数据表示为向量,并构建高效的索引结构,可以实现快速的相似性搜索和匹配,提高数据检索和匹配的效率。


什么是距离计算


向量检索的过程是计算向量之间的相似度,最后返回相似度较高的TopK向量返回,而向量相似度计算有多种方式,不同的计算方式也适用于不同的检索场景。
对于浮点型向量和二值型向量有着不同的距离计算方式。

图片


在实际的应用工程应用场景中,绝大多数使用的浮点型计算,故下面核心介绍浮点型计算距离。


内积距离


内积距离计算的是两个向量在方向上的差异,夹角越小越相似,因此内积值越大越相似。

两条向量内积距离的计算公式为:图片

内积更适合计算向量的方向而不是大小,通常用于推荐场景。

内积在几何意义上是计算一条向量在另一条向量上的垂直投影长度。


欧式距离

欧氏距离计算的是两点之间最短的直线距离,距离值越小越相似。

欧氏距离的计算公式为:图片

欧氏距离是最常用的距离计算方式之一,应用广泛,适合数据完整,数据量纲统一的场景。

欧氏距离能够体现个体数值特征的绝对差异,所以更多的用于需要从维度的数值大小中体现差异的分析,如使用用户行为指标分析用户价值的相似度或差异。


余弦距离

余弦距离计算的是两个向量之间的夹角余弦值,夹角越小越相似,因此余弦相似度值越大越相似。

余弦距离的计算公式为:图片
余弦距离和内积距离更多的是从方向上区分差异,而对绝对的数值不敏感,更多的用于使用用户对内容评分来区分兴趣的相似度和差异,同时修正了用户间可能存在的度量标准不统一的问题。


基础算法


上述介绍了向量检索的计算相似度方式,接下去就要研究如何加快检索速度。向量检索的本质是近似近邻搜索(ANNS),尽可能减小查询向量的搜索范围,从而提高查询速度,目前业界的近邻搜索算法主要分为基于树、图、量化和哈希四类。考虑到本文核心讲解RAG中的工程技术,故本文对此不做过多介绍,有兴趣的读取可以自行深入了解学习。


稠密&稀疏向量检索模型

稠密向量检索模型和稀疏向量检索模型是信息检索领域的两种主要方法,主要用于从海量数据中快速查找相关信息。两者的核心区别在于向量表示和搜索方式。


稠密向量检索模型

定义:稠密向量检索模型使用神经网络等深度学习技术,将文档和查询转换为高维稠密向量。每个向量的维度都包含实数值,并且通常维度的数量较少(如几百到几千维)。

特点:

  • 向量表示:每个数据点被表示为一个长度较小、但密集的数值向量。

  • 搜索方式:通过计算向量间的距离(如余弦相似度、欧氏距离)来进行匹配和检索。

  • 优点:能够捕捉复杂的语义关系,表现出色的泛化能力,适合语义相似度计算。

  • 缺点:模型训练需要大量数据和计算资源;搜索阶段需要进行高效的近似最近邻搜索。


稀疏向量检索模型

定义:稀疏向量检索模型通常基于传统的语言模型(如TF-IDF)和袋装词模型,将文档表示为高维稀疏向量,每个维度对应一个独立的词项。

特点:

  • 向量表示:通用的是利用词项的频率来表示向量,向量的维度非常高(通常和整个词汇表的大小一样),但其中大部分维度的值为零。
  • 搜索方式:通过倒排索引等结构来快速检索和匹配文档。

  • 优点:成熟稳定,解释性强,索引和检索效率高。

  • 缺点:难以捕捉词语间的复杂语义关系,可能对词汇的同义关系不敏感。


  • 区别总结


  1. 表示方式:稠密模型使用低维稠密向量,稀疏模型使用高维稀疏向量。

  2. 语义能力:稠密模型更擅长捕捉深层语义,稀疏模型在简单文本匹配上更有效。

  3. 计算资源:稠密模型通常需要更多计算资源用于训练和检索,稀疏模型则通常拥有更快速的索引和检索过程。

  4. 应用场景:稠密模型适合需要深层语义理解的任务,稀疏模型则适用于快速精确匹配场景。


  向量存储


  • 向量数据库选型


数据准备通常包括识别数据源、从数据源中提取数据、清洗数据并将其存储在数据库中等环节。用于存储数据的数据库类型和准备数据的步骤可能会因应用场景和检索方法的不同而有所变化。例如,如果使用像Faiss这样的向量存储库,需要为数据创建嵌入并将其存储在向量存储库中;如果使用像Elasticsearch这样的搜索引擎,需要将数据索引到搜索引擎;如果使用像Neo4j这样的图数据库,需要为数据创建节点和边,并将它们存储到图数据库中。下面将分别介绍不同类型的数据库以及准备数据的步骤。

图片


向量数据库


向量存储库非常适合存储文本、图像、音频等非结构化数据,并根据语义相似性搜索数据。向量模型用于为数据库中存储的数据生成向量嵌入。根据数据类型、任务和向量模型的不同,数据需要被切成更小的块。例如,如果要存储文本数据,则可以将数据切分成句子或段落。如果要存储代码,则可以将数据切分成函数或类。如果选择提供更多的上下文片段,则可以使用更小的块。将数据切分成块后,可以为每个块生成向量并将其存储在向量存储库中。在最简单的RAG系统中,当向量存储库接收到用户查询时,查询也会被转换为一个向量,向量存储库会返回与查询最相似的候选数据。


举个例子,在阿里云上,Hologres和ADB都是支持支持向量存储和索引的。

  • Hologres可参考Hologres官方文档。

  • ADB可参考ADB官方文档


搜索引擎


在RAG系统中,可以从通用搜索引擎(如Google、Bing等)或内部搜索引擎(如Elasticsearch、Solr等)中检索数据。在RAG架构的检索阶段,使用问题/任务详细信息查询搜索引擎,搜索引擎返回最相关的文档。搜索引擎对于从网络中检索数据和使用关键字搜索数据非常有用。


图数据库


图数据库以节点和边的形式存储数据。它适用于存储结构化数据,如表格、文档等,并使用数据之间的关系搜索数据。当对图数据库进行查询时,图数据库返回与查询节点相连的节点。这种使用知识图谱的检索对于完成像问题回答这样的任务非常有用,其中答案是人或实体。


  召回优化


图片


在向量召回的过程中会存在一些问题,比如文本切块会损失全局信息、用户查询内容描述不准确等,这些问题会影响召回文本的质量。下面将介绍一些提高向量召回效果的方法。


图片

在很多情况下,用户的问题可能以口语化形式呈现,语义模糊,或包含过多无关内容。相比之下,常用的向量化模型由于参数较少,在理解能力上存在局限性。在对向量化模型进行压缩时,可能导致信息丢失。因此,将这些模糊的问题进行向量化后,召回的内容可能无法准确反映用户的真实意图,从而影响在RAG场景下LLM生成最终答案的效果。此外,召回的内容对用户提问的措辞也非常敏感,不同的提问方式可能导致不同的检索结果。因此,如果计算能力和响应时间允许,可以先利用LLM对用户的原始提问进行改写和扩展,然后再进行相关内容的召回。


改写和扩充(前置)


大模型应用开发框架可将用户的原始问题从不同角度改写成其他多种不同的提问方式。这样做的目的是利用多个问题同时进行文本召回,然后将这些召回的结果合并,再输入LLM中进行处理。


短文本全局信息增强(前置)


基于深度学习的文本向量化模型的基本原理是:通过对字向量进行压缩来作为文本段的向量表示。但是,如果文本段过长,压缩过程中必然会引入较大的语义损失。为了解决这个问题,常见的做法是将长文本段切分为若干短文本段,并分别对它们进行向量化。然而,这样做难免会造成文本全局信息的损失,从而不利于召回效果。因此,为切分后的短文本段补充其所属的长文本全局信息是有必要的。

论文“DAPR: A Benchmark on Document - Aware Passage Retrieval”中提到了可以将长文本的全局文本信息拼接到切段后的短文本中。全局文本信息有如下 3 种:
  1. 长文本的前三句话。对于长文本来说,总分结构比较常见,文本开头往往包含段文本的主旨。

  2. 长文本的标题。适用于长文本是一个带有标题的文档。标题通常对文本内容高度概括,包含相当准确的全局信息。

  3. 长文本的关键词。使用 TopicRank 算法从长文本中提取出 10 个关键词。


文本多向量表示(前置)


在构建向量数据库时,利用多种向量来表示同一段文本是有益的。以文本A为例,我们不仅可以利用完整的A生成向量,还可以通过其子集或总结句等方式生成“补充向量”。在RAG(检索增强生成)过程中,召回任意“补充向量”所对应的文本后,我们并不是直接将其输入到大型语言模型(LLM)中,而是将文本A的内容作为输入。这种方法解耦了召回内容与输入LLM的内容之间的相等关系。可以利用以下三种方式生成“补充向量”:

  • 文本切块:将原始文本进一步拆分为更小的块,并为每个块生成向量存入数据库中。这种方式可以在召回时提高对更细粒度语义的关注,实际上是上一节中介绍的“父文本检索”策略。

  • 文档摘要:通过LLM的能力生成文档的摘要,作为补充向量。

  • 假设性问题:利用大模型的能力,根据文本内容生成相关问题。“用问题召回问题”比“用问题召回答案”更为简单。

文本切块后可以继续生成“补充向量”。在生成小块文本时,需要将其对应的大块文本ID保存在元数据中,并保持大块文本ID与内容的映射关系。类似地,利用文档摘要和假设性问题生成“补充向量”也是可以轻松实现的。


召回文本重排序(后置)


文本向量化是将文本数据转换成数值向量的过程。常见的方法有词袋模型(Bag of Words)、词嵌入(Word Embeddings,如Word2Vec, GloVe)和TF-IDF等。文本向量化模型进行召回的最大优势是高效性,每个文本片段只需要进行一次向量化,并且在召回相似文本时只需要进行计算量较小的向量运算。此外,现代向量数据库还集成了倒排索引、乘积量化等高效的检索算法,进一步加快了检索速度。然而,这种方法的召回精度不高,因为包含知识的文本片段和用户查询文本在二者向量化时会产生少量的“交互”,并且在文本向量化过程中也会有一定的信息损失。如果能够同时将这两类文本输入到一个交叉编码器中进行文本相似性预测,不仅可以增加更多的文本上下文“交互”,还能减少信息损失。交叉编码器是一个深度学习模型。


交叉编码通常用于处理交互信息,尤其是在对话系统和问答系统中。它结合了文本的上下文信息,以编码多个输入文本之间的交互。但交叉编码器的最大缺陷是计算量大。在实际场景中,包含知识的候选文本片段数以万计,如果有 n 个候选文本片段,若想要使用交叉编码器进行相关文本召回,则需要将用户查询文本逐一与每个候选文本拼接,分别输入交叉编码器中进行相似度分值预测并排序,选出分值最高的若干候选文本,这个过程需要调用深度学习模型进行 n 次预测。


在大模型的检索增强生成(RAG)场景中,结合文本向量化模型和交叉编码器进行两阶段的文本召回是一种非常实际且有效的策略。这种方法通常包括以下几个步骤:

  • 文本向量化(初步检索):首先,使用文本向量化模型(如双塔模型或BERT等编码器)将查询和文档进行编码,并计算它们之间的相似性。这一步可以高效地从大量候选文档中筛选出一小部分最相关的文档。这种方式计算量较小,可以快速处理大规模数据。

  • 交叉编码(精确排序):在初步检索阶段获得的候选文档中,使用更精确但计算量较大的交叉编码器(如BERT-based交叉编码)进行精细排序。交叉编码器同时考虑查询和候选文档的交互,可以提供更精确的相似性比较。


通过这种两阶段的方法,RAG系统能够在保持高效率的同时,提高检索结果的准确性。初步检索阶段迅速筛选掉大量不相关文档,而精确排序阶段则更关注少量候选的精确性。这种方式有效结合了向量化模型的速度优势和交叉编码器的精度优势,是在处理大规模文档集合时一个非常合理的策略。这种多阶段排序的思想在互联网行业的搜索、推荐、广告等业务场景被广泛使用。


召回内容上下文扩充(后置)


在 RAG 场景下,通常将从向量数据库中召回的文本直接输入到大型语言模型 (LLM) 中。然而,由于向量化模型在编码长文本时可能导致信息的显著丢失,因此从向量数据库中召回的通常是短文本。但对于 LLM 来说,能够提供连贯性和更多上下文信息的长文本会有助于生成更优质的答案。直接召回长文本可能具有挑战性,不过可以通过设计一些人工策略来扩展召回的内容,以打破“召回内容和输入给 LLM 的内容相等”的限制,从而解决向量化模型需要短文本而 LLM 需要长文本的矛盾。


体而言,我们可以将长篇的父文本切分为多个短的子文本部分,并对这些短文本进行向量化处理后存储在向量数据库中。在召回阶段,我们可以检索这些子文本,但不直接将它们输入到 LLM 中,而是检索出子文本所属的原父文本,并输入该长文本到 LLM 中进行处理。这种方法可以在优化信息完整性的同时,保证LLM能够利用连贯的上下文信息生成高质量的输出。

多检索器融合(后置)


在机器学习领域,多模型集成是一种被广泛应用的策略,通过组合多个模型,能够显著提升预测性能。在大模型的RAG(检索-生成)召回环节中,我们也可以利用多模型集成的理念。最常见的集成方式之一是结合稀疏检索器(如BM25)和稠密(向量)检索器。稀疏检索器凭借关键词查找相关文本表现出色,而稠密检索器则借助语义信息进行相关性查找,两者在功能上可以相辅相成。以融合这两种检索器为例,我们可以为用户查询和候选文本分别计算相似度评分并排序,然后通过融合算法生成新的相似度或排序结果。
最简单的融合算法是对两个检索器计算的相似度分值进行加权求和,然后重新排序。


结合元数据召回(后置)


在实际应用中,并不是所有情况下都需要对整个向量数据库进行文本召回。如果在存储向量时同时保存与每个向量相关的标签信息,在需要进行召回时,可以首先利用这些标签信息筛选出所需的向量子集。用于描述向量的标签有时也被称为元数据(metadata)。现代的向量数据库大多支持存储元数据。
于此同时,大部分AI框架也集成了元数据写入和召回过滤功能。


  提示词工程


提示词工程(Prompt Engineering)是一种在人工智能和自然语言处理领域中开发和设计提示词(Prompts)的技术,旨在引导大型语言模型产生特定输出。通过精心构建和优化提示词,用户可以更有效地获得所需答案、生成文本或执行其他自然语言处理任务。


提示词工程的关键在于找到合适的语言和结构,以清晰地表达问题或任务,使模型能够更准确地理解并给出相关回应。这可能涉及反复试验、调整提示词的细节,并利用对模型行为的理解来优化结果。


描述答案的标注


在与 LLM 交互时,最好在提示中清楚地描述所期望的答案标准。不要假设 LLM 具有人类相似的理解能力,也不要期望它一定会以人类的方式进行回答。使用 prompt 与 LLM 交互时,内容通常会显得有些“啰嗦”,这是正常的。但要注意,每个关于答案标准的描述应与所期望的目标密切相关,避免冗余信息,以降低 LLM 理解的难度。例如,在提问“北京有哪些景点”时,可以添加“请不要过多介绍景点”来简化 ChatGPT 的输出结果。


设置兜底的回答方式


在某些情况下,向量化模型可能无法准确召回与用户问题相关的文本,甚至可能与用户问题几乎没有关联。如果让 LLM 根据这些召回的文本生成答案,可能会得到不相关或不符合事实的结果。因此,我们需要明确告知 LLM,如果上下文中没有与用户问题相关的答案,就不要强行生成。这样可以避免产生不准确或不相关的回答。


输入中加入问答实例


有时,我们很难通过语言准确描述一项任务。如果任务描述不清晰,或者问题本身复杂,就会导致语言模型产生歧义,从而严重影响回答的效果。在这种情况下,可以尝试在输入中增加一些问答示例,让语言模型自行领悟接下来应该执行的任务。一般来说,为语言模型提供问答示例是有益的。然而,需要注意的是,示例的数量、顺序以及与真实问题的相关性等因素都会影响语言模型的回答效果,这需要通过大量实践来确定。在提供示例时,尽量涵盖简单、困难与长尾等各种类型的示例。


设定输出格式


ChatGPT 等模型经过对话数据微调。在需要准确输出内容的场景中,有时可能会出现输出无用信息或过于口语化的情况,这不利于进一步提取所需内容。一种有效的解决方法是让 LLM 以 JSON 格式输出内容。如果效果不佳,可以尝试在提示中增加输出 JSON 的示例。有时,LLM 输出的 JSON 格式可能不够标准(例如,字典的键值没有引号,或冒号采用中文格式),无法直接使用 Python 的 JSON 包处理。这时,您可以借助正则表达式进行处理。如果不熟悉正则表达式,您可以直接向 ChatGPT 询问。


标识不同类型的内容


在撰写 Prompt 时,最好将任务描述、示例、引用文本等不同类型的内容用特殊符号隔开,以避免 LLM 在内容理解上产生歧义,同时便于用户对 Prompt 进行修改和维护。如果用户下达的指令与 Prompt 其他内容存在冲突,使用该技巧尤为重要。


指定扮演身份


在prompt中,告诉LLM所扮演的身份是什么,这可以帮助LLM确定接下来输出的内容和说话风格。


使用思维链


对于LLM来说,当它进行推理相关的任务时,要求它输出推理过程同样可以减少错误的发生。以计算一个简单的数学题为例,直接输出的答案可能是错误的。只有要求它逐步给出每一步的计算过程,才能得到正确的答案。LLM不仅在训练时可以通过增加计算量(训练更多数据)来提高效果,而且在推理过程中也可以做到这一点(输出更多内容)。


  效果评估


  • 召回环节评估


对于构建大模型中的RAG系统,召回阶段的效果对生成模型最终回答的质量至关重要。召回文本是否准确包含了用户问题对应的答案,直接影响到最终回答的准确性。因此,文本切块策略、向量化模型和召回策略等因素在这个过程中变得尤为重要。

为了确保召回效果的精确性,建立一套针对召回的评估流程,并对其各个环节进行持续优化,是非常必要的步骤。在评估中所需的数据通常是“问题 - 包含答案的文本块”这样的对照二元组。常见的评估指标包括命中率和平均倒数排名(Mean Reciprocal Rank, MRR)。

命中率用于衡量在召回的文本集合中出现包含答案的文本块的概率,具体来说,在单次召回中,其结果为“命中”或者“未命中”,而不考虑其排序。平均倒数排名则是一种用于评价搜索算法的简单指标,其计算方法是多次召回后,记录每次召回中包含答案的文本块在召回列表中的排名倒数,然后对这些排名倒数取平均值。


  • 模型回答评估


在大模型RAG场景下,召回环节的评估只是完整环节中的一种局部评估,我们更关心LLM最终的回答效果。大模型的回答更加开放、多样,因此较难通过精确指标来表示模型回答效果。接下来简要介绍几种常见且通用的LLM评估方法。

(1) 选择题评估法

采用构造选择题数据集的方法,让LLM进行单项或多项选择题,以测试其正确率。这种方法可以比较准确地评估LLM的能力,但构建高质量且全面的数据集成本较高,并且很难完全避免LLM对测试集数据的有针对性训练和榜单刷分问题。大部分通用LLM评估榜单都采用了这种方法。然而,该方法不太适用于大模型RAG实际开发。


(2) 竞技场评估法

在竞技场中存在多种LLM,当用户提出问题后,两个匿名的LLM会给出答案。用户会根据答案的质量评价哪个LLM的答案更好,最后计算每个LLM的elo分值进行排名。该方法评估最为客观,但是需要大量用户参与,难度大,也不太适用于大模型RAG实际开发。


(3) 传统NLP指标评估法

用ROUGE、BLEU等传统NLP评估指标进行评估,需要有参考答案。主要考查句子之间词的重合度,无法考虑语义信息,评估效果不太准确。


(4) 向量化模型评估法

该方法需要有参考答案,将参考答案和LLM的回答进行向量化,然后计算它们之间的相似度。这种评估方法的优点是成本低,并且能够考虑语义信息。然而,需要注意的是,模型回答和参考答案之间的高相似度并不一定意味着回答是正确的,它只能保证语义上的相似性。

(5) LLM评估法
使用LLM的能力,并结合提示词工程来对答案进行评分,是最适合RAG场景的评估方法。即使没有参考答案,大模型利用自身知识也能进行评估,缺点是LLM调用成本较高。

图片
参考文献


  • 《大模型RAG实战》:https://book.douban.com/subject/37104428/
  • 《RAG七十二式:2024年度RAG清单》:https://zhuanlan.zhihu.com/p/11979316894
  • 《Proxima向量计算》:向量计算(Proxima)_实时数仓 Hologres(Hologres)-阿里云帮助中心

  • 《淘宝搜索中语义向量检索技术》:https://zhuanlan.zhihu.com/p/409390150


图片
团队介绍


我们来自淘天集团的价格平台技术。我们支撑大促 (双11、618 等)和日销业务;同时我们也直面竞对,深入参与淘宝好价、百亿补贴、聚划算等日销业务的价格心智打造。秉承“简单、开放、自驱”的技术文化,在使命与责任中互相成就,共同成长,践行让业务先赢,技术氛围浓郁。







继续滑动看下一个
大淘宝技术
向上滑动看下一个