当前位置: 首页 > news >正文

RAG 是什么?为什么大模型需要外挂知识库?

大模型很强。它会写代码,会总结,会分析,会对话。

但它有三个硬伤:不知道你的私有数据,训练知识会过期,上下文窗口也不是无限大。

RAG 就是为了解决这三个问题。它不是让模型重新训练一次,也不是把所有资料都塞给模型。它的核心动作很简单:回答之前,先去知识库里找资料。

RAG = 检索 + 生成。检索负责找依据,生成负责把依据说成人话。

一、为什么大模型需要外挂知识库?

先看一个真实场景。

你问模型:“我们公司 2026 年最新版报销制度里,差旅住宿标准是多少?”

模型如果没有接入你的内部制度文档,它只能猜。猜得再像,也不是答案。

这就是裸调模型的风险:回答流畅,不代表回答正确。

1. 模型知识会过期

大模型的训练数据通常有截止时间。训练之后发生的新政策、新公告、新产品文档,它天然不知道。

LangChain 官方 Retrieval 文档也明确指出,LLM 有两个关键限制:上下文有限,以及训练知识是静态的;Retrieval 通过在查询时获取外部知识来解决这些问题。

2. 模型不知道你的私有数据

企业真正有价值的数据,往往不在公开互联网里。比如:合同、制度、客服 FAQ、订单状态、研报库、内部知识库、产品手册、故障工单。

这些内容不能指望模型“天生知道”。必须在用户提问时动态检索。

3. 模型上下文不是无限大

就算你有 10 万页文档,也不能全部塞进 Prompt。上下文窗口再大,也不是数据库。

RAG 的做法是:只找和当前问题最相关的几段资料,把它们作为上下文交给模型。

二、RAG 的本质:不是训练模型,而是给模型递资料

很多人第一次听 RAG,会误以为它是微调模型。不是。

微调是改变模型参数。RAG 不改模型参数。RAG 是在模型回答前,把相关资料临时放进上下文。

这就像考试。微调是让学生重新学习。RAG 是允许学生开卷查资料。

三、LangChain 里的 RAG 组件地图

LangChain 做 RAG,不是一个神秘黑盒。它把整个流程拆成了一组小组件。

组件

作用

通俗理解

Document Loader

读取外部资料

PDF、网页、Word、Markdown、数据库

Document

标准文档对象

page_content、metadata、id

Text Splitter

切分长文档

把大文档切成可检索小块

Embedding

文本向量化

把文本变成数字向量

Vector Store

存储与相似度搜索

Milvus、Chroma、FAISS、Qdrant、ES Vector

Retriever

检索入口

输入问题,返回 Document 列表

Prompt

组织上下文

把问题和资料拼成模型输入

Model

生成答案

基于资料回答,而不是凭空编

四、RAG 的最小单位 Document

在 LangChain 里,RAG 不是直接处理“PDF 文件”。PDF、网页、Markdown、数据库记录,最后都要转换成 Document。

Document 是 RAG 里的最小知识单元。它一般代表一个文档片段,也就是我们常说的 Chunk。

源码里,Document 继承自 BaseMedia。BaseMedia 提供 id 和 metadata,Document 自己提供 page_content。

# 简化后的源码结构,不是完整源码
class BaseMedia:
id: str | None
metadata: dict
class Document(BaseMedia):
page_content: str
type: Literal["Document"] = "Document

这里要抓住一个核心点:Document 不是 Message。

Message 是模型对话里的消息。Document 是检索流水线里的资料。

这两个概念不能混。前面第四章讲过 Messages;这一章讲的是知识库里的 Document。

五、VectorStore 做了什么?

VectorStore 是向量数据库的统一抽象。

它的任务不是生成答案。它只负责两件事:存文档,搜相似文档。

从源码看,VectorStore 把 Document 拆成 texts 和 metadatas,再交给具体向量库实现。

# 简化后的源码逻辑
texts = [doc.page_content for doc in documents]
metadatas = [doc.metadata for doc in documents]
vectorstore.add_texts(texts, metadatas, ids=ids)

这一步很关键。

模型看的是文本,向量库搜的是向量,但工程系统追踪的是 metadata。

所以生产环境里,metadata 不能随便写。至少要有 source、page、title、doc_id、created_at、version 等字段。否则模型答错了,你根本追不回来源。

六、Retriever 为什么是 RAG 的核心入口?

Retriever 是 RAG 运行时的入口。

