1)传统大模型在业务落地的局限性(为什么需要 RAG)
课件先强调:通用大模型很难直接满足真实业务,主要痛点包括:
-
知识可能过时(训练数据有时效性)
模型训练完成后,新发生的事实/政策/产品变更不会被模型"自动学会",导致回答不及时。
-
会产生"幻觉"(编造不存在的信息)
模型可能生成"看似合理但不符合事实/数据/逻辑"的内容,即一本正经胡说八道。
-
无法访问私有知识库数据
企业内部文档、制度、业务流程、技术沉淀等私有数据并不在通用模型训练集中,模型天然无法回答。
-
回答缺乏具体出处,难以验证
很多调研/合规/技术查证场景要求给出处(论文、文档、链接、段落),而纯生成通常做不到可追溯。
-
对话上下文长度限制
课件提到多数模型上下文限制大约在 128K 左右(一次性可处理的内容有限),无法把"大量资料"直接塞进对话让模型读完。
核心结论:要想兼顾"准确、可追溯、及时、可扩展",需要让模型具备"先查资料再回答"的能力 → 引出 RAG。
2)RAG 的核心概念(是什么、为什么强、怎么用)
2.1 什么是 RAG
课件给出定义公式:
- RAG = Retrieval(检索) + Augmented(增强) + Generation(生成)
解释为:
先从外部数据源检索相关信息 ,再把检索结果作为上下文注入提示词(Prompt),最后由 LLM 在这些"证据"基础上生成答案。
也可理解为:Search + LLM 的组合模式。
并用类比强化直觉:
-
传统大模型:像"闭卷考试"(只能靠记忆)
-
RAG 系统:像"开卷考试"(不会就查资料,然后归纳作答)
2.2 RAG 的本质
一句话总结:
让大模型学会"查资料"后再回答问题,而不是仅凭记忆回答。
并点出常见"资料来源"形态:
-
网络搜索
-
知识库(企业内部文档等)
目标效果:
-
准确性更高
-
时效性更强
-
可追溯(能给信息来源)
2.3 RAG 的优势(相对纯 LLM)
课件强调的主要优势方向:
-
灵活性/适应性强:可接入最新、不断变化的数据
-
提升回答准确性:基于检索证据降低幻觉
-
接入私有知识:企业内部流程、制度、产品文档等
-
可解释/可追溯:答案背后有检索到的文档片段
2.4 真实案例(用"2025 AI 趋势"解释差异)
课件用"咨询 2025 年最新 AI 技术趋势"举例:
-
传统大模型:受训练截止时间影响,可能缺少 2025 新信息
-
RAG:先检索最新行业报告/博客 → 找相关段落 → 结合段落生成答案,并可附"信息来源"
并提到:联网搜索也是一种典型 RAG 场景(网络本身就是外部知识库)。
3)企业 RAG 的核心应用场景(落地在哪里最值)
课件列了 3 类典型场景,并补充电商/法律/医疗/教育等也常见。
3.1 企业知识库与智能问答
场景描述 :企业内部文档海量、分散,员工需要快速准确找到信息。
案例:
-
新员工入职培训问答(降低培训成本)
-
产品技术规格查询(文档分散在不同系统)
-
公司政策咨询(关键词搜索不精准、效率低)
3.2 专业客服与技术支持
场景描述 :客户支持需要准确、一致、可规模化。
课件用对比方式强调 RAG 价值:
-
基于最新产品文档/解决方案库(减少"靠客服记忆")
-
标准化一致回答(减少"因人而异")
-
降低培训成本、提升复杂问题响应速度
3.3 科研与学术研究
场景描述 :研究人员需要快速了解领域最新进展与文献。
价值体现:
-
快速文献调研
-
跨领域知识整合
-
研究趋势分析
4)RAG 工作原理:通用两阶段流程(离线建库 + 在线问答)
课件给出一个"最基础 RAG 技术实现流程图",并总结为两阶段:
阶段一:准备阶段(建立知识库,离线)
-
数据接入:收集文档(PDF/Word/网页等)
-
文档解析:抽取纯文本
-
文档分割:把长文档切成 chunks
-
向量化:把文本转成向量(Embeddings)
-
存储:向量写入向量数据库
阶段二:问答阶段(智能应答,在线)
-
用户提问
-
问题向量化
-
相似度检索:向量库找最相关 chunks
-
提示增强:chunks + 问题 拼成 Prompt
-
生成答案:LLM 基于增强 Prompt 输出最终结果
5)RAG 完整执行流程详解(课件重点:每一步都拆开讲)
下面是课件对"建库阶段"和"推理阶段"的逐步展开(含示例代码与工具栈)。
A. 知识库构建阶段(离线)
A1. 数据源接入
目标 :从各种来源收集原始数据。
常见数据源:
-
本地文件(PDF、Word、TXT、Markdown)
-
数据库记录
-
网页内容
-
API 接口数据
-
企业内部文档
课件示例用一个 data_sources 字典展示多源接入的抽象结构(表示你可以同时接入多类数据)。
A2. 文档解析(Document Parsing)
目标 :从原始文件提取"可用于检索"的文本内容。
处理类型示例:
-
PDF → 提取文字、表格
-
HTML → 去除标签、保留正文
-
Word → 解析结构
-
图片 → OCR 识别
课件这里提到"技术工具...(省略号)",整体意思是:不同格式需要不同 parser / loader。
并给了一个与 LangChain 相关的"Word 文档解析示例"(在后续代码单元里出现)。
A3. 文档分割(Chunking)
目标:把长文档切成适合检索/模型上下文使用的小片段(chunks)。
为什么要分割:
-
LLM 输入长度限制
-
提高检索精度(细粒度更容易命中)
-
避免一次塞入太多信息导致信息过载
课件给出 LangChain 的 RecursiveCharacterTextSplitter 示例(重点参数都讲到了):
-
chunk_size=500:每块最大字符数 -
chunk_overlap=100:相邻块重叠,保证上下文连贯 -
separators=[... "\n\n", "\n", "。", "!", "?", ",", ""]:按分隔符优先级递归切分 -
add_start_index=True:记录每块在原文起始位置
最后通过 split_documents(documents) 得到 all_splits。
A4. 词向量化(Embeddings)
课件先用"向量的大小与方向"的数学直观解释向量,再转到 NLP/LLM 里的 embeddings:
-
文本 → n 维向量(Embeddings)
-
向量之间可以算距离/相似度 → 表示语义相似程度
课件提供了两种 embedding 路线示例:
方案 1:OpenAI Embeddings API
-
从环境变量读取
OPENAI_API_KEY与OPENAI_BASE_URL -
示例模型名:
text-embedding-3-small -
使用
client.embeddings.create(model=model_name, input=text)得到向量,并打印维度与前几个值
方案 2:开源/本地 Embeddings(HuggingFace)
-
使用
HuggingFaceEmbeddings -
示例模型:
BAAI/bge-large-zh-v1.5 -
model_kwargs={'device': 'cpu'}(提示可改 cuda) -
embed_documents([text])[0]得到向量
课件还提示:如果交互控件报错,可 pip install --upgrade ipywidgets(用于解决某类 notebook UI 依赖问题)。
A5. 文档存储(向量数据库)
课件用 FAISS 作为向量库示例(LangChain 的 vectorstore 封装):
-
vectorstore = FAISS.from_documents(all_splits, embeddings) -
可选:
vectorstore.save_local("word_doc_faiss_index")
意义:
将每个 chunk 的 embedding 与元信息存入向量库,供后续快速相似度检索。
B. 问答推理阶段(在线)
B1. 用户提问
用户输入 query(课件后面演示用了类似"调休的申请流程是什么?"这样的企业流程类问题)。
B2. 文档检索(Retrieval)
课件展示两种检索方式:
-
vectorstore.similarity_search(query, k=3):返回 top-k 文档片段 -
vectorstore.similarity_search_with_score(query, k=3):返回片段 + 相似度分数,并打印每条结果
B2.1 向量间的相似度计算(课件专门讲"怎么判断相似")
课件引入常见指标,并用 numpy 示例演示:
-
余弦相似度(cosine similarity):数值越大越相似
-
欧氏距离(L2 distance):数值越小越相似
示例还强调可以做"跨语言检索"的感觉:query 用英文,documents 用中文,通过 embedding 仍可算相似度(依赖 embedding 模型的跨语言能力)。
(代码里有 cos_sim、l2_dist、get_embedding 等函数框架;部分单元用 ... 省略了细节,但逻辑是:把 query/documents 向量化后逐一计算相似度/距离。)
B3. 提示增强(Prompt Augmentation)
课件给出一个清晰的"RAG Prompt 构建函数":
-
将检索到的 chunks 拼成
context -
Prompt 模板要求:
-
"请根据以下上下文回答"
-
"如果上下文没有答案,请说明"
-
输出"详细、准确的回答"
-
这一步的本质:把"证据"强行塞进模型上下文,约束模型在证据基础上回答。
B4. 答案生成(Generation)
课件提供一个"完整 RAG 调用封装":
-
retrieved_docs = vectorstore.similarity_search(query, k=3) -
prompt = build_rag_prompt(query, retrieved_docs) -
response = llm_model.invoke(prompt) -
返回
response.content
并用 ChatOpenAI 初始化模型(示例:gpt-3.5-turbo,temperature=0.7),然后对示例 query 输出最终回答。
6)完整流程演示(从检索到生成串起来)
课件的"流程演示"部分主要体现:
-
向量库检索 top-k
-
拼 Prompt
-
调用 LLM 得到答案
-
打印"用户提问/模型最终回答"
即一个最小可用 RAG pipeline。
7)RAG 实践落地策略(怎么把它做成产品/系统)
课件给出 4 条路线(从重到轻):
-
手动搭建 RAG 引擎(自主可控、工作量最大)
-
低代码平台搭建:Coze、Dify、N8N(更快落地)
-
用 GLM / OpenAI Responses API 等快速实现(强调"官方 API 快速集成"的路径)
-
用开源框架快速搭建:LangChain、LlamaIndex(工程生态完善)
8)实际部署考虑(选场景/上线前要想清楚什么)
课件给出 4 个决策维度:
-
数据质量:是否有高质量、结构化/可解析的知识源?
-
更新频率:知识需要多频繁更新(涉及增量构建/重建索引)?
-
准确度要求:错误代价多大(客服/医疗/法律通常要求更严)?
-
技术复杂度:团队是否具备相应工程能力?
9)RAG 应用的优化方案(提升效果的主要抓手)
课件列出 5 个常用优化方向(非常贴近工业实践):
-
优化文本分割:更合适的 splitter、chunk size、overlap
-
重排序(Re-ranking):对召回结果再排序,提高 top 文档相关性
-
多轮对话与历史管理:把历史上下文纳入检索/生成(避免"断片")
-
混合检索:关键词检索(如 BM25)+ 向量检索,提高召回
-
评估与迭代:构建评估集,对 RAG 做定量评估指导迭代