← 双轴框架(暂仅英文)  ·  模式参考

上下文分诊 · Context Triage

上下文工程 × 路由

模型门口的优先级队列:谁先进、谁等待、谁被丢弃 — 所有这些决定都发生在任何推理开始之前。

Chain
Route
Parallel
Orchestrate
Loop
Hierarchy
上下文工程
语义压缩
上下文分诊
多模态融合
渐进发现

为什么需要这个模式

生产环境里的 agent 没法把所有东西都看一遍。上下文窗口是一笔固定预算 — Claude 3.7 是 200K,Gemini 是 1M,但永远是有限的,边际成本永远是高的。当一个 PR 有五万行代码、合规审查包里有 43 份文档、故障排查时每秒涌入 100 行日志,模型不可能全看。必须有人来决定什么进、什么不进 — 这个“人”就是分诊层,它坐在模型门口,而不是在模型里面。

这是 demo agent 和生产 agent 之间的分水岭。Demo agent 跑得动,是因为输入由工程师手工挑选;生产 agent 面对的是用户随手丢进来的任意内容。没有显式路由,模型只有一种机制可用 — 从窗口末尾静默 截断,丢掉的恰好是最近的上下文,而“最近”是最不该丢的位置。

设想一个为区域银行做的贷款评审 agent。一笔新的商业贷款申请进来,附带 43 份文档 — 财务报表、 估值报告、契约条款、环评文件 — 总量远超模型 200K 的上下文窗口。没有分诊层,harness 只能选 截断。最新的估值报告掉在窗口外,模型基于过期数据批准了贷款,两周后这笔贷款违约。模型没做错任何事 — 它回答了被丢给它的 prompt。是 harness 没有优先级逻辑。这类失败不会上新闻,它会出现在一份 银行外面没人读得到的事故复盘里 — 正是因此,“上下文分诊”在 2026 年成了一等关切。

它解决的 agent 设计问题

上下文分诊回答了每个生产 agent 都会遇到的四个问题:

  1. 当下什么最重要? — 在摄入时显式打优先级标签(P0/P1/P2/P3)。
  2. 预算放得下什么? — 一个知道 token 预算的规划器,按预算修剪。
  3. 什么被丢在地上? — 显式、可记录、可审计、可回滚。
  4. 什么可以晚一点拿? — 给 P3 留 handle,模型需要时再去取。

结构上的关键决定:是在模型看到之前路由输入,而且路由规则本身由工程团队(harness)拥有,不是由模型决定。 这是分诊跟邻近概念的真正区别 — 它不是摘要、不是压缩、不是基于 embedding 的检索,而是 在硬预算下做路由,由工程师可审计、可版本化、不需要任何训练就能调整的代码完成。

深度思考方向

上下文分诊难就难在:优先级标签不是天上掉下来的,agent 必须自己决定,而这个决定决定了下游所有阶段 的天花板。如果一个 P0 标签错了,再多推理也救不回来 — 相关信息从一开始就不在房间里。

有三种失败反复出现。优先级膨胀:当 P0 的标准模糊,每个团队都会"以防万一"地加东西, 几个月后所有东西都是 P0,队列退化成 FIFO。打败它的纪律是硬性 schema、低基数 — 比如 P0 最多 5 个 名额,多了拒绝 — 而不是软启发式。handle 失效:一个 P3 指向的快照在摄入之后已经 变了,agent 后来去取,拿到的是过期状态。纪律是给 handle 显式设 TTL、取的时候重新验证。 分诊抖动:优先级每轮都改,模型看到的是一个动态目标,置信度崩溃。纪律是会话内分诊 决定保持粘性,除非下游有明确信号才作废。

更深一层的架构洞察:上下文分诊就是 agent 形态下重生的操作系统调度器。OS 调度器在有限 CPU 预算下解决“哪个进程拿到 CPU?”— 用优先级队列、老化、抢占这些原语。agent 版本在有限上下文 预算下解决“哪些信息进入模型?”— 用的是同一套原语。写过内核调度器的工程师五分钟就能 上手;只在 OS 之上写过代码的工程师必须从头学一遍。模式迁移过来了,只是介质变了。

工程博客精选

论文进展(arXiv 基础篇)

2026 前沿 — 深度解读

