01 为什么 RAG 效果差?先定位问题根源


很多人调了半天 prompt,结果大模型还是答错了。根源不在生成,在检索。

RAG 的效果链路是:

用户问题

    │

    ▼

[ 检索层 ]

    │

    ├── 分块质量差 → 上下文残缺 → 召回无关块

    ├── 只用向量检索 → 关键词命中率低

    ├── 没有 Rerank → 排名靠后的相关块被截断

    │

    ▼

[ 生成层 ]

    │

    └── 拿到残缺/无关上下文 → 答案偏差/幻觉

三个核心问题,三个解法,今天一次讲完。


02 分块策略:这是 RAG 效果的地基


分块(Chunking)就是把长文档切成小片段,再入库。块的大小和切法,直接决定检索召回的上限。

一个反直觉的事实: 块太大 ≠ 信息更全,块太小 ≠ 检索更准。

块太大(1000+ tokens):

┌──────────────────────────────────────┐

│  无关噪声  │  相关内容  │  无关噪声  │

└──────────────────────────────────────┘

         ↓ 向量被稀释,相关度下降

块太小(50 tokens):

┌────┐┌────┐┌────┐

│ A1 ││ A2 ││ A3 │  一个完整语义被切断

└────┘└────┘└────┘

         ↓ 上下文缺失,LLM 看不懂

合理块(200-500 tokens + overlap):

┌──────────────┐

│  完整语义单元  │  带20%重叠确保边界不丢

└──────────────┘

         ↓ 召回精准,上下文完整

4种主流分块策略对比:

策略 适用场景 优点 缺点
固定长度(Fixed-size) 通用文本 简单快速 可能切断语义
递归字符(Recursive) 结构化文档 尊重自然边界 需要调参
语义分块(Semantic) 知识密集文档 语义完整 计算成本高
父子分块(Parent-Child) 长文档精检索 召回精准+上下文全 实现复杂

工程上用得最多的是「父子分块」,检索小块、返回大块,兼顾精准和完整。

importRecursiveCharacterTextSplitterfrom"@langchain/textsplitters"importMemoryVectorStorefrom"langchain/vectorstores/memory"importParentDocumentRetrieverfrom"langchain/retrievers/parent_document"importInMemoryStorefrom"@langchain/core/stores"// 父块:大块,保证上下文完整(2000 tokens)constnewRecursiveCharacterTextSplitterchunkSize2000chunkOverlap200// 子块:小块,用于精准检索(200 tokens)constnewRecursiveCharacterTextSplitterchunkSize200chunkOverlap20// 父块存到 docstore(内存或 Redis)constnewInMemoryStore// 子块向量化,入向量库constawaitMemoryVectorStorefromDocuments// 父子检索器:检索子块,返回父块constnewParentDocumentRetrievervectorstoredocstoreparentSplitterchildSplitter// 入库awaitaddDocuments// 检索:命中子块 → 自动返回对应父块constawaitinvoke"你的问题"consolelog0pageContent// 返回完整的父块内容

03 Overlap 设置:边界不丢才是关键


很多同学忽视了 overlap(重叠窗口)。这个参数不起眼,但是关键句跨块的救命稻草。

不设 overlap:

块1:[...Apple今年发布了新款MacBook Pro,搭载M3芯片]

块2:[性能相比上代提升40%,续航延长至22小时...]

     ↑ "性能提升40%"是接着M3芯片说的,切断了!

设置 overlap=100:

块1:[...Apple今年发布了新款MacBook Pro,搭载M3芯片]

块2:[搭载M3芯片,性能相比上代提升40%,续航延长至22小时...]

     ↑ 重叠部分把语境带过来了

工程经验:

  • 中文文档:overlap = chunkSize × 10%~15%
  • 技术文档(含代码):overlap = chunkSize × 20%
  • 纯代码块:按函数/类边界切,不要硬切

04 混合检索:向量 + BM25,召回率直接拉满


纯向量检索有个死穴——关键词精确匹配弱

用户问「LangChain v0.3 的 breaking change 有哪些」,向量检索只能捕捉语义相似,但版本号「v0.3」这种精确词汇,BM25 才能稳稳命中。

纯向量检索:

查询: "LangChain v0.3 breaking change"

    │

    ▼

向量空间计算语义相似度

    │

    └── 召回了"LangChain 更新内容"(正确)

        但漏掉了明确标注 "v0.3" 的文档(漏召回)

