RAG · 让 AI 带着资料回答
看一批文档,怎样变成一个有据可查的答案
此刻
怎么做
会骗你
文字版:RAG 检索增强生成在做什么
RAG(检索增强生成)要解决的是「模型不知道你的资料」这个问题:不去重新训练模型,而是在它回答之前,先从你的文档里找出相关段落塞进提问里,让它照着资料回答。这一页把这条链路拆成八幕,从文档一直走到带引用的答案。
画面上正在发生什么
前四幕是准备知识库,资料更新时才需要做一次:读取文档 → 切成段落 → 每段转成一个向量 → 存进数据库。这一页用的是三份不同格式的文档,切成 12 句文本,向量由本机的 BGE-small-zh-v1.5 模型真实生成,512 维。
后四幕是每次提问都要走的:问题也转成向量 → 和库里每段算相似度 → 取最相似的几段拼进上下文 → 让模型照着这些资料回答。页面按完整向量重算余弦相似度,不是预设的排名。把「取前几块」从 1 改到 3,能看到检索到的内容变多,答案的依据也随之变化;点击答案里的引用还能跳回原句。
一定要试「库里没答案」那个问题。检索仍然会返回相似度最高的几段——它永远会返回点什么,哪怕库里根本没有相关内容。这是 RAG 最容易出事的地方。
什么时候它会骗你
- 检索不到,模型照样会编。检索永远返回最相似的若干段,没有「找不到」这个选项。如果这些段落其实不相关,模型可能把它们硬凑成一个看似有据的答案。实用系统必须设相似度阈值,并允许模型回答「资料里没有」。
- 切块方式直接决定检索质量。切得太碎,一句话的上下文丢了;切得太大,一个块里混了多个主题,向量被稀释、相似度反而下降。这是最需要针对具体文档调整的环节,没有通用参数。
- 相似度高不等于能回答问题。向量检索找的是「语义相近」,而不是「包含答案」。问「最多借几本书」和「借书需要什么证件」这两句话本身很相似,但答案在不同的段落里。
常见问题
- RAG 和微调该怎么选?
- RAG 适合知识会变、需要引用出处、资料量大的场景——更新知识只要更新文档库,不用重新训练。微调适合改变模型的回答风格、格式或让它掌握某种固定技能。两者不冲突,实际系统常常同时用。
- RAG 能消除大模型的幻觉吗?
- 能显著减少,但不能消除。RAG 把回答建立在检索到的资料上,并且可以给出引用让人核对,这是它最大的价值。但检索错了、资料本身有误、或者模型在拼接资料时理解偏了,仍然会产生错误答案。引用可核对是它比纯生成更可靠的根本原因,不是因为它不会错。
- 向量检索是怎么工作的?
- 把每段文本通过嵌入模型转换成一个高维向量,语义相近的文本在向量空间里距离也近。提问时把问题也转成向量,再用余弦相似度等度量找出最接近的若干段。它能匹配同义表达,但对精确的关键词、数字和专有名词不如传统检索敏感,所以实用系统常把两者混用。
本页六个文本块与四个固定查询的向量由本机 BGE-small-zh-v1.5 实际生成(512 维),页面按完整向量重算余弦相似度;数据库记录在浏览器内存中,答案为预编写内容并检查证据是否入选,不调用生成模型。