上面五篇是基础,下面五篇是 2025 年 10 月到 2026 年 6 月这九个月发生的事 — 每一篇都改变了今年 设计分诊层的具体选择。每篇下面写的是:论文引入的新想法、它从生产分诊层里消除的具体失败模式、你应当 因此调整的具体设计动作、以及一个量化收益的数字。流程图都是手画的,架构一眼就能看清。
深读 1 · 基础架构

Agentic Context Engineering (ACE):让上下文自我进化

arXiv:2510.04618 · Zhang、Hu、Upasani 等 · ICLR 2026(32 页)

它改了什么。 今天大部分生产 agent 在上下文摄入的那一刻就给每段内容打优先级 — 一份文档是 P0、一行日志是 P2、一份过期的规范是 P3 — 然后整个会话都把这个标签当事实 用。前 30 轮这套做法跑得动;下 30 轮就开始崩,因为 agent 此时已经学到了东西:当初的 P0 把它带偏 了,当初的 P3 反而是关键。ACE 引入了一个独立、持续存在的对象 — 论文叫它“策略手册” (playbook) — agent 每一轮结束时根据刚刚发生的事重写这个手册,下一轮再把改过的手册作为上 下文的一部分摄入。这样一来,agent 对“什么重要”的判断不再被锁死在最初的摄入时刻。

为什么对分诊有意义。 这个领域一直在犯的根本错误,是把“摄入时打的优先 级”当成“整个会话都成立的优先级”。优先级其实是一个活的假设,会随着 agent 学到 更多而衰减。一个从不修订标签的分诊层,等于在让模型继续相信一个小时前的猜测 — 而那个猜测当 初根本无法预料到现在的输入。到第二小时,这就是 agent 开始对“显而易见的事实”产生幻 觉的最常见原因:相关上下文技术上还在窗口里,但优先级压得太低,模型已经不去注意它了。

你应该怎么做才不一样。 别再把优先级存在 hashmap 里。改用一个 append-only 的日志 ,键是 (token-id, 轮次, 修订证据)。每一次优先级变更都是一条新记录,附带“为什么改” — 是哪一次观察暴露了上一个标签是错的。每轮结束时的反思步骤就是写这个日志最自然的位置。 这样有两个好处:复盘时修订是可审计的,一次质量回退可以追到当时做出决策的那一轮;agent 自己也 可以回过头读自己的历史,问“我当时为什么把这个事实降级了?”。这是 agent 在会话内自我 改进的结构性前提 — 没有这一条,对话内 agent 学不到任何东西。

头条数据。 Agent benchmark 提升 10.6%,金融 benchmark 提升 8.6%。让认真考虑采购 的客户停下来看的那个结果在 AppWorld:跑 ACE 的开源 backbone agent 在整体得分上和顶级闭源生产 系统打平,在更难的评测分片上反超它们。机制不是更大的模型,不是更多 token,而是一个被允许 “改主意”的分诊层。

生成 Generate 草拟行动 反思 Reflect 评判结果 校订 Curate 增量更新 策略手册 进化中的策略 下一轮 — 手册重新成为上下文
图 — ACE 的 生成·反思·校订 循环,策略手册回写到下一轮上下文。
深读 2 · 计划感知剪枝

PAACE:计划感知的自动化 agent 上下文工程

arXiv:2512.16970 · 2025 年 12 月 18 日 · PAACE-Syn + PAACE-FT

它改了什么。 在 PAACE 之前,一段上下文拿到的优先级只取决于事实本身:“这是 个 Stripe 交易 ID,给它打分。”PAACE 加了第二个维度 — agent 当前的计划步。同一个 Stripe 交易 ID,如果 agent 下一步是“诊断这次具体的支付失败”,它会被打成 P0;如果下一步是 “总结上周基础设施延迟趋势”,它会被打成 P3。事实没变,变的是 agent 接下来要拿它做什么 。PAACE 把这种依赖显式表达出来 — 训练了一个小的蒸馏打分器,输入是 (事实, 当前计划步) 这个 元组,agent 的完整计划作为支撑上下文。

为什么对分诊有意义。 没有计划感知,每个分诊层都会退化到同一个防御性策略:把 “接下来 10 步任何一步都可能用到”的东西全留着。这就是悄无声息吃掉 token 预算的策略。 一个涉及 10 个子系统、50 步的计划,会在前 5 步内积累所有 10 个子系统的上下文,分诊层却没办法说 “我们现在已经稳定在子系统 A 了,子系统 B 到 J 可以降级了”。结果是 agent 把死重一直背 到会话结束。PAACE 是第一篇给分诊层提供这种“减重信号”的论文。