纯 BM25 检索:

    │

    └── 精确命中 "v0.3" 关键词(正确)

        但漏掉了语义相近但表述不同的文档

混合检索(Hybrid Search):

向量结果 ───┐

            ├── RRF 融合 ──→ 最终排序

BM25结果 ───┘

     ↑ 两者互补,召回率最大化

LangChain 的 EnsembleRetriever 实现很简洁:

importBM25Retrieverfrom"@langchain/community/retrievers/bm25"importEnsembleRetrieverfrom"langchain/retrievers/ensemble"// 向量检索器(接 Milvus / Chroma 等)constasRetrieverk10// 多取一些,后续 Rerank 会精选// BM25 关键词检索器constBM25RetrieverfromDocumentsk10// 混合检索:RRF 算法融合排名// weights: 向量占0.6,BM25占0.4(可根据场景调)constnewEnsembleRetrieverretrieversweights0.60.4constawaitinvoke"LangChain v0.3 breaking change"// 返回两路召回的融合结果,按 RRF 分数重排

RRF(倒数排名融合)算法原理:

文档 D 在向量检索中排名 r1,在 BM25 中排名 r2

RRF(D) = 1/(k + r1) + 1/(k + r2)    k=60(平滑参数)

例:

  向量排名第2,BM25排名第1:

  RRF = 1/62 + 1/61 ≈ 0.0323

  向量排名第8,BM25排名第3:

  RRF = 1/68 + 1/63 ≈ 0.0306

两路都靠前的文档,RRF 分数最高 → 排到最前面

05 Rerank:第二关筛选,把最相关的送进上下文


混合检索帮你扩大了召回,但 LLM 的 context window 有限,最终只能放进去 3-5 个块。

这时候 Rerank 模型上场——它不看向量距离,而是直接用交叉注意力机制,对「查询+文档」联合打分,精度远高于向量相似度。

没有 Rerank 的问题:

向量检索 Top-5:

  ✅ 文档A(最相关,排第3)

  ❌ 文档B(相似但无关,排第1)

  ❌ 文档C(语义相近但答不了,排第2)

  ✅ 文档D(相关,排第4)

  ❌ 文档E(无关,排第5)

LLM 拿到 Top-3 → B、C、A  → 前两个都是干扰!

加了 Rerank 之后:

Rerank 重新打分(交叉注意力):

  文档A → 0.95 ← 最相关

  文档D → 0.88 ← 次相关

  文档B → 0.23 ← 重排后被踢出

  文档C → 0.18 ← 重排后被踢出

  文档E → 0.09 ← 重排后被踢出

LLM 拿到 Top-3 → A、D、... → 全是精华

importCohereRerankfrom"@langchain/cohere"importContextualCompressionRetrieverfrom"langchain/retrievers/contextual_compression"// Rerank 模型(Cohere 或开源 BGE-Reranker)constnewCohereRerankapiKeyenvCOHERE_API_KEYmodel"rerank-multilingual-v3.0"// 支持中文topN3// 最终保留3个// 两步检索:先召回20个,再 Rerank 精选3个constnewContextualCompressionRetrieverbaseCompressorbaseRetriever// 接上一步的混合检索constawaitinvoke"你的问题"// rerankedDocs 是经过 Rerank 精选的 Top-3,送进 LLM 生成

如果用开源 BGE-Reranker(不需要 API key):

importHuggingFaceInferenceEmbeddingsfrom"@langchain/community/embeddings/hf"// 本地部署 BAAI/bge-reranker-v2-m3// 调用方式略有不同,用 HTTP 接口包装constasynccompressDocumentsdocs: Document[], query: stringconstawaitPromiseallmapasyncconstawaitfetch"http://localhost:8080/rerank"method"POST"headers"Content-Type""application/json"bodyJSONstringifytextpageContentconstawaitjsonreturnreturnsort(a, b) =>scorescoreslice03map(item) =>doc

06 完整 RAG Pipeline:把三件事串起来


把分块、混合检索、Rerank 穿成一条链:

原始文档

    │

    ▼

[父子分块]

    ├── 子块(200 tokens)→ 向量化入库

    └── 父块(2000 tokens)→ docstore 存储

    │

    ▼

用户提问

    │

    ├── 向量检索(Top-10)

    └── BM25检索(Top-10)

    │

    ▼

