Agent 的 Context Window概念详解(详解它为何是 Agent 工程最核心的约束)

Context Window(上下文窗口)是模型在单次请求中能处理的最大 token 数,相当于 Agent 的”工作记忆”:系统提示、对话历史、工具返回、检索到的文档,一切推理依赖的信息都得装进这个窗口才能被模型”看见”。说它是最核心的约束,是因为它同时卡住三件事——信息装不下任务就断、token 超限成本线性上升、上下文太长模型反而记不住关键内容(Anthropic 称之为 context rot)。窗口管理做不好,Agent 会失忆、跑偏、烧钱。

一、Context Window 是什么

想象你读书时桌面上只能摊开固定数量的几页,超过上限,最早翻开的页会被推下桌面——这就是 Context Window。它用 token 计量,1 个 token 约等于 0.75 个英文单词,中文大致一个字到两个字一个 token。一个 20 万 token 的窗口能容纳约 15 万英文单词,足够装下一大块代码库,但对大型项目仍然远远不够。

窗口尺寸的演进很快:早期 GPT 只有 4K token,今天 Claude、Gemini 等前沿模型普遍到 200K+,部分模型宣称超过 100 万。但”更大”不等于”更好用”——研究反复显示,模型对超长上下文中间位置的信息召回能力显著下降,这就是著名的”lost in the middle”现象。

二、Agent 的窗口里装着什么

一次 Agent 推理,窗口被四类内容瓜分:

内容 占比(典型) 特征
系统提示 小但常驻 每轮循环都要重发
对话历史 随轮次增长 多轮后迅速膨胀
工具定义与返回 中 一份工具 schema 动辄上千 token
检索到的文档 按需注入 RAG 拉进来,用完即弃

一个可运行的预算示意:

def token_budget_check(system_tokens, history_tokens,
                       tools_tokens, docs_tokens, max_window=200_000):
    used = system_tokens + history_tokens + tools_tokens + docs_tokens
    print(f"已占用 {used} / {max_window} token,剩余 {max_window - used}")
    return max_window - used  # 负数 = 超限,会触发截断或报错

token_budget_check(8_000, 120_000, 15_000, 60_000)  # 203000,超限

三、为什么它是”最核心”的约束

3.1 硬上限:装不下任务就断

窗口是模型架构决定的硬边界(与位置编码方案绑定),超限要么报错,要么被静默截断。Agent 运行在循环里,历史与工具结果每转一圈都在累积,累积速度远超单次对话,所以它比任何应用都先撞上墙。长任务里最常见的失败模式,就是 Agent 在任务中途耗尽上下文,草草宣布完成。

3.2 成本:每个 token 都要付钱

大模型按 token 计费,输入输出都算。一次 20 万 token 的请求是相当昂贵的调用;而 Agent 每轮循环都在重复消费整份上下文,成本随轮次翻倍叠加。这也是长上下文模型的”便利”和”账单”同时存在的根本原因。

3.3 上下文腐烂:越长越记不住

Anthropic 在一系列 benchmark 中发现:上下文 token 越多,模型从中准确召回信息的能力越差,且这个衰减在所有模型上都存在,只是程度不同。transformer 架构让每个 token 都能关注其他所有 token,n 个 token 产生 n² 组两两关系,上下文越长,注意力被摊得越薄;而模型的训练数据中短序列远比长序列常见,处理超长上下文的经验天然不足。

3.4 对比:工作记忆不等于长期记忆

维度 Context Window 长期记忆(向量库/文件)
本质 推理时的易失工作区 持久存储
容量 固定 token 上限 近乎无限
生命周期 请求结束即失效 跨会话保留
检索方式 直接可见 需 RAG 检索拉入
类比 CPU 缓存 / 桌面 文件柜 / 档案库

四、窗口快满时的四类工程手段

按时间尺度从短到长,业界把窗口管理分成四层,成熟 Agent 通常叠加使用:

  1. 压缩(compaction):历史接近上限时,把冗长的原始对话摘要成关键决策、结果与待办,以摘要重新开局;最轻量的一档是”清空工具原始输出,只保留调用记录”;
  2. 检索(RAG):把参考知识放外部存储,按需拉取相关片段进窗口,而不是一股脑全塞进去;
  3. 持久记忆:用户偏好、完成状态等跨会话事实落库,下次运行再读回;
  4. 子代理架构:把窄任务拆给上下文干净的专职子代理执行,主代理只接收 1~2 千 token 的浓缩结论,避免被原始数据淹没。

Anthropic 的实践建议还有一个反直觉的结论:让 Agent 保持窗口精简、检索收窄、压缩积极,比给它一个巨大窗口塞满内容,准确率反而更高——”更多上下文”不等于”更好上下文”,精挑高信号 token 比扩容更重要。

五、窗口管理的两条反直觉经验

第一条,精简比扩容更有效。Gravity AI 在构建参考 Agent 时观察到,从”把一切塞给大窗口”改成”窗口保持精简、压缩积极、检索收窄”之后,准确率反而提升——模型在小而相关的上下文上推理,比在大而杂的上下文上更可靠。

第二条,信息位置比信息量更关键。长上下文中,位于首尾的信息召回率明显高于中间,因此关键指令和约束应放在窗口首尾,而不是埋在中间。对 Agent 工程而言,这意味着不仅是”塞什么进窗口”,还要控制”关键内容落在窗口的哪个位置”。

常见问题(FAQ)

Q1:窗口越大越好吗?

不是。更大带来成本与延迟,且中间信息召回率下降,需配合压缩与检索。

Q2:Agent 忘记早期指令怎么办?

多半是窗口溢出或上下文腐烂,用摘要压缩与持久记忆兜底。

Q3:Context Window 和记忆是一回事吗?

不是。窗口是易失工作区,记忆是可持久化存储,二者靠检索衔接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 qiqicto@qq.com 举报,一经查实,本站将立刻删除。
赞 (0)
其AI的头像其AI普通用户

相关推荐

返回顶部