乐于分享
好东西不私藏

长文档丢给 AI 为什么会"装懂":上下文工程的可解释实践

长文档丢给 AI 为什么会"装懂":上下文工程的可解释实践

一、先澄清一个误解:上下文窗口 ≠ 理解能力

很多用户以为:"模型支持 200K token 上下文,那我把整本合同贴进去,它就能像资深律师一样逐条审阅。"

这个推论是错的。

斯坦福大学 Nelson F. Liu 等人的研究《Lost in the Middle: How Language Models Use Long Contexts》给出了一个被反复验证的结论:当关键信息出现在长输入的开头或结尾时,模型表现最好;当同样的信息被放在长上下文的中间位置时,模型的表现会显著下降,甚至不如直接用闭卷问答。

研究团队做了个精妙的实验:把一篇包含答案的"针"文档,插入到 20 篇干扰文档的不同位置。结果呈现出一条U 形曲线——

  • 针在位置 1(开头):准确率约75%

  • 针在位置 10(正中):准确率跌到约53%

  • 针在位置 20(结尾):准确率回到约63%

而且这个现象在 GPT-3.5、GPT-4、Claude 等模型上都存在,即使它们的上下文窗口远大于实际输入的文档量

⚠️ 这意味着:你那份 86 页并购意向书里,埋在第 43 页的"反垄断审批前置条件",恰恰是 AI 最容易忽略的位置。

为什么中间会被"丢失"? 有三个互补的解释:

  1. 训练数据偏见:人类写作习惯把重要信息放在开头(摘要、导语)和结尾(结论),模型学到了这种位置先验

  2. 注意力衰减:自注意力机制在极长序列中,对中间 token 分配的注意力质量下降

  3. 递归偏见:自回归生成时,靠近输出位置的 token 影响更大,强化了"尾部优势"

所以"长上下文"在工程上是一个有限且分布不均的资源,而不是一块统一的画布。

二、Anthropic 的实测:两个动作让长文档召回率大幅提升

既然模型对长上下文的利用不充分,那有没有办法"逼"它认真读?Anthropic 在 2023 年 9 月发布的长上下文提示工程实验中,测出了两个有效的干预手段:

干预一:让模型在回答前,先抽取与问题相关的引用句

具体来说,就是在 prompt 里要求模型:"先找出并引用文档中与问题相关的原文片段,然后再作答。"这一步相当于强制模型把注意力"锚定"到具体文本上,而不是泛泛生成。

干预二:在 prompt 中补充少量"其他章节的正确问答示例"

作为 few-shot 示范,告诉模型"这类文档应该这样读、这样答"。

Anthropic 的内部评估显示,这两个技巧组合起来,显著提升了 Claude 从长文档中召回指定信息的概率

到了 2025 年 6 月,Anthropic 进一步推出了Citations API:开发者把文档传给 Claude 时,模型会自动为输出中每一个来源于源文档的断言,标注出对应的原文句子或段落。内部评测显示,内置引用能力比大多数手写 prompt 方案的召回准确率高出最多 15%,幻觉也明显减少。

📌 这给我们的任务是:如果你没用 Citations API,那你必须在 prompt 层面手动实现"先引用、再回答、带锚点"的机制。 这就是下文方法的核心。

三、长文档场景的上下文工程四步法

基于上述研究,结合 RAG(检索增强生成)生产系统的最佳实践,我把它提炼为切片 → 排序 → 引用 → 校验四步。

第一步:切片(Chunking)——按结构切,不要按字数切

这是最容易被忽视、却最致命的一步。

常见的错误是直接按"每 500 字一段"暴力切。这种做法对博客文章还行,对合同、法规、研报、技术手册几乎是灾难——它会把一个完整的条款、一张表格、一条跨页的"参见第 X 条"切断,导致 AI 拿到的是残缺信息。

权威的 RAG 工程指南给出的正确做法是:优先按文档自身结构切片

  • 递归切片(Recursive Chunking):先按章节标题切,章节太长再按段落,段落太长再按句子。保留文档的层级结构

  • 语义切片(Semantic Chunking):用嵌入向量计算相邻句子的语义距离,在话题切换处切。适合结构不清的叙述性文档

  • 父文档检索(Parent-Document Retrieval):建索引时用小切片保证检索精度,但传给模型时用大切片(或整章)保证上下文完整。这是法律、学术文献场景的首选

实操参数参考:

  • 通用文档:500-1000 字符/片,重叠10-20% 以保留边界上下文

  • 法律/合规文档:按"章-节-款"切片,每片自带完整标题路径(如"第三章 3.2 卖方陈述与保证")

  • 务必保留元数据:来源文档名、页码、章节路径、版本号

第二步:排序(Prioritization)——把高相关度切片放到"黄金位置"

既然研究证明模型对开头和结尾最敏感,那我们就要主动管理位置

具体做法:

  1. 对每个切片,标注它与当前任务的相关度(1-5 分)

  2. 相关度最高的切片放在上下文的最开头

  3. 相关度第二高的放在最结尾(用户指令之前)

  4. 中等相关的放中间

  5. 低相关的可以不传,或仅保留标题索引

Anthropic 的长上下文提示指南里也强调了类似原则:长输入放顶部,指令和问题放底部。因为模型是自回归生成的,越靠近生成起点的内容,对输出的影响越大。

💡 这就是为什么"资料包"要人工排过序再喂给 AI——不是 AI 懒,是它真的"看"不到中间的你。

第三步:引用(Grounded Citation)——每条断言必须可回溯

这是反幻觉的最后一道闸门。

在 prompt 里硬性要求:

