基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

什么是“Lost in the Middle”(中间丢失)现象?在构建 Prompt 时如何应对?

知识点图片

“Lost in the Middle”(中间丢失) 现象是大语言模型(LLM)在处理长文本上下文时表现出的一种显著缺陷。

简单来说,当给模型输入很长的文本(Context)时,模型往往能很好地利用开头结尾的信息,但容易忽略或“忘记”位于文本中间的信息。

以下是关于这一现象的详细解释以及在 Prompt Engineering(提示词工程)中的应对策略。


一、 什么是“Lost in the Middle”?

这一现象最早由斯坦福大学、加州大学伯克利分校等机构的研究人员在 2023 年的论文中系统提出。

1. 核心表现:U 型曲线

模型的性能通常呈现出一种 U 型曲线

  • 首因效应 (Primacy Effect): 当关键信息位于 Prompt 的最开头时,模型提取效果很好。
  • 近因效应 (Recency Effect): 当关键信息位于 Prompt 的最末尾时,模型提取效果也很好。
  • 中间低谷: 当关键信息被埋藏在长文本的中间位置时,模型的准确率会显著下降。

2. 为什么会发生?

  • 注意力机制(Attention Mechanism): 虽然 Transformer 架构理论上关注所有 token,但在实际训练中,模型倾向于过度关注绝对位置编码的开头和结尾。
  • 训练数据分布: 在预训练数据中,重要信息往往出现在文章的开头(摘要/介绍)或结尾(结论),导致模型习得了这种偏好。

二、 如何在构建 Prompt 时应对?

为了缓解“中间丢失”现象,我们需要通过优化 Prompt 的结构和内容的排列方式来辅助模型。以下是 5 种实用的策略:

1. 关键信息“两头放” (Reordering)

这是最直接有效的手段。不要把最重要的指令或参考文档随意堆砌。

  • 指令前置: 始终将 System Prompt(系统提示)和核心任务指令放在最开头。
  • 问题后置: 将用户具体的问题或最终的触发词放在最末尾。
  • RAG 排序优化: 如果你使用 RAG(检索增强生成),检索到了 10 个文档片段,不要按相关性分数 1-10 顺序排列。应该将相关性最高的片段放在最开头最末尾,将相关性较低的放在中间。

2. “三明治”结构 (The Sandwich Technique)

对于特别长的 Context,为了防止模型读到最后忘了开头,或者只看结尾,可以采用首尾呼应的策略。

  • 结构: [核心指令] -> [长上下文数据] -> [重复核心指令 + 具体问题]
  • 例子:

    开头: 请根据以下文章回答问题,如果文章中没有答案,请说不知道。
    中间: (长篇大论的文章...)
    结尾: 再次提醒,仅根据上述文章回答。请问:文章中提到的核心论点是什么?

3. 减少噪音:压缩与过滤 (Compression & Filtering)

不要盲目追求超长上下文窗口(如 128k, 200k),上下文越长,信噪比越低,“中间丢失”越严重。

  • 预处理: 在将文本喂给模型之前,先用一个小模型或脚本提取摘要,或者过滤掉无关的段落。
  • 减少 Top-K: 在 RAG 系统中,与其给模型 20 个相关的文档片段,不如精选最相关的 5 个。质量优于数量。

4. 结构化提示与分隔符 (Structuring & Delimiters)

帮助模型清晰地识别上下文的结构,使其更容易定位中间的信息。

  • 使用明显的分隔符: 使用 ###, ---, 或 XML 标签(如 <document>...</document>)将中间的上下文切分成块。
  • 带索引的列表: 给中间的信息加上序号(1, 2, 3...),这有助于注意力机制定位。

5. 思维链 (Chain of Thought, CoT)

强迫模型在回答之前先“扫描”一遍中间的信息。

  • Prompt 技巧: 不要直接问结果,而是要求模型先提取相关信息。
  • 例子:

    “请先从上文中找出所有关于‘价格’的句子,列出来,然后基于这些句子回答最终价格是多少。”

    • 通过这一步,模型被迫关注中间的细节,将其提取到生成的“近因”区域(回答的开头),从而提高最终答案的准确性。

总结

虽然现在的模型(如 GPT-4-Turbo, Claude 3, Gemini 1.5 Pro)声称支持超长上下文,且在缓解“中间丢失”方面有了很大进步,但该现象依然存在

最佳实践口诀:
指令放两头,中间加路标,噪音要过滤,先找后回答。

00:00
00:00