【为生成AI应用的向量搜索】⑥ RAG AI应用的实施〜执行生成过程

首先

作为矢量数据库,Apache Cassandra和DataStax Astra DB都具有相同的背景。

根据DataStax公司的Cassandra托管服务Astra DB中的DataStax工程师提出了扩展向量搜索功能的建议,以应对自2022年开始生成AI的兴盛。本文系列基于该公司发布的白皮书的内容,作为这一趋势的一部分。

来源和日本语版

本系列文章的原始来源可以在以下位置获取。

 

在博客文章中,我们更注重易读性而不是忠实的翻译,因此进行了部分省略。
如果您希望获取没有省略的日文版白皮书,请联系info-jp@datastax.com,我们会提供给您。

【用于AI应用程序的向量搜索】⑥ RAG AI应用的实现-执行生成过程

现在我们将详细讨论如何使用在前一部分编码的数据集生成LLM的回应。

第五张图,展示了生成响应的查询工作流程。

image.png

查询的嵌入

在RAG应用中,文本生成始于查询。查询可以直接使用应用的最终用户发送的内容,也可以根据它生成LLM或其他过程代码。

接下来,我们将对查询文本进行文本嵌入,并将查询编码为向量。

重要的是所使用的嵌入模型在此处与用于嵌入向量检索的数据集相同。否则,向量检索将无法正常工作。

向量搜索

获取搜索结果数量

下一步,我们将从向量数据存储中获取与查询最相似的嵌入数据。首先,我们将进行最近邻搜索,以找到接近查询向量的向量。通常情况下,这个搜索是通过寻找“前N个匹配项”来完成的。这个数字需要根据使用的嵌入块长度、上下文窗口(允许LLM输入大小)和用例等进行调整。

相似度和阈值

在进行向量搜索时,我们有时需要返回关于查询向量和搜索结果向量之间的相似性得分或度量,而不仅仅是搜索结果。如果该得分低于阈值,则意味着搜索到的文档与查询的匹配程度不足,我们可以在后续处理中决定不再使用这个搜索结果文档。实际阈值的选择因应用程序、数据集和相似性度量而异。假设得分范围已经归一化为最大值为1,则从0.5到0.8之间开始实验是合适的截断值。

搜索结果的截断

通过向量搜索,我们可以获取数百到数千个匹配结果,并在获取每个结果的分数后,使用生成嵌入式的原始文本来进行筛选,而不是将合适的截断点交给向量数据存储,这样应用程序可以决定。最重要的是,在数学上得出的向量存储结果中找到与查询的原始目的相关的点。

当获取与查询高度相关的结果向量集后,我们会获取与这些向量一起保存为元数据的相关文本,以供在下一步的提示工程中使用。

提示工程

提示工程是设计给LLM提供指令的过程。一些LLM只接受一个提示。或者,对于聊天模型来说比较典型的是,指令可能由多个不同的输入项组成,需要将它们定义为提示。我们将在下文中对每个这样的提示章节进行详细解释。

第一点是上下文。上下文表示我们希望模型执行的任务。例如,“请解释一下这段代码”或“以客服机器人的身份回答问题”等。

此外,针对LLM,我们可以提供一些回答示例。这被称为小样本学习,对于提高LLM理解用户意图非常有帮助。对于聊天型LLM,通常需要提供会话双方信息作为示例。具体而言,需要将用户的问题和期望的AI回复都作为文本样本提供。

在RAG应用程序中,将获取到的向量嵌入的文本表示插入到LLM命令中。对LLM给出的指令的格式如下。

 “Use the articles below to complete the task.

Article:
<ベクトル検索で最初に一致したテキストを挿入>

Article:
<ベクトル検索で2 番目に一致したテキストを挿入> “

正如之前提到的,作为任务指示,我们可以使用更具体的描述,而不是一般性的表达(如“完成任务”)。在问答系统的情况下,例如,可以使用“使用以下文章中的事实来回答问题”作为上下文来说明。

此外,不仅可以通过向LLM发出指令,使用由向量搜索选择的文档生成答案作为一种更实践的改进,还可以同时给予LLM不同级别的指令,以便推理这些文档是否与所请求的任务相关。
例如,在问答系统中,可以将对LLM的指示表达改为以下方式:“请使用以下文档的事实来回答问题。但如果给定的文档对回答问题没有帮助,请说『不知道』。”

重要的是,用户的意图明确地表达,以便将执行请求或任务交给LLM。

应答过程

经过以上过程后,会收到来自LLM的最终文本输出,但在大多数情况下,这里将进行后处理。这包括例如AI安全性分析、质量管理分析,以及将特定于应用程序用例的附加过滤器或调整等整合进LLM的响应中。在许多系统中,后处理阶段还可将生成的响应的副本保存在系统中以供以后集体审查的机会。完成LLM响应的后处理后,最终响应将返回给用户,整个一系列的RAG流程也将完成。

广告
将在 10 秒后关闭
bannerAds