AI Know · 技术研究笔记
切分粒度决定召回上限
排序错位比模型弱更致命;引用不可核对等于没有引用;评测要盯整条链路而非答案
三分钟读懂
先看结论,再决定是否深读
- 切分粒度决定召回上限
- 排序错位比模型弱更致命
- 引用不可核对等于没有引用
- 评测要盯整条链路而非答案
- 长尾输入是失效集中爆发区
核心原理
过去两年,团队把大量精力花在换模型、调提示词上,但线上的 RAG 事故复盘往往指向同一个结论:生成模型只是最后一公里的执行者,真正出问题的是它拿到的上下文。切分把连续语义切碎,召回把无关段落顶到前面,引用又无法回溯到原文位置,三者叠加后,模型只能在错误的材料上做正确的推理。
更麻烦的是,这类失效具有隐蔽性。答案读起来通顺、术语准确、格式规范,评审者很难一眼判断它是否有依据。等到业务方发现数字对不上、条款引用错位时,问题已经被复制进缓存、日志和下游流程。因此,RAG 的质量治理不是提示词工程,而是数据链路工程。
技术细节
输入侧:切分粒度与元数据。 常见错误是按固定字符数硬切,导致一句话被截成两半、表格跨块、标题与正文分离。切分的目标不是等长,而是语义自足:每个块应能被单独读懂,并能回答一个完整的问题。实践中可先按标题层、段落、列表项做结构化切分,再对超长块做带重叠的二次切分。同时必须保留可回溯的定位信息,例如文档 ID、版本号、章节路径、字符偏移、表格行列号。没有这些元数据,后续的引用核对就无从谈起。还要注意权限标签,若权限信息缺失,召回阶段会把不该出现的段落送进上下文。
推理与执行侧:召回排序与上下文组装。 召回失效通常有两种表现:漏召和错序。漏召多来自查询与文档的词汇鸿沟,解法是混合检索,把稀疏检索用于精确术语和编号,把向量检索用于语义近似,再用重排模型做一次精排。错序则更常见,粗排把语义相似但事实无关的段落排在前面,模型容易先入为主。上下文组装也需要克制,不是塞得越多越好,无关段落会稀释注意力,还会增加冲突概率。理想做法是给每个进入上下文的块标注来源和置信度,并限制总长度,优先保留与问题实体、时间、条件匹配的段落。
输出与评测侧:引用核对与拒答。 生成阶段的关键约束是“可核对”:答案中每个事实性断言都应指向具体块和具体位置,而不是整篇文档。核对可以是自动的,先用规则或小模型判断断言是否被引用块支持,再抽样人工复核。评测指标要分层,既看答案正确率,也看召回命中率、引用准确率和无依据断言的占比。拒答同样是能力,当召回置信度低于阈值时,应明确说“未找到依据”,而不是用常识补全。缺少拒答机制的 RAG,会在低召回时稳定地产生幻觉。
工程实践
第一,建立可回溯的块标识体系。每个块都要有稳定 ID 和字符偏移,写入向量库与日志,使任何一条引用都能一键跳回原文位置,这是核对与追责的前提。
第二,召回做成两段式。先用混合检索拿到较宽的候选集,再用交叉编码器或轻量重排模型精排,控制进入上下文的块数量,并对来源做权限与时效过滤。
第三,把引用校验放进回归测试。每次索引或模型变更后,跑一批带标注的问题,统计召回命中、引用准确与拒答表现,指标下降即阻断发布,而不是等线上反馈。
| 环节 | 典型失效 | 观测指标 |
|---|---|---|
| 切分 | 语义截断、表格断裂 | 块自足率、重叠率 |
| 召回 | 漏召、错序 | 命中率、排序质量 |
| 生成 | 引用错位、无据断言 | 引用准确率、幻觉率 |
风险边界
成本上,混合检索加重排会显著抬高单次查询开销,需要在候选规模和延迟之间做权衡,热点问题可用缓存,冷门问题再走全链路。幻觉上,即使召回正确,模型仍可能拼接不同段落得出错误结论,因此引用核对必须覆盖跨段落推断。越权调用上,权限过滤要在召回之前完成,放在生成之后做过滤等于把敏感内容送进了模型上下文,风险已经发生。长尾输入上,缩写、方言、口语化查询和扫描件 OCR 噪声会同时降低检索与切分质量,需要单独采样监控。延迟上,上下文越长推理越慢,用户可感知的等待通常在两秒以内,超长文档场景应做流式输出和分段引用。把这些边界写进设计文档,比事后修补提示词更有效。