Prompt Cache 保护还是 Token 压缩?VMR 与 OpenProxy 的长会话成本路线分歧

6 阅读6分钟
  • OpenProxy(171K 行 Rust):在本地对请求做 RTK 实时压缩(重编码表格、注入极简输出指令),声称省 20%-40% Token——但它的代价是修改 Prompt 字节,会击穿模型厂商的 Prompt Cache,在长会话场景下存在"越压越贵"的风险(机制推导,非实测结论)。
  • VMR(31K 行 Go):一个字都不改,用 Session-Sticky 把整个会话钉死在同一个上游端点,让 80%-95% 的重复输入稳定命中缓存价(1-2 折),实测综合降本 50%-70%(自观测数据)。
  • 选型速判:多轮长会话为主的 Agent 工作流(Claude Code / OpenClaw / Cursor 重度使用)→ 缓存亲和路线优先;大量一次性短请求 + 需要订阅账号逆向/可视化控制台 → OpenProxy 的功能面更全。

一、背景共识:都在解决同一个痛点

2026 年,模型厂商全面转向按量计费(Token Plan)之后,"多轮 Agent 会话的账单失控"成了所有重度用户的共同痛点。一个 30 轮的长会话,输入里可能 90% 以上都是前几轮已经算过的重复内容——怎么让这部分不花冤枉钱,是两条路线共同的目标。

但"省钱"这个词下面,藏着两种完全相反的工程假设。

二、核心分歧:本地压缩 vs 上游缓存

OpenProxy 的路线:RTK 实时压缩(假定上游"无状态")

OpenProxy 的假设是:上游每次都是全价计费,所以我应该在本地把 token 变少。它的 src/core/rtk/ 实现了:

  • TOON / GCF 算法:把请求里的 CSV、JSON 数组重编码成紧凑文本格式,减少 token 数;
  • Caveman 提示词注入:强制模型以极简短促风格输出,少说废话;
  • Tool Schema 裁剪:删掉本次没用的工具定义。

这一套在"单轮、短上下文、纯文本"场景下确实有效,这也是它声称省 20%-40% 的依据。

VMR 的路线:Cache 亲和保护(洞察上游"有状态")

VMR 的假设相反:现代模型 90% 的成本由 Prompt Cache 决定,上游对重复前缀只收 1-2 折。所以正确的做法不是让内容变短,而是:

  1. 保持字节绝对不变(Byte-Faithful)——前缀哈希一丁点都不能动,动了缓存就归零;
  2. 会话级锁定端点(Session-Sticky)——同一个会话的所有轮次永远发给同一个上游端点,因为缓存按端点隔离,切一次账号缓存清零一次;
  3. 结果:命中率 80%-95% 时,账单大头自动变成缓存价。

为什么这两条路线会正面冲突

关键矛盾在这里:RTK 压缩的每一次"帮忙",都在破坏缓存的前提。它动态重编码表格、注入 Caveman 指令、裁剪 Tool Schema——每一次改动都让输入前缀的哈希发生变化,供应商的缓存从第 0 个 token 起全部失配。

在"压缩省下的 token"和"缓存归零导致的全价重算"之间,长会话场景下后者通常是数量级的差距:压缩最多省 40%,而缓存失效意味着每一轮都要为前几十轮的内容再付一次全价。

一句话:OpenProxy 在"怎么让每轮更小"上下功夫,VMR 在"怎么让重复内容打折"上下功夫。 在缓存已成为行业标配的今天,后者的杠杆更大。

三、数据对比(带测量条件)

维度OpenProxy (RTK)VMR (Session-Sticky)说明
降本机制本地压缩,声称省 20%-40%缓存命中,实测降 50%-70%OpenProxy 为官方声称值;VMR 为自观测(长会话压测,150 req/s),未第三方公证
缓存命中率会被主动破坏(机制推导)80%-95%(以供应商 cache 计费字段为准)OpenProxy 无公开命中率数据,此处为机制分析
长会话场景风险存在"越压越贵"风险稳定吃缓存价风险结论为机制推导,非 OpenProxy 实测故障数据
代码规模171,412 行 Rust,50+ crates~31,000 行 Go,4 个依赖复杂度与维护成本差距显著
常驻内存80-200MB(含 SQLite + Web UI)15-30MB个人本机场景差异可感知

四、双方优势与适用边界(互相承认)

公平地说,OpenProxy 是一把功能更全的瑞士军刀,很多能力 VMR 明确不做:

OpenProxy 明显更优的场景:

  • 订阅账号逆向与轮询:内置 8+ 平台 OAuth 逆向(ChatGPT / Codex / Gemini 订阅等),能把多个订阅账号池化成 API——这是 VMR 完全没有的能力(VMR 只做标准 API Key / BaseURL);
  • 可视化控制台:内置 Astro Web UI,开箱即用的图表、会话监控——VMR 坚持零 UI,只有 CLI 与 Markdown 输出;
  • 高级调度模式:Hedging(对冲请求,谁快用谁)、Fusion(多模型投票融合)——在"极端网络波动下的响应速度"和"多模型共识"场景有价值;
  • 多模态与 MCP 扩展:内置 TTS/STT/Image 接口与 MCP Server Bridge。

VMR 明显更优的场景:

  • 长会话成本控制:缓存亲和保护,稳定 50%-70% 降本;
  • 字节保真与工具调用稳定性:不转译协议、不改 Payload——复杂 Tool Call Schema 在中间层转译下容易出边界 bug(OpenProxy 6.8 万行转译逻辑存在此风险,长期故障率需实测佐证);
  • 法医取证vmr replay 一键重放、vmr story -compare 跨运行分歧定位——OpenProxy 只有传统 Metrics 仪表盘,无法做上下文丢失推导;
  • 极简运维:单二进制、零数据库、零 Web UI,攻击面与出 bug 概率都小一个量级。

五、选型决策树

你的 Agent 工作流以什么为主?
│
├─ 多轮长会话为主(Claude Code / OpenClaw 重度、长上下文迭代)
│   ├─ 需要"省钱 + 稳定 + 出事了能查" → VMR(缓存亲和路线)
│   └─ 需要同时管一堆订阅账号(ChatGPT/Codex 逆向池化)→ OpenProxy(但注意
│       关闭或谨慎使用 RTK 压缩,避免击穿缓存;或两者叠加:OpenProxy 管账号,
│       VMR 类路由管缓存亲和)
│
├─ 一次性短请求为主(批量调用、单轮问答)
│   ├─ 追求功能面与可视化 → OpenProxy
│   └─ 追求极简与低资源 → VMR
│
└─ 混合场景
    └─ 推荐"功能层 + 网络层"分层:OpenProxy 负责账号/功能扩展,VMR 负责
       字节保真转发与缓存锁定(两者定位不冲突,反而互补)