news 2026/4/13 3:39:56

【技术收藏】检索增强生成(RAG)核心技术:提升大模型性能的实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【技术收藏】检索增强生成(RAG)核心技术:提升大模型性能的实战指南

在大型语言模型(LLM)的浪潮中,我们惊叹于其强大的生成能力。然而,LLM也面临着知识截止、幻觉(Hallucination)和缺乏领域专业知识等固有挑战。为了克服这些问题,检索增强生成(Retrieval-Augmented Generation, RAG)技术应运而生,并迅速成为构建知识密集型、可靠且可信的AI应用的核心技术。

RAG通过在LLM生成答案之前,先从外部知识库中检索相关信息,从而将LLM的参数化知识与实时的、动态的非参数化知识相结合。这不仅显著减少了模型的“幻觉”,还使其能够提供更准确、更具上下文、可溯源的答案。RAG系统的性能高度依赖于其“检索(Retrieval)”环节的质量。检索越精准,生成越可靠

第一部分:RAG的基础与演进——从Naive RAG到Advanced RAG

1.朴素RAG (Naive RAG) 的工作流程

一个基础的RAG系统通常包含三个核心步骤:

  • 索引 (Indexing):将知识源(如文档、网页、数据库)进行预处理。

  • 加载 (Loading):读取原始数据。

  • 切分 (Splitting):将长文档切分成更小的、易于检索的文本块(Chunks)。

  • 编码 (Embedding):使用一个编码模型(如BERT, Sentence-BERT)将每个文本块转换成高维向量(Vector)。

  • 存储 (Storing):将文本块及其对应的向量存储在专门的向量数据库(Vector Database)中,如FAISS, Milvus, Pinecone。

  • 检索 (Retrieval):当用户提出问题时,执行以下操作。

  • 查询编码:将用户的问题(Query)同样用编码模型转换成向量。

  • 向量搜索:在向量数据库中,使用相似性搜索算法(如余弦相似度)找出与查询向量最相似的Top-K个文本块向量。

  • 获取上下文:提取这Top-K个文本块的原始内容作为LLM的上下文。

  • 生成 (Generation):

  • 构建Prompt:将用户原始问题和检索到的上下文信息整合成一个精心设计的提示(Prompt)。

  • LLM生成:将该提示输入给LLM,由LLM基于提供的上下文生成最终答案。

朴素RAG的局限性:

虽然简单有效,但Naive RAG在面对复杂查询和庞大知识库时,其检索性能往往会遇到瓶颈,导致以下问题:

  • 低精度 (Low Precision):检索到的文本块虽然相关,但不包含具体答案。
  • 低召回率 (Low Recall):相关的文本块未能被成功检索出来。
  • 信息过时:知识库更新不及时。
  • 上下文整合不佳:多个检索结果之间可能存在矛盾或冗余。

为了解决这些问题,高级RAG (Advanced RAG)模块化RAG (Modular RAG)的概念应运而生。它们的核心思想是在朴素RAG的流程中引入更复杂的策略和模块,以优化检索质量。

第二部分:揭秘检索性能巅峰——当前最强的RAG技术

当前,提升RAG检索性能的研究主要集中在三个方向:优化索引改进检索过程后处理检索结果。以下是目前被验证为效果最好的几种前沿技术。

1.混合搜索 (Hybrid Search): 融合词法与语义的力量

理论核心:

向量搜索(语义搜索)擅长理解查询的“意图”,但有时会忽略关键词的精确匹配。例如,对于查询“Apple Vision Pro的价格”,向量搜索可能会找到关于“Apple Watch功能”的文档,因为它们在语义上相关。而传统的关键词搜索(词法搜索),如BM25算法,则能精确匹配“Apple Vision Pro”和“价格”这两个关键词。

混合搜索结合了这两种方法的优点:

  • 词法搜索 (Lexical Search):基于关键词频率和文档频率,如BM25TF-IDF。它擅长精确匹配术语、名称、缩写等。
  • 语义搜索 (Semantic Search):基于向量嵌入的相似度计算。它擅长理解同义词、近义词和上下文语境。

通过一个加权融合策略(如Reciprocal Rank Fusion, RRF),将两种搜索的排序结果合并,能够显著提升检索的准确性和鲁棒性。

