XAI Router + RTK:让 Claude Code / Codex 在终端少烧 60%-90% tokens

Posted March 31, 2026 by XAI 技术团队 ‐ 11 min read

XAI Router 负责统一接模型,RTK 负责压缩本地 CLI 输出;两层配合,可以显著减少 Claude Code / Codex 会话里终端带来的输入 token。

RTK 负责本地 CLI 输出压缩,XAI Router 负责统一模型访问入口。

如果你已经在用 https://api.xairouter.com 跑 Claude Code、Codex、OpenCode 或其他 AI 编码工作流,那么下一个最值得补上的组件,通常不是“再换一个模型”,而是 RTK

RTK 的定位很直接:在 shell 命令输出进入 AI 代理上下文之前,先做过滤、压缩、去重和聚合。它不替代你的模型网关,也不替代你的 CLI 工具,而是专门减少 git diffcargo testrgdocker logscat 这类命令带来的上下文膨胀。

对已经接入 api.xairouter.com 的用户来说,这和 XAI Router 是天然互补的两层:

  • XAI Router:解决统一入口、模型映射、鉴权、配额、故障切换、计费、OpenAI/Anthropic/Realtime 兼容等问题。
  • RTK:解决 AI 编码代理在本地终端里“读了太多没必要的文本”这个问题。
重点先说清楚:RTK 节省的不是“网关层魔法压缩账单”。它节省的是 Claude Code / Codex 会话中由终端工具输出带来的额外上下文 token。上下文变短后,经 api.xairouter.com 发出的模型输入自然也会变少,所以通常会间接降低调用成本并延长单次会话的有效上下文。

一、为什么 XAI Router 和 RTK 很适合一起用

从一个典型的 Rust 中转服务实现来看,这类系统往往已经不是“只转发 OpenAI Chat”那么简单,而是一个更完整的统一 AI API relay:

  • 统一吃 OpenAI Chat CompletionsOpenAI ResponsesAnthropic MessagesRealtime/WebSocket 等入口
  • 按模型族做 provider mapping 和请求头适配
  • 在代理层做配额、限流、用量统计
  • 支持粘性调度、故障切换和多上游路由

这意味着 api.xairouter.com 解决的是 模型访问层 的复杂度,而 RTK 解决的是 本地开发终端上下文层 的复杂度。

换句话说:

Claude Code / Codex
  -> 本地执行 git / grep / test / logs
  -> 这些输出被塞回会话上下文
  -> 会话上下文再经 api.xairouter.com 发到模型

如果没有 RTK,大量“对人类也没什么价值”的原始终端输出会一起进入模型输入;如果加上 RTK,进入上下文的是压缩后的版本。

RTK 不改你的网关位置,它减少的是进入代理会话的命令输出体积。

二、RTK 到底节省了什么

RTK 官方给出的典型场景节省范围是 60%-90%。最常见的高收益命令包括:

场景原生命令的问题RTK 常见做法
git status / git diff文件列表过长,diff 上下文重复提取统计信息,只保留关键变更
cat / read整个文件都进上下文,注释和样板过多按语言过滤注释、空白和无关主体
grep / rg命中行分散,重复路径多按文件分组、截断长行
pytest / cargo test / cargo nextest成功日志太多只保留失败、warning 和摘要
docker logs重复日志刷屏去重并计数

下面用两类常见仓库举例:

1. relay-gateway

这是一个偏大的 Rust 中转服务,适合 RTK 的动作主要有:

  • 追请求链路:rtk grep "responses|messages|realtime" src/ config/
  • 读大文件:rtk read src/proxy.rs -l minimal --max-lines 220
  • 看路由规则:rtk grep "PathMappers|ProviderMappers" config/
  • 跑测试:rtk test cargo test
  • 看变更:rtk git diff

2. docs-studio

这是一个内容型文档站,最适合 RTK 的动作主要是:

  • 查所有接入示例:rtk grep "api.xairouter.com" content/blog content/docs
  • 快速扫文章:rtk read content/blog/xxx.md -l minimal
  • 查哪些文档提到了某个模型或路径:rtk find "*.md" content/blog
  • 审核改动:rtk git diff

三、先接好 XAI Router,再加 RTK

这里建议把两层职责拆开理解:

先保证模型入口已经是 api.xairouter.com

如果你还没完成基础接入,可以先看你站上已有文档:

再在本地补 RTK

RTK 安装方式很简单,三种里任选一种:

# Homebrew
brew install rtk

# 或快速安装
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh

# 或 Cargo
cargo install --git https://github.com/rtk-ai/rtk

安装后先自检:

rtk --version
rtk gain

rtk gain 第一次大概率还没数据,这是正常的。它是后面用来统计节省量的。

四、Claude Code + XAI Router + RTK:收益最高的组合

如果你本地已经这样接好了 Claude Code:

export ANTHROPIC_BASE_URL="https://api.xairouter.com"
export ANTHROPIC_AUTH_TOKEN="你的 XAI API Key"

那么 RTK 的推荐接法是:

rtk init -g

它会给 Claude Code 装一个 Bash hook。这个 hook 的效果是:当 Claude 想执行 git statusgit diffpytestrg 这类命令时,会优先把它们改写成 rtk git statusrtk git diffrtk pytestrtk grep

也就是说,对 Claude Code 来说,这是目前最“无感”的一类集成。

一套最小可复制流程

# 1) 保持 Claude Code 继续走 XAI Router
export ANTHROPIC_BASE_URL="https://api.xairouter.com"
export ANTHROPIC_AUTH_TOKEN="你的 XAI API Key"

