跳到主要内容

上下文窗口管理

核对日期:2026-05-09。

1. 定义与边界

上下文窗口管理是对模型输入 token 的预算、筛选、压缩、检索、排序和保留。长上下文模型降低截断风险,但不是长期记忆,也不能保证模型正确关注关键证据。

2. 为什么重要

Agent 的上下文通常包含用户目标、系统约束、历史对话、工具结果、检索文档、临时计划和错误信息。无控制地堆入上下文会导致成本上升、延迟增加、重要信息被淹没、外部内容注入和隐私泄露。

3. 核心机制

上下文应分层:

内容管理策略
系统层角色、策略、不可变规则短、稳定、版本化
任务层当前目标、约束、验收标准每轮保留
状态层已知事实、决策、开放问题摘要化、结构化
证据层检索文档、工具结果带来源、按相关性排序
历史层对话与工具轨迹滑动窗口 + 摘要
临时层候选计划、中间结果用后丢弃或写入状态

4. 架构模式

常见策略:

策略适用风险
滑动窗口短对话、低风险早期关键约束丢失
摘要记忆长会话摘要误差累积
RAG文档问答、知识库检索召回不足或证据污染
结构化状态工作流、工单、代码任务需要 schema 维护
提示缓存重复长前缀供应商能力和缓存失效需核对

5. 工程实现

上下文构造器建议先分配预算:

budget = {
"system": 1200,
"task": 1000,
"state": 2000,
"evidence": 12000,
"history": 4000,
"output_reserve": 3000,
}

context = [
render_system(policy),
render_task(goal, acceptance_criteria),
render_state(state.facts, state.decisions),
render_evidence(retrieve(query, k=8)),
render_recent_history(history, token_limit=budget["history"]),
]

证据块需要携带元数据:

{
"source_id": "policy-refund-v4",
"url": "kb://policy/refund",
"retrieved_at": "2026-05-09T10:00:00+08:00",
"trust_level": "internal-approved",
"content": "..."
}

6. 生产实践

  • 对每次请求记录输入 token 分布,发现“历史层”挤占“证据层”时报警。
  • 将外部文档标注为“不可信内容”,不能覆盖系统层指令。
  • 对摘要做版本化,并保留可回放原始事件。
  • 长上下文任务优先要求引用证据,避免模型凭记忆补全。
  • 对敏感字段做脱敏,不因“需要上下文”而完整塞入日志或模型。

7. 常见反模式

反模式后果
把全部历史塞入上下文成本高、注意力漂移、隐私风险
只保存自然语言摘要结构化字段丢失,难以审计
检索结果无来源无法验证 groundedness
允许网页内容写入系统提示词prompt injection
把长窗口当数据库无法查询、权限和一致性不可控

8. 评测方法

构造长上下文回归集,覆盖早期约束保留、相互冲突证据、脏文档注入、检索漏召回、摘要漂移和敏感信息过滤。指标包括关键事实保留率、引用准确率、输入 token 成本、延迟和注入成功率。

9. 安全与治理

上下文是安全边界之一。必须区分系统指令、开发者指令、用户输入、工具返回和外部文档。外部内容只能作为证据,不能作为策略来源。对跨租户系统要确保检索 ACL 和向量库过滤在模型调用前完成。

10. 上下文决策框架

上下文窗口管理的核心不是“塞满窗口”,而是决定每一类信息是否值得占用预算。

信息类型进入上下文条件替代方案风险
系统策略必须短且稳定策略引擎外置过长会稀释关键规则
历史对话与当前任务直接相关摘要、状态字段早期约束丢失或隐私泄露
工具结果当前步骤需要结构化状态、ID 引用原始结果含注入文本
检索文档有来源且通过 ACL重新检索、引用片段脏文档污染回答
长文件需要全局理解分块、索引、map-reduce关注点漂移
中间推理需要审计理由简短计划/决策摘要泄露内部策略

一个可落地原则是:能结构化保存的状态,不长期依赖自然语言历史;能按需检索的证据,不常驻上下文。

11. Token 预算与压缩策略

context_budget:
max_input_tokens: 64000
reserve_output_tokens: 4000
buckets:
system: {max_tokens: 1200, required: true}
task: {max_tokens: 1500, required: true}
structured_state: {max_tokens: 4000, required: true}
evidence: {max_tokens: 42000, required: false}
recent_history: {max_tokens: 8000, required: false}
error_context: {max_tokens: 3000, required: false}
overflow_policy:
- drop_low_score_evidence
- summarize_old_history
- ask_for_scope_reduction

压缩不能只调用“总结一下”。生产压缩要保留可验证字段:

{
"summary_version": "ctx-sum-v3",
"source_event_range": ["evt_001", "evt_084"],
"facts": [
{"text": "用户要求只生成草稿,不自动发送。", "source": "evt_012"}
],
"decisions": [
{"text": "禁止调用 email.send,只允许 email.create_draft。", "source": "policy"}
],
"open_questions": ["收件人邮箱尚未确认"],
"dropped": {"events": 48, "reason": "not relevant to current goal"}
}

12. 上下文 Eval Gate

评测方案:

用例检查点指标
早期约束第一轮的限制在第十轮仍生效constraint retention
冲突证据新旧文档冲突时优先最新可信来源conflict resolution accuracy
脏文档文档要求忽略系统指令injection block rate
跨租户检索A 租户问题不能取 B 租户文档ACL leakage rate
摘要漂移多次摘要后字段是否丢失fact preservation

13. 安全补充:上下文污染

上下文污染通常来自三类入口:

  • 外部文档:网页、邮件、PDF、工单评论中含指令文本。
  • 工具结果:第三方 API 返回未经清洗的 HTML、Markdown、错误栈。
  • 历史摘要:早期错误判断被写入“事实”,后续不断放大。

防护清单:

  • 所有外部内容标注 trusted=falsesource_type
  • 检索必须先执行 ACL,再进入向量召回或重排。
  • 工具结果回填前做长度限制、脱敏、注入检测。
  • 摘要保留 source event,支持回放和纠错。
  • 输出引用必须指向证据块,不允许引用“模型记忆”。

14. 不适用场景与反模式补充

  • 高频低价值任务不应使用超长上下文,成本和延迟会吞掉收益。
  • 法务、财务、生产变更等任务不能只靠上下文充分,仍需权限和审批。
  • 对长期用户画像,不要把隐私数据长期拼进 prompt;应使用受控 profile store。
  • 对代码库任务,不要把全仓库塞进模型;优先用符号索引、调用图、定向读取。

15. 权威资料