微信扫码
添加专属顾问
我要投稿
掌握人工智能新趋势,RAG技术开启信息检索新篇章。 核心内容: 1. RAG技术原理及其在信息检索中的应用 2. RAG解决大模型局限性的策略与实现 3. 关键技术解析与评估方法,助力技术人应用实践
结合笔者这一段对于大模型和AI技术的一些学习以及对基于AI改造的诸多实际应用场景的了解。于是就写了这篇文章。另外,本篇文章不会用过多的篇幅来讲算法基础的内容,而把重点放在AI应用的核心技术概念的理解上。
想必大家在刚开始阅读人工智能相关的文章或书籍的时候,总是听到诸如LLM,chatGPT,RAG,Agent等等的术语,但是不知道这些术语对应的技术点关联性在哪里,没关系,咱们首先来学习下这些术语的定义:
AI:Artificial Intelligence的缩写,指“人工智能”,人工智能是指模拟人类智能的计算机系统或软件,使其能够执行诸如学习、推理、问题解决、感知、语言理解等复杂任务。
生成式AI:是一种人工智能技术,能够自动生成新的内容,如文本、图像、音频和视频等。与传统的AI不同,生成式AI不仅能分析和理解数据,还能基于其学习到的信息创造出新的内容。
AIGC:AI Generated Content的缩写,意指由人工智能生成的内容。在算法和数码内容制作领域,AIGC 涉及使用人工智能技术生成各种形式的内容,比如文字、图像、视频、音乐等。
NLP:Natural Language Processing的缩写,指“自然语言处理”,自然语言处理是人工智能的一个子领域,主要研究计算机如何理解、解释和生成人类语言。NLP技术包括文本分析、语言生成、机器翻译、情感分析、对话系统等。
Transformer:一种用于自然语言处理(NLP)任务的深度学习模型,最初由Vaswani等人在2017年的论文中提出。它引入了一种名为“自注意力”(self-attention)的机制,能够有效地处理序列数据,且在许多NLP任务,如机器翻译、文本生成和语言建模中取得了巨大的成功。
BERT:Bidirectional Encoder Representations from Transformers的缩写,是一种自然语言处理(NLP)的预训练模型。它由 Google AI 研究团队于2018年首次提出。BERT 的主要创新在于它使用了双向(即上下文敏感)的Transformer模型来对文本进行编码。
PEFT:Parameter-Efficient Fine-Tuning的缩写,中文高效参数微调,这是一种微调机器学习模型的方法,旨在减少需要更新的参数数量,从而降低计算成本和存储需求,同时保持模型性能。PEFT 技术在大型预训练模型(如 BERT、GPT 等)的下游任务适配中尤为重要,因为直接微调这些模型可能会耗费大量计算资源和时间。
LoRA:Low-Rank Adaptation的缩写,一种用于微调大规模语言模型的一种技术。它通过将模型的权重分解成低秩矩阵来显著减少参数数量和计算开销,从而使得模型在资源受限的环境中也能进行高效的适应性调整。
LLM:Large Language Model的缩写,指“大语言模型”,这类模型是基于机器学习和深度学习技术,特别是自然语言处理(NLP)中的一种技术。大语言模型通过大量的文本数据进行训练,以生成、理解和处理自然语言。一些著名的 LLM 示例包括 OpenAI 的 GPT(Generative Pre-trained Transformer)系列模型,如 GPT-3 和 GPT-4
RAG:Retrieval-Augmented Generation的缩写,指“检索增强生成”,这是一个跨越检索和生成任务的框架,通过先从数据库或文档集合中检索到相关信息,然后利用生成模型(如Transformer模型)来生成最终的输出。目前在技术发展趋势和应用落地上,RAG是工程同学较为值得探索的领域。
Agent:中文叫智能体,一个能独立执行任务和做出决策的实体,在人工智能中,Agent可以是一个机器人,一个虚拟助手,或是一个智能软件系统,它能够通过学习和推理来完成复杂任务。在多Agent系统中,多个独立的Agents相互协作或竞争,以共同解决问题或完成任务。
GPT:Generative Pre-trained Transformer的缩写,指“生成式预训练变换器”,GPT 模型利用大量文本数据进行预训练,然后可以通过微调来执行特定任务,例如语言生成、回答问题、翻译、文本摘要等。
LLaMA:Large Language Model Meta AI的缩写,是由Meta开发的一系列大型自然语言处理模型。这些模型在处理文本生成和理解任务方面表现出色,类似于其他著名的大型语言模型如GPT-3
chatGPT:由 OpenAI 开发的一种基于 GPT(生成预训练变换模型)架构的人工智能聊天机器人。它使用自然语言处理技术,能够理解并生成类似人类的文本回复。可以看做是一种Agent。
Prompt:指的是提供给模型的一段初始文本,用于引导模型生成后续的内容。
Embedding:中文叫嵌入,是一种将高维数据映射到低维空间的技术,但仍尽可能保留原数据的特征和结构。嵌入技术通常用于处理和表示复杂的数据如文本、图像、音乐以及其他高维度的数据类型。
大模型应用发展趋势
IDC DataSphere 数据显示,到2027年全球非结构化数据将占到数据总量的86.8%,达到246.9ZB;全球数据总量从103.67ZB增长至284.30ZB,CAGR为22.4%,呈现稳定增长态势。
Link:https://www.idc.com/getdoc.jsp?containerId=prCHC51814824
通常,为了更有效地管理非结构化数据,常见的做法是将其转换为向量表示,并存储在向量数据库中。这种转换过程通常被称为向量化或嵌入(Embedding)。通过将文本、图像或其他非结构化数据映射到高维向量空间,我们可以捕捉数据的语义特征和潜在关系。向量数据库通过在「向量表示」上构建索引,实现快速的相似性搜索。
向量数据库是用于存储和查询高维向量数据的数据库,通常在搜索、推荐系统、图像识别、自然语言处理等领域中广泛使用。随着AI创新应用的不断涌现,对于向量数据库需求也大增。
1. Faiss (Facebook AI Similarity Search):
开发者:Facebook AI Research
特点:高效的相似性搜索和密集向量聚类,支持CPU和GPU加速。
适用场景:图像相似性搜索、大规模推荐系统等。
2. Annoy (Approximate Nearest Neighbors Oh Yeah):
开发者:Spotify
特点:基于内存的高效最近邻搜索,使用构建的可持久化树数据结构。
适用场景:音乐推荐、快速搜索等。
3. HNSW (Hierarchical Navigable Small World):
开发者:Yury Malkov(和其他社区贡献者)
特点:小世界图算法,高效的近似最近邻搜索,支持动态插入和删除。
适用场景:实时搜索和推荐系统。
4. Elasticsearch with k-NN Plugin:
开发者:Elastic
特点:在Elasticsearch之上添加k-NN搜索功能,结合全文搜索和向量搜索。
适用场景:综合搜索引擎,需要同时支持文本和向量查询的场景。
5. Milvus:
开发者:ZILLIZ
特点:分布式、高性能向量数据库,支持大规模数据管理和检索。
适用场景:图像、视频、文本等大规模向量数据的存储和检索。
6. Pinecone:
开发者:Pinecone
特点:专用于机器学习应用程序的向量数据库,易于集成和扩展。
适用场景:个性化推荐、语义搜索、实时机器学习应用等。
7. Weaviate:
8. Vectara:
上述所提到的目前主流的向量数据库方案,在向量数据的存储成本、召回率等方面都面临较大的挑战。随着非结构化数据的进一步增长,成本和召回率的挑战会变得越来越棘手。在向量数据库的演讲方向上目前有以下发展趋势
量化技术:使用向量量化(Vector Quantization, VQ)技术,例如产品量化(Product Quantization, PQ)或乘积量化(Additive Quantization, AQ),可以在保证精度的同时大幅度减少存储和计算资源。
压缩向量:采用哈希方法如局部敏感哈希(Locality-Sensitive Hashing, LSH)来减少存储消耗,并加速相似性搜索。
分布式存储:使用分布式文件系统和数据库(如Apache Hadoop、Cassandra)可以优化存储和查询的大规模向量数据。
存储器级别调整:利用固态硬盘(SSD)甚至是新兴的持久化内存(Persistent Memory, PMEM)来在内存和磁盘之间找到平衡,优化存储成本。
混合搜索技术:结合粗粒度和细粒度的索引,例如先使用粗滤技术快速缩小搜索范围,然后进行精确查找。
近似最近邻查找(ANN)算法:如HNSW(Hierarchical Navigable Small World)图、FAISS中使用的ANN算法可以在保证高召回率的基础上优化搜索速度。
多层次检索:分层结构的检索方法,从粗到细进行,逐步提高召回率和精度。
云计算和弹性扩展:利用云计算平台(如AWS、Azure、GCP),按需扩展计算和存储资
RAG的工作流程涉及3个主要阶段:数据准备、数据召回和答案生成。数据准备阶段包括识别数据源、从数据源提取数据、清洗数据并将其存储在数据库中。数据召回阶段包括根据用户输入的查询条件从数据库中检索相关数据。答案生成阶段则是利用检索到的数据和用户输入的查询条件生成输出结果。输出质量的高低取决于数据质量和检索策略。
根据LLM需要处理的任务类型,数据准备通常包括识别数据源、从数据源中提取数据、清洗数据并将其存储在数据库中等环节。用于存储数据的数据库类型和准备数据的步骤可能会因应用场景和检索方法的不同而有所变化。例如,如果使用像Faiss这样的向量存储库,需要为数据创建嵌入并将其存储在向量存储库中;如果使用像Elasticsearch这样的搜索引擎,需要将数据索引到搜索引擎中;如果使用像Neo4j这样的图数据库,需要为数据创建节点和边,并将它们存储到图数据库中。
数据召回部分的主要任务是从大型文本数据库中检索与输入关的信息。为了尽可能保证正确答案被送入生成器部分,数据召回部分的召回率显得非常重要。一般来说,召回的数量越大,正确答案被召回的概率也就越高,但同时会面临大模型上下文长度限制的问题。
许多开源博客或框架在这部分的流程中都采用向量搜索出最相近的k个候选。例如,如果我们正在构建一个问答系统,并使用向量数据库存储相关数据块,可以为用户的问题生成向量,对向量数据库中的向量进行相似性搜索并检索最相似的数据块。除此之外,还可以根据用户问题,对同一数据库进行混合搜索或使用多个数据库进行搜索,并将结果组合起来作为生成器的上下文进行传递。
关于检索这部分,还有许多提高检索效果的技巧,这会引入更多的小模块,例如候选重排、大模型辅助召回等,这些都属于数据检索的范畴。
一旦检索到用户问题相关的数据片段,RAG系统就将其与用户的问题和相关数据一起传递给生成器(LLM)。LLM利用检索到的数据和用户的查询或任务生成输出。输出的质量取决于数据的质量和检索策略,同时生成输出的指令也会极大地影响输出的质量。
RAG的优缺点
前面介绍了RAG的基础内容,下面来具体梳理一下RAG的优点。
RAG的一个优点是它能够生成高质量的回答。因为在生成过程中,检索器可以从大量文档中检索问题相关的信息,然后基于这些信息生成回答。这使得整个系统能够充分利用现有知识生成更准确、更具深度的回答,也意味着模型出现幻觉答案的概率更小。
RAG展示了出色的可扩展性,这意味着它能够轻松适应新数据和任务。利用RAG的检索—生成框架,只需更新检索部分的数据,模型便可适应新的知识领域。这使得RAG能够在面对新领域或不断变化的知识库时保持高度的适应性。
RAG具有一定程度的可解释性,这意味着我们可以理解模型是如何生成回答的。由于RAG的特性,我们可以很容易地追溯模型是从哪些文档中提取信息的。这使得我们可以评估模型的回答是否基于可靠的数据来源,从而提高模型的可信度。
由于RAG的知识库能够与生成模型解耦,因此只要拥有一定的数据量,企业便可将RAG作为微调的替代方法,而微调可能需要大量资源。这种模式对中小企业非常友好。从另一个角度来看,由于企业的数据都是私有的,提供相关文档作为背景信息可以使生成结果更加准确、更具实用性,以满足企业的特定任务需求。
RAG系统给出的答案极其依赖于检索的质量。如果检索到的文档与问题无关或质量较低,生成的回答也可能质量较低。如果搜索的文档并未覆盖到问题的答案,那模型也基本无法回答用户提出的问题。因此,在实际应用中,我们会利用很多策略来提高文档片段的召回率。在很多场景中,文档片段的时效性也是要考虑的一部分,例如金融场景,用户咨询10月份的金股是什么,如果召回片段不包含10月份的券商金股研报,甚至召回很多旧的金股研报,那对最后的大模型生成会产生很大的干扰。还有很多其他的召回情况都会影响到模型的结果生成,因此想构建一个好的RAG系统,检索部分是极其重要的,需要花费大量的时间来打磨。
RAG依赖于一个现有的文档数据库进行检索。首先,如果没有一个大规模的知识库,就无法发挥RAG的优点。其次,如果知识库覆盖面不够,无法召回相应的知识块,那么模型因为需要遵循指令的约束而无法给出答案,这就会影响到整个系统的问题覆盖率。
由于RAG系统需要先检索文档,然后生成答案,相比于纯粹的大模型推理,整个系统的推理耗时会更长。在这种情况下,对于一些延时要求高的场景就无法满足需求。不过这个耗时问题属于大模型的通病,在使用网页端ChatGPT的时候,它以流式打字机的模式展示并按字来输出结果,所以用户可能不会感觉很慢,但如果统计从问题发送到答案完整生成这个过程,耗时还是非常长的。
召回模块输出的文档片段数量需要考虑到生成模型能处理的最大长度,例如最早的ChatGPT(GPT-3.5-turbo)的最大上下文长度是4096个token。如果你的文档片段是512个token的长度,那实际上需要使用8个片段(512×8 = 4096),所以召回部分就需要考虑如何在这8个片段中把召回率做到最优。不过也有其他的折中方案,可以召回更多的文档片段。例如,可以采用对检索的文档片段进行压缩,借助大模型进行要点总结之类的策略。也可以对生成端的模型应用长度外推技巧,现有的长度外推策略已经比较成熟,有很多非常优秀的外推策略,可以让模型推理的长度远远超过训练阶段的长度。
提示词工程(Prompt Engineering)是一种在人工智能和自然语言处理领域中开发和设计提示词(Prompts)以引导大型语言模型(例如GPT-3等)产生特定输出的方法。通过精心构建和优化提示词,用户可以更有效地获得所需的答案、生成文本或执行其他自然语言处理任务。
提示词工程的关键在于找到合适的语言和结构来清晰地表达问题或任务,使得模型可以更准确地理解并给出相关的回应。这可能涉及反复试验、调整提示词的细节,以及利用对模型行为的理解来优化结果。接下来通过一些基础案例介绍如何优化Prompt使得大模型更好的回答我们的问题。
▐ 模型微调
QLoRA(Quantized LoRA)
QLoRA是模型量化和 LoRA 的结合。除了增加了 LoRA 旁路,QLoRA 在加载时将大模型量化成 4bit 或者 8bit,但在计算时,又将该部分的参数反量化成 16bit 进行计算,其优化了非使用状态模型参数的存储,与 LoRA 相比进一步降低训练时显存消耗。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-03-29
RAGFlow自动化脚本套件:自定义解析+回答质量评估+参数自动调优
2025-03-29
万字长文:说清MCP的前世今生+RAGFlow整合应用示例
2025-03-29
三种RAG部署方案:自购GPU硬件 vs 大模型一体机 vs 云端GPU
2025-03-29
RAG维保案例分享:如何实现"文+图"的答案呈现
2025-03-29
RAG检索不过关?试试这些优化策略,精准度飙升!
2025-03-29
RAG检索全攻略:Embedding与Rerank模型的终极指南
2025-03-29
5.6K+ Star!R2R:一个支持RAG的AI检索系统
2025-03-29
这就是AI智能体的记忆机制原理
2024-10-27
2024-09-04
2024-07-18
2024-05-05
2024-06-20
2024-06-13
2024-07-09
2024-07-09
2024-05-19
2024-07-07
2025-03-28
2025-03-27
2025-03-27
2025-03-25
2025-03-19
2025-03-18
2025-03-18
2025-03-15