第16章-RAG

📅 发布时间:2026/10/10 2:58:16
第16章-RAG
第 16 章RAG在模型回答前检索可信外部知识把相关证据加入 Prompt让回答更贴近私有数据并具备可追溯来源。前言模型参数中没有企业最新制度、内部文档和实时知识。RAGRetrieval-Augmented Generation不要求重新训练模型而是在每次回答前检索外部资料再把资料作为上下文交给模型。一、RAG 解决什么问题私有知识没有进入通用模型知识更新频繁不适合反复微调回答需要引用来源需要限制模型只参考当前用户可访问的数据。RAG 能降低无依据回答但不能保证绝对正确。检索错误、文档错误和模型误读仍然可能发生。二、完整流程RAG 分为离线和在线两条链。离线加载 → 清洗 → 切分 → Embedding → VectorStore 在线问题 → 检索 → 上下文增强 → 模型生成 → 引用三、文档加载Document Reader 把 PDF、Markdown、网页或数据库内容转换为统一 Document。加载阶段应保留来源、标题、页码、更新时间、租户等 Metadata。扫描 PDF 需要 OCR复杂表格和多栏排版可能丢失结构不能默认“读取成功”等于内容正确。四、文档切分文档通常不能整体入库。Chunk 太大导致语义混杂和 Token 浪费太小则丢失上下文。切分应考虑标题层级、自然段、代码块、表格以及适当重叠。没有适用于所有资料的固定字符数。五、Embedding 与 VectorStore每个 Chunk 生成向量并与原文及 Metadata 一起写入 VectorStore。查询时必须使用兼容的 Embedding 模型。入库模型变更后通常需要重建向量文档删除或更新时必须同步处理旧 Chunk。六、RetrievalListDocumentdocumentsvectorStore.similaritySearch(SearchRequest.builder().query(question).topK(5).build());检索不仅是 TopK还应组合权限 Filter、相似度阈值、关键词检索和必要的重排。七、Prompt Augmentation把检索结果明确标记为参考资料请仅根据下面资料回答。 资料不足时明确说明无法判断。 【资料】 {context} 【问题】 {question}外部资料本身也可能包含恶意指令。应用应把它视为不可信数据而不是更高优先级的系统规则。八、使用 Advisor 组织 RAGSpring AI 可以通过检索 Advisor 在调用前查询 VectorStore 并增强 Prompt。业务 Service 保持简洁returnchatClient.prompt().user(question).advisors(retrievalAdvisor).call().content();具体 Advisor 名称和构造方式随版本变化应以当前项目 API 为准。九、引用来源回答应返回来源文档、页码或链接。引用必须来自实际检索结果不应让模型自由编造。建议由程序保留检索 Document 的 Metadata再把回答和来源组合为业务响应 DTO。十、没有检索结果时怎么办正确策略通常是明确说明资料不足、引导补充问题或转人工而不是让模型脱离资料自由回答。是否允许回退到通用知识应由业务策略决定。十一、RAG 质量评估分开评估检索正确证据是否进入 TopK生成回答是否忠实于证据引用来源是否真实支持结论安全是否跨租户或越权性能检索与生成延迟、Token 和费用。十二、常见优化查询改写把上下文相关的问题改成可独立检索的问题混合检索向量与关键词结合重排对候选文档再次排序元数据过滤提前限制范围上下文压缩只保留支撑回答的片段。优化必须基于评估集不能只凭单个演示问题。十三、从 API 进入源码Retrieval Advisor ↓ Question → SearchRequest ↓ VectorStore.similaritySearch ↓ Document Context ↓ Augmented Prompt → ChatModel重点观察查询参数如何构造、文档怎样写入请求上下文、引用信息如何保留以及流式调用下增强逻辑是否一致。十四、常见误区接入向量库就完成 RAG还缺少切分、过滤、增强和评估。TopK 越大越好噪声和 Token 成本同步增加。RAG 可以消除幻觉只能降低风险。引用让模型自己写即可来源应由程序依据检索结果生成。权限过滤放在生成后越权文档不应进入 Prompt。十五、本章总结RAG 的核心是“先检索证据再基于证据生成”。高质量实现需要同时管理入库、检索、Prompt 增强、引用、权限与评估。完整源码源码地址待补充 对应章节chapter-16-rag参考资料Spring AI RAG 官方文档下一章Tool Calling下一章让模型不只生成文字还能选择并调用应用内部的确定性能力。