应用实例与代码(以LlamaIndex为例):

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader from llama_index.core.retrievers import BM25Retriever from llama_index.core.retrievers import VectorIndexRetriever from llama_index.core.retrievers import QueryFusionRetriever from llama_index.core import Settings from llama_index.embeddings.huggingface import HuggingFaceEmbedding from llama_index.llms.openai import OpenAI # 1. 配置模型 Settings.llm = OpenAI(model="gpt-4-turbo") Settings.embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-large-en-v1.5") # 使用一个强大的嵌入模型 # 2. 加载和索引文档 documents = SimpleDirectoryReader("./data").load_data() index = VectorStoreIndex.from_documents(documents) # 3. 创建不同的检索器 vector_retriever = VectorIndexRetriever(index=index, similarity_top_k=5) bm25_retriever = BM25Retriever.from_defaults(docstore=index.docstore, similarity_top_k=5) # 4. 创建混合搜索检索器 (Fusion Retriever) # num_queries=1 表示不对原始查询进行变体,直接融合 retriever = QueryFusionRetriever( [vector_retriever, bm25_retriever], similarity_top_k=5, num_queries=1, mode="RRF", # 使用Reciprocal Rank Fusion进行结果融合 ) # 5. 执行查询 query = "What is the price of the Apple Vision Pro?" nodes = retriever.retrieve(query) # 打印检索结果 for node in nodes: print(f"Score: {node.score:.4f}") print(f"Content: {node.get_content()}")
2.重排模型 (Re-Ranking): 精炼检索结果的最后一道防线

理论核心:

第一阶段的检索(无论是向量搜索还是混合搜索)旨在快速、广泛地从海量数据中召回一个候选集(例如Top-20或Top-50的文档)。这个阶段追求的是“召回率”,可能会包含一些噪声。

重排模型(Re-Ranker)则扮演了“精炼者”的角色。它是一个更小、更专业的模型,其唯一任务是对第一阶段检索出的文档候选集进行重新排序。它通常使用更复杂的交叉编码器(Cross-Encoder)架构,同时处理查询(Query)和每个候选文档(Document),从而更精确地计算它们之间的相关性得分。

与使用单一编码器(Bi-Encoder)分别编码查询和文档的嵌入模型相比,交叉编码器由于能同时看到两者,其相关性判断能力要强大得多,但计算成本也更高。因此,它非常适合用于小规模候选集的精排阶段。

应用实例与代码(使用Cohere Re-rank或开源模型):

from llama_index.core.postprocessor import CohereRerank # 使用Cohere的API # 或者使用开源模型 # from llama_index.core.postprocessor import SentenceTransformerRerank # ... 接上文的检索器 ... # 假设我们使用vector_retriever作为基础检索器 base_retriever = VectorIndexRetriever(index=index, similarity_top_k=10) # 初始召回10个 retrieved_nodes = base_retriever.retrieve(query) # 1. 初始化重排模型 # reranker = SentenceTransformerRerank(model="cross-encoder/ms-marco-MiniLM-L-12-v2", top_n=3) reranker = CohereRerank(api_key="YOUR_COHERE_API_KEY", top_n=3) # 精排后只保留最好的3个 # 2. 对检索结果进行重排 reranked_nodes = reranker.postprocess_nodes(retrieved_nodes, query_str=query) # 打印重排后的结果 print("--- Reranked Results ---") for node in reranked_nodes: print(f"Score: {node.score:.4f}") print(f"Content: {node.get_content()}")
3.查询转换 (Query Transformations): 理解用户的真实意图

理论核心:

用户的原始查询往往是模糊、简单或者充满口语化的。直接用这样的查询去检索,效果可能不佳。查询转换是一系列旨在优化、扩展和重写用户查询的技术,以更好地匹配知识库中的文档。

目前效果最好的几种查询转换技术包括:

  • 多查询生成 (Multi-Query Generation):使用LLM将一个复杂的用户查询分解成多个独立的、更具体的子查询。例如,将“对比RAG和Finetuning的优缺点”分解为“RAG的优点是什么?”、“RAG的缺点是什么?”、“Finetuning的优点是什么?”等。分别对这些子查询进行检索,然后合并结果,可以极大地提高召回率。
  • 假设性文档嵌入 (HyDE - Hypothetical Document Embeddings):这是一种非常巧妙的技术。它首先让LLM根据用户的查询,生成一个“假设性”的、理想的答案文档。然后,将这个生成的假文档进行编码,用其向量去检索真实的文档。其背后的逻辑是,一个理想答案的向量表示,会比原始问题的向量表示更接近知识库中真实答案文档的向量。
  • 步退提示 (Step-Back Prompting):同样利用LLM,引导它从具体的问题“后退一步”,生成一个更宽泛、更高层次的抽象问题。例如,用户问“如何修复我的Python代码中的KeyError?”,LLM可以生成一个更高层次的问题:“Python字典中KeyError的常见原因是什么?”。用这个抽象问题去检索,可以找到更具普适性和原理性的知识,为最终答案提供更好的背景信息。

