NeMo Switchyard 上手:给 LLM 调用加一个智能路由

智能体时代,一个模型包打天下已经不划算了。Claude Code、Codex 这类编码智能体,大部分 token 都烧在机械步骤上——读文件、跑测试、修 lint,真正需要前沿模型推理的调用只是少数。英伟达 8 月 11 日一次发了两样东西,正好冲着这个痛点:Nemotron 3.5 Lightning(30B MoE 开源模型,每个 token 只激活 3B 参数,专为高频智能体任务设计)和 NeMo Switchyard(Apache 2.0 的 Rust 路由代理/库)。

对开发者来说,Switchyard 更值得先上手。它夹在你的智能体和模型后端之间,干三件事:

  • 协议翻译——在 OpenAI Chat、OpenAI Responses、Anthropic Messages 三种格式间互转。Claude Code 可以继续讲 Anthropic 方言,背后实际由 vLLM、NVIDIA NIM、Ollama 或任意 OpenAI 兼容端点提供服务。
  • 类型化路由算法——LLM 分类器、信号驱动的 stage router、escalation、random A/B 分流,也可以自己写算法。
  • 可观测性——Prometheus 指标:请求量、错误、延迟、token 数、路由开销。

最快上手:launcher 路径

想让 Claude Code / Codex / OpenClaw 两分钟内跑上智能路由:

curl -LsSf https://astral.sh/uv/install.sh | sh
source "$HOME/.local/bin/env"
uv tool install --python 3.12 "nemo-switchyard[cli]"

export OPENROUTER_API_KEY="your-key"
switchyard launch claude --model switchyard
# 或:switchyard launch codex --model switchyard
# 或:switchyard launch openclaw --model switchyard

内置部署暴露一个叫 switchyard 的路由 ID。launcher 会拉起原生 Rust 服务器并把智能体指过去,这条路径不需要任何配置文件。

自定义路由:独立服务器

想用自己的模型分级,就直接跑 server。先安装,再写 routes.toml

cargo install --locked switchyard-server
schema_version = 1

[llm_clients.openrouter]
format = "openai_chat"
base_url = "https://openrouter.ai/api/v1"
api_key_env = "OPENROUTER_API_KEY"

[targets.weak]
id = "openai/gpt-4o-mini"
llm_client = "openrouter"

[targets.strong]
id = "openai/gpt-4o"
llm_client = "openrouter"

[routes.smart]
id = "switchyard"
type = "llm_classifier"
mode = "capability"
classifier_target = "weak"
strong_target = "strong"
weak_target = "weak"
base_threshold = 0.5

这份配置声明了两个 target 和一条路由:由分类模型逐请求判断,该用弱模型还是强模型回答。密钥通过 api_key_env 从环境变量读取——永远不要写进 TOML。校验并启动:

export OPENROUTER_API_KEY="your-key"
switchyard-server --config routes.toml --dry-run
switchyard-server --config routes.toml --host 127.0.0.1 --port 4000

任何会讲 OpenAI Chat / Anthropic Messages / OpenAI Responses 的客户端都能连上来,路由的 id 就是客户端要用的模型名:

curl http://localhost:4000/health
curl http://localhost:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"switchyard","messages":[{"role":"user","content":"hello"}]}'

路由算法怎么选

  • random——固定权重分流,适合 A/B 测试和成本基线。
  • llm_classifier——按请求内容在强弱两档之间选择。
  • llm_classifier + mode = "escalation"——每轮先跑弱模型,只有裁判判断答案不够好时,才用强模型重跑同一请求。
  • stage_router——用对话里已有的信号(工具结果、报错)路由,大多数轮次不额外调用模型。

智能体循环场景里 stage_router 最值得关注:大多数步骤本质是「工具调用成功了吗,继续走」这种廉价判断,根本不需要前沿模型。

不是纸面数据

  • LangChain:145 个多轮 DeepAgents 任务中,只有 7% 的调用给了前沿模型 → 成本降 74%,准确率只掉 6%。
  • Ramp:RampSWE-Bench 上持平前沿模型,成本降 58%,运行时间少 33%。
  • Cognition:DevinDesktop 集成后,平均成本比全程用单一前沿模型低约 28%
  • Boomi:领域路由准确率 100%,59% 的流量交给快 5 倍的微调模型,后续轮次延迟降 21%。

Kong 也已经把 Switchyard 接进自家 AI Gateway,路由可以放在网关层而不是智能体内部。

实践建议

  • 启动前先跑 --dry-run:它会在不绑定端口的情况下校验 schema、环境变量和路由构造。
  • 遥测只有外呼请求上的一个 X-Switchyard-Version 头(不含内容),不想要就 export SWITCHYARD_TELEMETRY_OPT_OUT=1
  • Switchyard 还是 pre-alpha,v1.0 前 API 会变,正经项目记得锁版本。
  • 想嵌进自己的 Rust 服务用 switchyard-libsy:算法只做决策、把模型调用交还给你,可以无缝落进已有网关,不用自己管 HTTP 栈。
  • 想要自托管省钱档?搭配 Nemotron 3.5 Lightning:30B 总参 / 3B 激活,1M 上下文,单张 DGX Spark(GB10)或 H100 就能跑,NVFP4 和 BF16 双 checkpoint,OpenMDW-1.1 许可可商用。

资源

发表评论

滚动至顶部