RAG 为什么总是“看起来能用,实际不好用”?

简介: RAG效果不佳?问题往往不在模型,而在于文档切分。错误的切分会导致语义断裂、关键信息丢失,使召回内容“看似相关却无用”。本文深入剖析切分误区:固定长度切割、过度依赖overlap、忽视文档结构等,并提出核心原则——保障语义完整性。不同文档需定制切分策略,FAQ按问答切,技术文档依章节分,流程类保完整上下文。切分是RAG的地基,而非细节,唯有夯实,才能让检索与生成真正生效。

引言:RAG 真正让人头疼的地方,从来不是“搭不起来”

如果你已经做过一段时间 RAG,大概率会有一种非常熟悉的感觉:
系统是能跑的,流程也是完整的,embedding 用的也不差,向量库、召回、rerank 该有的都有,但整体效果始终差点意思。

有时候是召回的内容看起来“擦边”,
有时候是答案明明就在文档里,模型却像没看到,
还有时候,模型引用了一堆内容,但就是没真正解决用户的问题。

很多人第一反应是换 embedding 模型、加 reranker、堆上下文窗口,甚至怀疑是不是模型本身太弱。但在真实项目里,我越来越确定一件事:RAG 的问题,绝大多数并不出在模型上,而是出在文档切分上。

切分这件事,太容易被低估了。
它看起来不像模型那么“高大上”,甚至很多教程里一笔带过,但它却决定了 RAG 系统能不能真正理解你的知识。

一个非常现实的事实:RAG 本质上是“先切碎,再找回”

在讨论切分策略之前,有必要先把 RAG 的工作方式说清楚。

不管你的 RAG 架构多复杂,本质流程都绕不开这几步:

  • 原始文档 → 切分成 chunk → embedding → 相似度搜索 → 拼上下文 → 交给大模型生成答案。

也就是说,从模型的视角来看,它从来没有见过完整文档,它看到的永远只是你提前切好的碎片。

这件事如果你不刻意去想,很容易忽略。但一旦你意识到这一点,很多 RAG 的“怪现象”就说得通了。

模型答不上来,有可能不是因为模型不懂,而是因为你切出来的 chunk,本身就无法支撑模型理解问题。

31.png

原始文档 → chunk → embedding → 检索 → 生成的整体流程示意图

为什么大多数 RAG 项目一开始都会“切错”

我见过太多团队,一开始做切分时,采用的都是一种非常“工程直觉”的方式:
按固定长度切,比如 500 token 一段,100 token overlap。

这种方式本身不能说错,它甚至是很多教程里的默认方案。但问题在于,它只考虑了模型的限制,却完全没有考虑内容本身的结构。

文档不是随机 token 的集合,而是有语义、有层次、有上下文依赖的。

当你用固定长度去切一个本来有结构的内容时,很容易出现几种情况:

  • 一句话被切成两半
  • 一个定义和它的解释被拆开
  • 一个流程的前因后果落在不同 chunk 里

这些 chunk 单独拿出来 embedding,看起来都“有点像”,但实际上都不完整。

切分做错时,RAG 会出现哪些典型症状

很多人并不知道自己的切分有问题,只是感觉 RAG 不太好用。这里我总结几个非常典型的症状,你可以对照看看自己有没有遇到过。

最常见的一种情况是:召回的 chunk 看起来都相关,但没有一个真正有用。
你点开看每一条,发现关键词都对,但拼不出完整答案。

还有一种情况是:模型引用了文档,但结论明显不对。
你回头去查原文,发现关键条件刚好被切到了另一个 chunk 里。

更隐蔽的一种,是系统在小样本测试时表现还行,一到真实用户场景就开始翻车。
这是因为真实用户的问题,往往比你测试时想得更复杂,对上下文依赖更强。

这些问题,很少是 embedding 模型的问题,几乎都是切分阶段就已经埋下了雷。

32.png

错误切分导致关键信息分离的示意图

一个核心认知:chunk 不是“越小越好”

很多人在意识到切分重要之后,会走向另一个极端:
既然切分有问题,那我就切得更细。

这是一个非常自然的反应,但在 RAG 里,chunk 过小同样是灾难。

chunk 太小,意味着每一段包含的语义信息非常有限。embedding 虽然能抓住关键词相似度,但却丢失了“为什么”“在什么条件下”“有什么限制”这些关键信息。

