来源:互联网 更新时间:2026-07-31 13:55
RAG(检索增强生成)这个概念,最早是Meta在2020年那篇著名的《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》里提出来的。简单说,就是让大模型不局限于自己脑子里那点东西,能从外部知识库里现查现用。在大模型时代,这招儿简直是解决幻觉问题、知识过时、处理超长文本这些系统级问题的“标配”技术了。
不过,理想很丰满,现实很骨感。RAG真正落地的时候,挑战主要集中在三个环节:检索够不够准、增强过程够不够顺、生成质量够不够好。
面对这么多挑战,一个健壮的RAG系统应该是什么样的?我们来看看一个典型的分层架构。
放眼望去,整个产品架构大致分四层:
如果从技术实现的角度来看,RAG的核心可以拆成三个部分:Query理解、检索模型和生成模型。
说白了,RAG就是让检索的“准确”和生成的“创意”互补,用知识库给大模型“打底”,让它说话更有根有据。
很多RAG系统效果不好,根子就在Query理解上。用户提问的方式可能不适合检索,或者需要从问题里提取出结构化的查询条件。所以,我们得在这里下功夫。
简单说,就是判断用户想干什么。比如,用户是想要一段摘要,还是要一个具体的答案?这通常可以用LLM来做决策(把各种选择都塞到Prompt里让它选),也可以单独训练一个传统的分类模型(比如基于Bert的意图分类器)。它的应用场景很广,比如决定从哪个数据源查、该用摘要还是搜索策略、要不要同时试好几个方案。
原始的用户问题,往往不是最优的检索词。所以,我们要利用LLM来“润色”一下。
遇到复杂问题怎么办?“分而治之”是个好办法。把一个大问题拆成几个小的、更具体的子问题,分别去搜,最后再把结果组装起来。
在实际的pipeline里,我们把这些思想综合起来,自研了一个“Query重构”模块。只需要一次请求,就能把用户的复杂问题同时完成改写、拆解和拓展,挖掘出更深层次的子问题,一举解决复杂问题检索不准的痛点。
检索这个环节,挑战也很直接:Embedding模型向量化得准不准?文档切分得合不合理?还有,当把搜到的内容拼接成Prompt送给大模型时,它能不能在长上下文中“一眼”就定位到真正有用的信息?《Lost in the Middle》那篇论文就专门指出过,大模型对长上下文中间位置的信息很“迟钝”,放在开头或结尾的信息才容易被它采纳。
这个模块负责把各种来源(.txt文件、网页、甚至YouTube视频的字幕)的文档数据加载进来,变成文本和元数据。它还支持“懒加载”,避免一下子把所有东西都塞到内存里。
加载进来的文档不能直接用,得先“切块”。这个切块是个技术活,理想情况是把语义相关的片段放在一起,还要控制块的大小,确保能塞进模型的上下文窗口。常见的切分方式有:按字符递归切分(最推荐)、按HTML/Markdown标签切分(能保留结构化信息)、按代码语言切分、甚至按Token数量切分。有个叫Chunkviz的开源工具可以帮你可视化这个过程,调整参数。
这是将文本转化为向量表示的核心。一个理想的嵌入模型,应该具备跨语种关联能力(比如“苹果”和“Apple”),能把长原文和短摘要关联起来,能把不同表述但语义相同的文本关联起来,能把问题和可能的答案文本关联起来。更重要的是,检索出来的结果,越靠前的越有用,最好还能自动过滤掉低质量的片段。
数据处理好后,就要建立索引来支持快速检索了。常见的索引结构有:摘要索引(按顺序存)、树索引(构建层级摘要树,便于高层检索)、关键词表索引(建立关键词到文档块的多对多映射)、以及目前最主流的向量索引(用向量相似度来匹配)。
搜出来一堆结果,总得排个队吧。常用的策略有:按相似度分数过滤、按关键词过滤、让LLM自己给结果打分重排、按时间过滤、或者按时间对相似度加权排序等等。
拿到检索出来的文本块,怎么喂给大模型生成回答?有两种常见思路:一种是“吃一口,想一步”,每拿一个块就让大模型修正一次答案;另一种是“吃饱再想”,一次性把所有块都塞进Prompt,让大模型一次性生成。实践中也可以组合使用。
如何把系统指令、检索到的文档、历史对话和用户问题组装成一个有效的Prompt?常用的有字符串提示(直接把所有模板拼起来)和聊天提示(按消息列表来组织,比如SystemMessage, HumanMessage, AIMessage等)。
这个听起来有点绕,其实就是在做RAG的时候,不仅检索知识库,还检索“过往的成功问答案例”(示范性示例)。把和当前问题最相似的几个问答对也一起塞进Prompt,让大模型模仿着回答。但问题来了,怎么找到最合适的示例?单靠一种检索方法(比如纯语义检索或纯文本检索)效果不够好。
我们的解法是搞了一个“混合检索+重排”的插件模块。
采用多路召回。语义检索用双塔模型(比如OpenAI的embedding-ada),文本检索用BM25。这样既能捕捉语义相似,又能确保关键词匹配,互补短板。
多路召回的结果怎么融合?不同算法的分数区间不一样,不能直接比。我们引入了一个很有效的融合算法——倒数排名融合。它不看分数,只看排名,把各个算法给候选示例的排名位置综合起来,算出个新分数。然后,考虑到大模型“偏食”开头和结尾的特点,我们不是简单地按新分数排序,而是把结果“两头填”。比如排好的12345,重排后变成13542,确保最重要的信息被放到大模型最容易看到的两端。
最后,把重排好的示例、系统Prompt、长期/短期对话记录、以及用户当前问题,一起组装成一个Prompt,送给大模型生成最终的答案。
让模型“说人话”还不行,还得让它“有理有据”。归因,就是让生成的答案能指向知识库中的具体来源,这不仅能提高用户的信任感,也是减少幻觉的有效手段。
如何实现?目前主要有两种做法。一种是
做开发的同学都听过TDD,做AI应用也得有MDD(指标驱动开发)的意识。理想情况是先把场景、数据、指标、目标分值都定好,然后一步步实现。但现实往往是场景不清、数据难洗、指标没想过。
那该怎么量化证明你的RAG系统比别人的牛?核心要关注这几个方面对系统性能的影响:位置偏见(大模型偏爱开头和结尾),检索内容的相关性(不相关的内容就是噪音)。
大模型这波浪潮,催生出来的技术细节实在太多了。从Query理解到检索,再到生成和评估,每个环节想要做到极致、符合企业级应用,都需要花很长时间去研究、去实践、去打磨。这篇文章就是我们团队在过去一年RAG实践中的一些核心模块总结,希望能给你带来一些启发。
摩托车活塞环性能如何
ThinkBook系列最新价格全解析:2026年选购避坑与实时询价指南
Ondo将于今日上线股票永续合约
暗黑4S14野蛮人终局BD攻略
区块链OTC交易所有哪几家比较正规?
Binance新增15种bStocks代币化证券为杠杆抵押资产
货拉拉如何查看历史订单 货拉拉往期行程轨迹查询【功能教学】
Meme币DOGS今晚上线!开局就解锁91%代币是否带来风险?
晶核艾尔莎角色盘点 晶核艾尔莎强度分析与实战表现
剑侠世界3雪峰论剑怎么打-剑侠世界3雪峰论剑打法介绍
五千元以下的笔记本几乎消失!经销商:至少一年看不到涨价尽头
Intel喜讯连连:18A工艺良率提升到85%、CPU将涨价15%
今日小鸡庄园答案2026.7.2
美债股纳斯达克首盘暴跌38%且加密代理交易解体,AVAX价格何去何从?
男生头像配网名可爱(精选100个)
赵云与阿斗神兵符使用教程 神兵符怎么使用
国家养老服务消费补贴上线京东
余姚的路虎4s店在哪个位置
英伟达机器人团队在京沪深招人,聚焦具身智能等四大领域
一站式PDF转Markdown解决方案PDF3MD
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc