Claude Code 费用太高?用 Rayline 把子 Agent 路由到本地模型和便宜 API
Claude Code 的订阅费用是一回事,API 按量计费的 Token 消耗是另一回事。如果你团队每天跑几十个 Claude Code 会话,每个会话背后都是满配 Opus 模型在干活,月底一看账单——这个数学题你做不起。
问题出在哪?Claude Code 会给所有子 Agent 调用都用同一个模型。搜索代码库、总结上下文、检查编译错误、轮询 CI 状态——这些子任务完全不需要 Opus 的推理能力,但它们消耗的 Token 和主 Agent 一样贵。
Rayline 就是冲着这个痛点来的:一个 Claude Code 兼容的 LLM 网关,拦截主 Agent 和子 Agent 之间的路由,让你把不同子任务指派给不同模型。
核心思路:在网关层做路由,而不是在 Agent 层
你会想,为什么不在 Claude Code 里写个工具函数来做路由?因为那是错误的一层。
如果你让主 Agent 自己去调用路由工具,相当于让一个每周薪 2 万美元的员工亲自去发传真。每次路由决策都要消耗主 Agent 的 Token,而且在上下文里塞一个路由工具意味着不断打碎缓存——这是 Claude Code 费用的主要来源。
Rayline 的解法是在网关层做路由。它作为 HTTP 代理夹在 Claude Code 和模型 API 之间,根据确定性规则或可选的 ML 模型来决定每个子 Agent 请求该去哪个模型。
架构速览
Claude Code 会话
│
▼
Rayline Gateway (localhost:8080)
│
├── 主 Agent → Opus (保持高质量)
├── 搜索/总结 → Haiku (便宜、快速)
├── CI 轮询 → 本地 Ollama (免费)
├── 错误检查 → Gemini Flash (低成本)
└── 复杂重构 → Sonnet (性价比高)
关键洞察:子 Agent 调度是天然的路由切分点。每次 Claude Code 委托一个子 Agent 时,都会创建新的上下文窗口。如果在委托之前做路由,你不仅省了 Token,还避免了污染主 Agent 的缓存。
安装与配置
Rayline 目前通过官网提供安装方式。访问 rayline.ai 获取安装指南:
rayline start
配置 ~/.rayline/config.yaml(参考以下模板):
gateway:
port: 8080
routes:
# 主 Agent 保持最强模型
- name: "main-agent"
match: "role:main"
model: "claude-opus-4"
provider: "anthropic"
# 代码搜索和文件浏览 → 便宜的 Haiku
- name: "search-and-browse"
match: "task:search|task:grep|task:read_file"
model: "claude-haiku-3.5"
provider: "anthropic"
# CI 轮询和简单状态检查 → 本地模型
- name: "ci-polling"
match: "task:ci_status|task:build_check"
model: "qwen2.5-coder-7b"
provider: "ollama"
endpoint: "http://localhost:11434"
# 编译错误分析 → Gemini Flash (超便宜)
- name: "error-analysis"
match: "task:compile_error|task:lint"
model: "gemini-2.0-flash"
provider: "google"
# 默认兜底 → Sonnet (性价比之王)
- name: "default"
match: "*"
model: "claude-sonnet-4"
provider: "anthropic"
让 Claude Code 使用 Rayline
配置 Claude Code 通过 Rayline 网关发送请求:
export ANTHROPIC_BASE_URL=http://localhost:8080 rayline start claude
现在你的所有 Claude Code 请求都会经过 Rayline。打开 Rayline 的监控仪表盘可以看到每条请求被路由到了哪个模型。
路由策略详解
确定性路由(默认模式)
基于关键词匹配的规则引擎,不消耗任何额外 Token:
| 匹配规则 | 典型子任务 | 推荐模型 | 节省对比 |
|---|---|---|---|
task:search | 代码搜索、grep | Haiku | ~80% |
task:ci_status | CI 状态轮询 | 本地 7B 模型 | ~100% |
task:compile_error | 编译错误分析 | Gemini Flash | ~90% |
task:complex_refactor | 跨文件重构 | Sonnet/Opus | 按需 |
role:main | 主 Agent 决策 | Opus | 保持质量 |
ML 辅助路由(可选)
Rayline 也提供了一个轻量级 ML 模型来做路由决策。它分析子 Agent 的 prompt 内容,预测所需的模型能力等级。适合规则无法覆盖的模糊场景。
启用方式:
routing_strategy: "ml_assisted" ml_model: "rayline-router-v1"
注意:ML 模式会消耗少量额外时间(~200ms 分析),但能处理规则引擎难以涵盖的边缘情况。
实战场景:把成本打下来
假设一个典型的 Claude Code 会话包含:
- 主 Agent 讨论架构 → 3 轮 Opus 对话 = 15K input + 2K output tokens
- 搜索相关代码 → 6 次 Haiku 调用 = 3K × 6 tokens
- 修改代码 → 2 轮 Opus 修改 = 10K + 1.5K tokens
- 编译检查 → 3 次 Gemini Flash 调用 = 2K × 3 tokens
- CI 状态轮询 → 10 次本地模型调用 = 免费
对比:
| 模式 | Opus-only | Rayline 路由 | 节省 |
|---|---|---|---|
| 总 Token (input) | ~80K | ~45K | 44% |
| 总 Token (output) | ~8K | ~5K | 37.5% |
| 预估费用 | ~$2.40 | ~$0.85 | ~65% |
Rayline 团队自测的数据也显示,对于包含大量子 Agent 调用的会话,费用可降低 60-70%。
常见陷阱
- 缓存考虑:如果你的子 Agent 路由目标频繁切换,可能会影响 Claude Code 的提示缓存命中率。Rayline 通过网关层统一管理连接,尽量复用同提供商的底层连接来缓解这个问题。
- 本地模型要选对:并不是所有本地模型都适合做子 Agent。Qwen2.5-Coder-7B 和 DeepSeek-Coder-V2-Lite-Instruct 在代码相关子任务上表现最好。
- 调试时先关路由:如果遇到奇怪的 Agent 行为,先设置
match: "*"→ Opus 调试,确认问题不在路由逻辑本身。
总结
Rayline 的核心理念很简单但有效——在网关层替 Agent 做模型路由决策,而不是让 Agent 自己分心去做。它不需要修改 Claude Code 的代码,不引入额外的工具调用开销,通过一个本地代理让主 Agent 用最好的模型,子任务用最便宜的模型。
对于每天有几十甚至上百个 Claude Code 会话的团队,这可能是这个月最值得花 5 分钟配置的工具。