
RAG 答错时,先查解析产物、再查检索、最后查模型,多数问题在第一步就能定位:检索只能返回已入库的内容,模型只能用检索交给它的上下文。方向定下来后,调优动作集中在多模态解析(文档版)的 ResultType、TaskType 与 EnableSubImg 等参数上。
RAG 答错时,第一反应往往是“召回不准”或“模型不行”。但把答错的形态拆开看,会发现不同的错法指向完全不同的环节。先分清症状,后面的排查才有方向。
典型表现是:答案本身是文档里写过的内容,但被用在了错误的对象上。问甲产品的返修周期,回答的是乙产品的;问某条款的违约金比例,回答的是另一个条款的比例。检索回来的片段里确实出现了关键词,只是这段内容并不是问题所指的那一段。
这类错位常见于层级信息被拉平之后。原文里“某产品”这个限定词可能写在章标题上,正文各段并不重复;一旦层级丢失,每段文字都变成同等地位的独立段落,模型只能按文字相似度猜这一段说的是谁。
第二种症状更隐蔽:数字列得出来,但行的含义对不上。表现包括表格跨页之后第二页数据被当成独立的一段、列名与数值分离、合并单元格被拆平成一串没有归属的值。
问到“某个指标的年度合计是多少”时,模型可能给出一个数值,但这个数值实际来自表格的另一行,或者只统计了跨页后的半张表。因为检索块里没有列名也没有表结构,模型只能根据数字本身去编一个上下文。
第三种症状是“答不出来”。问的内容明明就在图或图表里,系统的回答却是“文档中未提及”。原因不在检索,而在入库:图片在解析阶段被跳过,公式被抽成一串无法解析的字符,或图表被转成了失真的表格。
这一类很容易被误判成“知识库覆盖不全”,于是团队去补充资料、扩大语料,但真正缺失的内容其实一直躺在原始文件里,只是从来没有进入过索引。
把三类症状放在一起看,共同点就出来了:它们都不是检索或生成环节能修复的问题。检索只能返回已经入库的东西,模型只能使用检索交给它的上下文。如果入库产物本身已经丢了结构、丢了图、丢了列名,那么在检索和模型上调参数,最多只是让错误的原料被更快地找出来。
所以排查顺序应当从上游往下游走,而不是反过来。
第一步,查解析产物。把答错的那几个问题对应到原文位置,然后在已经入库的分块里找到对应片段,直接看这块内容长什么样:标题层级在不在、表格是不是完整、阅读顺序对不对、图有没有被抽出来。这一步花的时间不多,却能排除掉大部分嫌疑。
第二步,查检索。只有在解析产物本身完好、结构清楚的前提下,检索结果不好才可能是分块策略、检索方式或排序的问题。此时要看的指标是“正确答案所在的块有没有被召回”,而不是“排在第一的结果看起来像不像”。
第三步,才轮到模型与提示词。如果正确且完整的上下文已经召回,答案仍然不对,那才是生成环节的问题。
排查常犯的错误是从下往上查:先换模型、再换向量库、再调提示词,最后才发现原文里的表格在第一步入库时就已经被拆散了。
定位到解析产物的问题之后,调优要落到参数上。下面按多模态解析(文档版)(接口 MultimodalDocParse)的 ResultType、TaskType、PageRange、EnableSubImg 四个参数,逐类给出调整方向。
如果排查发现入库的分块是按固定字数切出来的,段落被拦腰截断、章节标题和正文分离,那么问题的根源不是分块算法本身,而是解析产物里根本没有层级信息可用。
动作是先确认 ResultType 里有没有 JSON:默认值 9 会一次返回 json、markdown、xml 三种,JSON 已在其中;如果曾被改成 2(仅 markdown),结构化分块就失去了依据,需要改回 9 或 1。拿到带层级的 JSON 之后,再改用层级驱动分块:按标题层级确定块的边界,让每个块有明确归属,并把父级标题一并写进块内。
表格类问题要先看这批文档的主体内容。以报表、清单、对账表这类表格为主体的文档,把 TaskType 从默认的 0 文档解析换成 3 切片表格识别,解析会更侧重表格结构的保留;以文字为主、只夹杂少量表格的文档,保持在文档解析这一档,先确认输出里的表格有没有被压平成文本行,再决定要不要单独处理。
入库时还要补一条规则:表格不参与按字数切分,一张表整体成块,并在块内重复表头。表格一旦被切成两半,后面无论怎么调检索都无法还原。
阅读顺序的问题通常来自两种情况:文档本身是多栏排版,或者解析时的分段落在了跨页的位置。
动作分三步。先确认解析产物是否带阅读顺序,带顺序的输出才能支撑按语义边界切分;再调整切分逻辑,让它按段落、标题、列表项这类语义边界切,而不是按固定字符数切。最后处理跨页:单次调用最多支持 300 页,页数更多的文档要用 PageRange 分批;分批时不要把切点落在表格或章节中间,选在章节边界,比事后修补便宜得多。
如果答错的问题涉及图表、示意图或图注,先查解析结果压缩包里的 images 文件夹有没有对应文件——多模态解析(文档版)返回的 zip 内,图片资源是单独存放的。需要在解析阶段把子图也抽出来的,打开 EnableSubImg 参数,它默认是关闭的。
图片问题的处理方式与文字不同:文字可以靠分块策略补救,图片一旦没有在解析阶段被保存出来,后面没有任何环节能把它找回来。因此对图文穿插比例高的文档,建议把 EnableSubImg 按默认开启来评估。
改造的账要先算清。重跑一次解析按页计价,多模态解析(文档版)后付费 0.08 元/页,预付费资源包四档折合下来分别是 0.07、0.06、0.05、0.04 元/页(1000 页 70 元、1 万页 600 元、10 万页 5000 元、100 万页 40000 元),页数越大单价越低。开通服务时发放的 1000 页免费额度一次性到账、一年内有效,第一轮小样本验证可以直接用它覆盖,不必额外付费。
验证方法建议用同一批文档做前后对照,而不是只看新解析结果是否“看起来更好”。具体做法是:
验证的目标应当落在结构上,而不是落在单条答案上。单条答案对了可能是巧合,也容易过拟合;解析产物在结构上正确才是可复用的质量基线——只要这一层稳定,后续换检索方式、换模型都不会推翻它。
追到最后会发现,检索和模型都只是末端。值得先花时间的地方,是文档进索引之前的那一步;把解析产物查清楚、把参数调到位,很多"模型不行"的结论会自动消失。
要让这套排查流程真正跑起来,关键在于把验证范围收小:一批文档、一组问题、前后对照一次,结论就出来了。多模态解析(文档版)首次开通即发放 1000 页免费额度、一年内有效,配合免费额度先跑一轮小样本即可;确认要放量之后,可对照 文档智能特惠活动 的折扣档位:多模态解析(文档版)新用户首单低至 5 折、不限新老用户低至 6 折,按页数选规格更划算。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。