- 每条事实断言必须带 [章节-条款号] 或 [页码] 引用- 资料包中没有的内容,必须明确输出"资料未覆盖"- 禁止用"通常而言""一般而言"等无法回溯的泛化表述冒充原文事实

为什么这招有效?因为当 AI 知道自己的每一句话都会被核对时,编造的动机大幅下降。Thomson Reuters 在其 AI 法律平台 CoCounsel 中就强调:"要让 AI 对执业律师立即产生价值,它必须能够引用自己的工作。"这正是他们接入 Anthropic Citations 的核心原因。

第四步:校验(Verification)——人审 AI 的输出

即使做了前三步,AI 仍可能产生幻觉。所以必须保留人工校验环节:

  • 拿 AI 输出的每条引用编号,回到原文定位,确认 AI 没有"张冠李戴"

  • 检查是否有"资料未覆盖"的诚实声明——如果 AI 全程没说"不知道",反而要警惕(说明它在用先验知识凑)

  • 对关键数字、日期、金额做二次核对

四、一个真实可复用的模板

下面是经过上述机理验证的通用模板,适用于合同审查、财报摘要、研报解读、用户访谈整合等所有长文档场景

你是 {{角色}}。## 任务{{具体任务描述}},交付给 {{受众}},重点回答:{{核心问题}}。## 资料包(已按相关度降序排列)[高-1] {{章节路径}} - 相关度 5/5摘要:{{100 字以内的信息卡片}}原文位置:{{页码/条款号}}[高-2] {{章节路径}} - 相关度 5/5摘要:{{100 字}}原文位置:{{页码/条款号}}[中-3] {{章节路径}} - 相关度 3/5摘要:{{100 字}}原文位置:{{页码/条款号}}(建议 8-15 张卡片,不要超过 20 张)## 输出要求1. {{第一段的描述}} —— 每条断言带 [编号] 引用2. {{第二段的描述}} —— 每条断言带 [编号] 引用3. {{第三段的描述}}4. 坦诚列出"资料未覆盖"的盲区## 硬性约束- 禁止脑补资料包之外的具体事实(条款编号、金额、日期等)- 禁止用"通常""一般而言"等不可回溯表述- 总字数 {{范围}}- 先引用原文片段,再给出你的判断

使用要点

  • 资料包 8-15 张卡片为宜:少于 5 张覆盖不够,多于 20 张注意力衰减

  • 每张卡片必须自带标题:AI 引用时才能说出"第 3.2 条"

  • 相关度评分不能偷懒:如果你发现所有卡片都打了 5 分,就用淘汰制追问:"如果只能保留 3 张,你会删哪几张?"

  • "资料未覆盖"是健康指标:AI 肯说"不知道",说明它在老实读资料,而不是用训练先验凑答案

五、跨场景示例

场景 A:财务月报摘要(50 页 → 1 页给 CFO)

CFO 关心的不是"月报写了什么",而是"亮点和异常在哪"。切片时按"收入/成本/现金流/风险因素"切成 8-10 张卡片,每张标注相关度。输出时强制三段式:三大亮点(带切片编号)+ 三大异常(同比环比超 20% 的项)+ 下月跟踪指标

场景 B:研报改写公众号(30 页 → 1500 字)

切片时不是按页数切,而是按"核心数据 / 关键论据 / 作者原话"三类切。输出时要求"用 1 个反常识数据切入 + 三个判断(每段 1 数据 + 1 故事 + 1 洞察)+ 1 个读者可执行的动作"。所有数字必须带 [研报-页码] 引用。

场景 C:用户访谈整合(20 份 → 产品决策)

每份访谈做成 1 张卡片,标注"用户类型 + 核心痛点 + 原话引用 + 强度评分(1-5)"。强度评分必须由访谈记录中的情绪标记或频次决定,不能由 AI 主观判断。输出强制三部分:高频痛点(出现≥5 次的)+ 被低估的需求(出现 2-4 次但强度≥4)+ 用户优先级排序

六、自检清单

下次你把长文档丢给 AI 之前,先问自己:

  • [ ] 我是否明确告诉了 AI任务、受众、重点、字数

  • [ ] 长文档是否按结构切片(章-节-款),而非按字数暴力切?

  • [ ] 每个切片是否带了100 字摘要 + 相关度评分 + 原文位置

  • [ ] 高相关度切片是否被放到了上下文的开头和结尾这些黄金位置?

  • [ ] 是否硬性要求了引用锚点"资料未覆盖"的诚实声明

  • [ ] 是否保留了人工校验环节,拿引用编号回原文核对?

6 条全过,AI 的输出才值得交给客户。

写在最后

"上下文工程"这个词在 2025 年变得很热,但它的内核并不神秘——本质是信息管理:把正确的信息、以正确的结构、放在正确的位置、让模型做正确的事。

研究告诉我们:模型的上下文窗口是"有限且分布不均"的资源,中间位置的信息容易被丢失。所以我们要主动切片、主动排序、主动要求引用。这不是在"讨好"AI,而是在尊重它的工作机制

🎯 一个反直觉的真相:给 AI 的材料越少、越结构化,它的输出反而越准确。 把 86 页全扔进去不是"充分利用",而是"充分浪费"——既浪费了 token,也浪费了模型本就有限的注意力预算。

下次再面对长文档时,先花 20 分钟做切片和排序,再花 5 分钟让 AI 出结果——这 25 分钟产出的质量,会远超你把 PDF 一贴、等 11 秒拿到那 1800 字"专业分析"的质量。

因为专业的不是 AI,是你在喂它之前的那道工序。