RAG

检索增强生成(RAG - retrieval augmented generation)是自然语言处理中使用的一种技术,它将大型语言模型(也称为基础模型)的力量与外部知识检索系统相结合。这种方法旨在通过让语言模型在生成过程中访问和整合来自外部来源的相关信息,从而提高语言模型的性能。

RAG的核心是利用向量嵌入(vector embeddings),即文本的密集数值表示,捕捉语义和上下文信息。这些嵌入用于有效地搜索和检索知识库或语料库中的相关段落或文档。然后将检索到的信息与语言模型的输出相集成,使其能够生成更加知情、准确和上下文相关的响应。

传统的生成模型在回答问题时,完全依赖于预训练过程中所学到的知识,无法实时访问最新的信息或未见过的数据。而 RAG 通过在生成模型生成回答之前,先从数据库、知识库、文档库中检索相关信息,然后将这些信息整合进生成的回答中,增强了生成内容的准确性、相关性和知识丰富度。

通过增强语言模型的生成能力,RAG在问答、对话系统和内容生成等任务中显示出了良好的效果,最终提高了生成文本的质量和连贯性。

RAG 工作流程

image-20241004091326310

  1. 用户输入问题或查询

    • 用户输入一个问题或请求,通常是自然语言形式的查询。
  2. 检索相关信息

    • 检索模型会根据用户的输入,去知识库、数据库或文档中寻找相关信息。这个步骤通常通过向量搜索技术实现,它将输入映射到语义向量空间,并找到与输入最相关的文档或片段。
    • 检索到的信息可以是网页、PDF、文档库中的文本、结构化数据库中的数据等。
  3. 生成增强的回答

    • 在得到相关信息后,生成模型(如 GPT 等语言模型)会将这些检索到的信息作为上下文,生成更加准确、详细的回答。
    • 生成模型不仅仅依赖自身的语言生成能力,还结合了外部检索的事实数据来生成最终结果。
  4. 返回答案

    • 最后,生成模型将结合检索到的信息和自身生成的内容,向用户返回一个整合的回答。这个回答会更具相关性、完整性,并且能解决问题的具体需求。

    例如,下面的回答,返回了相关领域的知识,存储在S3中:

    image-20241004091513036

RAG的向量数据库

image-20241004091620910

向量数据库是 Bedrock 中实现 RAG 技术和语义搜索的核心部分。通过向量数据库,可以将文本、图像等数据映射到高维向量空间,并基于向量相似性进行快速检索。不同的向量数据库提供了不同的特性和性能优化,开发者可以根据自身的需求选择合适的解决方案。

这些数据库中的大部分都支持分布式和高扩展性,能够处理大规模的向量数据,确保在海量数据中进行快速检索。通过与 Amazon Bedrock 的集成,用户可以构建强大的 RAG 模型,从知识库或文档中检索最新、最相关的信息,增强自然语言生成任务的性能和质量。

OpenSearch

Amazon OpenSearch 是一个高度可扩展的、分布式的搜索和分析引擎,除了传统的基于倒排索引的文本检索功能外,它也支持基于嵌入向量的检索功能。OpenSearch 可以处理大型数据集,并且可以与 Bedrock 模型进行集成,用于文档检索或上下文增强。

Pinecone

Pinecone 是一个专注于高性能向量搜索的云原生向量数据库,它可以与 Amazon Bedrock 集成,帮助检索相关文档用于 RAG 模型。在 Pinecone 中,数据可以被编码成向量,存储在其数据库中,并且能够进行快速、可扩展的相似性搜索。

Embedding Model

Embedding Model 是一种将高维的数据(例如文本、图像或音频)转换为低维向量表示的机器学习模型。这种低维向量表示通常被称为embedding(嵌入),并且这些向量可以捕捉数据中的语义或特征关系,使得相似的对象在向量空间中更加接近。

Embedding 是自然语言处理(NLP)、计算机视觉等领域中广泛使用的技术,主要用于将离散的输入数据(如单词、句子或图像)转换为稠密的、连续的向量,以便在神经网络等模型中进行处理。

嵌入模型将输入数据表示为一组浮点数向量。向量表示捕捉了数据的关键特征和模式,并用于后续任务中的相似度计算、分类、聚类等任务。例如,在 NLP 中,单词嵌入(word embedding)模型将每个单词表示为一个实数向量。通过这个表示,可以用向量之间的相似度(如欧几里得距离或余弦相似度)来表示单词之间的关系。

image-20241004194411669

示例架构

Architecture

  1. 用户向GenAI应用程序发出请求。
  2. 应用程序将查询传递给Bedrock代理。
  3. 如果代理发现相关性,它会向知识库发送请求以获取基于用户输入的上下文。
  4. Question被Bedrock通过Titan embeddings v1.2模型转换为embeddings,用于从OpenSearch Service Serverless索引中查找相似文档。
  5. OpenSearch输出返回到知识库。
  6. 知识库返回上下文。
  7. Bedrock将用户请求以及从索引检索到的数据作为上下文发送到LLM Prompt。
  8. LLM根据检索到的数据返回简洁的响应。
  9. LLM的响应被发送回应用程序。
  10. 应用程序将代理/LLM输出显示给用户。

RAG 的应用场景

智能问答系统

  • RAG 可以应用于问答系统,特别是当系统需要提供最新的答案时。比如,用户询问产品的具体使用说明或政策变更时,RAG 可以从文档库中检索相关信息,并生成详细的回答。

对话系统

  • 在对话生成中,RAG 能够使对话系统具有实时检索能力,确保生成的对话内容更具时效性和准确性。尤其在开放域对话或专业领域的对话系统中,RAG 提供了很大的帮助。

文档生成与补全

  • RAG 可用于文档生成任务,比如技术文档、商业报告等。它通过从已有的文档中检索相关内容来补全或生成新的段落,从而提高生成质量。

法律、医疗等专业领域应用

  • 在法律或医疗等领域,生成内容的准确性和事实支持至关重要。RAG 能够从权威文档或数据库中检索信息,并生成基于事实的准确回答,适用于复杂的专业任务。