RAG 是什么?为什么你的大模型需要它?

周一晨会刚结束,老李端着保温杯走进茶水间,枸杞的香气还没散开,小王就跟了进来。

“老李,咱们年会问答那个需求,我打算加一层 RAG。”小王一边接咖啡一边说。

老李眉头一皱,保温杯停在半空:“什么 Rag?不是,咱们已经买了 GPT 的接口,一个月好几万呢,你还要加一层什么东西?不就包装了一下吗?”

“不是包装,老李你想啊——”

“我想什么想,”老李吹了吹杯口的热气,“我们以前做搜索的时候,数据库里查出来直接展示,哪有这么多花活。大模型我问什么它答什么,不就是多花点钱吗,再加一层检索,这不重复造轮子吗?”

小王不慌不忙地喝了口咖啡:“那我问你个事儿,咱们公司去年年会是哪天办的?”

“十一月八号啊,在杭州那个度假酒店,我还中了个三等奖呢。”

“那你问问 GPT,咱们公司去年年会是什么时候。”

老李半信半疑地掏出手机,在对话框里敲了一行字。几秒钟后,GPT 一本正经地回答了。

老李盯着屏幕,表情像吃了个酸橘子。

“它说咱们年会是‘2025年12月中旬,地点通常选在北京总部’……这都什么跟什么啊。”

“这就是我想说的,”小王放下咖啡杯,“大模型就像一个天才,但问题是——它失忆了。”


大模型的“知识截止日期”

老李把手机往桌上一放:“这玩意儿不是很聪明吗?怎么连年会日期都搞不清楚?”

“因为它根本不知道咱们公司的年会。”小王在白板上画了一条横线,“所有大模型都有一个‘知识截止日期’,比如 GPT-4 的知识大概截止在 2023 年,之后发生的事它一概不知。你问它 2024 年以后的新闻,它就只能编。”

“那我把它微调一下,把公司文档都喂给它不就行了?”老李抱起胳膊。

“微调就像一个学生去上课,你得花时间、花钱,学完了他才知道新知识。而且下周公司年会地点改了,你又得重新训练一次。”小王接着说,“RAG 不一样,RAG 就像给这个天才配了个图书管理员。”

“图书管理员?”老李的眉头松动了半毫米。

图:RAG 的核心流程——提问先查资料,再让大模型回答


什么是 RAG?

“对,就是图书管理员。你想象一下,”小王指着白板说,“你去问一个大教授一个问题,他什么都懂,但要是问题涉及你公司的内部制度,他就只能凭感觉猜。RAG 就是在他回答之前,先让一个管理员从公司知识库里把相关文档找出来,塞到他眼前,然后告诉他:‘请根据这几份材料回答问题,别瞎编。’”

老李琢磨了一下:“所以 RAG 不是改变大模型本身?”

“完全不是!大模型还是那个大模型,RAG 只是在它前面加了一个检索的步骤。”小王在白板上写下三个词:检索增强生成

“第一步,检索。你问‘去年年会日期’,系统先去知识库里找到相关的会议纪要、通知邮件。第二步,增强。把搜到的内容拼接到提示词里,变成大模型的参考材料。第三步,生成。大模型读着这些材料回答问题,就不会胡编了。”

“听起来就像考试带小抄?”老李突然冒出一句。

小王愣了一下,然后笑了:“老李你这个比喻太精准了。对,RAG 就是让大模型拿着小抄考试。小抄上有的它照着答,小抄上没有的它才用自己的知识补充,而且还会老老实实告诉你哪些是查到的、哪些是推理的。”


一个迷你 RAG 有多简单

老李喝了口茶,语气还是将信将疑:“说得玄乎,这东西实现起来复杂吧?”

“其实核心逻辑就几十行代码。”小王掏出笔记本,敲了一段示意代码:

python
# 迷你 RAG 演示:检索 + 增强 + 生成
import chromadb
from openai import OpenAI

# 1. 准备你的私有知识库(公司文档、会议记录等)
documents = [
    "2025年公司年会于11月8日在杭州XX度假酒店举行。",
    "年会三等奖奖品为蓝牙耳机,老李同志喜获该奖。",
    "2026年年会计划于成都举办,具体日期待定。"
]

# 2. 用向量数据库存储并检索
client = chromadb.Client()
collection = client.create_collection("company_knowledge")
for i, doc in enumerate(documents):
    collection.add(documents=[doc], ids=[f"doc_{i}"])

question = "咱们公司去年年会是哪天办的?"
retrieved = collection.query(query_texts=[question], n_results=2)["documents"][0]
context = "\n".join(retrieved)  # 这就是“增强”的上下文

# 3. 把检索到的材料交给大模型
llm = OpenAI()
prompt = f"请仅根据以下材料回答问题,材料没有的就直说不知道:\n{context}\n问题:{question}"
response = llm.chat.completions.create(
    model="gpt-4o", messages=[{"role": "user", "content": prompt}]
)
print(response.choices[0].message.content)
# 输出:2025年年会于11月8日在杭州XX度假酒店举行。

“看到没,大模型没有变,只是输入的提示词变了。原来它只能瞎猜,现在它有材料了。”

老李盯着代码看了好一会儿,喃喃道:“所以就是把公司文档丢进一个库,每次提问先去库里搜,搜出来的东西粘到问题里,然后让模型读着回答?”

“完全正确。老李你理解得比我们组新来的实习生还快。”

“少拍马屁,”老李摆摆手,但嘴角翘了一下。


RAG vs 微调:什么时候用哪个?

沉默了一会儿,老李突然问:“那微调就没用了?”

“不是没用,是用处不同。”小王又在白板上画了个二象限图。

小王指着图说:“RAG 适合知识频繁变动、需要溯源验证的场景,比如查公司政策、产品文档、实时新闻。微调适合教模型一种能力或风格,比如‘学会用老李的语气回答问题’,或者掌握某个专业领域的推理模式。”

“那咱们年会问答这个……”

“当然用 RAG,因为明年年会日期又变了,你微调一次的成本够我们买一年 RAG 服务了。”

老李端起保温杯,长叹一口气:“这玩意儿……还有点意思。”

“老李,你这就是认可了呗?”

“我没说认可,我就是说……下不为例啊。”老李板着脸,但眼睛还盯着小王的代码屏幕,“那什么,你刚才说的那个向量数据库,它为什么能搜到意思相近的内容,不是靠关键词匹配对吧?你再给我讲讲这个。”

小王咧嘴笑了:“老李,你这可不是下不为例,你这是打破砂锅问到底。行,我给你讲讲 embedding 是怎么回事……”

茶水间的对话还在继续,保温杯里的枸杞沉了底,咖啡机又嗡嗡地响了起来。RAG 这个被老李视为“多此一举”的技术,终于在年会日期的一地鸡毛中,找到了它最朴素的说服力。

向量嵌入:把文字变成数字的魔法
AI资讯日报 | 2026-05-10