用户提问后,Retriever 接收 query,返回一组 Document。

LangChain 官方也把 Retriever 定义为:输入非结构化查询,输出 Document 列表。它比 Vector Store 更通用,因为它不一定自己存文档。

BaseRetriever 继承 RunnableSerializable,所以它天然支持 invoke、ainvoke、batch、abatch。

这就是 LangChain 的工程味道:Retriever 不是孤立工具函数,而是可组合、可追踪、可异步、可批处理的 Runnable。

# 简化后的源码执行链
result = retriever.invoke("用户问题")
# invoke 内部大致做三件事:
# 1. 准备 config / callbacks / metadata
# 2. 触发 on_retriever_start
# 3. 调用 _get_relevant_documents(query)
# 4. 触发 on_retriever_end,返回 List[Document]

所以自定义 Retriever 的核心不是重写 invoke,而是实现 _get_relevant_documents。

你可以把 ES 检索、数据库检索、API 搜索、图数据库检索、混合检索都封装成 Retriever。

七、VectorStoreRetriever 只是一个路由器

很多人以为 VectorStoreRetriever 很复杂。其实它的核心很直白。

VectorStore.as_retriever() 会返回一个 VectorStoreRetriever。这个对象保存了 vectorstore、search_type、search_kwargs。

源码里支持三类常用搜索方式:

similarity:普通相似度搜索,适合大多数基础 RAG。

similarity_score_threshold:带分数阈值,只保留超过相关度的结果。

mmr:最大边际相关性,既看相关性,也看结果之间的多样性。

# 简化后的源码逻辑
if search_type == "similarity":
docs = vectorstore.similarity_search(query, **kwargs)
elif search_type == "similarity_score_threshold":
docs = vectorstore.similarity_search_with_relevance_scores(query, **kwargs)
elif search_type == "mmr":
docs = vectorstore.max_marginal_relevance_search(query, **kwargs)

这段逻辑很短,但很重要。

RAG 的效果,很多时候不是模型不行,而是这里的参数没调好:k 太小,召回不全;k 太大,噪声太多;没有 filter,跨业务文档乱召回;没有阈值,低相关资料也进了 Prompt。

八、RAG 的三种架构:2-Step、Agentic、Hybrid

RAG 不是只有一种写法。LangChain 官方 Retrieval 文档把 RAG 架构分成 2-Step RAG、Agentic RAG、Hybrid RAG。

1. 2-Step RAG:简单、稳定、快

固定流程:先检索,再生成。

适合 FAQ、文档问答、产品手册、内部制度查询。

优点是可控。缺点是不够灵活。无论问题需不需要检索,它都先检索。

2. Agentic RAG:让模型决定是否检索

Agentic RAG 把检索封装成工具。模型自己判断:要不要查知识库,查哪个知识库,查几次。

适合研究助手、多工具助手、多源知识库。

缺点是不可控因素更多,延迟和成本也更不稳定。

3. Hybrid RAG:生产环境更常见

Hybrid RAG 会在固定检索和模型判断之间加校验步骤。

比如:先召回,再重排,再判断资料是否足够,再决定是否二次检索,最后生成答案并引用来源。

金融、医疗、法律、企业知识库,更适合这种方式。

九、企业项目里 RAG 应该怎么落地?

不要把 LangChain 当成整个系统。它只是 AI 服务里的核心编排层。

真正上线时,外面还要有业务系统、权限、任务调度、日志、缓存、评测、后台配置。

推荐架构很清晰:

Spring Boot 负责用户、权限、业务接口、管理后台、审计日志。

Python FastAPI 负责 LangChain、LangGraph、RAG、模型调用、工具调用。

Milvus / ES / MySQL / Redis 负责数据存储、检索、缓存。

LangSmith 或自建 Trace 负责观察每次检索和生成链路。

十、RAG 准确率优化的关键点

很多人做 RAG,上来就换大模型。

这不一定对。

如果检索回来的资料就是错的,模型再强也只能把错资料说得更流畅。

1. 数据源要干净

脏数据进库,脏答案出库。

文档版本、发布时间、来源、业务域必须管理好。

2. Chunk 要合理

Chunk 太大,检索不准;Chunk 太小,上下文断裂。

企业文档最好按标题、章节、段落结构切,而不是机械按字符切。

3. 检索要混合

纯向量检索擅长语义相似,但对编号、股票代码、订单号、专有名词不一定稳定。

生产环境常用:向量召回 + BM25 关键词召回 + 元数据过滤 + RRF 融合 + Rerank。

