上一章讲了 RAG/Agent 这些概念的定义,以及 Dify 的选型逻辑。这一章用一个真实翻车案例,让你彻底搞懂 RAG 到底在解决什么问题,然后从第3章开始亲手把它修好。
先讲个真实场景(这是本章的"为什么")
我做过一个生鲜电商的社群导购项目。每天有几千个用户在微信群里问东西——"最近什么牛肉好""这个榴莲怎么看好坏""草莓怎么保存"。以前全靠人工在群里逐条回复,慢、累、还容易漏。
第一版,我们也犯过跟很多人一样的错:"大模型不是很聪明吗?直接把问题丢给它不就行了?" 系统跑起来后,我拿真实问题去测试,问它:"榴莲怎么看好坏?"
模型答得特别流畅、特别专业,讲了一套"挑选牛油果的方法"——按压果皮判断软硬、感受弹性来判断成熟度。听着很像那么回事,问题是:我问的是榴莲,它答的是牛油果,而且我的知识库里压根没有牛油果这条数据。
后来我查日志才发现真相:那次检索环节因为一个模型权限报错,返回的是一个空结果——系统压根没查到任何真实资料,模型手里没有一点参考内容。但它没有说"我不知道",而是自己"脑补"了一套关于水果挑选的说法,换了个水果名字继续往下答,语气跟正常回答一模一样,你根本看不出这段话背后是"空的"。
那一刻我才真切体会到大模型最吓人的地方:它不是不知道,它是不肯说"不知道"。 流畅、笃定、错得理直气壮。在闲聊里这叫"有想象力",在导购场景里,这叫用户信了这套牛油果的挑选方法,去挑榴莲,然后发现完全不对。
这件事用一张图就能说清:直接问模型是"闭卷考试",上了RAG是"开卷考试"。
这个空检索导致AI编造答案的完整过程(连模型内心"思考"的原文都被记录下来了),在附录C会有一次更深入的解剖,值得专门看一遍。
3个核心概念(先白话,再术语)
概念1:什么是"幻觉"?
幻觉(hallucination),就是模型不知道答案时,不说"我不知道",而是一本正经地编一个。
它不是故意撒谎,而是大模型的工作方式决定的——它本质是在"预测下一个最像样的词",所以哪怕没有依据,也能拼出一段读起来很专业的话。开篇那个编出来的"牛油果挑选法",就是典型幻觉。
"幻觉"是怎么来的:它在"猜下一个最像样的词",不是在"查事实"
用户问一个它没见过的私有问题(我们店有没有促销)
↓
模型逐字"预测下一个词"(本质是补全,不是求证)
↓
拼出流畅但虚构的答案(看着专业,实则编的 ✗)
关键认知:
大模型不是一个"数据库",它没有"我不知道"这个开关——
只要你问,它就会顺着语感往下编。
所以它最危险的地方不是"答错",而是"错得特别流畅、特别笃定",
让你分不清真假。
RAG的解法:先去知识库查到真东西,再让它"照着资料答",
而不是"凭记忆编"。
幻觉是大模型目前面临的最大问题。很多场景哪怕1%的幻觉都不能用,需要严格约束,例如金融场景。文档撰写、PPT生成这类场景幻觉高一点没关系,那是L1层级的应用;但到企业层级、涉及"工业生产场景"的应用,错一点就会有非常大的影响。
概念2:什么是RAG?
RAG(Retrieval-Augmented Generation,检索增强生成),拆开就三件事:
检索(Retrieval): 拿用户的问题,去你的知识库里查出相关的几段资料
增强(Augmented): 把查到的资料,拼到问题前面一起交给模型,相当于给它"开了卷"
生成(Generation): 模型照着这几段资料组织出答案,而不是凭脑子里的记忆硬答
说白了:别让模型凭记忆答题,先去知识库里"查资料",把查到的真实内容塞进去,再让它照着资料回答。
一个比喻记一辈子:RAG就是把模型从"闭卷考试"改成"开卷考试"。模型还是那个模型,但答题时手里多了一本随时能更新、且属于你自己的参考书。
什么场景上RAG:
- 内容要求严谨,比如售后、医疗、法律、制度等
- 必须可以溯源,能找到对应的内容与条款
- 知识频繁更新
- 内部自有文档为主,通用模型没见过,或者见得很少
企业内部情况: 核心判断是知识库值不值得建、能不能建好。大部分企业知识库是非常乱的,很多维护在一线人员手里,标准不统一,尤其是有较大历史包袱的企业。所以任何项目启动都要先问:知识库有没有人能维护、谁来牵头、按什么节奏更新(面试时老板会比较关心是否有推动能力,相比技术,这个软能力很重要)。
RAG不能完全保证没有幻觉,取决于两点:1、检索层召回得准不准;2、生成层有没有硬约束(很多舆情事件就是这么产生的——没约束好,被用户诱导了)。
(那为什么还有企业要自己部署和调试大模型?这是更进阶的话题,涉及数据合规和成本,超出这门课范围,先知道有这回事就行。)
概念3:什么是"上下文"(context)?
上下文,就是你这一次塞给模型、让它参考的那段文字。
模型一次能读的上下文有长度上限(就像一口能吃的饭量),这个"量"用token(粗略=1个汉字或0.5个英文单词)来计。RAG的关键动作,就是"检索出最相关的几段资料,拼进上下文",而不是把整个知识库一股脑塞进去。后面所有的调优功夫,都花在"怎么让塞进上下文的那几块,又准又全"。
"上下文"有上限:整本书塞不下,只能挑最相关的几块
想把整个知识库都塞给模型:
知识库=几百万字,远超模型一次能读的token上限
→ 塞不下;就算塞得下也贵,还会"大海捞针"读不到重点
先检索,只挑最相关的几块:
相关chunk① / 相关chunk② / 相关chunk③
→ 只把"够用"的几块拼进上下文,省token、聚焦、回答更准
"挑哪几块、挑得准不准",就是RAG要解决的核心问题。
这三个概念,跟你今天要做的项目是什么关系
你的AI导购机器人,如果不接RAG:
用户问"榴莲怎么看好坏" → 模型凭记忆编一个通用答案,
可能内容对,也可能张冠李戴、编出不存在的挑选标准
接了RAG之后:
用户问"泰国XX榴莲怎么看好坏" → 先去你整理的知识库里查
→ 找到真实的、你自己写的挑选方法
→ 模型照着这段真实内容组织回答
→ 可溯源、不瞎编
从下一章开始,你要亲手做的事,就是给一个"闭卷"的大模型,配上一本"专属参考书",让它从"编答案"变成"查答案"。