应用实例与代码(以LlamaIndex的Multi-Query为例):

from llama_index.core.query_engine import RetrieverQueryEngine from llama_index.core.response_synthesizers import get_response_synthesizer from llama_index.core.retrievers import MultiQueryRetriever # ... 接上文的索引设置 ... # 1. 创建基础检索器 base_retriever = VectorIndexRetriever(index=index, similarity_top_k=3) # 2. 创建MultiQueryRetriever # LLM会被用来生成多个查询变体 retriever = MultiQueryRetriever.from_defaults( retriever=base_retriever, llm=Settings.llm, ) # 3. 构建查询引擎 response_synthesizer = get_response_synthesizer() query_engine = RetrieverQueryEngine( retriever=retriever, response_synthesizer=response_synthesizer, ) # 4. 执行查询 response = query_engine.query("What are the pros and cons of RAG vs Finetuning?") print(response)
4.自适应检索 (Self-Corrective / Adaptive RAG): 让RAG系统学会反思

理论核心:

传统的RAG流程是线性的、一次性的。而自适应RAG引入了一个“反思-修正”的循环,让系统能够自我评估检索到的文档质量,并根据评估结果决定下一步的行动。这使得RAG系统更加智能和动态。

Self-RAGCorrective-RAG (CRAG)是该领域的代表性框架。其核心思想是:

    1. 评估检索结果:在检索到一批文档后,引入一个轻量级的“评估器”模型(或使用LLM本身),对每个文档与查询的相关性进行打分。常见的评估维度包括:
  • 相关性 (Relevance):文档是否与查询直接相关?
  • 支持性 (Support):文档内容是否能支持生成一个具体的答案?
  • 无用性 (Irrelevance):文档是否完全不相关?
    1. 决策与行动:根据评估结果,系统可以做出不同的决策:
  • 如果文档质量高:直接将这些文档送入LLM生成答案(就像标准RAG)。
  • 如果文档模棱两可或不完全相关:触发一个修正步骤,例如进行Web搜索来获取最新的、更全面的信息,或者对查询进行重写,然后再次进行检索。
  • 如果文档完全不相关:忽略这些文档,或者直接告诉用户无法回答,而不是生成一个基于错误信息的“幻觉”答案。

这种自我修正的能力,极大地提升了RAG系统在面对复杂、开放域问题时的鲁棒性和准确性。

应用流程图(伪代码):

function Adaptive_RAG(query): # 1. 初始检索 retrieved_docs = retrieve(query) # 2. 评估每个文档 evaluations = [] for doc in retrieved_docs: score = evaluate_relevance(query, doc) evaluations.append((doc, score)) # 3. 决策 high_quality_docs = [doc for doc, score in evaluations if score == "highly_relevant"] ambiguous_docs = [doc for doc, score in evaluations if score == "ambiguous"] final_context = [] if len(high_quality_docs) > 0: final_context.extend(high_quality_docs) # 如果高质量文档不足,或者存在模棱两可的文档,进行修正 if len(high_quality_docs) < THRESHOLD or len(ambiguous_docs) > 0: # 修正策略1:重写查询并再次检索 new_query = rewrite_query(query, ambiguous_docs) corrected_docs = retrieve(new_query) final_context.extend(corrected_docs) # 修正策略2:进行Web搜索 web_results = web_search(query) final_context.extend(web_results) # 4. 去重并整合最终上下文 final_context = deduplicate(final_context) # 5. 生成答案 answer = generate_with_llm(query, final_context) return answer

第三部分:构建高性能RAG系统的工程实践与最佳策略

