返回博客

工具与集成指南

将 Crush 连接到 CheapTokens:crushrc provider、model、key

用两条 crushrc 命令将 CheapTokens 添加到 Crush:一个 completions provider 和一个带真实限制的模型;密钥来自环境变量。

作者:CheapTokens Team发布于 5 分钟阅读

带有 CheapTokens provider 和 model 行的 Crush 配置文件
本页内容
  1. 安装 Crush
  2. 将 CheapTokens 写入 crushrc
  3. 打开 Crush 并运行第一个任务
  4. 一次编码会话的成本
  5. 如果它不工作

要将 Crush 连接到 CheapTokens,请在你的 crushrc 中放入两条命令:provider add,带上基础 URL https://api.cheaptokens.dev/v1 和 --type completions;以及 model add,带上完整的模型 id。然后打开 Crush,按 Ctrl+l,选择模型并给它一个任务。密钥保存在环境变量中,而不是文件中。

如果你参考的是旧版指南,它很可能修改的是 crush.json。Crush 仍会读取该文件,但其 README 称其已弃用:当前配置是 crushrc,并且从 v0.99.0(2026 年 10 月 29 日)起,provider --type 描述的是 API 格式,而不是厂商。来源为 Crush README 和发布说明,核查于 2026 年 11 月 10 日;该日期的最新稳定版为 v0.100.0。

安装 Crush#

选择你已有的任意包管理器即可。Crush 是单个二进制文件,所以走哪条路都一样。

安装 Crush

Homebrew

bash
brew install charmbracelet/tap/crush

npm

bash
npm install -g @charmland/crush

winget

bash
winget install charmbracelet.crush

Go

bash
go install github.com/charmbracelet/crush@latest

README 还列出了 apt 和 yum 仓库、Scoop、Nix、Arch 和 FreeBSD。运行一次 crush 确认它能启动,然后退出。

将 CheapTokens 写入 crushrc#

README 将 crushrc 描述为“只是带有一些 Crush 专用内建命令的 Bash”。这就是全部诀窍:你写 shell,而 provider add 和 model add 是 Crush 能理解的命令。Crush 按以下顺序查找该文件:./.crushrc、./crushrc,然后是 ~/.config/crush/crushrc。

所以由你决定它放在哪里。项目本地的 .crushrc 只对一个仓库生效;~/.config/crush/ 中的那个则对所有地方生效。第一次尝试时,全局的那个更容易。

首先把密钥放入你的 shell。在 CheapTokens 仪表盘中创建它并导出(下面的值是占位符):

bash
export CHEAPTOKENS_API_KEY="your-key-here"

然后打开 ~/.config/crush/crushrc 并写入:

bash
provider add cheaptokens --type completions \
  --base-url "https://api.cheaptokens.dev/v1" \
  --api-key "$CHEAPTOKENS_API_KEY"

model add cheaptokens/deepseek-ai/DeepSeek-V4-Flash-0731 \
  --name "DeepSeek-V4-Flash" \
  --context-window 380000 \
  --default-max-tokens 32768

有几个细节值得再看一眼:

  • --type completions 是 Crush 对非 OpenAI 自身的 OpenAI 兼容 provider 的称呼。responses 用于 OpenAI 代理,messages 用于 Anthropic 兼容的 provider。旧的 openai-compat 仍然可用,并会被迁移。
  • 基础 URL 以 /v1 结尾。这是 CheapTokens 用于 OpenAI 风格 Chat Completions 的地址;完整端点列表见 CheapTokens 文档。
  • $CHEAPTOKENS_API_KEY 由 shell 展开,因此文件中不含密钥,项目中的 .crushrc 可以安全地提交到 git。
  • 模型 id 是完整的那个,deepseek-ai/DeepSeek-V4-Flash-0731。像 deepseek-v4-flash 这样的短 id 会被 API 拒绝。provider 名称后面还有第二个斜杠,因为 id 本身包含一个斜杠。
  • --context-window 380000 是 DeepSeek-V4-Flash 取整后的 380K,--default-max-tokens 32768 是它的每次回答上限。这些是模型在 CheapTokens 中的真实限制:380K 上下文,每次回答最多 32,768 个 token。请把它们写入 model add,而不是保留 README 中的示例值(64000 和 5000)。
