知识库章节 ▾
导航
▸ 从这里开始 按角色类别
- Cursor + Gonka AI — 便宜的 LLM 用于编码
- Claude Code + Gonka AI — 终端的 LLM
- OpenClaw + Gonka AI — 可负担的 AI 代理
- OpenCode:在终端中使用自己的模型
- Continue.dev + Gonka AI — 适用于 VS Code/JetBrains 的 AI
- Cline + Gonka AI — VS Code 中的 AI 代理
- Aider + Gonka AI — 与 AI 结对编程
- LangChain + Gonka AI — 便宜的 AI 应用程序
- n8n + Gonka AI — 通过便宜的 AI 实现自动化
- Open WebUI + Gonka AI — 您的 ChatGPT
- LibreChat + Gonka AI — 开源 ChatGPT
- Hermes Agent + DeepSeek 在 Gonka 网络 — 极低成本的自主智能体
- Kilo Code + Gonka AI — VS Code 中的 AI 代理
- Roo Code + Gonka AI — VS Code 中的自主 AI 代理
- LlamaIndex + Gonka AI — 低成本的 RAG 应用程序
- PydanticAI + Gonka — 低成本的类型化 AI 代理
- Vercel AI SDK + Gonka AI — 低成本的 TypeScript AI 应用程序
- TanStack AI + Gonka — 低成本的 TypeScript AI 应用程序
- API 快速入门 — curl, Python, TypeScript
- JoinGonka Gateway - 全面概述
- 管理密钥 — Gonka 上的 SaaS
- 最便宜的AI API:2026年提供商对比
- 如何购买AI token和API密钥:2026年的3种方法
- Cursor Pro 请求限制已用尽 — 解析与廉价替代方案
- Claude Code 更便宜 — 账单解析与切换
- Cline 正在烧钱 — 为什么代理花费如此之多
- OpenClaw 成本高昂 —— 为什么 Agent 会疯狂消耗 Token 以及如何节省
- OpenRouter:廉价替代方案 — 与 JoinGonka Gateway 的对比
- 2026 年最佳编码 AI 模型:对比与定价
- GitHub Copilot 无限制低成本替代方案
- 无积分、无限制的廉价 Windsurf 替代方案
- 2026 年最便宜的 AI 代理 API
- ZCode:使用低成本 GLM 推理替代 GLM Coding Plan
- JetBrains IDE + JoinGonka Gateway — 使用自己的 endpoint 替代点数消耗
- GitHub Copilot BYOK — 使用自己的模型替代配额限制
- Zed + JoinGonka Gateway — 编辑器中的低成本推理
- Pi + JoinGonka Gateway — 基于低成本推理的终端代理
- Codex CLI:使用自己的密钥代替订阅
- DeepSeek Harness:通过 JoinGonka Gateway 连接自有提供商
- MiniMax Code:通过 Gonka 使用自备密钥运行 MiniMax 智能体
- Warp + JoinGonka Gateway — 在您端点上的终端代理
- Trae + JoinGonka Gateway — AI-IDE 中的 Gonka 网络模型
- Cherry Studio + JoinGonka Gateway — 桌面 AI 客户端
- omp (Oh My Pi) + JoinGonka Gateway:带模型角色的代理
- OpenHands + JoinGonka Gateway:专属 endpoint 上的智能体
- qwen-oauth 关闭后的 Qwen Code:通过 JoinGonka Gateway 工作
- Goose + JoinGonka Gateway:您的提供商和密钥到 keyring
- Crush + JoinGonka Gateway:基于 Gonka 网络模型的 Charm 代理
- Zoo Code + JoinGonka Gateway:从 Roo Code 迁移至 Gonka 模型
- Kimi Code CLI:通过 Gonka 使用您自己的密钥连接 Moonshot AI Agent
- Factory Droid + JoinGonka Gateway:在 Gonka 网络模型上使用 BYOK
- MiMo Code + JoinGonka Gateway:Gonka 网络模型上的 Xiaomi 代理
工具
Crush + JoinGonka Gateway:基于 Gonka 网络模型的 Charm 代理
Crush 是来自 Charm 的终端编程代理,该公司提供的控制台界面库支撑了数以万计的程序。它能够读取和编辑项目文件、运行命令、从语言服务器获取上下文(LSP)、通过 MCP 连接外部工具,并能在会话中切换模型而不丢失上下文。它可在 macOS、Linux 和 Windows 终端以及 Android 和 BSD 上运行;许可证为 FSL-1.1-MIT。该项目渊源深厚:归档仓库 opencode-ai/opencode 直接指向 Crush — 项目由其第一作者和 Charm 团队继续开发。
Crush 支持两种第三方提供商 — 兼容 OpenAI 和 Anthropic API 的提供商。JoinGonka Gateway 以 openai-compat 方式连接:只需一条安装命令或十几行配置。此后,该代理即可在去中心化 Gonka 网络模型 — DeepSeek V4 Flash、GLM-5.3 Flash 和 MiniMax M2.7 — 上运行,价格统一:每百万输入 token $0.0069。
在首次使用前,需要了解 Crush 的两个特点:它将模型分配到 large 和 small 两个槽位,且界面中选择的模型存储在独立的状态文件中,其优先级高于配置文件。相关内容详见专门章节。下方的命令和信息已通过 2026 年 9 月 23 日的 Crush 0.96.1 实时网关运行验证。确认地址后,账户将获得 3M 免费 token — 足以让你自己重复一遍所有操作。
快速开始:安装与单条命令
第 1 步:安装 Crush。来自项目 README的官方方式:
# Homebrew
brew install charmbracelet/tap/crush
# npm
npm install -g @charmland/crush
# Arch Linux
yay -S crush-bin
# Windows
winget install charmbracelet.crush
# Go
go install github.com/charmbracelet/crush@latestREADME 中同样介绍了适用于 Debian、Ubuntu、Fedora 和 RHEL、Nix 和 Scoop 的软件包仓库,发布页面上还提供了现成的二进制文件。验证方式——crush --version,会返回类似 crush version v0.96.1 的一行。
第 2 步:获取密钥。在 gate.joingonka.ai/register 注册,确认邮箱地址,然后在「API 密钥」页面创建一个以 jg- 为前缀的密钥。一个密钥和一个余额即可用于网络上的所有模型。
第 3 步:运行安装程序。
npx @joingonka/setup --tool crush安装程序会询问密钥——它不会通过命令行参数传递,以免留在 shell 历史记录中——并完成四件事:
- 将提供商
joingonka写入~/.config/crush/crush.json:类型openai-compat、网关地址、明文字面量密钥,以及三个网络模型及其上下文窗口、响应上限和每百万 token 的价格,这些价格在安装时会从网关实时获取——Crush 据此计算会话成本。文件权限将设为600; - 分配模型:large 槽位为 DeepSeek V4 Flash,small 槽位为 MiniMax M2.7,而 GLM-5.3 Flash 会保留在列表中供手动选择。仅当 large 槽位为空或指向已从网络中下线的我们的模型时才会这样做;他人的选择会保留,输出中会提示如何切换;
- 检查该选择是否生效:Crush 界面中的模型保存在状态文件中,而该文件会覆盖配置——详见 large 和 small 相关章节;
- 创建备份,其他提供商和设置保持不变,最后向网关发起一次实时请求,以便立即验证密钥、地址和模型。
如需指定其他模型,可使用 --model 标志并搭配简写 deepseek、glm 或 minimax;显式指定的模型始终会被写入。对于非标准目录,安装程序的处理方式与 Crush 本身相同:CRUSH_GLOBAL_CONFIG 用于配置,CRUSH_GLOBAL_DATA 用于状态文件,此外还有 XDG_CONFIG_HOME 和 XDG_DATA_HOME。针对服务器和脚本,还提供了无交互模式,密钥从环境变量中读取:
JOINGONKA_API_KEY=jg-your-key npx @joingonka/setup --tool crush --model glm --non-interactiveCrush 的主要格式现在是 crushrc,但安装程序写入的是 crush.json:所有版本都能识别它。如果你已经有 crushrc,Crush 会合并两个文件,键名冲突时以 crushrc 为准,而安装程序本身不会改动它。
手动配置:crush.json 或 crushrc
安装器所做的每一件事,你都可以手动写出来。下面是一份可以直接用的 ~/.config/crush/crush.json —— 这个文件我们已经在网关里跑过了:
{
"$schema": "https://charm.land/crush.json",
"providers": {
"joingonka": {
"name": "JoinGonka (Gonka)",
"type": "openai-compat",
"base_url": "https://gate.joingonka.ai/v1",
"api_key": "jg-your-key",
"models": [
{ "id": "deepseek-ai/DeepSeek-V4-Flash-0731", "name": "DeepSeek V4 Flash (Gonka)",
"context_window": 380000, "default_max_tokens": 32768,
"can_reason": true, "supports_attachments": false },
{ "id": "MiniMaxAI/MiniMax-M2.7", "name": "MiniMax M2.7 (Gonka)",
"context_window": 200000, "default_max_tokens": 8192,
"can_reason": false, "supports_attachments": false },
{ "id": "zai-org/GLM-5.3-Flash", "name": "GLM-5.3 Flash (Gonka)",
"context_window": 390000, "default_max_tokens": 8192,
"can_reason": true, "supports_attachments": false }
]
}
},
"models": {
"large": { "provider": "joingonka", "model": "deepseek-ai/DeepSeek-V4-Flash-0731" },
"small": { "provider": "joingonka", "model": "MiniMaxAI/MiniMax-M2.7" }
}
}| 字段 | 值 | 要点 |
|---|---|---|
type | openai-compat | 用于提供 OpenAI 兼容 API 的第三方服务的类型。Crush 文档把 openai 类型留给经由 OpenAI 本身的请求 |
base_url | https://gate.joingonka.ai/v1 | 末尾要带 /v1:/chat/completions 路径由 Crush 自行补上 |
api_key | 你的 jg-… 密钥 | Crush 会对该值做 shell 替换,因此你可以不写密钥本身,而写 $JOINGONKA_API_KEY —— 但这样该变量必须导出在启动 Crush 的那个环境里 |
context_window | 模型的上下文窗口 | Crush 用它来显示上下文占用量,并判断何时压缩历史记录 |
default_max_tokens | 回复上限 | 会作为 max_tokens 出现在每次请求中。对推理模型来说,推理过程也计入这个额度 |
Crush 只接受严格 JSON:一个注释或者一个尾随逗号,它就启动不了。价格字段(cost_per_1m_in、cost_per_1m_out 以及两个缓存字段)只是给费用计数器用的:安装器会把网关的实时价格填进去,就算不填 Crush 也能跑,只是显示为零 —— 只有加载了 $schema 中 schema 的编辑器才会把它们标记为必填。
同一个 provider 用 crushrc 格式写出来,就是一段普通的 Bash,加上 Crush 的内置命令。文件 ~/.config/crush/crushrc:
provider add joingonka \
--name "JoinGonka (Gonka)" \
--type openai-compat \
--base-url "https://gate.joingonka.ai/v1" \
--api-key "${JOINGONKA_API_KEY:?set JOINGONKA_API_KEY}"
model add joingonka/deepseek-ai/DeepSeek-V4-Flash-0731 \
--name "DeepSeek V4 Flash (Gonka)" \
--context-window 380000 --default-max-tokens 32768 --can-reason true
model add joingonka/MiniMaxAI/MiniMax-M2.7 \
--name "MiniMax M2.7 (Gonka)" \
--context-window 200000 --default-max-tokens 8192
model add joingonka/zai-org/GLM-5.3-Flash \
--name "GLM-5.3 Flash (Gonka)" \
--context-window 390000 --default-max-tokens 8192 --can-reason true
model large joingonka/deepseek-ai/DeepSeek-V4-Flash-0731
model small joingonka/MiniMaxAI/MiniMax-M2.7这里的模型采用 provider/model-id 的形式命名:第一条斜杠之前是 provider 名称,之后是网络标识符本身。用 ${JOINGONKA_API_KEY:?…} 这种形式可以把密钥留在文件之外,但变量没导出的话 Crush 就启动不了 —— 宁可启动时报错,也不要带着空密钥去发请求。
Large 和 small 模型以及状态文件
在 Crush 中,不是为所有任务选择单一模型,而是为两个槽位分别选择:
| 槽位 | 执行内容 | 安装程序设置 | 如何更改 |
|---|---|---|---|
large | 主要代理:处理所有涉及读取、编辑文件以及执行命令的操作。 | DeepSeek V4 Flash:380K 上下文窗口,拥有网络中最大的响应上限 32768。 | 界面中按 ctrl+l,crush run 使用 -m,或在配置文件中设置 models.large。 |
small | 辅助任务:会话命名以及用于网络搜索和读取网页的子代理。如果小模型未能完成命名,Crush 会使用大模型重新请求。 | MiniMax M2.7:它在网络中具有最大的容量。 | crush run 使用 --small-model,配置文件中设置 models.small,或在 crushrc 中设置 model small。 |
第三种网络模型,即侧重推理的 GLM-5.3 Flash,常用于处理复杂的逻辑问题,需注意其响应上限为 8192,且其中一部分会被推理过程占用——详见模型概览。单次运行时,通过全名指定模型:crush run -m joingonka/zai-org/GLM-5.3-Flash "…"。所有可用名称可通过 crush models joingonka 列出。
状态文件。 通过界面 ctrl+l 选择的模型,Crush 不会将其写入 crush.json,而是存入机器状态文件:~/.local/share/crush/crush.json,在 Windows 上为 %LOCALAPPDATA%\crush\crush.json。该文件的优先级高于用户配置和 crushrc:Crush 按顺序读取它们 /etc/crush/crush.json → ~/.config/crush/crush.json → ~/.config/crush/crushrc → 状态文件,后面的设置会覆盖前面的。只有项目级设置(项目目录下的 crush.json 或 crushrc)拥有最高优先级。运行 crush dirs 可查看本地文件的存储位置。
在我们的一次运行中,我们打开了模型选择菜单——提供商“JoinGonka (Gonka)”显示为“✓ Configured”——并选择了 MiniMax M2.7。Crush 回复“Large model changed to MiniMax M2.7 (Gonka)”并将信息写入状态文件:
{"models":{"large":{"model":"MiniMaxAI/MiniMax-M2.7","provider":"joingonka","max_tokens":8192}}, …}现在该模型优于 crush.json 中的设置。安装程序能够识别这种情况并采用不同的行为方式:
- 不带
--model时,它不会修改状态文件(保留您的当前工作选择),但会明确警告 Crush 实际启动时将使用的模型:Heads-up: Crush will still start with joingonka/MiniMaxAI/MiniMax-M2.7, not joingonka/deepseek-ai/DeepSeek-V4-Flash-0731。如果在界面中选择了 GLM-5.3 Flash 或其他提供商的模型,行为也是一样; - 带明确的
--model时,它会保存备份后修改状态文件中的唯一条目models.large,并报告更改内容。否则该标志将无法生效。运行后,我们的 Crush 实例即以标志中指定的模型启动。
验证:应该发生什么
首先,确认 Crush 能看到该提供商:
crush models joingonka你会得到三行输出:
joingonka/MiniMaxAI/MiniMax-M2.7
joingonka/deepseek-ai/DeepSeek-V4-Flash-0731
joingonka/zai-org/GLM-5.3-Flash接下来,在不使用界面的情况下做一次单次运行。在项目目录中放入一个带有明显 bug 的文件,让它找出来:
crush run -q "Read calc.py and tell me in one sentence whether it has a bug."Agent 应当主动调用文件读取工具,并给出实质性的回答,包括行号。在我们的运行中,网络上的三个模型都找到了这个 bug,任务耗时 20-40 秒。-q 标志会隐藏等待指示器。在 crush run 模式下,所有工具调用都会自动批准,因此请在你自己的项目中运行它。在常规界面(crush 命令)中,活动模型显示在状态栏中:◇ DeepSeek V4 Flash (Gonka) via JoinGonka (Gonka)。Crush 将会话和日志存储在项目的 .crush 目录中,该目录通过自带的 .gitignore 与 git 隔离;日志由 crush logs 打印。在网关侧,请求在控制台中可见:"使用情况"部分,按"按模型"和"按键"细分。
如果出了问题,通常从消息本身就能看出诊断结果:
| 你看到的内容 | 含义 | 该怎么办 |
|---|---|---|
unauthorized: Invalid API key. | 网关拒绝了密钥 | 检查 api_key:完整密钥,没有空格。如果它引用的是变量,该变量必须在此 shell 中导出 |
invalid JSON in config file …/crush.json | 文件中有注释、尾随逗号或拼写错误 | Crush 只接受严格的 JSON:修正该文件。安装程序本身不会清除注释,但会发出警告;对于完全无法解析的文件,它不会改动,并会说明原因 |
failed to load shell config …/crushrc: … exit status 1 | crushrc 中有错误,最常见的是未设置形如 ${…:?} 的密钥变量 | 在启动前导出该变量,或修复脚本失败的那一行 |
Failed to override models: large model "…" not found | -m 标志中的模型名称有拼写错误 | 从 crush models joingonka 的输出中复制名称 |
too many requests: Model "…" is currently overloaded in the Gonka network (rate limit) | 该模型在高峰时段网络上的空闲容量已用尽 | Crush 会自行以逐渐增长的间隔重试请求——在我们的运行中大约一分钟——之后才会放弃。通过 ctrl+l 或 -m 切换到其他模型,或者等待;状态可在状态页面查看 |
| Crush 打开的模型与安装程序报告的模型不同 | 界面选择存储在状态文件中,会覆盖配置 | 通过 ctrl+l 选择模型,或用 --model 重新安装 |
402 | 余额已用尽 | 在"计费"部分为账户充值;密钥本身仍然有效 |
费用说明
代理消耗 token 的方式与聊天不同:对于您发送的每一句话,Crush 都会添加系统提示词及其工具说明,且任务通常需要几轮对话。在我们的测试中,每个模型请求携带约 11,500 个输入 token,而“读取文件并查找错误”的任务耗费了 2 到 3 次请求和 23,000–35,000 个 token,其中几乎全部为输入 token。因此,token 价格是此处决定成本的关键因素。
通过 JoinGonka Gateway,输入 token 的价格为每百万 $0.0069,输出 token 为每百万 $0.021——所有网络模型价格相同,并从该页面的实时来源获取。
| 场景 | 消耗 | 通过网关 |
|---|---|---|
| 单次任务:读取文件,查找错误 | 23-35K token | 几美分之几 |
| 一天的活跃工作 | 3-7M token | 几美分 |
| 一个月的活跃开发 | ~150M token | 约一美元 |
右栏估算基于 2026 年 9 月的价格。作为参考——关于如何在 Crush 中支付模型费用:
| 方式 | 付费模式 | 限制 |
|---|---|---|
| Hyper — Charm 官方提供商 | 订阅制,有免费层级 | Charm 侧的服务条款 |
| 直接使用厂商密钥 | 按厂商定价的 token 付费 | 费用随会话长度增长;价格取决于模型 |
| JoinGonka Gateway | 按 token 付费,预充值余额 | 可在后台查看消费;无订阅或月度配额限制 |
Crush 界面中的成本计数器根据配置中的价格字段进行计算。它捕获的是安装时的网关价格,而网络上的美元价格会随 GNK 汇率波动,因此计数器仅供参考。确切的消耗量和余额可在后台的“使用情况”和“账单”部分查看。为何默认将 DeepSeek V4 Flash 设置为 large 槽位,已在 模型综述 中详细说明。
工作注意事项
权限。默认情况下,Crush 界面在调用工具前会先请求权限。--yolo 标志可一次性关闭所有询问,而单独信任的工具则在配置中列出:
# crushrc
permissions allow view ls grep
# crush.json
"permissions": { "allowed_tools": ["view", "ls", "grep"] }请注意,crush run 会自行批准一切。这是 Crush 自身的特性,与模型提供商无关。
请求超时。如果模型长时间没有返回任何一段响应内容,Crush 就会中断请求:在 0.96.1 版本中,静默时长为两分钟(文档写的是 60 秒,但代码和我们的测试结果都是两分钟)。网关用于保持连接的保活 ping 不会重置这个计时器——我们在本地测试环境验证过。而在高峰时段,网关等待网络返回首个 token 最长可达 150 秒,因此不妨把余量调大:
# crushrc
option request-timeout 300
# crush.json
"options": { "request_timeout": 300 }提交签名。Crush 创建的提交和拉取请求默认会带上 Assisted-by: Crush:<model> 这一行以及“Generated with Crush”的附注。如果你不需要:
# crushrc
option attribution-trailer-style none
option attribution-generated-with false
# crush.json
"options": { "attribution": { "trailer_style": "none", "generated_with": false } }指标。Crush 会向开发者发送匿名化的使用统计数据——仅包含元数据,不含提示词和响应。可通过变量 CRUSH_DISABLE_METRICS=1 或 DO_NOT_TRACK=1 关闭。网关这边也不会存储提示词和响应的内容——统计数据中只保留用量汇总。
配置即代码。无论是 crushrc 还是 crush.json,Crush 都会以你 shell 的权限执行:键字段中的 $(…) 会在加载时运行,而项目级的 crushrc 会在你于该目录打开 Crush 的瞬间生效。在别人的仓库里运行 agent 之前,务必先读一读它的配置文件。
npx @joingonka/setup --tool crush 连接到 JoinGonka Gateway,或在 ~/.config/crush/crush.json 中添加 providers.joingonka 代码块:设置类型为 openai-compat,地址为 https://gate.joingonka.ai/v1,密钥为 jg-…,并指定正确的 context_window 和 default_max_tokens。同样也可以通过在 crushrc 中写入多行 provider add 和 model add 来实现。Large 槽位由 DeepSeek V4 Flash 提供,Small 槽位由 MiniMax M2.7 提供,而 GLM-5.3 Flash 用于处理复杂逻辑。主要的陷阱是状态文件:通过 ctrl+l 选择的模型优先级高于配置文件,因此使用明确的 --model 参数进行安装时,它也会更新该文件。验证方式:运行 crush models joingonka 和 crush run;建议将请求超时时间增加到 300 秒。