你应该怎么做才不一样。 训练(或蒸馏)一个小路由器,输入键是 (事实, 计划步), 不是 (事实) 本身。PAACE-FT 是开源配方。把这个小路由器放在每一轮跑,而不是只在会话边界跑。 一个关键细节:路由器必须把 agent 的当前计划作为显式输入,而不是塞进 system prompt 里 的软提示 — 计划与优先级之间的依赖太强,不能交给 in-context learning 自己悟。

为什么这件事在经济上重要。 “每轮重新分诊”以前贵到做不到 — 每轮 要调一次前沿模型,成本反而把正事挤掉了。PAACE-FT 把这个成本压到差不多一次 embedding 查询的量级。 这是“每轮重新分诊”从奢望变成默认架构选项的分水岭。对长跑的 agent 来说,正是这个成本 临界点的跨过,让计划感知的分诊第一次在经济上撑得住。

头条数据。 蒸馏出来的压缩器在 1/10 推理成本下保留教师模型 97% 的准确率。在 AppWorld、OfficeBench 和 8 目标多跳 QA 基准上测试,准确率和 F1 都比对比里的每一个 baseline 高, 同时用的 agent 步数更少、峰值 token 更低。

计划结构 解析下 k 步任务 相关性打分 逐 token 效用 重写+摘要 保函数性 剪枝 丢低效用 联调指令 调精指令
图 — PAACE 五段压缩,条件依赖于计划的下 k 步任务。
深读 3 · 编码 agent 分诊

SWE-Pruner:编码 agent 的自适应上下文剪枝

arXiv:2601.16746 · Wang 等 · 2026 年 1 月 23 日

它改了什么。 SWE-Pruner 给编码 agent 专门引入了一个分诊层 — 一个 0.6B 参数 的神经模型(论文叫它“速读器”skimmer),坐在前沿模型前面,逐行读源代码,决定哪些行能 真正进入前沿模型的视野。速读器小到可以每轮都跑,延迟成本几乎不可见。关键一点:速读器把 agent 当前的目标作为显式输入 — 比如“找出这个空指针错误的原因” — 用这个目标给每 一行打分。跟目标没有合理关联的行,在前沿模型把它们加载进上下文之前就被丢掉了。

为什么对分诊有意义。 这篇论文把大部分团队隐约感觉到但没量化的经济事实摆出来了: 前沿编码模型大头的 token 预算花在“读”上 — 看那些它最终并不会改动的代码。如果读 主导账单,那么放在模型前面的分诊层就不是边际优化,而是整个系统里最大的成本控制杠杆。大部分团队 在这一块投入不足,是因为他们假设模型在拿那些上下文“做有用的事”。数据告诉你它通常没在 做有用的事。模型是在防御性地读 — 因为它别无选择,每一次读都是“万一这个有用”。 一个建得好的分诊层,恰恰就是给模型一个理由“不必再防御性地读”。

你应该怎么做才不一样。 别再把分诊当成一次性的重预处理。把它做得像 tokenization 一样便宜,每轮都跑 — 每当 agent 的目标收窄一次,分诊层就应该重新打一次分。0.6B 速读器就是 参考设计:小到可以为你的领域微调,小到可以在 CPU 上跑,结构上又简单到任务定义一变你就能换掉。 目标提示要当作一等输入显式传给速读器 — 不要把它埋在 agent 的 system prompt 里让速读器自己 去挖。

头条数据。 在 SWE-Bench Verified(编码 agent 的标准基准)上,SWE-Pruner 把 token 用量削减 23–54%,同时保持或提升成功率。在 LongCodeQA 上达到 14.84× 压缩。能改变 你产品路线图的那个数字:一个少读 14.84 倍代码的编码 agent 表现并不变差 — 在生产规模上,这个 比例往往就是“每个客户都亏”和“开始盈利”之间的距离。

任务+目标 如“修 bug” 0.6B 速读器 轻量神经模型 行级打分 逐行效用 留 / 弃 保留结构 瘦身上下文 送给主模型
图 — SWE-Pruner 把 0.6B 速读器放在前沿模型门口当“门卫”。
深读 4 · KV 缓存级分诊

SideQuest:长程 agent 推理的模型驱动 KV 缓存管理

arXiv:2602.22603 · Kariyappa & Suh · 2026 年 2 月

