SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-22

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

Paritok 将工具架构压缩至约8,000个token,并把文件读取和工具输出压缩至原大小25.7%。了解74%压缩率的机制,以及GPU成本下何时回本。

Paritok 如何处理请求

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

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

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

为何这不是上下文裁剪

裁剪会删除内容。当 agent 接近上下文限制并丢弃最早的对话轮次时,它在第 3 轮读取的文件就不见了。如果它在第 20 轮需要该文件,就必须再次读取,因此这些 token 需要再次付费。之前节省的开销只是暂时延后了。

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

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

三种调节手段,以及其中免费的一个

第一种手段是工具架构筛选器。每个请求都会携带完整的 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 在保留未压缩解决率的 86.5% 的同时,将内容压缩到原始大小的 25.7%。使用 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%”描述的是上下文已饱和的会话。这是最佳情况,因此不要据此规划。

Paritok 是否值得使用 24GB GPU?

对于这个规模的模型,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,或使用 maingit clone,下周就可能得到不同的网关,而且无法记录生成所测数据的具体版本。

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

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

由于本地模型会为压缩的每个片段生成重写结果,运行时间过长的压缩过程会表现为代理回合停滞。Ollama 的 num_predict 输出长度上限可用于限制这一过程。

在旁边写入 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 上启动代理。在让代理接收代理请求前,先检查代理是否正常。

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

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

如果更重视吞吐量而非便利性,可以使用 vLLM 在基础模型之上提供适配器服务。

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

Ollama 更容易快速部署。vLLM 处理并发请求的能力强得多;当多个代理共享这台服务器时,这一点很快就会变得重要。Ollama 与 vLLM 的实际差异将决定适合您的方案。

使用基础 URL 环境变量,让代理连接到该网关。

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,因此当在 paritok.yaml 中设置 codex.enabled: true 时,项目会为您写入 ~/.codex/config.toml。只导出该变量会使 Codex 直接连接服务提供商。此时的表现是 /stats 计数器在工作期间始终不变。

让监听器绑定到 127.0.0.1,不要绑定到 0.0.0.0。代理会将您的服务提供商 API 密钥转发到上游,因此可从互联网访问的代理会成为该密钥的开放中继:任何发现该端口的人都可以使用您的资金,而无需看到密钥本身。应通过 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 模型会在其硬件上运行。按照项目文档,该服务按每处理 100 万个 token 收费 $0.30,在 2026 年 8 月底前免费。这样可以省去 GPU 租用费用和上述全部运维工作。

但这也意味着,在到达模型提供商之前,您的提示词和代理读取的文件会先离开您的机器并发送给第三方。自行托管正是为了避免这一跳转。在设置该标志之前,请先确定要优先考虑哪一项,因为修改该标志只需改动一行,而产生的影响并不止于此。

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

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

  • 先正常运行一周,不在请求链路中使用代理。分别从服务提供商的用量页面记录输入 token、缓存读取 token 和输出 token,不要只记录一个美元总额。
  • 下一周在前端加入代理,并执行同类工作。
  • 比较输入和缓存读取数据。输出通常应基本持平,因为代理不会压缩输出。如果输出变化很大,说明还有其他因素发生了变化。
  • 统计需要重做的任务数量。这是这项权衡中的质量部分,但任何控制面板都不会报告它。
  • 比较总额前,将第 2 周的 GPU 使用小时数计入成本。

将输入与输出分开统计很重要,因为两者的定价差异很大,而压缩器只会处理其中一部分。截至 2026 年 8 月,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 结果的独立复现,而且最早的标签日期为 July 2026,因此这段代码几乎没有经过实际运行验证。压缩率和保留质量数据都由从中受益的一方进行测量。它们不一定是错误的,但仍未得到确认。对待这些数据时,应区别于自己测得的数据。

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

你可以在一个下午内自行确认4件事:代理是否能够启动并持续运行,工作期间 /stats 是否发生变化,服务提供商显示的输入 token 数是否确实下降,以及 agent 是否仍能完成任务。这些结果比任何已发布的基准测试都更能说明它是否适合你的环境。

关于它与其他工具的关系:自托管的 LiteLLM 网关可以在不修改请求内容的情况下进行路由和计量,因此两者解决的是不同问题,也可以串联使用,其中 Paritok 位于最靠近 agent 的位置。如果你的实际目标是降低费用,而不是使用这个特定工具,VPS 上运行 agent 的更多成本控制方法还包括多项可以优先免费尝试的调整。

FAQ

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

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

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

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

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

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

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

工具过滤器背后的嵌入模型会在第一个请求时加载,而不是在启动时加载。项目说明预热需要 10 到 15 秒,此后每次调用约需 15 ms。启动代理后,使用 curl 发送一个无实际用途的请求,这样第一个真正的代理轮次就不会停顿。

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

它可以免除 GPU 租用和维护成本。截至 2026 年 8 月,价格为每处理 1000000 个 token 收取 $0.30。它还会在请求到达模型提供商前,将你的提示和代理读取的文件发送给第三方。如果你选择自托管,是为了让代码留在自己控制的基础设施上,那么使用该设置就违背了这一目的。自托管可以让上下文和提供商 API 密钥都保留在你自己的服务器上。