第 06 课RAG 语义搜索配套代码仓库https://gitee.com/wang-zeyong111/lang-chain-lecture本课定位RAG 是企业级 LLM 应用最常见的模式之一。它解决的问题是模型不知道你的私有资料或者模型记忆可能过期、不可靠。RAG 通过检索相关资料把正确上下文提供给模型再让模型基于上下文回答。学习目标理解 RAG 的完整流程。掌握 Document、Splitter、Embedding、VectorStore、Retriever 的职责。能搭建一个小型本地知识库。理解 chunk size、overlap、k 值对效果的影响。学会要求答案提供引用来源。一、RAG 的基本流程RAG 全称 Retrieval-Augmented Generation检索增强生成。标准流程加载文档清洗文档文本切分生成 embedding写入向量数据库用户提问检索相关 chunk把 chunk 填入 prompt模型生成答案返回答案和引用。核心思想不要把所有资料都塞给模型而是检索最相关的资料。二、DocumentLangChain 中常用Document表示一段文档page_content文本内容metadata来源、标题、页码、URL、时间等元数据。元数据非常重要因为最终答案需要引用来源。如果你在入库时没有保存来源后面就很难生成可信引用。三、文本切分为什么要切分原始文档可能太长无法直接放入上下文检索需要更细粒度embedding 通常对短段落更有效模型回答只需要相关片段。常见参数chunk_size每块多长chunk_overlap相邻块重叠多少separator按段落、标题、句子或字符切分。经验FAQ、短制度chunk 可以小一些技术文档尽量按标题和段落切法律合同要保留条款完整性代码按函数、类、文件结构切。四、EmbeddingEmbedding 把文本转换成向量使相似语义在向量空间中更接近。注意embedding 模型决定检索质量上限中英文能力要匹配你的文档查询和文档要用同一个 embedding 模型embedding 需要成本和时间可以缓存文档更新后要重新索引相关内容。五、向量数据库向量数据库负责存储和检索 embedding。常见选择FAISS本地、轻量、适合实验Chroma本地开发友好Milvus开源向量数据库Pinecone、Weaviate、Qdrant生产常见选择Elasticsearch/OpenSearch适合混合检索。课程中为了不依赖外部服务先用关键词检索和教学用 HashEmbeddings 理解流程。真实项目要换成高质量 embedding 和合适的向量数据库。六、RetrieverRetriever 接收 query返回相关 Document 列表。它是 RAG 链中的关键接口。常见参数k返回多少条score threshold最低相似度metadata filter按部门、权限、时间过滤search type相似度、MMR、混合检索。好 RAG 的第一步是好检索。模型回答不好先看检索结果不要急着改 prompt。七、RAG Prompt 设计一个基础 RAG prompt 应该包含角色回答依据不知道时如何处理引用要求用户问题检索上下文。示例你是严谨的知识库助手。 只能依据给定上下文回答。 如果上下文不足请说“资料不足无法确认”。 答案必须列出引用来源。 问题{question} 上下文{context}八、引用来源引用是 RAG 可信度的关键。建议每个 chunk 都带文档 ID标题页码URL更新时间权限标签。答案中可以输出参考来源 [1] 员工手册第 3 页 [2] 售后政策2026-01 版九、RAG 质量评估至少检查检索是否召回正确文档检索顺序是否合理答案是否只基于上下文引用是否正确不知道时是否拒答chunk 是否过大或过小查询是否需要改写是否存在权限越界。十、常见失败原因文档切分破坏语义完整性。embedding 模型不适合中文或领域文本。k 太小导致漏召回。k 太大导致上下文噪声过多。没有 metadata filter用户看到无权限资料。prompt 没有约束“只能依据上下文”。没有评估集调参靠感觉。十一、自测清单我能画出 RAG 的完整流程。我知道 Document 的 metadata 为什么重要。我能解释 chunk size 和 overlap 的影响。我知道 retriever 返回的是 Document 列表。我能设计一个要求引用和拒答的 RAG prompt。十二、课后练习用 5 条自己的资料替换课程示例文档。尝试不同chunk_size和k。记录 3 个检索失败案例。为每条文档添加 metadata并让答案输出来源。