# 2) 安装 RTK hook
rtk init -g

# 3) 重启 Claude Code
claude

进入会话后,不需要先教它很多规则,直接让它做 shell-heavy 的事情就能看到收益,例如:

请先检查当前仓库的未提交变更,按文件分组总结风险,再告诉我哪些测试值得优先跑。

Claude 很可能会走 git statusgit diffrg、测试命令,这一类动作正好是 RTK 的强项。

但要注意一个关键限制

RTK 对 Claude Code 的透明改写,主要发生在 Bash 工具调用 上。

这意味着:

  • git statusgit diffcargo testrg 这一类 shell 命令,收益最好
  • Claude Code 内建的 ReadGrepGlob 这类非 Bash 工具,并不会自动经过 RTK hook

所以如果你想在大仓库里把节省吃满,最好让 Claude 更偏向 shell 路线,例如:

优先使用 shell 命令分析仓库;读文件时优先用 rtk read / cat / rg,而不是大量调用内建 Read/Grep。

五、Codex + XAI Router + RTK:适合“显式约束”的用户

如果你本地已经是这类 Codex 配置:

model_provider = "xai"
model = "gpt-5.4"
approval_policy = "never"
sandbox_mode = "danger-full-access"

[model_providers.xai]
name = "xai"
base_url = "https://api.xairouter.com"
wire_api = "responses"
requires_openai_auth = false
env_key = "XAI_API_KEY"

以及:

export XAI_API_KEY="你的 XAI API Key"

那么 RTK 对 Codex 的推荐接法是:

rtk init -g --codex

这里要特别说明一个和 Claude Code 不同的点:

  • Claude Code:RTK 是真实 hook,能透明改写 Bash 命令
  • Codex:RTK 当前是 AGENTS.md + RTK.md 形式的提示级集成,不是透明 hook

这意味着在 Codex 里,RTK 依然很有用,但最佳实践不是“装完就完全不用管”,而是:

  1. rtk init -g --codex 把全局 ~/.codex/AGENTS.mdRTK.md 配好
  2. 在项目级 AGENTS.md 再加一段更明确的偏好规则
  3. 在具体任务里,直接要求 Codex 优先使用 rtk 命令

推荐加到项目里的 AGENTS.md 片段

Prefer RTK for shell-heavy repository work.

- Use `rtk git status`, `rtk git diff`, `rtk git log` for VCS inspection.
- Use `rtk read`, `rtk grep`, `rtk find` for codebase search.
- Use `rtk test`, `rtk pytest`, `rtk cargo test`, `rtk log` when available.
- Fall back to raw commands only when exact full output is required.

适合 Codex 的任务写法

请优先使用 rtk 命令完成这次仓库巡检:
1. 先用 rtk git status 和 rtk git diff 看变更;
2. 再用 rtk grep 搜索 api.xairouter.com 的文档落点;
3. 读大文件时优先用 rtk read;
4. 最后用中文给出风险和建议。

Codex 在这种“规则明确 + 工具名直接点明”的情况下,通常能比较稳定地吃到 RTK 的收益。

六、两类常见仓库里,最值的 6 个 RTK 用法

下面这组命令用两个示例仓库名来演示:relay-gatewaydocs-studio

1. 看变更,但别把整个 diff 都喂给模型

cd ~/work/relay-gateway
rtk git status
rtk git diff

适合:日常 review、排查改了哪些 handler / conf / docs。

2. 读超长 Rust 文件时,先看“瘦身版”

rtk read src/proxy.rs -l minimal --max-lines 220

适合:先抓模块结构和关键分支,再决定是否读原文件。

3. 在文档站里统一搜接入写法

cd ~/work/docs-studio
rtk grep "api.xairouter.com" content/blog content/docs

适合:排查 base_url/v1/responses/v1/messages 是否写一致。

4. 测试只看失败,不看整屏绿色成功

cd ~/work/relay-gateway
rtk test cargo test

适合:中大型 Rust 项目,尤其是测试多、日志长的时候。

5. 看日志时直接做去重

rtk log app.log

适合:代理层 429、5xx、超时、重试等重复日志场景。

6. 看自己到底省了多少

rtk gain
rtk gain --graph

这两个命令很适合放到日常工作流里。前者看累计节省,后者看趋势。

七、什么时候不要硬上 RTK

RTK 很适合“AI 编码代理 + shell-heavy 工作流”,但也不是什么命令都应该强行压。

下面几类情况,建议保留原始输出:

  • 你就是要精确比对完整 JSON 或完整协议报文
  • 你在做一次性深度排障,必须看到全量日志
  • 你需要保留原生命令的格式细节给人工复制

简单理解就是:RTK 适合默认开启,但要允许按需回退到原始输出。

八、最后给一个最实用的落地建议

如果你今天就想在自己的链路上看到效果,最短路径是:

Claude Code 用户

export ANTHROPIC_BASE_URL="https://api.xairouter.com"
export ANTHROPIC_AUTH_TOKEN="你的 XAI API Key"
brew install rtk
rtk init -g
claude

Codex 用户

export XAI_API_KEY="你的 XAI API Key"
brew install rtk
rtk init -g --codex
codex

然后从这 4 类命令开始替换:

  • git status / git diff
  • read / cat / grep
  • test
  • log

api.xairouter.com 这类已经把模型接入、鉴权、路由、配额都整理好的用户来说,RTK 的意义不是“再造一层复杂度”,而是把本来就要进模型上下文的终端噪音先削掉。

一句话总结:

XAI Router 负责让请求稳定地到达正确模型,RTK 负责让没必要的终端文本不要一起到达模型。