掌握了上述前沿技术后,如何将它们系统性地应用到实际项目中?

    1. 从一个强大的基线开始:
  • 高质量的文本切分 (Chunking):优先选择基于语义的切分策略(如Sentence-Window),而不是简单的固定大小切分。确保每个Chunk都包含完整的语义单元。
  • 顶级的嵌入模型:选择在MTEB (Massive Text Embedding Benchmark) 排行榜上表现优异的模型,如BAAI/bge-large-en-v1.5或最新的CohereVoyageAI提供的商业模型。对领域数据进行嵌入模型的微调(Finetuning)能带来巨大提升。
    1. 分阶段引入高级策略(A/B测试验证效果):
  • 第一步:引入混合搜索。这是性价比最高的提升,能立刻改善关键词匹配问题。
  • 第二步:加入重排模型。在召回候选集后进行精排,是提升最终上下文质量的关键一步。
  • 第三步:实现查询转换。对于用户查询意图复杂的场景,Multi-Query或HyDE能显著提高召回率。
  • 第四步:探索自适应检索。如果你的应用需要极高的可靠性,并且允许稍高的延迟,实现一个简单的评估-修正循环将是质的飞跃。
    1. 构建评估框架 (Evaluation Framework):
  • 没有评估,就没有优化。使用Ragas、ARES等开源框架,建立一个自动化的评估流水线。

  • 核心评估指标:

  • Context Precision & Recall:检索到的上下文有多准?有多全?

  • Faithfulness:生成的答案是否忠于提供的上下文?

  • Answer Relevancy:答案是否切题?

    1. 模块化与可组合性:
  • • 使用如LlamaIndex、LangChain这样的框架,它们将各种RAG技术模块化,你可以像搭乐高一样,轻松地组合和试验不同的策略,例如将混合搜索、查询转换和重排模型串联起来。

结论与展望

RAG技术正从一个简单的“检索-生成”流水线,演变为一个复杂、动态、能够自我反思和修正的智能系统。当前检索性能最好的RAG技术,无一不是通过多阶段、多策略的组合来实现的。

对于AI工程师而言,成功的关键在于深刻理解每种技术的适用场景和优缺点,并建立一套科学的评估体系来指导优化方向。从混合搜索重排模型这两个最成熟、效果最显著的技术入手,再逐步探索查询转换自适应检索等更前沿的领域,你将能够构建出真正健壮、可靠且智能的下一代AI应用。

未来,我们可以预见RAG将与Agent技术更紧密地结合,模型不仅会决定检索什么,还会决定何时检索、如何检索、以及如何利用检索结果,甚至会主动更新知识库。RAG的演进之路,才刚刚开始。

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

大模型全套学习资料展示

自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01教学内容

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例:带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

vx扫描下方二维码即可

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:

04视频和书籍PDF合集

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)

05行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!

0690+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)

07 deepseek部署包+技巧大全

由于篇幅有限

只展示部分资料

并且还在持续更新中…

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 1:53:41

毕设项目分享 深度学习驾驶行为识别系统(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 相关技术3.1 Dlib3.2 疲劳检测算法3.3 YOLOV5算法 4 最后 0 前言 &#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两…

作者头像 李华
网站建设 2026/4/5 9:22:32

星轨织纸页,粒子入刊行|物理人专属期刊指南

ISSN印刷版:3078-9451ISSN在线版:无影响因子:0.816研究领域:物理 出版模式:开放获取&#xff08;OA&#xff09;出版周期:1-2个月出刊检索版面要求:5000-12000字符/篇期刊收录:维普VIP 投稿链接&#xff1a;https://guojiqikan.com/推荐码&#xff1a;WQY-06ISSN印刷版:2616-…

作者头像 李华
网站建设 2026/4/10 9:45:15

Obsidian Templater插件:新手也能轻松掌握的智能笔记模板神器

Obsidian Templater插件&#xff1a;新手也能轻松掌握的智能笔记模板神器 【免费下载链接】Templater A template plugin for obsidian 项目地址: https://gitcode.com/gh_mirrors/te/Templater 还在为重复输入相同的笔记格式而烦恼吗&#xff1f;每次创建新笔记都要手动…

作者头像 李华
网站建设 2026/4/8 23:06:54

全面解析Agent Memory:最新最完整的综述,带你深入了解智能体记忆机制!

简介 这篇综述论文系统梳理了AI智能体的记忆机制&#xff0c;从形式、功能和动态三个维度构建了统一的记忆分类学。文章详细解析了符号级、参数化和潜在三种记忆形式&#xff0c;事实、经验和工作三种记忆功能&#xff0c;以及形成、演化和检索的动态过程。指出记忆是AI从静态回…

作者头像 李华
网站建设 2026/4/11 5:34:19

高效PSD导入工具:Unity设计稿转换的完整实践指南

高效PSD导入工具&#xff1a;Unity设计稿转换的完整实践指南 【免费下载链接】UnityPsdImporter Advanced PSD importer for Unity3D 项目地址: https://gitcode.com/gh_mirrors/un/UnityPsdImporter 在Unity游戏开发过程中&#xff0c;PSD导入工具已经成为设计师与开发…

作者头像 李华