前言:一个让我彻底改变工作方式的实验
2026年初,我做了一件以前根本不敢想的事:把一份长达800页的技术规范文档,直接塞进了一个大模型的上下文窗口,然后让它帮我找出其中所有与安全性相关的条款,并逐条解释为什么这些条款会相互冲突。
结果它做到了。
这件事让我意识到,百万Token上下文窗口的普及,不是量变,是质变。它彻底颠覆了我对"AI能做什么"的认知边界,也让我花了将近两个月时间,重新设计了自己的整套工作流。
这篇文章,就是这两个月实测经验的完整复盘。
一、什么是上下文窗口?为什么"百万Token"是里程碑?
在深入实测之前,先花两分钟把概念说清楚,因为很多文章在这里语焉不详,导致读者对"上下文"的理解始终停留在表面。
上下文窗口(Context Window),是指大模型在单次对话或单次调用中,能够"看到"并处理的最大文本量。窗口之内的内容,模型都能参考;窗口之外的,模型完全不知道。
Token是计量单位,粗略理解:1个英文单词≈1.3个Token,1个中文字≈1~2个Token。所以:
| Token量 | 大约等价于 |
|---|---|
| 4K Token | 约3000字,一篇普通博客文章 |
| 32K Token | 约2.4万字,一本薄册子 |
| 128K Token | 约10万字,一部中等长度小说 |
| 1M Token(百万) | 约75万字,相当于《红楼梦》全本的1.5倍 |
早期的GPT-3只有4K上下文,这意味着稍长一点的对话,模型就会"忘记"最开始说了什么。2023年的GPT-4把这个数字推到128K,已经是质的飞跃。而2026年,Kimi K2.6、Gemini 2.5 Pro、DeepSeek-V4 等主流模型已经普遍支持百万级甚至更长的上下文。
这个数字,让以下任务第一次真正变得可行:
- 直接喂入整个代码仓库,让模型做全局重构
- 把一年的会议纪录全部输入,让模型做跨会议的决策追踪
- 将完整的法律合同、技术规范、审计报告一次性分析
二、实测:四大模型百万上下文对比
我使用了一份真实的技术文档集合(约65万字,覆盖API规范、架构设计、安全标准三个领域),分别在四个模型上进行了相同任务的测试。
测试环境说明
⚠️踩坑提示:在开始之前,有一件事我吃了大亏——不同模型对"支持百万Token"的定义不一样。有些模型是输入支持百万,但输出仍然限制在4K或8K;有些模型支持长输入,但在超过某个阈值后,注意力机制的质量会显著下降(业界称为"中间丢失"问题,Lost in the Middle)。所以在选模型之前,一定要先搞清楚这个区别。
测试文档:技术规范集合 总长度:约65万字 / 约130万Token(中文) 测试任务: Task A:提取所有"安全性"相关条款并分类 Task B:识别文档间的逻辑矛盾 Task C:基于全文生成一份500字执行摘要 Task D:针对文档某一细节进行多轮深度追问测试结果概览
| 模型 | 最大上下文 | Task A准确率 | Task B表现 | Task C质量 | Task D连贯性 | 每百万Token价格 |
|---|---|---|---|---|---|---|
| Kimi K2.6 | 200万Token | ★★★★☆ | ★★★★☆ | ★★★★★ | ★★★★☆ | 约¥1.2 |
| Gemini 2.5 Pro | 100万Token | ★★★★★ | ★★★★☆ | ★★★★☆ | ★★★★★ | 约¥8.5 |
| DeepSeek-V4 | 128万Token | ★★★☆☆ | ★★★★☆ | ★★★★☆ | ★★★☆☆ | 约¥0.3 |
| Claude Opus 4.6 | 20万Token | ★★★★★ | ★★★★★ | ★★★★★ | ★★★★★ | 约¥15 |
说明:Claude Opus 4.6上下文较短,但在其能处理的范围内,质量一致性最高。DeepSeek价格极具优势,但在超长输入时,后半段文档的内容提取准确率下降明显。
三、"Lost in the Middle"问题:为什么模型会忘记文档中间的内容?
这是使用超长上下文时最容易踩的坑,也是最少被提到的问题。
想象你让一个人阅读一本800页的书,然后问他第400页写了什么。即使他读完了全书,中间部分的记忆往往也是最模糊的。大模型的注意力机制存在类似现象:文档开头和结尾的内容,模型记忆往往更准确;而位于"中间"的内容,容易被低权重处理,导致漏掉关键信息。
斯坦福2024年的论文《Lost in the Middle》首次系统量化了这个问题,在2026年的最新模型上,这个问题已经大幅改善,但仍未完全消除。
实际解决方案
我摸索出了以下三种在工程实践中有效的规避方式:
方法一:关键信息前置 + 尾部重复
不要把你最关心的内容放在文档中间。如果你要分析的是第300页的某个条款,可以在Prompt里先把这个条款单独摘出来粘贴一遍,然后再附上完整文档。这样模型在"开头"就已经见过了关键信息,后续注意力会更集中。
# 示例:在Python中构建"关键信息前置"的Promptdefbuild_long_context_prompt(key_section:str,full_document:str,question:str)->str:""" 构建超长上下文Prompt的最佳实践 踩坑记录:直接把key_section追加到full_document末尾,效果比前置差很多。 模型对"开头出现的内容"有更强的注意力权重。 """prompt=f""" 【核心关注点 - 请重点分析以下内容】{key_section}--- 【完整参考文档】 以下是完整的技术规范文档,上述核心关注点出现在其中,请结合全文进行深度分析:{full_document}--- 【你的任务】{question}请在回答时,明确指出你引用的是文档的哪个部分(页码或章节名称)。 """returnprompt# 注意:这里故意不在full_document之后再重复key_section# 虽然直觉上"首尾呼应"感觉更好,但实测发现会导致模型在两个版本之间来回引用,# 反而降低了回答的聚焦度。方法二:层级分块 + 二次汇总
对于真正超出单次窗口的内容,或者想节省成本时,可以先分块摘要,再汇总分析。
importanthropicfromtypingimportList client=anthropic.Anthropic()defhierarchical_summarize(document_chunks:List[str],final_question:str)->str:""" 层级分块摘要方案 为什么这样写: 当文档超过模型上下文限制,或者成本过高时, 先对每个分块生成结构化摘要,再对摘要集合进行最终分析。 踩坑提示: - 分块时不要在句子中间截断,要按段落或章节自然边界切分 - 每块摘要的格式要统一(这里用JSON),否则最终汇总时模型会被格式噪音干扰 - chunk_overlap必须设置,否则跨块的逻辑关系会丢失 """summaries=[]fori,chunkinenumerate(document_chunks):# 第一层:对每个分块生成结构化摘要response=client.messages.create(model="claude-sonnet-4-6",max_tokens=1000,messages=[{"role":"user","content":f"""请对以下文档片段(第{i+1}段,共{len(document_chunks)}段) 生成结构化摘要,输出为JSON格式: {{ "key_points": ["要点1", "要点2", ...], "entities": ["涉及的关键实体或概念"], "potential_issues": ["发现的潜在问题或矛盾"], "references_other_sections": ["引用或依赖其他章节的描述"] }} 文档内容:{chunk}"""}])summaries.append(f"第{i+1}段摘要:{response.content[0].text}")# 第二层:基于所有摘要进行最终分析combined_summaries="\n\n".join(summaries)final_response=client.messages.create(model="claude-sonnet-4-6",max_tokens=2000,messages=[{"role":"user","content":f"""以下是一份长文档的分块摘要集合,请基于这些摘要回答问题。 摘要集合:{combined_summaries}问题:{final_question}请在回答中注明哪些信息来自哪个段落。"""}])returnfinal_response.content[0].text方法三:使用"锚点标记"引导模型注意力
在长文档中嵌入特殊标记,并在Prompt中明确告诉模型这些标记代表重要信息。
defadd_attention_anchors(document:str,important_keywords:list)->str:""" 为长文档添加注意力锚点 原理:在模型处理超长文本时,显式的格式标记(如<<<IMPORTANT>>>) 会在注意力计算中获得更高权重,类似于给人类读者加粗划重点。 注意:不要滥用锚点,一篇文档中建议不超过10处,否则锚点失去意义。 """marked_doc=documentforkeywordinimportant_keywords:marked_doc=marked_doc.replace(keyword,f"<<<CRITICAL_SECTION:{keyword}>>>")returnmarked_doc四、实战工作流重构:我是怎么用百万上下文改变日常的?
理论讲完,说说我实际改变了哪些工作场景。
场景一:代码库全局重构
以前做代码重构,我需要先手动通读每个文件,在脑子里拼接依赖关系,然后写改动方案。这个过程极其耗神,对大型项目来说根本不现实。
现在的做法:
# 使用repomix将整个代码仓库打包为单个文本文件npx repomix--outputrepo_context.txt--ignore"node_modules,dist,*.lock"# 查看打包后的token数量(避免超出限制)wc-wrepo_context.txt# 一般来说:词数 × 1.3 ≈ Token数# 然后直接把repo_context.txt的内容粘贴进Claude/Kimi的对话框# 配合这样的Prompt:Prompt模板(代码库分析):
"以下是我们项目的完整代码库。请帮我完成以下任务:
- 找出所有调用了
UserService.getById()方法的地方,列出文件名和行号- 分析这些调用场景,判断哪些地方在用户不存在时没有做空值处理
- 给出一份统一的重构方案,包括修改建议和需要新增的单元测试
请先输出一份"依赖关系图"的文字描述,再逐步给出重构建议。"
这个工作流在我们团队实测后,一次中等复杂度的跨文件重构分析,从原来需要1-2天压缩到了2-3小时。
场景二:多文档交叉分析
法律合同审查、技术标准对比、多版本文档差异分析——这类任务过去需要专业人员逐行对照,现在可以直接交给模型。
关键是Prompt的结构要清晰,告诉模型"这是文档A,那是文档B,请做交叉分析":
【文档A:合同V1版本(2025年3月签署)】 {contract_v1_full_text} ===文档分隔线=== 【文档B:合同V2版本(2026年1月修订)】 {contract_v2_full_text} ===任务说明=== 请对比两版合同,重点关注: 1. 责任条款的变化(对我方有利/不利) 2. 新增/删除的付款条件 3. 违约金计算方式的变化 4. 任何在V2中措辞变得模糊的条款(模糊可能意味着法律风险) 对于每个发现,请注明出自哪个文档的哪个章节。五、百万上下文 vs RAG:选哪个?
这是个经典问题,很多人误以为两者是竞争关系。实际上,它们解决的是不同的问题,适用于不同的场景。
| 维度 | 超长上下文 | RAG(检索增强生成) |
|---|---|---|
| 适用文档量 | 单次处理数百万字,但受窗口限制 | 理论无上限,可检索TB级知识库 |
| 分析深度 | 全局视角,能发现跨文档逻辑关系 | 局部视角,依赖检索质量 |
| 推理一致性 | 高(模型见过全量内容) | 中(依赖检索命中率) |
| 成本 | 按Token计费,长文档成本高 | 较低,只检索相关片段 |
| 实时更新 | 每次调用需重新传入文档 | 向量库更新即可,灵活 |
| 最佳场景 | 单次深度分析、跨文档推理 | 持续问答、企业知识库、动态更新 |
我的实践建议:
- 如果你要分析的是固定的、有限的文档集合(比如这份合同、这个规范),优先考虑超长上下文——它的全局理解能力更强,不会因为检索失败而遗漏关键信息
- 如果你要构建的是长期运营的知识库问答系统,或者文档数量超过单次窗口容纳上限,就用RAG
- 最佳实践:两者结合。用RAG先检索出相关文档片段,再配合一定长度的上下文窗口做深度分析,兼顾覆盖率和推理质量
六、成本控制:用100块钱做到以前要1000块的分析
超长上下文的最大障碍是成本。100万Token的一次调用,如果用Gemini 2.5 Pro,大约需要人民币85元;如果用Kimi K2.6,大约12元;如果用DeepSeek-V4,大约3元。
以下是我摸索出的成本控制四原则:
- 预分析再深潜:先用便宜模型(DeepSeek)做初步筛查,找出值得深度分析的部分,再用贵模型(Claude/Gemini)做精细分析
- 压缩无效内容:把文档里的目录页、版权声明、大量重复的样板文字去掉,通常能减少15%-30%的Token量
- 合理设置max_tokens:如果你只需要一个简短的结论,别让模型输出2000字的详细报告——输出也是要花钱的
- 缓存高频文档:对于同一份文档需要多次查询的场景,Anthropic、Google等平台都提供了**上下文缓存(Prompt Caching)**功能,缓存后的Token费用能降低90%以上
七、总结:百万上下文真正改变了什么?
回到文章开头的那个实验。百万Token窗口让我第一次感觉到,AI不再是一个需要我精心"喂料"的工具,而开始更像一个真正读过全部资料的协作者。
它改变的不只是效率,而是工作方式的底层逻辑——从"我需要告诉AI该看哪里",变成了"我把所有资料给它,然后我们一起思考"。
当然,这个技术还不完美。Lost in the Middle问题仍然存在,成本对个人用户来说仍然是门槛,不同模型在超长上下文下的质量差异也很大。但趋势已经很清晰:超长上下文会成为标配,而真正的竞争将发生在"谁能更好地利用它"这个层面。
参考资源
- 《Lost in the Middle: How Language Models Use Long Contexts》—— Stanford NLP, 2024
- Kimi K2.6 官方技术报告:moonshot.cn
- Anthropic Prompt Caching 文档:docs.anthropic.com
- repomix 工具:github.com/yamadashy/repomix