结果就是:

  • 召回数量上来了,噪声也上来了。
  • 模型看到了一堆“相关但不完整”的碎片,只能靠自己猜。

这也是为什么你会看到一些 RAG 系统,召回结果看起来很多,但回答质量反而下降了。

真正有用的切分,必须尊重“语义完整性”

在我看来,好的切分策略,核心只有一个原则:
一个 chunk 本身,应该是“可以被人单独读懂的”。

这句话听起来很朴素,但真正做到并不容易。

什么叫“单独读懂”?
不是语法完整,而是语义完整。
读完这一段,你至少能知道它在讲什么、解决什么问题、有哪些前提。

这意味着,切分时你必须开始关心文档结构,而不是只看 token 数。

不同类型文档,切分策略应该完全不同

一个非常常见的错误,是用同一种切分方式处理所有文档。

技术文档、产品说明、客服 FAQ、法律条款,这些内容的结构差异非常大,如果一刀切,效果几乎一定不好。

技术文档往往有明确的标题层级,非常适合按小节切分;
客服 FAQ 通常是一问一答,天然就是 chunk;
流程类文档,最好把一个完整流程放在同一段里;
而规范、条款类内容,则需要保留上下限制条件。

你越是尊重文档本身的表达方式,RAG 的效果越容易提升。

overlap 不是“保险”,用不好反而是噪声源

很多教程都会建议加 overlap,看起来很合理:
前后多留一点上下文,避免信息被切断。

但在真实项目里,overlap 用不好,反而会引入大量冗余。

尤其是在 chunk 已经比较小的情况下,再加大量 overlap,等于在向量库里反复存储相似内容。
结果就是:相似度搜索时,返回一堆几乎一模一样的 chunk。

模型看到这些内容,并不会更清楚,反而更混乱。

我的经验是,overlap 只在“语义边界不清晰”的情况下有意义,而不是作为默认配置。

一个容易被忽略的问题:切分直接影响 rerank 的上限

很多人会把希望寄托在 reranker 上,觉得只要 rerank 足够强,就能弥补前面的不足。

但现实是,rerank 只能在你提供的候选集合里做选择。
如果切分阶段已经把语义切碎了,rerank 再强,也选不出完整答案。

你可以把 rerank 理解成一个“精修工具”,而不是“救命工具”。

ChatGPT Image 2026年1月21日 21_40_04.png

切分质量对召回与 rerank 效果的影响示意图

一个实用的切分思路:先人为理解,再让模型理解

在很多项目里,我会建议团队先做一件“看起来很笨”的事:
随机抽几篇文档,手工切一版。

不是为了最终使用,而是为了建立对“什么样的 chunk 是有用的”的直觉。

当你自己能接受把某一段单独交给别人阅读时,它大概率也适合作为 RAG 的最小知识单元。

等这个感觉建立起来,再去用规则或者模型自动化,效果会好很多。

在验证切分策略是否合理时,先通过在线方式快速尝试不同切分方案,对比召回结果和生成效果,往往比一开始就全量入库更省时间。像 LLaMA-Factory online 这类工具,在这个阶段能明显降低试错成本。

如何判断你的切分是不是在“拖后腿”

这里有一个非常实用的小测试方法。

找几个你非常确定答案就在文档里的问题,让 RAG 系统只返回检索结果,不生成答案。
然后你自己去看这些 chunk:
如果你作为人,读完这些内容,依然很难回答问题,那问题基本就不在模型。

这个方法简单粗暴,但几乎百试百灵。

总结:切分不是细节,而是 RAG 的地基

很多团队在做 RAG 时,把 80% 的精力放在模型、参数、架构上,却只花 20% 的精力在切分上。
但现实往往正好相反:切分这种“看起来很基础”的工作,决定了 RAG 能走多远。

当你真正把切分当成一个需要反复打磨的工程问题,而不是一次性配置,你会发现 RAG 的很多“玄学问题”,其实都有迹可循。

在这个过程中,能够让你快速验证切分效果、反复调整策略的工具,比追逐更大的模型更有价值。

