SSD Nodes Learn 🎉 VPS $4.99/月起
指南 Matt Connor作者: Matt Connor

Paritok 能让编码代理账单降低多少?

Paritok 将文件读取和工具输出压缩至原大小的25.7%,项目声称减少74%令牌,但这不是账单降幅。本文解释网关机制与盈亏平衡计算。

Paritok 如何处理请求

Paritok 是一个令牌网关:它是位于编码代理与模型 API 之间的代理,会先压缩每个请求,再将其转发出去。您的代理连接的是 http://127.0.0.1:8080,而不是服务提供商。该代理会重写工具 schema、文件读取内容、工具输出和较早的对话轮次,向上游发送更小的负载,并将回复原样返回。

服务提供商会根据到达其服务端的内容向您计费,因此负载越小,账单越低。这就是 Paritok 的基本原理。这与“上下文可以持续更长时间”是不同的说法,也正是该工具值得关注的原因,而不只是让请求更整洁。

该项目仍处于早期阶段。它最早的公开标签日期为 July 2026,当前标签为 v1.3.0,日期为 5 August 2026。模型权重和网关代码采用 Apache 2.0 许可证。压缩模型是基于 Qwen3-4B-Instruct-2507 的 LoRA(低秩适配)适配器,使用从真实编码代理轨迹中提取的 45,000 个教师蒸馏样本进行训练。

这不是上下文裁剪

裁剪会删除内容。当代理接近上下文限制并丢弃最早的轮次时,它在第 3 轮读取的文件就不见了。如果它在第 20 轮需要该文件,就必须再次读取,因此这些令牌需要重复计费。之前的节省只是暂时的。

Paritok 会将一段内容替换为更短的形式和一个标签 [REF:id],并在代理服务器上保留完整文本。模型可以通过调用 read_originalexpand_context 恢复该段内容。这会改变失败模式。裁剪会因遗忘而失败,而且不会告知您。压缩会因向模型提供有损摘要而失败;当摘要不足时,模型可以请求原始内容。

工具过滤器的工作方式相同。被过滤的工具架构会被替换为存根,而不是删除;模型可以通过调用 gateway_search_tools 恢复其中一个工具。这一点很重要,因为永久隐藏工具的过滤器会改变代理能够执行的操作,而您只能在某个任务悄无声息地出错后才发现这一点。

三个杠杆,以及其中一个无需付费

第一个杠杆是工具架构筛选器。每个请求都包含完整的 tools 数组。在连接了几个 MCP(模型上下文协议)服务器的 Claude Code 会话中,该部分约占 29,000 个 token。筛选器使用 BAAI/bge-small-en-v1.5(一个 130 MB 的嵌入模型)对用户请求和每个工具描述进行嵌入,保留匹配的工具,并为其余工具生成占位项。该部分会缩减到约 8,000 个 token。该嵌入模型在 CPU 上运行。

第二个杠杆是内容压缩,这是需要 GPU 上的 4B 模型的部分。文件读取内容、工具输出和历史记录会被重写为原始大小的 25.7%。74% 这个标题数字就来自这里。请仔细理解:74% 是被压缩内容的压缩率,不是你的账单降幅。

第三个杠杆是历史记录摘要。当上下文预算用满后,较早的会话轮次会被摘要,保留最近的上下文窗口。这样,长会话可以继续运行,而不会触及限制。

只有第二个杠杆需要 GPU。这是本页最重要的一句话。pip install "paritok[toolselect]" 可让你在普通的 CPU VPS 上使用工具筛选器,而且这是产品中每月无需支付费用的部分。租用 GPU 卡之前,先试试它。

项目测量了什么,以及使用谁的测试框架

