大语言模型因知识截止日期问题存在"幻觉"现象,无法回答最新信息。本文介绍RAG(检索增强生成)技术,通过构建索引、检索召回和答案生成三环节,使大模型能实时查询外部知识库,解决幻觉问题。涵盖文档分块、向量化、向量数据库选择、查询向量化、混合检索、重排序、Prompt组装、上下文窗口管理及溯源等技术细节,帮助读者全面理解RAG流程。
大语言模型这几年进步飞快,但在实际落地时有一个绕不开的短板:知识截止日期。
训练数据停在某个时间点,之后发生的事情模型一概不知。问它"你们公司的内部 Wiki 里怎么写接口规范",问它"上周刚发布的竞品文档里说了什么",模型只能原地编。这种"看上去很合理、实际上全瞎编"的现象,大家已经给它起了名字——幻觉。
RAG(Retrieval-Augmented Generation,检索增强生成)就是冲着这个问题来的。思路不算复杂:不给模型死记硬背,给它配一个可以实时查询的外部知识库。每次提问,系统先去库里翻找相关材料,找到之后连同问题一起丢给模型,让模型对照材料来回答。
这一整套流程拆开来,就是三个环节:索引构建、检索召回、答案生成。下面逐个拆开看。
- 索引构建:先把知识装进库
知识库不会自己长出来。把文档变成可检索的知识,要走三步:分块、向量化、存库。
1.1 文档分块
一份产品手册可能有好几十页,直接整篇丢进去做索引,效果很差——用户问的是一个具体问题,只在其中两三段里有答案,剩下几十页全是噪音。
分块就是把长文档切成一截一截的片段(chunk),每截单独建索引。这样检索时命中的是相关的那几句,整篇文档里的无关内容不会掺进来。
分块有几种做法:
固定大小分块:按字符数或 token 数切,比如每 512 token 一段。实现最简单,但可能在句子中间下刀,语义连不上。
滑动窗口分块:相邻两块之间留一段重叠,比如每块 512 token,跟前一块重叠 128 token。重叠区能兜住边界上的语义,不会因为切在句子中间就丢了信息。
递归分块:按优先级试不同的分隔符——先找段落(/n/n),段落太长了再找句子(/n),句子还太长就按空格。这种方式能顺着文档的自然结构切,比固定大小聪明不少。
语义分块:用 Embedding 模型算相邻句子的语义相似度,在相似度跳变的地方下刀。一段讲"模型训练",下一段突然跳到"推理部署",相似度暴跌,系统在这里切一刀。好处是每个 chunk 内部主题统一,坏处是计算开销大。
块的大小本身就是一个需要权衡的参数。太小了,片段里语义不完整;太大了,无关信息混进去稀释信号。512~1024 token 是一个比较常见的选择区间,具体还得看 Embedding 模型支持多长的输入、以及文档是哪种类型。
1.2 向量化
切完块之后,每段文字得变成机器能算的格式——向量。这一步用的模型叫 Embedding 模型,输入一段文字,输出一个固定长度的浮点数向量,比如 768 维。
向量化的妙处在这里:语义相近的文本,在向量空间里的位置也近。“苹果手机多少钱"和"iPhone 最新售价”,用词完全不同,但经过 Embedding 之后,两个向量在高维空间里的余弦相似度很高。这就是语义检索能跑通的基础。
选哪个 Embedding 模型,直接影响检索质量。几个常用选项:
- text-embedding-3-small:OpenAI 出品,512 或 1536 维,性价比高,中文支持不差
- BGE-M3:BAAI 开源,1024 维,中文和多语言场景表现优秀,输入最长能到 8192 token
- BCEmbedding:有道开源,768 维,中文检索和重排序配对使用效果好
- Cohere embed-v3:1024 维,支持向量压缩,多语言场景够用
维度越高,语义表达能力越强,但存储和计算也跟着涨。实践中 768 到 1024 维已经够应付多数场景了。
1.3 向量数据库
几万、几十万个向量存进去之后,要能快速检索"跟这个查询向量最像的前 K 个"。传统数据库(MySQL、PostgreSQL)不会干这活——它们的索引是为精确匹配建的,不是为相似度搜索建的。
向量数据库用了近似最近邻搜索(ANN)算法来加速。与其逐一计算查询向量和库里每个向量的距离,ANN 先在"速度"和"精度"之间找个平衡点,用极小的精度代价换数量级的查询提速。
常用的 ANN 算法有两个:HNSW(分层可导航小世界图)和 IVF(倒排文件索引)。HNSW 建了一个多层图结构,高层稀疏、低层密集,查询时从高层粗定位,逐层往下精搜。IVF 先把向量做聚类,查询时只在最近的几个聚类中心附近搜。
主流选择有 Milvus(功能全、社区活跃)、Qdrant(Rust 实现,性能强悍)、Weaviate(支持向量+关键词混合检索)、Pinecone(SaaS 模式零运维),还有轻量级的 Chroma 适合做原型。
- 检索环节:从库里面翻出对的东西
知识库建好了,用户提问时系统的第一件事就是把问题转成向量,在库里翻找最相关的片段。
2.1 查询向量化
用户的问题得先过一遍跟文档向量化同一个 Embedding 模型。不同模型输出的向量坐标系不一样,混用了检索就全乱了。
查询向量出来后,在向量库里跑相似度搜索。三种常用的度量方式:
- 余弦相似度:衡量两个向量方向的接近程度,范围 [-1, 1]。RAG 里最常用的一种,因为它不挑向量长度,长文本和短文本能公平比较。
- 欧氏距离:直接算两个向量在空间里的直线距离,值越小越像。适合向量长度差不多的场景。
- 内积:对应位置元素乘起来再加总。归一化之后的向量,内积就等于余弦相似度。
Top-K 设多大,要看场景。K 太小漏关键信息,K 太大混进噪音还浪费 token 预算。实践中经常取 3 到 10,配合其他策略灵活调。
2.2 不止一种检索方式
纯向量检索在大方向上够用,但有些场景会露怯:遇到精确的日期、ID、专有名词,向量检索就不如关键词检索准。
混合检索是常见的解法:向量检索负责语义层面的匹配,BM25 这类关键词检索负责精确命中的部分,两路结果合并排序。
重排序(Reranking) 再往前推了一步。向量检索召回的 Top-K 里,排第一的不一定真是最相关的。重排序模型(Cross-Encoder)把"问题 + 文档"成对丢进去算分,比 Embedding 的双塔结构精细不少——双塔是问题和文档各自算向量,Cross-Encoder 直接让两者在模型内部交互一次。排序准了,但计算开销也明显大了。
到了企业级场景,多路召回 + 融合排序更常见。部署好几路检索器——语义检索、关键词检索、知识图谱检索——各路独立召回 Top-N,最后用 RRF(Reciprocal Rank Fusion)统一排一版结果。架构复杂了,但召回覆盖率上了好几个台阶。
- 生成环节:拼上下文,输出答案
Top-K 片段到手了,下一步是把它们塞到 Prompt 里,让模型对着资料回答。
3.1 Prompt 怎么拼
检索结果不能原样丢进去,得按一个结构化的模板组装。一个典型的 RAG Prompt 长这样:
bash基于以下参考资料回答问题。如果参考资料不包含相关信息,请说明无法回答。 参考资料: --- {片段1} {片段2} {片段3} --- 问题:{用户提问}这里面有几个细节值得留意:
- 明确告诉模型"只参考给出的这些材料",降低它自行发挥的空间
- 用分隔符
---把资料和指令隔开,避免 Prompt 注入 - 给出兜底行为——“找不到就直说”,防止模型在没资料时硬编
3.2 上下文窗口是有限的
LLM 的上下文窗口再大也不是无限的,RAG 场景下塞进去的检索结果经常占大头。怎么分配 token 预算,直接影响生成质量。
几个实用的做法:
控制片段长度:对过长的检索结果做截断,按 Token 数裁到可管理的范围。相关性排序:把最相关的片段放在 prompt 前面——模型对开头和结尾的关注度天然更高。去重:多段检索结果可能包含重复内容,去重之后省出来的空间能塞进更多差异化的信息。
3.3 生成和溯源
模型拿到组装好的 Prompt 后,跟普通对话有本质区别——它进入了"阅读理解"模式,从给的素材里提取答案,对照着资料来回话。
工程上做到位的话,还会给每个检索片段打上来源标记——文档 ID 或者 URL——并要求模型在回答里标注引用。用户追问"这句是从哪里来的",可以直接定位到原文。在医疗、法律、金融这些合规敏感的场景里,这一点比回答本身还重要。
下面是一段简化的 Python 流程示意,把上面讲的几步串起来:
pythonimport numpy as np # 查询向量化 defquery_to_vector(query, embedder): return embedder.encode(query) # 检索 Top-K defretrieve(query_vector, vector_db, top_k=5): # 用余弦相似度 similarities = np.dot(vector_db.vectors, query_vector) similarities /= (np.linalg.norm(vector_db.vectors, axis=1) * np.linalg.norm(query_vector)) top_indices = np.argsort(similarities)[-top_k:][::-1] return [vector_db.chunks[i] for i in top_indices] # 组装 Prompt defbuild_prompt(query, chunks): context = "/n/n".join( [f"## 片段 {i+1}/n{c}"for i, c inenumerate(chunks)] ) return ( f"请基于以下参考资料回答问题:/n/n" f"{context}/n/n" f"问题:{query}/n/n" f"如参考资料中无相关信息,请说明无法回答。" ) # 完整流程 defrag_pipeline(query, embedder, vector_db, llm): q_vec = query_to_vector(query, embedder) chunks = retrieve(q_vec, vector_db, top_k=5) prompt = build_prompt(query, chunks) return llm.generate(prompt)检索是上游,Prompt 是桥,生成是下游。上游歪了,下游的模型再强也救不回来。
- 写在最后
RAG 的全流程可以压缩成一句话:让大模型从"靠记忆答题"切换到"翻资料作答"。
三个环节,每个都跟最终效果直接挂钩:
索引构建是地基。分块策略影响语义的完整程度,Embedding 模型影响语义表达有多准,向量数据库影响检索跑多快。哪一步没做好,后面全打折扣。
检索召回是桥梁。从基础向量检索到混合检索、重排序、多路融合,每一步都在追问同一个问题——“找到的东西对不对”。实践中,单一策略几乎总会漏掉点什么,组合使用才是日常。
生成环节是所有前置工作的出口。Prompt 模板的目标很朴素:让模型清楚什么时候回答、什么时候老老实实说不知道。上下文窗口管理则是上线之后持续调优的主战场。
理解整条管道的全貌,是搭好 RAG 系统的第一步。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
为什么要学习大模型?
我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。
大模型入门到实战全套学习大礼包
1、大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
2、大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
3、AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
4、大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
5、大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
适用人群
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。