乐于分享
好东西不私藏

我让 AI 学会了「翻书找答案」,结果它比我更像一个真人助手

我让 AI 学会了「翻书找答案」,结果它比我更像一个真人助手

这不是什么科幻大片,这是 RAG 检索增强生成


一、从一次翻车说起

前天晚上,我在写一份行业报告,需要查一个冷门的技术参数。

打开大模型对话框,我输入:

"XX 协议在 2024 年的最新规范是什么?"

AI 非常自信地给我回了一大段,有模有样,还带引用。

我差点直接复制粘贴了。

但凭着一丝职业警觉,我去查了原文——结果发现,它说的那个"新规范",根本不存在。

编的。全编的。

那一刻我的感受,就像你问路,一个路人非常热情地给你指了一条路,你走到底发现是个死胡同,回头一想——他压根就没去过那个地方。

这就是大语言模型众所周知的死穴:幻觉。

你问它什么,它都想回答。但它不知道的就是不知道,它会编。说得越自信,越容易翻车。


二、大模型的「死记硬背」病

要理解 RAG 在解决什么问题,先要理解大模型的本质。

别看现在的 AI 聊天、写诗、写代码什么都会,本质上它就是一个超级背诵机器。它的知识来自于训练时"读"过的海量数据,学完之后,所有的信息都压缩到模型参数里。

就像你考试前通宵背书,第二天上考场——如果考的全是背过的,你稳赢。但要是考一道书里没有的题,你就只能靠编了。

大模型也一样:

  • ✅ 问它「李白是哪朝人」→ 稳得很
  • ✅ 问它「Python 写个冒泡排序」→ 秒出
  • ❌ 问它「我们公司昨天刚发布的新品叫什么」→ 开始编
  • ❌ 问它「2024 年 Q3 的这份财报利润率是多少」→ 开始胡扯

为什么?

因为它的知识在训练那一刻就冻结了。你训练截止日期之后发生的事情,它不知道。而且它没有"搜索引擎",没有"查资料"的能力。

打个比方,你请了一个特别博学的助手,但他被关在一个没有窗户的房间里,所有知识都是他两年前记住的。现在你问他外面天气怎么样,他只能凭两年前的记忆瞎猜。

尴尬不尴尬?


三、RAG 是什么?一句话讲清楚

RAG(Retrieval-Augmented Generation),中文叫检索增强生成。

名字听着高级,其实原理特别简单,就三个字——

先查,再答。

你想想一个真人助手是怎么工作的:

  1. 你问一个问题
  2. 他先去查资料、翻书、搜数据库
  3. 找到相关的内容
  4. 阅读、理解、整合
  5. 然后给你一个靠谱的回答

RAG 干的事,一模一样。


四、RAG 到底怎么工作的?用故事讲

我找一个最简单的场景来解释。

假设你是这家公司的新员工,老板让你去写一份关于「公司 2024 年产品线」的报告。

没有 RAG 的 AI(也就是普通的 LLM):

就像一个第一天入职就被关进小黑屋的新人。他不知道公司有哪些产品,不知道去年的财报,不知道刚发布的新品。但他又不敢说不知道——于是他开始一套组合拳:

"根据行业趋势,贵公司可能推出了 AI 驱动的 XXX 平台……"

每一句听起来都对,但每一句都不对。

有 RAG 的 AI:

像一个入职第一天就被授权查阅所有公司文档的新人。你问他之前,他先做这几步:

Step 1:理解你的问题 "嗯,老板想知道 2024 年的产品线。"

Step 2:去翻资料(检索) 他去公司的知识库、产品文档、飞书文档、企业 wiki 里搜了一圈。找到 10 份相关文档——产品规划书、新品发布公告、QA 规范、架构设计文档……

Step 3:挑出最有用的(相关性排序) 把最相关的几段摘出来,排好顺序。

Step 4:带着材料回来回答(生成) 他是看着材料回答你的,每句话都有据可查。

这就是 RAG 的全部哲学:不给 AI 增加知识,而是给它一个查资料的通道。


五、RAG 解决了哪三个核心问题

1. 消除幻觉

有资料做依托,AI 不敢瞎编了。你甚至可以在答案旁边加个「参考来源」,像论文一样,每条信息都有出处。

2. 实时更新

你不需要重新训练模型。你只需要更新知识库里的文档。今天刚发布的公告、昨天刚写的周报、5 分钟前改的规范——都能被检索到。

这让 AI 的知识保鲜期从几个月缩短到几分钟。

3. 私有知识不出门

公司内部的知识库、机密文档,不需要上传到大模型的训练集。文档依然存在你的数据库里,AI 只在回答时去"翻"。

安全合规,老板放心。


六、让我给你画个流程图

说人话版本:

你问问题 → AI 先去翻书 → 找到相关段落 → 带着书回来回答你


七、代码时间:30 行实现一个简易 RAG

理论听完了,我们上手吧。

