问题

你的 Agent 跑了一个长任务——调了 20 次工具、搜了 30 篇文档、读了 5 段用户历史。你把所有这些全塞进上下文里,然后发现:模型开始"瞎"了,关键指令被淹没在信息噪音里,Token 费用在燃烧。

Agent 运行中会产生海量信息。一股脑全进 prompt 的结局:token 爆炸、关键信息沉底、模型注意力涣散——上下文成了垃圾场。

核心模式

像医院急诊一样给信息分诊(Triage):每条候选信息进入上下文前,先过一道分类器,决定它的去向。

def triage(info, context_budget):
    if is_critical(info):            # 与当前任务直接相关
        return inject_verbatim(info)  # 原文进入,一字不删
    elif is_supporting(info):        # 背景参考
        return inject_summary(info)   # 摘要进入
    elif is_stale(info):             # 过时/弱相关
        return park_to_memory(info)   # 存入记忆,需要时再取
    else:
        return drop(info)             # 直接丢弃

分诊器本身可以用小模型实现(便宜、快),也可以用规则(相关度打分、时间衰减、类型白名单)。关键是:进入上下文的每个 token 都要有入场理由

实战要点

  • 预算制:给上下文设硬预算(如 8K token),分诊器按优先级填充,超预算时降级(原文 → 摘要 → 指针)
  • 分诊标准随任务阶段变化:规划期需要广撒网的信息,执行期只需要当前步骤的信息
  • "park_to_memory" 必须可召回——否则就是变相 drop,用户会问"我不是告诉过你吗"
  • Claude Code 的系统提示里大量运用了分诊思想:工具结果按类型决定是否保留全文