相关文章
|
3月前
|
数据采集 存储 监控
显存不够?16G显卡驾驭13B模型的计算与优化全指南
显存不够也能玩转大模型!本文详解如何用16G显卡成功微调13B参数模型,从显存精准计算、INT8量化、LoRA低秩适配到激活检查点优化,手把手教你规避OOM风险。结合实战代码与监控技巧,显存占用压至14.5GB内,效果显著优于7B模型。低成本实现高效大模型微调,个人开发者和小团队必备指南!
|
3月前
|
人工智能 JSON 并行计算
建议收藏:大模型模型实战手册,让你的AI从“通才”变成“专才”
本文深入浅出地讲解了如何让大模型真正懂你的业务。针对开源模型“胡说八道”的痛点,系统拆解CPT、SFT、DPO三大微调技术,结合Qwen 2.5、Llama 3等主流模型实战对比,并手把手指导数据准备、环境配置与训练优化,助你用低成本打造专属AI专家,少走半年弯路。
215 2
|
3月前
|
运维 安全 算法
RAG 不是万能解,这些场景你一开始就不该用
RAG并非万能,默认滥用反致系统复杂、效果难测。它仅解决“信息获取”,不提升模型能力。最适合四类场景:动态知识更新、需答案溯源、长尾问题密集、需求尚不明确。慎用于强推理、隐性经验、高实时性及高确定性要求场景。核心判断:问题是“找不到信息”,还是“不会处理信息”?
|
3月前
|
数据库
向量数据库实战:从“看起来能用”到“真的能用”,中间隔着一堆坑
本文揭示向量数据库实战的七大关键陷阱:选型前需明确业务本质(模糊匹配 or 精确查询?);embedding 比数据库本身更重要,决定语义“世界观”;文档切分是核心工程,非辅助步骤;建库成功≠可用,TopK 准确率会随数据演进失效;“相似但不可用”是常态,必须引入 rerank;需建立可追溯的bad case排查路径;向量库是长期系统,非一次性组件。核心结论:难在“用对”,不在“用上”。
|
2月前
|
安全 物联网 C++
技术抉择:微调还是 RAG?——以春节祝福生成为例
本文以春节祝福生成为例,剖析微调与RAG的本质差异:RAG解决“信息缺失”,微调重塑“表达偏好”。当任务重风格、重分寸、重一致性(如拜年话术),模型缺的不是知识,而是默认的得体表达——此时微调比RAG更直接、可控、高效。
413 165
|
3月前
|
数据采集 文字识别 BI
RAG 只做文本已经不够了:多模态问答的工程化落地指南
本文深入探讨多模态RAG的工程落地挑战与实践方案,揭示为何仅处理文本已无法满足企业真实需求。从图像、表格等多模态数据的解析、语义对齐、检索融合到生成控制,系统梳理三层架构与四大关键步骤,助力构建真正可用的多模态问答系统。
|
3月前
|
存储 自然语言处理 监控
10 万文档 RAG 落地实战:从 Demo 到生产,我踩过的所有坑
本文分享10万级文档RAG系统从Demo到生产的实战经验,剖析检索慢、召回率低、部署复杂三大痛点,涵盖文档切分、Embedding选型、向量库优化、重排序与生成约束等关键步骤,并提供可落地的工程方案与评估方法,助力构建高效、稳定的企业级RAG系统。
|
存储 算法 数据处理
从零搭建向量数据库:实现文本语义检索实战
本文带你从零实现一个最小可用的文本语义检索系统,剖析向量数据库核心模块:文本嵌入、向量存储、近似最近邻搜索、元数据过滤等。不追求极致性能,重在理解工程设计权衡。通过亲手搭建,掌握系统瓶颈与优化方向,真正用好成熟方案。
|
3月前
|
数据采集 人工智能 机器人
什么是大模型微调?从原理到实操,新手也能轻松上手
本文通俗讲解大模型微调技术,从原理到实操全流程解析。通过比喻厘清CPT、SFT、DPO三种方式,指导新手如何用业务数据定制专属AI,并提供数据准备、工具选择、效果评估等落地步骤,助力个人与企业低成本实现模型私有化,让大模型真正融入实际场景。
什么是大模型微调?从原理到实操,新手也能轻松上手
|
3月前
|
存储 自然语言处理 物联网
16G显卡也能调大模型?先搞懂显存消耗的3大核心原因
本文深入解析大模型微调中显存消耗的三大主因:模型参数、中间激活值与优化器状态,结合原理与实操,教你用16G显卡高效调参。通过精度优化、批大小调整与低显存优化器等策略,精准定位OOM问题,平衡显存、速度与精度,助力中小开发者低成本入门大模型微调。
16G显卡也能调大模型?先搞懂显存消耗的3大核心原因