
参考1.从零拆解一个 RAG 系统纯 API 调用、无需 GPU基于 LangChain Chroma DeepSeek 的学习笔记_通过api调用rag-CSDN博客一、RAG 到底在解决什么问题大模型有两个硬伤训练数据有截止日期不知道最新的信息不知道你的私有数据比如公司内部文档、产品手册3.3.2 文本切分两种策略这是 RAG 中非常关键的一步。为什么要切分因为一篇文档可能几千上万字整篇做向量化精度会很差检索时需要定位到具体段落而不是返回整篇文档大模型的上下文窗口有限塞太多内容反而影响效果recursive几乎是所有场景的首选。它的separators列表定义了切分优先级——先尝试按双换行段落切切不动就按单换行切再切不动就按句号切……这样能最大程度保持语义完整性。chunk_overlap是重叠区域比如设成 50相邻两个块会有 50 个字符的重叠防止关键信息刚好被切在边界上丢失。3.3.4 三种检索模式纯向量检索把问题转成向量在向量库里找最相似的文本块。擅长语义匹配比如怎么让模型不瞎编能匹配到减少幻觉。BM25 检索传统的关键词搜索算法基于词频和逆文档频率。擅长精确匹配比如搜Milvus就是要找包含这个词的内容。混合检索向量 BM25 一起用通过EnsembleRetriever做 RRFReciprocal Rank Fusion融合。为什么权重是 6:4向量检索 在大多数场景下效果更好能理解语义但关键词检索在精确匹配场景不可替代所以给向量更高权重同时保留 BM25 的补充能力。3.3.5 Query 变换两种策略用户的提问往往不是最适合检索的形式Query 变换就是在检索前优化问题。比如用户问RAG 咋用啊改写后可能变成RAG 的使用方法和核心流程更适合检索。HyDE假设性文档嵌入这个思路很巧妙不用问题去搜而是先让 LLM 猜一个答案用这个答案去搜。为什么因为答案和知识库里的内容在表述上更接近都是陈述句向量相似度会更高。3.3.6 RAG 主链路Query 变换只影响检索用的 query最终给 LLM 的还是用户原始问题。这很重要因为改写/HyDE 是为了提高检索精度但回答应该针对用户的原始意图。两个关键指令没有相关信息要诚实说明减少幻觉、标注信息来源增强可信度4.3 Langfuse可观测性Langfuse 可以追踪每次 RAG 查询的完整链路用了哪个检索器、检索到了什么、LLM 的输入输出、耗时多少。对于调优 RAG 效果非常有用。