问题
你的 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 的系统提示里大量运用了分诊思想:工具结果按类型决定是否保留全文