ChartSWE-bench Lite: compression rate against solve quality retained (project's published figures)
The data behind this chart
[
  {
    "label": "Paritok-4B-v1",
    "compressed_to_pct": 25.7,
    "quality_retained_pct": 86.5
  },
  {
    "label": "gpt-4.1-mini",
    "compressed_to_pct": 50.2,
    "quality_retained_pct": 85.6
  },
  {
    "label": "gpt-5",
    "compressed_to_pct": 61.9,
    "quality_retained_pct": 93.6
  }
]

这些是项目自行发布的指标,使用其自有测试框架,针对 SWE-bench Lite 测得。Paritok-4B-v1 将内容压缩至原始大小的 25.7%,同时保留未压缩运行结果中 86.5% 的解决率。使用 gpt-5 进行压缩可以保留更高的质量,即 93.6%,但只能压缩至 61.9%;这相当于为了节省顶级模型的费用而支付顶级模型的费用。

请如实解读质量列。保留 86.5% 的解决率,意味着压缩运行失败的问题中,有一部分是未压缩运行成功解决的,接近每 7 个问题少解决 1 个。在基准测试中,这只是表格中的一个数字。在您的代码仓库中,它可能是您需要运行两次的任务。

ChartReported input-token saving as a session grows (project's own harness)
The data behind this chart
[
  {
    "label": "Turn 1",
    "saved_pct": 25
  },
  {
    "label": "Turn 5",
    "saved_pct": 39
  },
  {
    "label": "Turn 12",
    "saved_pct": 57
  },
  {
    "label": "Turn 20",
    "saved_pct": 63
  }
]

随着会话持续,端到端节省会增加,因为历史记录会不断累积,而被压缩的正是历史记录。项目报告称,单轮可节省约 25%,到第 5 轮时为 39%,到第 20 轮时为 63%。项目还说明了节省何时停止增长:在 200,000 token 的预算下,每轮的绝对节省会在约 48,000 token 处趋于平稳,大约发生在第 8 至 12 轮之间,因为上下文填满后,历史记录不再增长。广泛引用的“超过 85%”这一数字描述的是上下文已饱和的会话。这是最佳情况,因此不要以此为规划依据。

24GB GPU 能否为 Paritok 收回成本?

对于这种规模的模型,24 GB 显卡是常见的租用规格。截至 2026 年 8 月 7 日,24 GB RTX 4090 的按需租用公开报价中位数为每小时 $0.44,最低报价接近 $0.20。这里按 $0.44 计算。如果整月运行,共 730 小时,费用为 $321。仅在工作时间运行,即每天 8 小时、每月 22 天,共 176 小时,费用为 $77。

现在将 token 减少量换算为美元节省额。减少量只作用于输入 token。输出 token 会原样通过代理,因此完全不变。假设输入 token 占总费用的 80%;对于编码代理,这通常合理,但应使用自己的账单验证该假设。美元节省额就是 token 减少比例乘以 0.8。

ChartMonthly agent bill needed before a $0.44/hour 24GB card pays for itself
The data behind this chart
[
  {
    "label": "Turn 5 (39% saved)",
    "bill_always_on_usd": "1,030",
    "bill_workday_only_usd": 248
  },
  {
    "label": "Turn 20 (63% saved)",
    "bill_always_on_usd": 637,
    "bill_workday_only_usd": 154
  },
  {
    "label": "Saturated (85% saved)",
    "bill_always_on_usd": 472,
    "bill_workday_only_usd": 114
  }
]

在会话饱和时的 85% 数值下,您可节省账单的 68%。因此,只要每月代理费用超过约 $472,持续运行的显卡就能收回成本;如果在工作时间之外停止实例,临界值约为 $114。在第 20 轮的 63% 数值下,这两个临界值分别为 $637 和 $154。在第 5 轮的 39% 数值下,短会话实际更接近这一情况;每月需要约 $1,030,租用显卡才值得。

有两点会使实际情况优于表格显示的结果。模型不需要 24 GB:q4 构建约占 2.5 GB,bf16 构建约占 8 GB。因此,使用更小的显卡,或使用您已经为其他任务运行的 GPU 主机,会降低图表中的所有数值。无人编码时停止实例是这里影响最大的措施,因为这会将租用成本降低约四分之三。

但有一点会使实际情况变差。压缩过程确实需要计算资源。4B 模型压缩的每个 token 都必须先读取,再写入,这会增加每轮代理交互的延迟。对于按小时租用的显卡,这项成本表现为等待时间,而不是账单上的单独费用,因此在实际感受到延迟之前很容易忽略它。

如果您总体上正在比较租用 GPU 小时数和 API token,GPU VPS 与 API token 的盈亏平衡点会对推理本身执行相同的计算。

在 VPS 上运行 Paritok 网关

需要 Python 3.10 或更高版本。Ubuntu 24.04 自带 Python 3.12,因此纯 CPU 部分使用普通 VPS 镜像即可。

sudo apt update && sudo apt install -y python3-venv curl
python3 -m venv /opt/paritok/venv
source /opt/paritok/venv/bin/activate
pip install "paritok[proxy]==1.3.0"
pip install "paritok[toolselect]==1.3.0"

固定版本。该仓库于 29 July 2026 标记了 v1.2.8,并于 5 August 2026 标记了 v1.3.0。项目以这样的速度迭代时,版本之间可能会重命名配置键。直接使用 pip install paritok,或使用 git clone 指向 main,下周就可能得到不同的网关,而且无法记录生成测量结果的具体版本。

默认后端是 Ollama。先拉取模型,再为它指定代理查找的简短名称。

ollama pull paritok/paritok-4b-v1
ollama cp paritok/paritok-4b-v1 paritok-4b-v1

在旁边写入 paritok.yamluse_gpu_server: false 可确保压缩在您自己的硬件上执行。

use_gpu_server: false
local_model:
  base_url: http://localhost:11434
paritok proxy --port 8080 --config-file paritok.yaml

paritok up 是执行上述所有操作的快捷方式:如果模型不存在,它会先拉取模型,然后在端口 8080 上启动代理。在让 agent 使用代理前,先检查代理是否正常。

curl http://127.0.0.1:8080/health
curl http://127.0.0.1:8080/stats

/health 返回一个包含 "status":"ok" 和版本字符串的小型 JSON 对象。/stats 返回压缩总量,以及代理自行估算的节省量。该估算相当于代理对自身工作的评估,应通过提供商的用量页面进行确认。

如果更重视吞吐量而不是便利性,可以使用 vLLM 在基础模型上提供 adapter。

vllm serve Qwen/Qwen3-4B-Instruct-2507 \
  --enable-lora \
  --lora-modules paritok-4b-v1=paritok/paritok-4b-v1 \
  --port 8000

Ollama 更容易快速部署。vLLM 处理并发请求的能力强得多;只要多于一个 agent 共用这台服务器,这一点就会开始变得重要。Ollama 与 vLLM 的实际差异 将帮助您做出选择。

通过 base URL 环境变量,让 agent 使用代理。

export ANTHROPIC_BASE_URL=http://127.0.0.1:8080
export OPENAI_BASE_URL=http://127.0.0.1:8080

Codex CLI 会忽略 OPENAI_BASE_URL,因此当 codex.enabled: trueparitok.yaml 中设置后,项目会为您写入 ~/.codex/config.toml。只导出该变量会让 Codex 直接与提供商通信,其表现是 /stats 计数器在工作期间始终不变。

让监听器保持在 127.0.0.1,不要监听 0.0.0.0。代理会将您的提供商 API key 转发到上游,因此可从互联网访问的代理会成为该 key 的开放中继:任何发现该端口的人都可以使用您的资金,而无需看到 key 本身。应通过 SSH 隧道或 VPN 从笔记本电脑访问代理,而不是开放该端口。

使用 systemd 运行代理,使其在重启后仍能运行。请根据实际安装位置调整路径。

[Unit]
Description=Paritok compression proxy
After=network-online.target

[Service]
User=paritok
WorkingDirectory=/opt/paritok
ExecStart=/opt/paritok/venv/bin/paritok proxy --port 8080 --config-file /opt/paritok/paritok.yaml
Restart=on-failure

[Install]
WantedBy=multi-user.target

使用 sudo systemctl enable --now paritok 启用服务,然后再次执行 curl /health。启动后立即退出的单元通常表示配置文件路径错误,journalctl -u paritok -n 50 会输出具体原因。

托管选项及其代价

该项目也将压缩功能作为服务提供。设置 use_gpu_server: true 并提供 API key 后,4B 模型会在其硬件上运行,收费标准为每处理 1000000 个 token $0.30;根据其文档,在 2026 年 8 月底前免费。这样可以省去 GPU 租用费用以及上述所有运维工作。

但这也意味着,在到达模型提供商之前,您的提示词和代理读取的文件会先离开您的计算机并传输给第三方。自托管正是为了避免这一跳。设置该标志前,请先确定您要优先优化哪一方面,因为修改标志只需改动一行,但其后果并非如此。

如何衡量您自己的前后差异

已发布的数据是项目使用项目测试框架在 SWE-bench Lite 上得出的数据。您的代码仓库不是 SWE-bench Lite。请测量您自己的数据。

  • 在没有代理介入的情况下正常运行一周。将提供商用量页面中的输入 token、缓存读取 token 和输出 token 分别记录为单独的行,不要只记录一个美元总额。
  • 下一周在前端接入代理,执行同类工作。
  • 比较输入和缓存读取这两行。输出应基本保持不变,因为压缩器不会处理输出。如果输出变化很大,说明除代理之外还有其他因素发生了变化。
  • 统计需要重做的任务数量。这是权衡中的质量部分,任何仪表板都不会报告这一项。
  • 比较总额前,先将第二周的 GPU 使用小时数计入成本。

将输入与输出分开统计很重要,因为两者的定价差异很大,而压缩器只会处理其中一项。截至 August 2026,Claude Sonnet 4.6 的输入价格为每百万输入 token $3,输出价格为每百万输出 token $15,提示缓存读取价格是输入价格的 10%,即每百万缓存读取 token $0.30。输入与输出 token 成本之间的差距决定了输入侧压缩器对您是否有价值。Claude Code 的 token 实际消耗在哪里会告诉您上下文的哪一部分足够大,值得进行压缩。

提示缓存尤其会使工具过滤的成本计算变得复杂。工具块位于请求的前端,因此在第一个轮次之后,通常会以输入价格的 10% 命中缓存。从缓存块中减少 21,000 个 token,按每百万 token $0.30 计算,每轮可节省约 $0.006,而不是未缓存价格所显示的 $0.063。项目会在整个会话中保持过滤后的块不变,因此缓存前缀不会变化。如果每轮都重新选择工具,缓存前缀就会失效,成本反而会超过节省的金额。

仍未验证的内容

上文所有性能数据都来自项目本身。SWE-bench Lite 结果尚未经过独立复现;而且首批标签的日期是 2026 年 7 月,因此这些代码背后的实际运行历史也很少。压缩率和保留质量数据都由从中受益的一方进行测量,因此结果看起来越好,对其越有利。这并不表示数据错误,而是表示它们尚未得到确认。您应将这些数据与自己测得的数据区别对待。

在将问题归咎于自己的配置前,还需要了解一个已有文档记录的行为。工具过滤器使用的嵌入模型不会在启动时加载,而是在收到第一个请求时加载。因此,项目文档记录的预热时间为 10 到 15 秒,之后每次调用约需 15 ms。代理启动后发送一个无实际用途的请求,第一次真正的 agent 交互就不会看起来像是卡住了。

您可以在一个下午内自行确认 4 件事:代理是否能够启动并持续运行,工作期间 /stats 是否发生变化,您的 provider 报告的输入 token 数是否确实下降,以及 agent 是否仍能完成任务。对于您的环境,这些结果比任何已发布的基准测试都更有参考价值。

关于它与其他工具的关系:自托管的 LiteLLM 网关会对请求进行路由和计量,但不会修改请求内容。因此,两者解决的是不同问题,可以串联使用;Paritok 更靠近 agent。如果您的实际目标是降低费用,而不是使用这一特定工具,VPS 上 agent 的更多成本控制方法还包括多项无需付费即可先行尝试的调整。

FAQ

Paritok 会降低我的 API 账单,还是只减少上下文用量?

它会降低账单,因为代理会在请求到达提供商前重写请求,而提供商会按实际收到的内容收费。但实际降幅小于宣传数字。74% 是被压缩内容的压缩率。按端到端计算,项目报告单轮约降低 25%,到第 20 轮约降低 63%;只有输入令牌会发生变化。输出令牌会原样传递。

自托管压缩模型需要多少 GPU?

q4 构建约占 2.5 GB,bf16 构建约占 8 GB,因此模型可以轻松装入 24 GB 显存的显卡。更小的显卡也可以使用,而且会让盈亏平衡计算更有利。工具 schema 过滤器完全不需要 GPU:它使用 BAAI/bge-small-en-v1.5,这是一个 130 MB、可在 CPU 上运行的 embedding 模型。在普通 VPS 上安装 paritok[toolselect],只需增加少量 RAM,就能获得工具块缩减功能。

如果压缩器移除了代理需要的内容,会发生什么?

不会有内容被移除。压缩片段会携带 [REF:id] 标签,模型可使用 read_originalexpand_context 恢复完整文本。被过滤的工具 schema 会被替换为存根,而不是删除;模型可使用 gateway_search_tools 恢复其中一个。真正的风险比文件缺失更隐蔽:模型基于有损摘要工作,却始终意识不到自己应该请求原始内容。SWE-bench Lite 上 86.5% 的质量保留率衡量的就是这一点。

为什么我的第一个请求需要 15 秒?

工具过滤器使用的 embedding 模型会在第一个请求时加载,而不是在启动时加载。项目文档显示,预热需要 10 到 15 秒,之后每次调用约需 15 ms。启动代理后,使用 curl 发送一次无实际作用的请求,这样第一个真实的代理轮次就不会停顿。

我应该使用托管 GPU 服务器,而不是自托管吗?

这样可以省去 GPU 租用费和维护工作。截至 August 2026,费用为每处理一百万个令牌 $0.30。但在请求到达模型提供商前,它还会将你的提示词和代理读取的文件发送给第三方。如果你选择自托管是为了让代码保留在自己控制的基础设施上,这个设置就违背了最初的目的。自托管会将上下文和提供商 API key 都保留在你自己的服务器上。