下面是一个用 LangChain(版本 1.3.4)实现的 RAG,使用最新的 LCEL(LangChain Expression Language)模式,代码更简洁、可读性更强。

import osfrom langchain_openai import OpenAIEmbeddings, ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.documents import Documentfrom langchain_core.runnables import RunnablePassthroughfrom langchain_chroma import Chroma# ============ 第一步:准备知识库 ============raw_docs = ["2024年Q1公司发布了新一代AI芯片,算力提升300%","2024年Q2新产品线包含3个型号:Pro、Lite、Mini","2024年Q3财报显示营收同比增长45%,主要来自海外市场","2025年规划:进入欧洲市场,预计Q2在德国设立分公司","公司核心产品是AI驱动的智能客服平台,服务超过1000家企业",]documents = [Document(page_content=t) for t in raw_docs]# ============ 第二步:向量化 + 建索引(Chroma)============embeddings = OpenAIEmbeddings(model="text-embedding-3-small")vector_store = Chroma.from_documents(documents, embeddings)retriever = vector_store.as_retriever(search_kwargs={"k": 2})# ============ 第三步:构建 RAG 链(LCEL 模式)============prompt = ChatPromptTemplate.from_template("""基于以下参考资料回答问题。如果参考资料中没有相关信息,请如实说不知道。参考资料:{context}问题:{input}回答:""")defformat_docs(docs):return"\n".join(f"- {d.page_content}"for d in docs)# 一条链:检索 → 格式化 → 拼 prompt → 调用大模型chain = (    {"context": retriever | format_docs, "input": RunnablePassthrough()}    | prompt    | ChatOpenAI(model="gpt-4o-mini"))# ============ 测试一下 ============query = "2024年公司发布了什么产品?"result = chain.invoke(query)print(f"问:{query}")print(f"答:{result.content}")print()query2 = "公司2025年的规划是什么?"result2 = chain.invoke(query2)print(f"问:{query2}")print(f"答:{result2.content}")

这段代码做了三件事:

  1. 文档转向量:Document → OpenAIEmbeddings 向量化 → Chroma 构建本地向量数据库
  2. 检索器:vector_store.as_retriever() 一步搞定
  3. LCEL 管道链:用 | 操作符把"检索 → 格式化 → prompt → 大模型"串成一条链,清晰直观

环境要求

  • Python 3.12+
  • langchain 1.3.4 / langchain-openai 0.3.0 / langchain-chroma 0.2.0 / chromadb 0.5.23

使用 uv 管理依赖(Chrome 会自动下载需要的 embedding 模型文件,首次运行稍慢):

# 安装 uv(如果没有)curl -LsSf https://astral.sh/uv/install.sh | sh# 创建虚拟环境并安装依赖uv venvuv pip install "langchain==1.3.4""langchain-openai==0.3.0""langchain-chroma==0.2.0" python-dotenv

或者一行直接跑:

OPENAI_API_KEY="sk-xxx" uv run --with 'langchain==1.3.4,langchain-openai==0.3.0,langchain-chroma==0.2.0' python rag_demo.py

Chroma 是开源向量数据库,相比 FAISS 支持更多高级功能(持久化、元数据过滤、多模态等),适合生产环境使用。

uv 是 Rust 写的 Python 包管理器,安装速度比 pip 快 10-100 倍,且自带虚拟环境管理。

跑一下试试,你会发现 AI 不再编造答案了。如果问的问题知识库里没有,它会老老实实说"不知道"。

就这一点,已经比 90% 的 AI 应用强了。


八、RAG 能干什么?给你几个真实场景

场景
传统 LLM
RAG 方案
企业内部知识库问答
只能凭训练数据回答,过时且不准确
实时检索企业文档,回答准确
客服机器人
遇到新问题开始编
检索产品文档 + 历史工单
法律/合规咨询
编法条,风险极高
检索法规原文,每条可溯源
代码辅助
可能给你用旧版本 API
检索最新的 SDK 文档
学术研究
伪造参考文献
检索论文库,带真实引用

九、写在最后

两年前,我第一次用 ChatGPT 时,那种惊艳感就像第一次用智能手机——原来 AI 真的能"聊天"了。

但用着用着就发现不对劲:你不知道它哪句是真、哪句是编的。

RAG 给 AI 装了一双"眼睛"和一本"字典"。它不再是凭着死记硬背在那里胡诌,而是真的会先去查资料。

就像我们小时候写作文,老师总说:

"别瞎编,去查查资料。"

RAG 就是那个"去查查资料"的能力。

如果你正在搭建自己的 AI 应用,或者想在内部落地一个知识问答系统,RAG 就是你绕不过去的第一步。它不复杂、成本低、效果好——任何团队都能在一天内跑起来。

最后送你一句话:

AI 的能力不是靠记住所有的答案,而是知道去哪里找到答案。

这就是 RAG。


💡 想交流 AI 落地的实际经验?欢迎留言区聊聊你在用 AI 时遇到过的"幻觉"翻车经历。

相关学习资料