
随着大语言模型(LLM)的爆发式增长,幻觉问题、知识时效性以及数据安全壁垒成为了制约其落地的“三座大山”。检索增强生成(RAG, Retrieval-Augmented Generation)技术因其能够外挂知识库、提供可解释的引用而成为目前企业级应用的主流架构。
很多开发者知道 RAG 是“检索 + 生成”,但面对一个复杂的用户提问,系统内部到底经历了怎样的数据流转?大模型在其中究竟是“翻译官”还是“大脑”?本文将绕过浅显的 Demo 级讲解,深入技术底层,详细剖析 RAG 系统的完整生命周期。
一个标准的 RAG 系统处理流程可以划分为 离线数据预处理 和 在线推理问答 两大阶段。
在线检索的质量高度依赖离线处理的数据颗粒度。
1. 数据清洗与分块策略 不能简单地将 PDF 或 Word 直接丢进去。我们需要针对 Markdown、表格、代码块进行结构化解析。分块(Chunking)策略是这里的核心难点:
RecursiveCharacterTextSplitter 根据段落、句子边界切分,保证每个 Chunk 拥有完整的语义单元。2. 向量化模型的选择 并非所有场景都适用通用 Embedding 模型。对于医疗、法律等垂直领域,使用 BGE 或通用文本向量模型进行微调,能显著提升相似度计算的准确性。
这是 RAG 系统中容易被忽视但极具价值的一环。用户的原始问题往往是口语化、模糊甚至包含多重意图的。直接拿原始问题去检索,召回率往往很低。
问题拆解(Query Transformation)的几种主流范式:
拆解策略 | 适用场景 | 技术实现示例 |
|---|---|---|
HyDE (假设性文档嵌入) | 用户问题过于简短 | 让 LLM 先根据问题生成一段“假想答案”,然后用假想答案去向量库检索。这解决了“查询语句”与“文档语句”语义鸿沟的问题。 |
多路查询(Multi-Query) | 问题涉及多个实体或对比 | 利用 LLM 将复杂问题扩展为 3-5 个不同视角的相似问题,并行检索,合并结果。例如:用户问“如何优化 MySQL 性能?”扩展为“MySQL 慢查询优化”、“MySQL 索引调优”、“MySQL 缓存策略”。 |
子问题分解(Decomposition) | 多跳推理(Multi-hop)问题 | 例如问题:“《三体》作者获过的最高文学奖是什么?”拆解为 (1) 《三体》作者是谁? (2) 该作者获过哪些文学奖? (3) 其中最高级别的是? |
Step-back Prompting | 需要背景知识的问题 | 将具体问题抽象化。问“为什么特定函数报错”,退回一步问“该编程语言的基础异常处理机制”。 |
在这个阶段,LLM 扮演的是“问题重构师”的角色,它并不负责提供事实,而是负责理解用户意图,生成更利于检索的关键词或伪代码。
1. 检索(Retrieval) 系统将拆解后的多个 Query 转化为 Embedding 向量,在向量数据库中进行 ANN(近似最近邻)搜索。这一步通常会设置一个较大的召回值(Top K,例如 50),宁可多召回,也不能漏掉。
2. 重排序(Rerank) 这是 RAG 流程中的“精筛”环节。由于向量相似度有时并不完全等于语义相关性,我们需要一个更强大的交叉编码器(Cross-Encoder)对召回的 50 个 Chunks 进行逐一打分(0-1 相关性分数)。最终只选择得分最高的 Top 3 或 Top 5 送入大模型。
注意:重排序模型的计算开销较大,因此通常采用“粗排+精排”的级联架构。
很多人误以为大模型在 RAG 里只是负责“把检索到的资料复述一遍”,但实际上,大模型承担了 3 个至关重要的认知职责:
1. 上下文整合与去噪 检索回来的文档可能包含相互矛盾的信息或无关的噪音。大模型需要利用其语义理解能力,自动忽略不相关的检索片段,聚焦于高置信度的信息。
2. 推理与逻辑缝合 大模型不是“搬运工”,而是“逻辑组装师”。它需要将多个碎片化的文本片段,按照逻辑因果、时间顺序或空间结构重新组织成连贯的段落。
3. 未登录知识的拒绝与兜底 这是 RAG 中最体现模型“智能”的地方。如果检索到的文档置信度极低,或者明显与问题无关,优秀的大模型应该能够识别这一点并回复:“根据现有资料无法回答该问题。”——这有效缓解了 LLM 的幻觉问题。
RAG 系统的最终输出远比一个简单的 result 字符串要丰富。为了提升用户体验和信任度,一个工业级的 RAG 输出应该包含以下结构:
{
"final_answer": "根据2025年Q3财报,该公司营收增长主要得益于AI芯片业务的爆发...",
"references": [
{
"source": "2025_annual_report.pdf",
"page": 42,
"content_snippet": "AI芯片出货量同比增长300%..."
}
],
"thinking_trace": "已检索到 3 篇相关文档,主要依据财务报告章节进行回答。",
"related_questions": ["该公司的毛利率是多少?", "主要竞争对手是谁?"]
}Lost in the Middle 的注意力优化策略。第一步:索引阶段(离线)
第二步:检索阶段(在线)
第三步:生成阶段(在线)
常用的拆解策略:
大模型在RAG里主要做三件事:
最基础的输出就是一段自然语言的文本答案,但实际工程中通常输出一个结构化的对象。
还可能附带:
RAG 系统不仅仅是“向量数据库 + ChatGPT”的简单拼接。从 Query 的拆解改写,到 Rerank 的精准过滤,再到 LLM 的逻辑整合与引用输出,每一个环节都充满了工程与算法的博弈。
希望通过本文的梳理,能帮助你构建一个更稳定、更智能的 RAG 应用。欢迎在评论区留言讨论你在落地过程中遇到的坑!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。