[EnsembleRetriever RRF 融合]

    │

    └── 融合结果(Top-20)

    │

    ▼

[Rerank 精选]

    │

    └── Top-3 最相关块

    │

    ▼

[LLM 生成]

    │

    └── 最终答案

importChatOpenAIfrom"@langchain/openai"importfrom"langchain/chains/combine_documents"importfrom"langchain/chains/retrieval"importChatPromptTemplatefrom"@langchain/core/prompts"constnewChatOpenAImodel"gpt-4o-mini"constChatPromptTemplatefromTemplate`你是专业的技术助手,根据以下上下文回答问题。如果上下文中没有答案,直接说"我不知道",不要猜测。上下文:{context}问题: {input}`// 文档整合链constawaitcreateStuffDocumentsChain// 完整 RAG 链:混合检索 + Rerank + 生成constawaitcreateRetrievalChainretriever// 已含混合检索+Rerank// 执行constawaitinvokeinput"LangChain 的 LCEL 和传统 Chain 有什么区别?"consoleloganswer// 输出精准的答案,不再幻觉

07 效果调优:这几个参数决定最终表现


搭完之后别急着上线,这几个参数值得花时间调:

(1)chunk_size 怎么定?

文档类型              推荐 chunk_size   overlap

─────────────────────────────────────────────

FAQ / 问答对          200~300 tokens   50

技术文档(连续段落)   400~600 tokens   100

合同/法律文件          600~800 tokens   150

代码文件(按函数切)   300~500 tokens   50

(2)混合检索权重怎么调?

  • 问答类(用户问精确问题):向量0.4 + BM25 0.6(关键词更重要)
  • 语义搜索类(模糊语义查询):向量0.7 + BM25 0.3
  • 通用场景:向量0.6 + BM25 0.4(默认起点)

(3)初检 k 值设多大?

Rerank 需要有足够的候选才能发挥作用,建议:

初检 k = Rerank topN × 5~10

例:最终需要 Top-3 → 初检至少召回 15~30 个

k 太小,相关文档没进候选,Rerank 巧妇难为无米之炊。


08 常见坑与自查清单


坑1:分块时没处理特殊字符

中文文档里的全角空格、「」书名号、……省略号,会干扰 BM25 分词,记得预处理清洗。

坑2:Rerank 拖慢响应

Rerank 是额外的模型调用,延迟真实存在。生产环境建议:

  • 缓存高频查询的 Rerank 结果
  • 或用更轻量的本地模型(BGE-Reranker-base)

坑3:父子检索的 docstore 没持久化

InMemoryStore 重启就清空。生产用 RedisStoreMongoDBStore 做持久化,否则父块找不回来。

坑4:混合检索中 BM25 索引没更新

向量库支持实时入库,但 BM25 索引通常是静态构建的。文档更新后记得重建 BM25 索引。

// 自查清单const"chunk_size 是否按文档类型调整"false"overlap 是否设置"false"父子分块 docstore 是否持久化"false"BM25 分词是否处理中文"false"RRF 权重是否按场景调整"false"初检 k 值是否 ≥ topN × 5"falseRerank"Rerank topN 是否 ≤ 5"false"高频查询是否加缓存"false"模型选型是否支持中文"false

总结

这篇我们把 RAG 效果优化的三板斧拆清楚了:

  • 分块是地基:块太大稀释语义,块太小丢失上下文,父子分块是工程最优解
  • Overlap 不能省:跨块语义靠它救,中文文档 10%~15% 起步
  • 混合检索补盲区:向量抓语义,BM25 抓关键词,RRF 融合两路召回
  • Rerank 是精华筛:从20个候选里选3个,交叉注意力机制比向量距离更准
  • 参数要按场景调:没有万能参数,chunk_size / 权重 / k 值都要根据文档类型和查询模式来

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
在这里插入图片描述

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
在这里插入图片描述

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】
在这里插入图片描述

大模型全套学习资料展示

自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

图片

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01 教学内容

在这里插入图片描述

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

image.png

vx扫描下方二维码即可
【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】
在这里插入图片描述

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03 入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:
图片

04 视频和书籍PDF合集

图片

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

图片

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
图片

05 行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!
图片

06 90+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)图片
在这里插入图片描述

07 deepseek部署包+技巧大全

在这里插入图片描述

由于篇幅有限

只展示部分资料

并且还在持续更新中…

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】
在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