经 AI Skill Hub 精选评估,本地LLM路由器 获评「推荐使用」。这款AI工具在功能完整性、社区活跃度和易用性方面表现出色,AI 评分 7.2 分,适合有一定技术背景的用户使用。
本地LLM路由器 是一款基于 Rust 开发的开源工具,专注于 LLM路由、API转换、故障转移 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
本地LLM路由器 是一款基于 Rust 开发的开源工具,专注于 LLM路由、API转换、故障转移 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
# 方式一:cargo install(推荐) cargo install routectl # 方式二:从源码编译 git clone https://github.com/meepolabs/routectl cd routectl cargo build --release # 二进制在 ./target/release/routectl
# 查看帮助 routectl --help # 基本运行 routectl [options] <input> # 详细使用说明请查阅文档 # https://github.com/meepolabs/routectl
# routectl 配置说明 # 查看配置选项 routectl --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export ROUTECTL_CONFIG="/path/to/config.yml"
A local LLM router. One Rust binary, listening on 127.0.0.1, that proxies OpenAI-compatible (/v1/chat/completions) and Anthropic Messages (/v1/messages) requests across multiple backends with fallback, retry, and unified reasoning normalization.
openai-compat -- any host that speaks the OpenAI body shape (OpenAI, DeepSeek, OpenRouter, Groq, NIM, vLLM, llama.cpp, etc.).anthropic-api -- native Anthropic Messages API with x-api-key or Authorization: Bearer auth.bedrock -- native AWS Bedrock with SigV4 signing, full credential chain (env / static / profile / SSO / IRSA / IMDS) or short-term bearer keys; both InvokeModel and Converse body shapes for Anthropic models.openai-responses -- ChatGPT Codex (chatgpt-oauth bearer JWT, stream-only).reasoning_details[] with provider-tagged format. Six dialects on the openai-compat side; Anthropic thinking blocks (with signature) preserved across multi-turn tool use.cache_control and anthropic_beta flags pass through losslessly on Anthropic-in -> Anthropic-out and Anthropic-in -> Bedrock-Invoke-out paths. Verified live: cache miss writes N tokens, cache hit reads the same N back.forward_client_headers for x-claude-code-* attribution, a POST /v1/messages/count_tokens proxy, per-dialect error-envelope shapes, and forward-compat for unknown Anthropic SSE block types. See docs/CONFIGURATION.md "claude-code as a gateway client" for setup; "Responsible use" below for the operating envelope.retry_allowlist / retry_denylist schema for fallback selection. probe_max_tokens fast-fails small availability probes on rate-limit instead of walking the chain.env://VAR, file:///abs/path (chmod-600 / 400 enforced on Unix, TOCTOU-safe), literal:value, and oauth://<provider> (routectl-managed PKCE login for Anthropic and Codex with runtime refresh and 401 recovery). No OS-keychain integration, no auto-discovery.127.0.0.1 by default; refuses non-loopback bind without explicit --unsafe-public.```bash mkdir -p ~/.config/routectl routectl config example > ~/.config/routectl/config.toml
Minimal example:
[server]
host = "127.0.0.1"
port = 8787
[providers.deepseek]
kind = "openai-compat"
base_url = "https://api.deepseek.com/v1"
api_key_ref = "env://DEEPSEEK_API_KEY"
reasoning_dialect = "deepseek"
[providers.anthropic]
kind = "anthropic-api"
api_key_ref = "env://ANTHROPIC_API_KEY"
[providers.bedrock]
kind = "bedrock"
region = "us-east-1"
creds = { kind = "bearer-key", key_ref = "env://AWS_BEARER_TOKEN_BEDROCK" }
[models.fast]
provider = "deepseek"
upstream = "deepseek-chat"
[models.heavy-bedrock]
provider = "bedrock"
upstream = "us.anthropic.claude-opus-4-20250514-v1:0"
supports_adaptive_thinking = true
effort_levels = ["low", "medium", "high"]
[models.heavy-anthropic]
provider = "anthropic"
upstream = "claude-opus-4-20250514"
supports_adaptive_thinking = true
effort_levels = ["low", "medium", "high"]
[aliases]
fast = "fast"
heavy = ["heavy-bedrock", "heavy-anthropic"] # fallback chain
"claude-opus-*" = "heavy" # suffix-glob routing
default = "fast"
See examples/config.toml for the full surface, including the global [retry] table, per-provider RPM limits, and circuit breakers. v0.6 collapsed per-alias retry overrides into the workspace-global [retry] -- per-error-class caps (retry_on_429, retry_on_5xx, retry_on_network) cover the same operator knobs.
[providers.bedrock-static.creds] kind = "static" access_key_ref = "env://AWS_ACCESS_KEY_ID" secret_key_ref = "env://AWS_SECRET_ACCESS_KEY" session_token_ref = "env://AWS_SESSION_TOKEN" # optional
creds = { kind = "profile", name = "my-bedrock-profile" }
creds = { kind = "default-chain" }
`api_shape = "invoke"` (default) sends the per-vendor body shape -- Anthropic Messages JSON for Claude. `api_shape = "converse"` uses the AWS vendor-neutral envelope; both are wired and live-tested for Anthropic models. Converse for non-Anthropic vendors (Mistral, Llama, Cohere) is staged.
Bedrock-specific knobs:
- `user_agent` -- per-provider UA override. Required when an IAM policy gates access via the `aws:UserAgent` condition key.
- `anthropic_beta` -- list of beta flags always sent on requests from this provider (operator-asserted floor; bypasses the global allowlist filter below).
- `additional_model_request_fields` -- free-form JSON merged into the request body for vendor-specific knobs.
**`[bedrock]` allowlists (optional, recommended in production).** AWS strict-schema validation 400s any unrecognized `anthropic_beta` flag or top-level body field. routectl ships no built-in default; populate operator-supplied lists in TOML to gate which entries reach AWS:
toml [bedrock] allowed_betas = ["context-1m-2025-08-07", "claude-code-20250219", ...] allowed_body_fields = ["anthropic_version", "messages", "max_tokens", ...] ```
Empty lists (or omitted [bedrock] section) = pass-through (no filter applied) -- the discovery default. Run with ROUTECTL_LOG=routectl_providers::bedrock=trace to capture sent flags/fields, then populate the lists. See examples/bedrock.toml for the empirical 2026-05-12 baseline.
BedrockCreds redacts secret material in Debug output (no leaks via panic messages or tracing events).
export OPENROUTER_API_KEY=... export OPENCODE_GO_API_KEY=... export NIM_API_KEY=... export AWS_BEARER_TOKEN_BEDROCK=... export AWS_REGION=us-east-1
cargo test -p routectl-cli --features live-integration --release \ --test live_matrix -- --nocapture --test-threads=1 ```
See docs/TESTED_MODELS.md for the verified model matrix.
Routectl resolves credentials through one of four URI schemes per provider. There is no auto-discovery; you choose the source explicitly.
| Scheme | Meaning |
|---|---|
env://VAR_NAME | Process env var. |
file:///abs/path | File contents (trailing whitespace trimmed). On Unix, refused if group/other have any permissions; chmod 600 or 400 recommended. Compatible with sops, age, doppler-cli, vault-agent, etc. Windows skips the bit-check (use NTFS ACLs there). |
literal:VALUE | Inline plaintext. For placeholders like literal:not-needed (llama.cpp without auth) and tests. Avoid for real secrets in version-controlled config. |
oauth://<provider> | routectl-managed OAuth credential, populated by routectl login <provider> (Anthropic and Codex supported). Tokens persist in ~/.config/routectl/credentials.json (chmod 0600); resolution checks near-expiry, refreshes under a per-provider single-flight mutex, and survives upstream 401 via Provider::on_auth_failure. See "Managed OAuth login" below. |
Hits https://api.anthropic.com/v1/messages. Two auth modes via auth_kind:
api-key (default) -- x-api-key: <key> header.oauth-bearer -- Authorization: Bearer <token> header. Pair with api_key_ref = "oauth://anthropic" for routectl-managed login (see "Managed OAuth login" above).Beta gates (anthropic-beta flags for prompt caching, 1M context, extended thinking) are independent of auth_kind. Declare them via header_extras:
[providers.anthropic]
header_extras = { "anthropic-beta" = "context-1m-2025-08-07,prompt-caching-2024-07-31" }
header_extras cannot override auth-bearing headers (authorization, x-api-key, host); collisions are dropped with a tracing::warn!.
Provider-level knobs relevant to claude-code-as-a-gateway use:
forward_client_headers: Vec<String> -- allowlist of incoming client headers (typically x-claude-code-session-id, x-claude-code-agent-id, x-claude-code-parent-agent-id) that pass through to the upstream. Defaults to empty (drop everything).context_management = true -- routectl emulates Anthropic's context-management-2025-06-27 beta server-side for upstreams that demand thinking-block echoback but do not implement the beta natively (e.g. DeepSeek /anthropic). Bounded LRU + TTL cache; strips the beta header and body field on egress. See docs/PROVIDER-QUIRKS.md for when to flip it.cargo test --workspace --release
Rust实现的LLM路由方案,架构清晰,API兼容性强。但项目成熟度有限,社区反馈不足,适合技术探索而非关键业务。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
AI Skill Hub 点评:本地LLM路由器 的核心功能完整,质量良好。对于AI 技术爱好者来说,这是一个值得纳入个人工具库的选择。建议先在非生产环境试用,再逐步推广。
| 原始名称 | routectl |
| 原始描述 | 开源AI工具:A local LLM router with OpenAI and Anthropic format translation, retry and fallb。⭐13 · Rust |
| Topics | LLM路由API转换故障转移Rust实现多模型支持 |
| GitHub | https://github.com/meepolabs/routectl |
| License | MIT |
| 语言 | Rust |
收录时间:2026-06-07 · 更新时间:2026-06-11 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。