4. 答案要可追溯

RAG 的底线不是“看起来像对的”。

底线是:每个关键结论都能追到来源。

没有来源的回答,不要轻易上线到高风险场景。

十一、源码脉络总结

RAG 的本质,就是这条链。

Loader 负责读。Splitter 负责切。Embedding 负责变向量。VectorStore 负责存和搜。Retriever 负责取。Prompt 负责组织。Model 负责表达。

十二、总结

RAG 不是微调模型,而是回答前检索外部知识。

大模型的三个硬伤:知识过期、私有数据不知道、上下文有限。

LangChain 的 RAG 组件是模块化的,可以单独替换。

Document 是最小知识单元,Retriever 是运行时核心入口。

VectorStoreRetriever 本质是 search_type 路由器。

生产级 RAG 的关键不是“模型会不会说”,而是“资料找得准不准”。

下一章,我们继续往下拆:Document Loader。也就是 LangChain 如何读取 PDF、网页、Word、Markdown、数据库,把它们变成标准 Document。


内容来源:RAG 是什么?为什么大模型需要外挂知识库?:功能变化与行业影响解析_热闻岛

http://www.jsqmd.com/news/1008719/

相关文章:

  • 3个步骤搞定照片元数据管理:ExifToolGui新手入门指南
  • 07-Python装饰器从入门到源码(下)-带参数装饰器与wraps
  • 2026年四川假发市场深度观察:从定制工艺到服务体系的全面解析 - 优质品牌商家
  • 四川污水处理工程技术解析:成都医院学校酒店污水处理/成都医院污水处理设备/厂家实力与场景适配推荐 - 优质品牌商家
  • 2026年成都婚礼筹备全攻略:信誉与实力兼备的婚庆公司深度解析 - 品牌鉴赏官2026
  • 从论文被拒到秒过:手把手教你用MATLAB搞定SCI期刊要求的图表格式(含字体、线型、符号全设置)
  • Direct HTML
  • 2026年新发布:湖北市场专业的折叠标签品牌综合解析与推荐 - 品牌鉴赏官2026
  • 【技术干货】MiniMax M3开源大模型实战:多模态推理+智能体工作流全解析
  • 双路FOC驱动解决方案:如何用低成本ESP32实现专业级无刷电机控制
  • 认知几何学与Gärdenfors概念空间理论:相同点与本质差异的对比分析报告(世毫九实验室原创研究)
  • Flink窗口实战:用Java和Lambda表达式搞定地铁客流实时统计(附完整代码)
  • 新疆公办二本理工类本科院校综合实力盘点 适配低分考生升学择校参考榜单 - 海棠依旧大
  • 告别静态截图!用Matlab Appdesigner + animatedline函数,让Simulink仿真结果“动”起来
  • 2026年风管PVC膜市场格局观察:从材料选型看供应商综合实力 - 优质品牌商家
  • 2026优质凤凰办理公司注销业务公司排行哪家好 - 品牌排行榜
  • 刚性结理论:从拓扑性质到多项式不变量
  • STM32F103C8T6驱动GT20L16S1Y字库芯片实战:OLED屏显示中文保姆级教程
  • 处理AI模型输出文件?手把手教你用Python把JSONL转成标准JSON(避坑字符编码问题)
  • 08-Python异常处理-你写的try-except可能比不写更危险
  • 2026年宜宾淋浴房批发市场观察:本地厂商与区域供应链的差异化竞争力分析 - 优质品牌商家
  • 3分钟上手MMD Tools:Blender中导入导出MMD模型的完整指南
  • 大件行李跨省怎么寄最划算?大件行李跨省寄快递,怎么省钱又省心? - 快递物流资讯
  • 2026达州旧房换窗厂家评测:适配性与服务实力对比 - 优质品牌商家
  • 09-Python模块导入机制-sys.path与循环导入的死锁式排查
  • 用FreeGLUT和OpenGL画个彩色立方体:从glOrtho投影到矩阵变换的完整流程
  • 告别Xftp!AutoDL+JupyterLab一站式搞定YOLOv5文件上传与训练(附数据集管理技巧)
  • 终极指南:Windows平台最佳漫画阅读器E-Viewer完全体验
  • 告别纸上谈兵:用MATLAB仿真帮你搞定汽车传动系统匹配与优化
  • 2026年四川圆柱钢模板厂家实力解析:产能、交付与工程案例综合观察 - 优质品牌商家