ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Weave Router压缩级联详解:tool-result清理、摘要与trim的完整链路

Weave Router压缩级联详解:tool-result清理、摘要与trim的完整链路 Weave Router压缩级联详解tool-result清理、摘要与trim的完整链路【免费下载链接】routerModel router for agentic systems. Routes every prompt to the right model in 50ms. Cut costs 40-70% with just an endpoint change.项目地址: https://gitcode.com/GitHub_Trending/router101/routerWeave Router 是一个面向 Agent 系统的模型路由器能在 50ms 内把每个 prompt 路由到最合适的模型仅改一个 endpoint 就能降低成本 40-70%。除了路由它还内置了一条上下文压缩级联compaction cascade当会话过长、逼近模型上下文窗口时按「tool-result 清理 → 结构化摘要 → 渐进 trim」三层逐级收缩请求让超长会话不会死在无可用模型上。本文带你走完整条链路。为什么 Agent 会话需要压缩级联Agent 场景下上下文膨胀的主力不是聊天文本而是工具调用结果——一次read文件、一次grep搜索动辄几千 token。会话越跑越长直到超过所有可用模型的窗口路由层无模型可派请求直接失败。Weave Router 的做法是主动压缩在路由之前就把过长的会话压瘦而不是等溢出报错。核心编排在 internal/proxy/compaction.go// maybeCompact 在 needed ≥ compactionTriggerPct * MaxWindow 时运行级联 // (1) 清理旧 tool results(2) 用窗口感知的模型做摘要(3) 渐进 trim。触发条件85% 窗口阈值而不是溢出才动手级联的入口判断在 maybeCompact基准所有可用路由模型中最大的有效上下文窗口maxEligibleContextWindow触发线默认是最大窗口的85%DefaultCompactionTriggerPct 0.85可用环境变量ROUTER_COMPACTION_PCT调整设为 0 则完全关闭需求值请求体 token 估算 输出预留needed() 估算 OutputReserve。为什么不在溢出时才压因为摘要模型也需要吃下整段历史。提前在 85% 处动手摘要器还有足够窗口摄入完整历史压缩质量才有保证。Tier-1tool-result 清理零模型调用最便宜的一层第一层完全本地执行、不调用任何模型保留最近 5 个工具结果其余全部替换为占位符[Old tool result content cleared]。实现见 internal/translate/compaction.go占位符刻意模仿 Claude Code 自己的措辞让模型或人类明白内容是被省略而非丢失结构完整保留tool_use块、消息数量、配对关系都不动只换tool_result的正文保证请求在协议层面依然合法同时覆盖 Anthropic / OpenAI / Gemini 三种线格式。单元测试 TestClearOldToolResults_Anthropic 验证了旧结果被替换、最近结果逐字保留、消息总数不变。Tier-1 若把请求压回触发线以下级联直接结束——很多工具密集型会话到这一层就够了。Tier-39 段式结构化摘要Tier-1 不够时进入最重的一层调用模型对整段历史做结构化摘要然后用「摘要 最近 12 轮」重写历史。选一个吃得下的摘要模型selectCompactionSummarizer 按候选优先级挑选会话当前钉住的 Anthropic 模型prompt cache 是热的摘要更快更省部署配置的摘要模型ROUTER_COMPACTION_MODEL大窗口家族模型。候选模型必须满足两个硬条件属于 precompaction 策略评审目录、且窗口 ≥ 历史 token 摘要输出预留4000 8000 tokens。没有任何模型吃得下时跳过摘要直接走 trim——失败绝不阻塞主流程。摘要 Prompt9 个编号段落摘要指令在 internal/proxy/handover.go借鉴了 Claude Code 的压缩格式要求输出 9 段段落内容1主要请求与意图逐条明细2关键技术概念3文件与代码片段含为什么重要4错误与修复5问题解决路径为何选此方案6所有用户消息逐字引用约束不可转述7待办任务8当前工作状态精确到文件名9下一步动作输出上限 4000 tokensDefaultCompactionMaxTokens超时 90 秒DefaultCompactionTimeout。摘要比普通切换 handover 的 800 token 上限大得多——因为这段摘要是被省略历史的唯一记录必须承载任务状态而不只是一句话概要。摘要后安全重写RewriteForCompaction 把历史重写为「摘要带[handover summary]标签 最近 12 条非 system 消息」有两个细节保证正确性对齐用户文本轮保留窗口必须从一条带文本的 user 消息开始保证请求仍有一个路由边界剥离孤儿工具结果如果保留窗口的起点恰好是某个tool_result而它配对的tool_use已被省略则该结果被剥离避免协议非法。还有一个回滚保护如果摘要重写后请求反而放不下摘要比原历史更长整个重写被丢弃回退到压缩前的状态——宁可交给 trim也不让摘要把本来能服务的请求搞坏。Rescue Trim渐进裁剪兜底摘要也没救回来时走救援裁剪 TrimLastNMessages按12 → 6 → 3 → 1的档位逐级只保留最近 N 条消息每裁一级就检查一次是否放得下。如果连只留最后一条用户消息都超出最大窗口级联返回哨兵错误ErrContextWindowExceeded映射为 HTTP 413明确告诉调用方这段历史超过了所有可用模型的容量。两个容易忽略的设计① 让渡给客户端。Claude Code 这类客户端自己会做压缩若路由池能容纳它自报的压缩阈值Weave Router 就不插手DeferToClient避免双重压缩。Codex / Gemini CLI 则原样透传级联始终待命。② 摘要独立计费。Tier-3 的摘要调用会作为独立账目行入账billCompactionSummary使用量进遥测——你为压缩付出的 token 一目了然。相关测试覆盖了各层级行为见 internal/proxy/compaction_test.go部署配置入口在 cmd/router/main.go。总结一条链路的完整心智模型请求进入 → 估算 token ≥ 85% 最大可用窗口 ├─ 否 → 直接路由 └─ 是 → Tier-1 清理旧 tool-result保留最近5个 ├─ 回到阈值内 → 路由 └─ 否 → Tier-3 结构化摘要 保留最近12轮 ├─ 放得下 → 路由 └─ 否 → Rescue trim12→6→3→1 渐进裁剪 ├─ 放得下 → 路由 └─ 否 → HTTP 413这套先便宜后昂贵、每层失败都有兜底的级联设计正是 Weave Router 能把超长 Agent 会话稳稳接住、而不是粗暴报 413 的关键。【免费下载链接】routerModel router for agentic systems. Routes every prompt to the right model in 50ms. Cut costs 40-70% with just an endpoint change.项目地址: https://gitcode.com/GitHub_Trending/router101/router创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表