上下文先投影,再给模型看
多能力对话 Agent 里,历史窗口通常不止一处。规划要压缩过的文本,执行要面向工具的消息列表,加载层再往前捞一批当原料。三处各截各的,数字写在三个文件里。改一处,另一处不知道。排障时问「这轮模型到底看见了什么」,要对着三截日志拼。
续接更明显。用户回「嗯」「然后呢」,本该带着上一轮实质内容往下走,却可能被轻量缓存短路,把该带的历史掏空。问题不在某一处阈值写错,是没有一个地方能回答:这一轮该给什么、不该给什么。
选型看过三条路。
换一套 Agent 运行时,会话、压缩、投影全交给别人——语言栈不同,现有编排接不上,否了。继续各层打补丁也能顶一阵,窗口数字再调一调,下次排障还是三处对账。
最后只借语义,不借运行时:每轮在内存建一张表面;压缩把旧节点标隐藏、原文不删;模型看见的内容,日志里能重建。
规划、执行、反馈从同一张面按角色策略投影,格式化规则只留一套,避免两套口径。
也没直接切读。先旁路并跑,只记差异。千级样本对齐之后,差异率是零。差点把零读成没价值、该下线。那是旁路的通过线,说明新出口能复现现网,不是该删的信号。尺子后来改成:切读有没有真发生、下游吃的是不是投影结果、续接会不会被缓存掏空。旁路阶段还踩过一脚:表面只拿来记账,实际仍从旧列表读,增删隐藏对输出没影响,投影名不副实。补上之后,表面才是唯一真相。
做成之后,每轮请求先判档。有待确认就只给那一轮。短续接只给上一轮有实质内容的对话,冷启动的「嗯」不补记忆。常规对话仍走宽窗口。判档不调模型,用待确认状态、规则词、库里有没有实质轮。切读目前只开续接和澄清,常规档单独验收,开关能退回旁路。
排障能对上可见节点、截断原因、压缩层。续接不再被短路掏空。后面改窗口、加压缩有对比基线,不用赌。不承诺意图变准,那是路由的事。投影层只管一件事:给模型的历史从哪来、给了什么,可复现。