大白话讲透RAG!彻底搞懂检索增强生成原理
文章目录
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01
一、先吐槽:大模型的两大经典毛病
不知道你们用AI有没有踩过这俩坑。
第一种,问点新鲜事,它直接摆烂:“我的知识截止到某个时间,这个我不清楚。”
第二种更气人,不清楚就不清楚吧,它还一本正经给你瞎编,逻辑顺得不行,你不核实根本发现不了。
说白了就是:要么装哑巴,要么装懂哥,主打一个薛定谔的靠谱。
为啥会这样?很简单,模型训练的时候学的都是公开旧知识。你公司的内部文档、刚写完的项目代码、小区刚改的物业规定,它见都没见过。
总不能为了这点内容,就把大模型拉回去重新训一遍吧?那成本跟给全公司发双倍年终奖差不多了。
二、RAG 是什么?说白了就是开卷考试
为了解决这个问题,就有了 RAG 这个东西。
全称叫 Retrieval-Augmented Generation,中文叫检索增强生成,名字听着挺高科技,其实原理特别接地气。
拆成三步就是:先找相关资料,再把资料塞给模型,最后让模型照着资料组织答案。
说直白点,就是不让大模型闭卷答题了,提前给它把相关的资料都翻好,摆到它面前,照着抄就行。
模型本身啥新知识也没学会,但架不住它翻书快、抄得工整啊。
三、以前的搜索:只认字,不懂意思
说到找资料,咱们先说说传统的关键词搜索。
就好比你去图书馆找书,跟管理员说“找书名带Vue的”,管理员就把所有带Vue字样的书全给你抱过来。
好使吗?也能用,但有个致命毛病:它只认字面,不懂语义。
你搜“酸辣土豆丝的做法”,它绝对不会给你推“马铃薯家常烹饪指南”。
合着土豆换个马甲叫马铃薯,它就不认得了,跟我那换个发型就认不出员工的领导似的。
只要字面上没匹配到,哪怕意思一模一样,它也假装看不见。
四、语义搜索:终于能看懂人话了
怎么破这个局?靠 Embedding,也就是文本向量化。
这玩意说玄乎也玄乎,说简单也简单:就是给每一段文字,生成一串数字坐标。
语义越接近的文字,在向量空间里的距离就越近。
就好比“土豆”和“马铃薯”,字面长得完全不一样,但意思差不多,所以它们的坐标就住对门。
“Vue”和“前端框架”,哪怕一个字都不重样,语义近,坐标也挨得近。
这样搜索的时候,就不是比有没有相同的字了,是比谁的意思更贴近。
你问“马铃薯怎么做”,系统一算坐标,哦,跟“酸辣土豆丝做法”挨得最近,直接就给你捞出来了。
终于不用跟搜索引擎玩文字抠字眼游戏了。
五、手把手整个最小版语义搜索
光说不练假把式,咱们整个最简单的 demo 感受一下,四步就能搞定。
第一步:准备好接口客户端
先搭好 embedding 接口的调用工具,现在很多平台都兼容 OpenAI 的 SDK,改个请求地址、填个密钥就能用。
友情提示:密钥一定要放环境变量里,别写死在代码里。不然哪天代码不小心传公开仓库了,你就等着收到天价账单吧。
第二步:批量把文章转成向量
写个小脚本,把你库里的每一篇文章,都调用接口生成对应的向量,提前存起来。
相当于提前给每本书都编好语义门牌号,以后搜索直接查门牌号就行,不用每次都重新算一遍。
不然每次搜索都把所有文章算一遍向量,那速度比我下班收拾东西还磨叽。
第三步:把用户问题也转成向量
用户输入问题之后,别着急搜,先把问题也转成向量。
相当于你要找书,先把你想问的话也换成门牌号,这样才能跟书架上的书比远近。
第四步:算相似度,挑最相关的
向量之间怎么比远近?最常用的就是余弦相似度。
不用纠结公式啥意思,你就理解成:看两个向量的方向对不对齐,方向越一致,说明语义越像。
给每篇文章算个相似度分数,排个序,把分数最高的前几个拎出来,就是最相关的内容。
到这一步,咱们就把语义搜索搞定了,也就是 RAG 的前半段:检索。
六、完整的 RAG,还差两步
很多人以为语义搜索就是 RAG,其实不对,这才刚走了三分之一。
完整的 RAG 分三步:检索、增强、生成。
咱们刚才只做完了检索,也就是找到了相关资料。
接下来还要做两件事:
第一,把找到的资料整理好,塞到给大模型的提示词里,这叫“增强”,相当于把参考资料递到模型手里。
第二,让大模型看着这些资料,组织语言生成最终的答案,这叫“生成”。
整个流程串起来就是:用户提问题 → 问题转向量 → 检索相关资料 → 资料塞进提示词 → 大模型输出答案。
全程不用改模型一丁点儿参数,纯纯的开卷考试,资料带够就能答题。
七、RAG 和普通搜索,到底差在哪?
有人说了,这不就是搜索吗?跟普通搜索引擎有啥区别?
区别可太大了。
普通搜索是啥?你搜个问题,它给你甩一堆链接列表,你得自己点开一篇一篇翻,自己总结答案。
相当于你去书店问问题,店员给你抱来十本书,说“答案都在里面了,自己找吧”。
RAG 是啥?你问问题,它自己找资料,自己读完总结,直接给你最终答案。
相当于你雇了个专属助理,你问啥,它自己去翻书,整理好要点告诉你,连书都不用你碰。
所以像企业知识库、客服机器人、文档助手、制度查询这些场景,用 RAG 就特别合适。
谁上班摸鱼的时候愿意翻几十页制度文档啊,直接问一句“报销五千以上走啥流程”,一秒出答案,多爽。
八、真要上线?坑多着呢
刚才那个 demo 看着简单,跑起来也美滋滋,但真要放到生产环境用,那坑可就多了去了。
比如文档怎么切分?切太大了搜不准,切太小了上下文又断了,跟切葱花似的,多一点少一点都不对味。
比如召回几个结果合适?召多了模型记不住,召少了信息不全,跟食堂打饭似的,多了吃不了少了不够吃。
还有要不要做重排序?向量数据库选啥?敏感资料权限怎么控?搜不到资料的时候怎么回答才不瞎编?
说白了,demo 只是个 Hello World,真正的工作量,全在这些细节里。
别觉得写了个语义搜索 demo 就懂 RAG 了,那才刚摸到门槛。
最后唠两句
最后简单总结一下。
Embedding 让文字能按语义攀亲戚,检索把相关的资料捞出来,增强把资料塞给模型,生成让模型照着资料输出答案。
RAG 不是让大模型变成行走的数据库,它是给大模型配了个专职资料员。
不用重新训练模型,就能让它用上私有资料,还能减少胡说八道,这就是它最香的地方。
也是目前大模型落地最实在、最容易上手的玩法之一。
P.S. 无意间发现了一个巨牛的人工智能教程,非常通俗易懂,对AI感兴趣的朋友强烈推荐去看看,传送门https://blog.csdn.net/HHX_01
更多推荐

所有评论(0)