它改了什么。 在 2026 年之前,几乎所有分诊决策都发生在 prompt 组装时 — 在 模型开始推理之前。SideQuest 把这个决策搬进推理本身。第二条线程 — 论文叫它“副线 程”side thread — 跟主推理循环并行跑,持续给 KV 缓存里的 token 打效用分, agent 看到推理怎么展开之后,再把低效用的 token 驱逐掉。主推理线程永远不被副线程阻塞 — 驱逐 在后台发生,压缩后的缓存再回灌到推理的下一步。

为什么对分诊有意义。 Prompt 时刻的分诊有一个结构性的盲区:在你组装 prompt 的那 一刻,你根本不知道哪段上下文最后会承重、哪段只是装饰。那个信息只存在于推理过程中段。 “第 7 步那个观察其实关键”最早只能在第 8 步知道 — 而到了第 8 步,一次性摄入过滤 器早就锁死了它的选择,没办法修订。SideQuest 的洞察是:长程 agent 里分诊正确的位置,和 CPU 分支 预测器待的位置是一样的 — 在推理路径里,盯着正在发生的事,有权在推理进行过程中修订缓存。

你应该怎么做才不一样。 架构分成两种清晰的情况。如果你控制推理栈 — 也就是 说你跑的是 vLLM、SGLang、TensorRT-LLM 或类似的可改造服务框架 — SideQuest 的“飞行中 驱逐”现在做得到,对任何超过 50 步的 agent 来说,这大概率就是该选的架构。如果你不控制推理 (大多数直接用 Anthropic 或 OpenAI API 的团队),教训不一样但同样重要:把硬约束逼回 prompt 窗口,在你做分诊的地方做分诊。不要因为 API 不暴露 KV 缓存就假装它是无界的。

更深一层。 分诊不再是“模型跑之前做的事”,而是“模型跑的过程中 持续做的事”。这是一个要求更高的架构,对短程 agent 不划算。但对今天定义前沿的长程 agent — 跨小时的编码会话、跨天的研究 agent、跨周的合规审查 — 这是唯一能在深度上撑得住的 架构。

头条数据。 SideQuest 在长程 agent 任务上把峰值 token 用量削减 65%,准确率几乎 不掉。能让你的路线图委员会停一下的那个数字:整个系统只用了 215 个训练样本。任何有适度微调预算 的团队都够得着。

主推理循环 — step n  ·  step n+1  ·  step n+2  ·  … 长程 agent 任务 — 若不干预,KV 缓存单调膨胀 窥视 副线程:模型驱动判断 并行打分 KV 效用 驱逐 / 保留 逐 token 决策 压缩后的 KV 缓存 回注主循环 注入
图 — SideQuest 副线程让分诊不占关键路径,同时压缩 KV 缓存。
深读 5 · 分诊即模型分层路由

Triage:基于代码质量信号把 SE 任务路由到成本合适的 LLM 分层

arXiv:2604.07494 · 2026 年 4 月 · SWE-bench Lite(300 任务)

它改了什么。 2026 年 4 月这篇直接以“Triage”命名的论文把模式向一个 重要方向推广了。在它之前,“上下文分诊”的意思是决定哪些 token 进入一个给定的模型。这 篇论文问的是更前一个问题:哪个模型来处理这个任务? 用一个对到来任务做的廉价信号 — 论文里用代码健康度指标,但框架可以推广到任何廉价代理 — 把每个任务路由到三个模型层之一: 轻量(Haiku 形态)、标准(Sonnet 形态)、重型(Opus 形态)。每一层的输出都过同一道验证 门。验证门是安全机制:正因为有它,“省钱但安全”的路由才成为可能 — 错误的路由会 在验证时被抓住,而不是落到客户面前才暴露。

为什么对分诊有意义。 每一个跑认真 agent 的团队最后都会发现同一个月度账单模式: 80% 的成本来自 20% 的调用 — 具体说,是那些重型模型调用。系统里每一块省钱空间都在“把 那 20% 的某一部分往下推一档”。难题一直是“怎么把一次调用往下推,又不会悄悄降质?” 诱惑是事前 gate — 预测任务难度,按预测路由。问题是预测不完美,而一个被路低了的难任务不会 显眼地出错;它会变得微妙地出错,回退一直藏到落到客户面前才暴露。Triage 这篇论文的贡献 是这套纪律:事后验证,不是事前 gate。让便宜的那一层先试,验证步骤抓住“ 便宜那层不够用”的情况。