带有 CheapTokens provider 和模型的 crushrc 文件
crushrc:一行 provider 和一行 model;密钥来自环境变量

README 只展示了带简单 id(deepseek/deepseek-chat)的 model add。你的 id 多了一个斜杠,所以下一步中的模型选择器才是真正的检验:如果模型出现在 cheaptokens 下,说明该行被按预期读取了。

想在同一余额下使用另一个模型?再添加一行 model add,带上它自己的 id 和限制。GLM-5.3-Flash 是 zai-org/GLM-5.3-Flash(390K 上下文,每次回答最多 8,192 个 token),MiniMax-M2.7 是 MiniMaxAI/MiniMax-M2.7(180K 上下文,每次回答最多 8,192 个 token)。请让 --default-max-tokens 等于或低于你所添加模型的回答上限。

打开 Crush 并运行第一个任务#

在项目文件夹中启动 crush。按 Ctrl+l 打开模型选择器,从 cheaptokens 组中选择 DeepSeek-V4-Flash。README 没有描述用于默认模型的 crushrc 命令,所以选择器就是办法。

从 crushrc 到第一个回答:provider、model、选择器、任务
从配置到第一个回答的路径

现在给它一个小的、可检查的任务,比如:Read this repo and tell me which file starts the app, in two lines. 一个能说出真实文件名的回答意味着整条链路都正常:密钥、基础 URL、模型 id。

自己试试试一试:你按 Ctrl+l,但模型不在列表中。你首先检查什么?显示答案

文件位置和变量。Crush 按优先级查找配置:./.crushrc、./crushrc、~/.config/crush/crushrc。检查项目中没有其他内容不同的 .crushrc 或 crushrc,并确认 provider 是添加在你编辑的那个文件中。而且 echo $CHEAPTOKENS_API_KEY 必须在你启动 crush 的同一个 shell 中打印出密钥。

权限提示是有意存在的。crushrc 中的 permissions allow <tools> 让指定工具无需询问即可运行;--yolo 会跳过所有提示,README 本身也说使用它要非常小心。

一次编码会话的成本#

终端中的智能体步骤是输入密集型的:Crush 每次都会发送历史记录、文件内容和工具输出,并收到一个适度的回答。假设平均每步发送 30,000 个 token,接收 2,000 个。在 DeepSeek-V4-Flash 上,该步骤花费 $0.00065,而且价格在任何时段都相同,没有高峰时段。把输入和输出加在一起计算,这比 OpenRouter 的参考价格更便宜。

换成你自己的数字:40 个这样的步骤组成的一次会话,只需拖动一个滑块。

成本计算器

Crush 中编码智能体的一天

每次请求的输入 token 数: 30,000 · 每次请求的输出 token 数: 2,000 · 每日请求数: 40

模型每天每月
GLM-5.3-Flash$0.0272$0.816
DeepSeek-V4-Flash$0.026$0.78
MiniMax-M2.7$0.072$2.16

每步的输入会随着会话进行而增长,所以对于长会话,要对照 380K 窗口来检查,而不是看平均值。每个模型当前的每 token 价格在定价页面上。

如果它不工作#

Crush 会在你的项目中写入日志 ./.crush/logs/crush.log。在猜测之前先读它:

bash
crush logs --tail 500
crush logs --follow
crush --debug

你也可以把 option debug true 放入 crushrc 以保持调试输出开启。然后将你看到的内容与 API 返回的 HTTP 状态码进行匹配:

  • 401:密钥已发送但未被识别:拼写错误或密钥已被替换。重新创建或复制它。
  • 402:余额或密钥限额已用完。完全不带密钥的请求看起来也一样,所以在你启动 crush 的 shell 中运行 echo $CHEAPTOKENS_API_KEY。如果密钥存在,就充值余额。
  • 429:短时间内请求过多。等待 Retry-After 的值后重试。
  • 400 或“model not found”:查看模型 id。它必须是文档中的完整 id,带有厂商前缀。

如果你是从 crush.json 迁移过来的,请注意 ~/.local/share/crush/crush.json 是 Crush 的状态,不是配置;不要手动编辑它。

要在其他工具中进行相同设置,请参阅将 Aider 连接到 CheapTokens 和将 Kilo Code 连接到 CheapTokens。廉价 DeepSeek 的模型页面列出了此处所用模型的限制。