Skip to content

10.1.3 什么情况下应该先动 Chunk,什么情况下应该先动 Rerank,什么情况下该动 Prompt? ​

先给结论:Chunk、Rerank、Prompt 不是三种可以随便互换的优化手段。Chunk 更偏向影响证据怎么被切开和召回,Rerank 更偏向影响候选结果怎么排序和筛选,Prompt 更偏向影响模型如何使用已经给到的证据。先动哪一个,取决于问题卡在哪一层。

很多调优低效,问题不在于“试得不够多”,而在于:

  • 一开始就动错杠杆

例如:

  • 明明是 chunk 把语义切碎了,却一直在改 Prompt
  • 明明是召回结果顺序不稳,却先去改 chunk 大小
  • 明明证据都给到了,只是模型没忠实使用,却先去重做检索

所以真正重要的不是“哪个更强”,而是:

  • 哪个最符合当前问题的根因

先记住三者分别主要解决什么 ​

Chunk ​

更主要影响:

  • 文档被怎样切开
  • 哪些局部信息能作为独立检索单元
  • 证据能否完整、连贯地进入候选结果

它更偏底层,会影响召回质量和后续所有环节。

Rerank ​

更主要影响:

  • 候选结果的排序
  • 哪些结果最终能进入上下文
  • 高相关但初排不稳定的结果能否被拉上来

它更像在“已召回结果”上做第二次筛选。

Prompt ​

更主要影响:

  • 模型怎样理解任务
  • 模型怎样使用已有证据
  • 模型是否保留限制条件、拒绝无依据外推

它不负责找证据,而负责“怎么基于证据说”。

什么情况下应该先动 Chunk ​

当你发现问题更像下面这些情况时,优先怀疑 Chunk:

  • 正确答案经常被切散到多个块里,单块都不完整
  • 召回结果里总是只回来半截信息
  • 表格、列表、规则条款一切就断义
  • 同类问题在长文档里很难稳定命中关键段落

这些问题说明,检索单元本身设计得不合适。

更具体地说,适合先动 Chunk 的信号通常包括:

  • 正确文档能召回,但关键段落表达总是不完整
  • 相同问题在不同切块策略下结果差异很大
  • 长文档、多层结构文档、FAQ、代码文档共用一套切块后问题很多

这时你更应该先检查:

  • 切块粒度是否过大或过小
  • overlap 是否合适
  • 是否需要结构化切块或语义切块
  • 是否需要把检索用块和生成用块拆开

什么情况下应该先动 Rerank ​

当你发现问题更像下面这些情况时,优先怀疑 Rerank 或结果选择:

  • 正确结果其实已经在召回候选里,但排名不稳定
  • 候选集里噪声很多,关键结果总被埋没
  • 高分结果高度重复,占掉上下文
  • 多文档问题里,真正关键的结果排不到前面

这类问题的共同点是:

  • 不是“完全没召回”
  • 而是“召回到了,但最终没被优先使用”

这时更适合先看:

  • 是否需要增加 Reranker
  • top k 是否过大或过小
  • 最终选择逻辑是否只偏向局部相似度高的片段
  • 是否需要去重、聚合、相邻块扩展

什么情况下应该先动 Prompt ​

当你已经确认:

  • 正确证据稳定进入最终上下文
  • 上下文内容基本完整
  • 关键限制条件也已经给到模型

但回答仍然出现下面这些问题时,才更适合优先动 Prompt:

  • 模型漏掉已明确给出的条件
  • 模型喜欢把证据外推成更绝对的结论
  • 资料不足时不愿明确说不知道
  • 输出格式混乱,导致关键结论不稳定

这时你要调整的,往往不是“找什么”,而是:

  • 怎样要求模型更忠实地用证据
  • 怎样减少无依据总结和发挥
  • 怎样让回答结构更稳

一个很实用的判断表 ​

如果你想快速建立直觉,可以先按下面这个思路判断:

  • 证据经常断裂、不完整:先看 Chunk
  • 证据已经在候选里,但排序不稳:先看 Rerank
  • 证据已经在最终上下文里,但回答仍然外推或漏条件:先看 Prompt

三种常见误用 ​

误用一,把 Prompt 当成万能修复器 ​

这会导致:

  • 明明是证据没回来,却试图靠话术补救

误用二,把 Chunk 当成通用调参旋钮 ​

有些团队一发现效果不好就改 chunk 大小,但如果问题本质是排序和选择,单改 chunk 往往没法命中根因。

误用三,只加 Rerank,不看候选集质量 ​

Rerank 不能把完全没召回的结果凭空排出来。候选集本身太差时,先加 Rerank 往往收益有限。

一个最小决策示意 ​

python
def choose_optimization_lever(case):
    if case["evidence_fragmented_or_incomplete"]:
        return "tune_chunking_first"
    if case["gold_evidence_in_candidates_but_ranked_low"]:
        return "tune_rerank_first"
    if case["gold_evidence_in_final_context_but_answer_not_grounded"]:
        return "tune_prompt_first"
    return "need_more_analysis"

这个示意的重点是把三者放回各自最擅长的阶段。

更稳的实践建议 ​

如果你真的准备开始调,不要三者一起上。更稳的顺序通常是:

  1. 先确认根因主要落在哪一层
  2. 一次只优先动一类杠杆
  3. 用第 9 章的评测和错误分桶看目标问题有没有下降
  4. 再决定是否继续深入这一层,还是转到下一层

这样你后面才知道:

  • 是哪根杠杆真的产生了效果

一句话总结 ​

Chunk 主要解决证据怎么被切开和召回,Rerank 主要解决候选结果怎么排序和保留,Prompt 主要解决模型怎么使用已有证据。先动哪一个,必须由根因决定,而不是凭感觉乱试。