你应该怎么做才不一样。 把 agent 建成两层同心圆的分诊。外层:基于廉价信号做模型 分层路由(本文)。内层:在选中的那一层里做上下文分诊(前四篇)。两层分别上报指标,让你能各自 独立调试 — 否则一次路由回退和一次上下文剪枝回退从外面看长得一样。汇报给领导的时候 — 你一定要汇报,因为省下来的钱不小 — PPT 上要放论文里的两个可证伪条件:轻层通过率必须大于 层间成本比(意思是便宜那层对的次数足够多,路由在经济上才划得来),代码健康度的效应大小至少 p̂ ≥ 0.56(意思是这个信号真的能区分容易任务和困难任务)。这是 CFO 能签字 的两个条件。

更深一步。 分诊不再是上下文过滤器,而是异构模型之间的预算分配器。一旦 你看到这一步,同样的模式就可以套到 embedding 模型、检索索引、图像生成器 — 任何有多档成本/ 质量分层的系统。模式迁移过来了,介质没变。

头条数据。 在 SWE-bench Lite(300 任务)上评测。三种路由策略正面对比:启发式 阈值、训练 ML 分类器、完美 hindsight oracle。Oracle gap 是这篇论文能发出来的原因 — 它告诉 你一个真实路由器建好之后,桌上还剩多少省钱空间,给你一个明确的目标数字,随着路由变好而逐步逼近。

SE 任务 工单+代码库 代码健康度 廉价信号 分层分类器 启发式 / ML 轻量层 标准层 重型层 同一验证门 一视同仁
图 — Triage 用廉价的代码健康度信号路由到三层之一,最终统一过同一道验证门。

合流 — 2026 年分诊的三个共同方向

上面五篇论文是独立贡献,但它们走在同一条轨迹上。合起来读,它们刻画了这个领域对“分诊” 理解的一次整体迁移。

(1) 优先级信号已经廉价化了。 2026 年没人再用前沿模型决定“哪些 token 进入 另一个前沿模型”。信号要么是一个小的蒸馏打分器(SWE-Pruner 的 0.6B 速读器),要么是直接 对输入算的指标(Triage 那篇的代码健康度代理),要么是和主推理并行跑、不花额外钱的副线程 (SideQuest)。如果你的分诊层自己就是瓶颈,你的架构是 2024 年的。

(2) 信号已经是计划感知的了。 同一个事实在不同计划下效用不同 — 这件事这个 领域终于不再假装它不存在。PAACE 用一个在 (事实, 计划步) 元组上训练的小路由器把这件事显式化; ACE 走的是另一条路 — 把计划诱导的修订写进一份长期存活的策略手册。无论哪种做法,打分器的 key 现在都包含 agent 当前的目标,而不只是被打分的内容本身。

(3) 分诊决策跨轮累积。 它们被修订,不被复位。每一轮都读前一轮的优先级日志。 当 agent 发现某个 P0 其实是错的,这个错误以“修订”的形式被刻进日志,同时记下是哪 一次观察揭示了它。分诊层因此本身变成一个学习面 — 它没有微调过的模型那么好,但比微调反应 快好几倍,因为它跟着 agent 刚刚的发现一起更新。

合起来的处方。 两层(外层模型分层路由、内层上下文路由)、一个共享的廉价打分器 每轮都跑、一份 append-only 的优先级日志让修订可审计、一道验证门抓住路由错了的情况。这就是 2026 年认真的生产 agent 普遍长成的样子 — Anthropic、Cognition、Manus 都已经是这个形状 — 也是未来 12 个月的论文会精化、但不会取代的架构。今天动手开始设计一个 agent,这就是起点;这个 领域目前的 open question 已经从“该包含哪几块”变成“每一块怎么 scale”。

这个模式在哪里展开讨论

  • Manning 英文书Designing AI Agents,第 3 章 §3.2(上下文工程 / 分诊)。
  • 论文Huang & Zhou (2026),§4.1 模式 1。
  • 专栏 — 极客时间《Harness 设计模式之美》第 4 讲。

关于创作。 本页由人机协作完成。论文选取、编辑视角与工程判断由黄佳本人负责;正文文字与流程图在与 Claude (Anthropic)的对话中完成。每篇论文涉及的事实性陈述均可回溯到所链接的 arXiv 原文 — 如需精确 数据细节,请以原论文为准。