Claude Code,运行在你自己的 GPU 上。
保留你的 Claude 登录,让规则指定的模型在这里运行;或者完全在本地运行。
一个 ANTHROPIC_BASE_URL,回复可能来自两个地方。
Claude Code 发给 Anthropic 的每个请求都会计入你套餐的用量限制,或者在 API 密钥上按 token 计费,并且会把它的提示词(包括你的代码)带出你的机器。这些请求中有很多都很小。用你已经拥有的显卡来应答它们,花费的只是电费,它们不计入你的用量限制,提示词也留在你的主机上。
Claude 本身从不在这里运行。由一条规则指定这台主机代为应答哪些 Claude 模型,例如 claude-haiku*,然后由你加载的某个模型以 Claude Code 请求的名称代替它们应答。其他任何请求(包括 Opus)都会以你自己的登录逐字节转发给 Anthropic,包括流式输出在内。你的 warden 密钥放在单独的标头中,因此登录信息从不被改动;对于没有“May relay to Anthropic”标记的密钥,不会转发任何内容。
小模型够用吗?我们没有测量过回答质量,所以这只是判断,不是基准测试。Claude Code 用它的 Haiku 级模型做较轻的后台工作,小型本地模型在这类工作以及简单、明确的编辑中是合理的替代。对于跨多个文件的修改、调试和长计划,请让 Sonnet 和 Opus 继续使用 Anthropic,在你添加规则之前,兜底规则默认就是这样处理的。更大的显卡上运行更大的模型会改变这条分界;我们下面关于 Claude Code 和副本的测量使用的是一个 4B 模型。
上下文大小要按 Claude Code 的需要来设,而不是按聊天:在我们的会话中,它的第一轮就有 38,167 个 token,因此本地模型需要远超 40k token 的上下文。
文字说明:Claude Code 把请求发给 warden,Authorization 中带着它自己的 Anthropic 登录,X-LMWarden-Key 中带着 warden 密钥。warden 按顺序尝试它的规则。针对某条规则指定的模型的请求会被转换,由调度器排队,再由副本路由器发送到某一个 vLLM 副本。其他任何请求(例如 Opus)都会转发到 api.anthropic.com,登录信息原样转发,warden 密钥被移除。如果本地这一段在第一个字节之前失败,请求会转到 Anthropic,或者由规则以 529 拒绝,由 Claude Code 重试。
export ANTHROPIC_BASE_URL=https:// warden.example export ANTHROPIC_CUSTOM_HEADERS= "X-LMWarden-Key: vw_…" claude
需要 Claude Code 2.1.227 或更高版本。保留你平常的 claude 登录;密钥放在单独的标头中,而不是 ANTHROPIC_API_KEY 中。
第一个匹配生效;其他所有模型都发往 Anthropic
以用户自己的登录访问 Anthropic
claude-haiku* 发往本地模型,兜底规则把其余所有请求转发给 Anthropic;规则按尝试顺序编号。Traffic 面板统计本地 107 个、直通 2 个、回退 0 个、拒绝 2 个。左右滚动图片可查看整个页面。第一轮通常最慢。在之前的一次会话中,Claude Code 的第一轮有 38,167 个 token,而本地模型加载时的上下文是 32,768 个 token,因此引擎拒绝了它(status_400),请求改发给了 Anthropic。把上下文提高到 65,536 个 token 并使用 fp8 KV 缓存(注意力缓存以 8 位保存,内存减半)后,16 GiB 显卡上的 4B 模型在 28 s 内于本地应答了同样的这一轮,整个 38k token 的提示词都需从头读取,缓存中还什么都没有。对话的后续轮次会发现大部分提示词已经在引擎的缓存中:图 4 中 claude-haiku* 规则的首字节时间中位数为 290 ms。
该模型的熔断器:closed
请求被规则转到 Anthropic 或被拒绝的原因,按原因分列
- 协议
- Anthropic Messages
- 支持情况
- 完全支持
你的规则指定的 Claude 模型在这里运行;其他所有模型和 /v1 路径都以你自己的登录发往 Anthropic。在路由器模式下,切勿把 warden 密钥放进 ANTHROPIC_API_KEY 或 ANTHROPIC_AUTH_TOKEN:那会替换掉你的登录。仅本地模式把所有内容(包括小型后台任务)都放在一个已部署的模型上运行,不会向 Anthropic 发送任何内容。
要求
- Claude Code 2.1.227 或更高版本(
ANTHROPIC_CUSTOM_HEADERS)。 - 必须开启路由,并且至少有一条已启用的规则。
- 该密钥必须被允许转发到 Anthropic(即带有“May relay”标记)。
- 需要至少 49,152 个 token 的上下文:仅第一轮在读取任何文件之前就约有 38,000 个 token。
- 实际会话建议 131,072 个 token 或更多;短会话用更少也可以。
- Claude Code 可能会警告该模型名称不在它的目录中。这只是提示信息:它会假定窗口为 200k,并据此自动压缩。请把
CLAUDE_CODE_MAX_CONTEXT_TOKENS设为模型的真实上下文窗口。
设置
在控制台中,Connect 会用你的 warden 地址、你的密钥和你选择的模型写入这些文件。下面以占位符展示这些文件。
Router:保留你的 Claude 登录
你的 Claude 登录继续发往 Anthropic;warden 密钥放在单独的标头中传输,你的规则指定的模型由这里应答。
export ANTHROPIC_BASE_URL=https://your-warden export ANTHROPIC_CUSTOM_HEADERS="X-LMWarden-Key: vw_YOUR_KEY" claude
settings.json (~/.claude/settings.json){
"env": {
"ANTHROPIC_BASE_URL": "https://your-warden",
"ANTHROPIC_CUSTOM_HEADERS": "X-LMWarden-Key: vw_YOUR_KEY"
}
}仅本地(无需 Anthropic 账户)
每个模型槽位都指向所选的已部署模型,warden 密钥即认证令牌。不会向 Anthropic 发送任何内容。
export ANTHROPIC_BASE_URL=https://your-warden export ANTHROPIC_AUTH_TOKEN=vw_YOUR_KEY export ANTHROPIC_MODEL=your-served-model-name export ANTHROPIC_DEFAULT_OPUS_MODEL=your-served-model-name export ANTHROPIC_DEFAULT_SONNET_MODEL=your-served-model-name export ANTHROPIC_DEFAULT_HAIKU_MODEL=your-served-model-name export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 export CLAUDE_CODE_MAX_CONTEXT_TOKENS=32768 # The model's context window is unknown: 32768 is a guess. Set it to the model's real window.
settings.json (~/.claude/settings.json){
"env": {
"ANTHROPIC_BASE_URL": "https://your-warden",
"ANTHROPIC_AUTH_TOKEN": "vw_YOUR_KEY",
"ANTHROPIC_MODEL": "your-served-model-name",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "your-served-model-name",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "your-served-model-name",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "your-served-model-name",
"CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1",
"CLAUDE_CODE_MAX_CONTEXT_TOKENS": "32768"
}
}官方文档:https://code.claude.com/docs/en/llm-gateway(查阅日期:2026-10-04)。