本文来源公众号“AI新智力”,仅用于学术分享,侵权删,干货满满。
“仅凭Prompt工程根本无法满足人们日益增长的大模型需要,鉴于大模型本身诸多缺陷,比如不能及时更新知识、上下文有限等,人们开始给大模型加入插件,引入向量数据库,把数据索引进向量数据库,再召回数据,再做Prompt工程,这样就可以使用最新的知识和更准确的知识,这种方法叫做检索增强生成(RAG)。”
前文AI新智力 | AI|大模型入门(三):提示工程_中提到,增加了Prompt工程的大模型,还是不能把问题回答的与时俱进,在专业领域不够专业。其实使用提示工程优化后的大模型还仅是一个通用大模型,并没有给它提供额外的专业知识,如果想要构建专用或者私有大模型,还需要使用检索增强生成(RAG)技术为它增加专业知识库。
检索增强生成
当下领先的大语言模型(LLMs)是基于大量数据训练的,目的是让它们掌握广泛的普遍知识,这些知识被储存在它们神经网络的权重(也就是参数记忆)里。但是,如果我们要求LLM生成的回答涉及到它训练数据之外的知识——比如最新的、专有的或某个特定领域的信息——这时就可能出现事实上的错误(我们称之为“幻觉”)。以下截图就是一个典型案例:
这是ChatGPT回答“总统对布雷耶法官有何看法?”这个问题的情况。
因此,弥合LLM的常识与任何额外语境之间的差距非常重要,这样才能帮助 LLM生成更准确、更符合语境的补全,同时减少幻觉。
RAG是解决其中一些挑战的一种方法。它会重定向LLM,从权威的、预先确定的知识来源中检索相关信息。组织可以更好地控制生成的文本输出,并且用户可以深入了解LLM如何生成响应。
一、什么是检索增强生成
检索增强生成(Retrieval-Augmented Generation,RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在LLM本就强大的功能基础上,RAG将其扩展为能访问特定领域或组织的内部知识库,所有这些都无需重新训练模型。这是一种经济高效地改进LLM输出的方法,让它在各种情境下都能保持相关性、准确性和实用性。
LLM是一项关键的人工智能(AI)技术,为智能聊天机器人和其他自然语言处理(NLP)应用程序提供支持。目标是通过交叉引用权威知识来源,创建能够在各种环境中回答用户问题的机器人。但是,LLM技术的本质在LLM响应中引入了不可预测性。此外,LLM训练数据是静态的,并引入了其所掌握知识的截止日期。
二、重要意义
RAG技术为专用或私有大模型建立带来了诸多益处:
1.降低成本、增强安全性
聊天机器人开发通常从基础模型开始。基础模型(FM)是在广泛的广义和未标记数据上训练的API可访问LLM,不包含私有数据,因此对于一些私有领域知识是欠缺的。针对组织或领域特定信息重新训练LLM的成本很高。此外,有研究和实践表明,通过一些特定的攻击手法,可以让LLM泄漏训练数据,如果训练数据中包含一些私有信息,就很可能会发生隐私信息泄露。如果把私有数据作为一个外部数据库,让LLM在回答基于私有数据的问题时,直接从外部数据库中检索出相关信息,再结合检索出的相关信息进行回答。这样就不用通过预训练或者微调的方法让LLM在参数中记住私有知识,既节省了训练或者微调成本,也一定程度上避免了私有数据的泄露风险。因此,RAG是一种将新数据引入LLM的更加经济高效的方法。它使生成式人工智能技术更广泛地获得和使用。
2.保证数据实时性
即使LLM的原始训练数据来源适合您的需求,但保持相关性也具有挑战性。RAG允许开发人员为生成模型提供最新的研究、统计数据或新闻。他们可以使用RAG将LLM直接连接到实时社交媒体提要、新闻网站或其他经常更新的信息来源。然后,LLM可以向用户提供最新信息。
3.增强用户信任度
RAG允许LLM通过来源归属来呈现准确的信息。输出可以包括对来源的引文或引用。如果需要进一步说明或更详细的信息,用户也可以自己查找源文档。这可以增加对您的生成式人工智能解决方案的信任和信心。
4.更多开发人员控制权
借助RAG,开发人员可以更高效地测试和改进他们的聊天应用程序。他们可以控制和更改LLM的信息来源,以适应不断变化的需求或跨职能使用。开发人员还可以将敏感信息的检索限制在不同的授权级别内,并确保LLM生成适当的响应。此外,如果LLM针对特定问题引用了错误的信息来源,他们还可以进行故障排除并进行修复。
三、大体工作过程
如果没有RAG,LLM会接受用户输入,并根据它所接受训练的信息或它已经知道的信息创建响应。RAG引入了一个信息检索组件,该组件利用用户输入首先从新数据源提取信息。用户查询和相关信息都提供给LLM。LLM使用新知识及其训练数据来创建更好的响应。以下各部分概述了该过程。
1.创建外部数据
LLM原始训练数据集之外的新数据称为外部数据。它可以来自多个数据来源,例如API、数据库或文档存储库。数据可能以各种格式存在,例如文件、数据库记录或长篇文本。另一种称为嵌入语言模型的AI技术将数据转换为数字表示形式并将其存储在向量数据库中。这个过程会创建一个生成式人工智能模型可以理解的知识库。
2.检索相关信息
下一步是执行相关性搜索。用户查询将转换为向量表示形式,并与向量数据库匹配。例如,考虑一个可以回答组织的人力资源问题的智能聊天机器人。如果员工搜索:“我有多少年假?”,系统将检索年假政策文件以及员工个人过去的休假记录。这些特定文件将被退回,因为它们与员工输入的内容高度相关。相关性是使用数学向量计算和表示法计算和建立的。
3.增强LLM提示
接下来,RAG模型通过在上下文中添加检索到的相关数据来增强用户输入(或提示)。此步骤使用提示工程技术与LLM进行有效沟通。增强提示允许大型语言模型为用户查询生成准确的答案。
4.更新外部数据
下一个问题可能是——如果外部数据过时了怎么办?要维护当前信息以供检索,请异步更新文档并更新文档的嵌入表示形式。您可以通过自动化实时流程或定期批处理来执行此操作。这是数据分析中常见的挑战——可以使用不同的数据科学方法进行变更管理。
四、具体工作原理
下图显示了将RAG与LLM配合使用的概念流程图,主要分为2个阶段:数据准备阶段(紫色动线)、应用阶段(绿色动线)。下面我们详细介绍一下各阶段的:
数据准备阶段工作流程(紫色动线):
私有数据经过数据提取和文本分割,再经过嵌入向量化(Embeding),生成语义向量(Semantic Vector),并把数据存入向量数据库(Vector Database),这个向量数据库也就是所谓的本地知识库。
应用阶段工作流程(绿色动线):
用户准备提示词和问题,生成查询向量(Query Vector),进入本地向量数据库进行数据检索(召回),返回的信息注入Prompt,再把Prompt输入大模型生成最终响应。
特别解释一下【注入Prompt】:
Prompt作为大模型的直接输入,是影响模型输出准确率的关键因素之一。在RAG场景中,Prompt一般包括任务描述、背景知识(检索得到)、任务指令(一般是用户提问)等,根据任务场景和大模型性能,也可以在Prompt中适当加入其他指令优化大模型的输出。一个简单知识问答场景的Prompt如下所示:
【任务描述】
假如你是一个专业的客服机器人,请参考【背景知识】,回
【背景知识】
{content} // 数据检索得到的相关文本
【问题】
石头扫地机器人P10的续航时间是多久?
Prompt的设计只有方法、没有语法,比较依赖于个人经验,在实际应用过程中,往往需要根据大模型的实际输出进行针对性的Prompt调优。这就是我们前文提到的AI新智力 | AI|大模型入门(三):提示工程的知识了。
名词解释:
数据检索:常见的数据检索方法包括:相似性检索、全文检索等,根据检索效果,一般可以选择多种检索方式融合,提升召回率。
嵌入向量化(Embeding):Embedding(嵌入)是自然语言处理(NLP)和机器学习领域中的一个核心概念,指的是将高维的离散数据(如单词、句子或文档)转换成低维的连续数值向量的过程。这种转换使得原本计算机难以直接处理的文本数据能够以数值形式被机器学习模型所理解和处理。
语义向量(Semantic Vector):Semantic Vector(语义向量)是一种将自然语言文本转换成数值向量的技术,它试图捕捉文本中的语义信息。在大模型领域,Semantic Vector通常指的是通过大型预训练语言模型(如BERT、GPT等)生成的向量,这些向量能够表示词汇、句子或段落的语义内容。这些向量可以用于各种下游任务,如文本相似性比较、语义搜索、机器翻译等。
查询向量(Query Vector):Query Vector(查询向量)是自然语言处理(NLP)和信息检索领域中的一个概念,它指的是将用户的查询(即问题或搜索请求)转换成数值向量的形式。这种转换使得计算机能够通过向量空间模型来处理和理解用户的查询意图,并利用这些向量来执行搜索、匹配或推荐等任务。
五、几种调用模式
模式一:非结构化数据通过Embedding Model把非结构化数据进行embedding存到向量数据库中,然后形成Construct Prompts给到LLM。LLM返回结果给到用户。
模式二:用户提出问题,下一步把问题通过Embedding Model向量化,然后保存到长时记忆数据库(向量数据库)中,然后调用LLM完成问题的回答,接下来将大模型的回答存到长时记忆数据库中,最后返回给用户。
模式三:用户问问题,下一步把问题通过Embedding Model向量化,然后从Cache中(向量数据库)查询类似的问题和答案,返回给用户。如果没有命中,则去和LLM交互。然后把LLM的回答存到Cache中,最后把回答返回给用户。
这三种形式就是典型的RAG的调用模式。它可以解决不同类型的数据如何让大模型知道的问题,同时在性能和效率上得到了提高,解决了长时记忆的问题,幻觉问题也有很大改善。
检索增强生成 vs. 微调
与对基座大语言模型预训练或有监督微调(Supervised Fine-Tuning,SFT)等传统方法相比,RAG提供了一种经济高效的替代方法。RAG从根本上增强了大语言模型在响应特定提示时直接访问特定数据的能力。为了说明 RAG与其他方法的区别,请看下图。雷达图具体比较了三种不同的方法:预训练大语言模型、预训练+微调LLM、预训练+RAG LLM。
参考文献:
1. https://aws.amazon.com/cn/what-is/retrieval-augmented-generation/
2. https://baoyu.io/translations/rag/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation
3. https://github.com/wdndev/llm_interview_note/tree/main
4. https://www.youtube.com/watch?app=desktop&v=4PdQ_7sCFYY
THE END !
文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。