个人使用场景 claude 模型实在是太贵了,想使用 Claude Code 默认只支持 Anthropic 的接口格式,所以本文记录了如何把本地模型或者其他模型(Deepseek等)接入 Claude Code 使用的方法。
通过 Claude Code Router (CCR) 将 Claude Code CLI 连接到 Ollama(本地模型)或 DeepSeek(云端模型),从而使用非 Anthropic 模型运行 Claude Code。

|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
┌─────────────────┐ Anthropic Messages API ┌──────────────────────────┐ │ │ ──────────────────────────────? │ │ │ Claude Code │ /v1/messages │ Claude Code Router │ │ (CLI / VSC) │ ?────────────────────────────── │ (localhost:3456) │ │ │ │ │ └─────────────────┘ └──────────┬───────────────┘ │ ┌──────────────────────────────────────┼──────────────────────────┐ │ │ │ ▼ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ Ollama │ │ DeepSeek API │ │ OpenAI API │ │ (localhost) │ │ (云端) │ │ (其他兼容) │ │ :11434/v1 │ │ api.deepseek │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ |
| 事项 | 说明 |
|---|---|
| Claude Code 发送的协议 | Anthropic Messages API (/v1/messages) |
| Ollama 支持的协议 | OpenAI Chat Completions API (/v1/chat/completions) |
| DeepSeek 支持的协议 | OpenAI Chat Completions API (/v1/chat/completions) |
| CCR 的作用 | 协议转换网关,在两种格式间翻译 |
| 认证方式 | 通过 ANTHROPIC_AUTH_TOKEN 或 ANTHROPIC_API_KEY 传递凭证 |
启动后,CCR 会在以下位置创建配置文件:
|
1 2 3 |
ollama pull llama3.1 ollama pull qwen2.5 ollama pull deepseek-r1:7b |
| 字段 | 值 |
|---|---|
| Provider Name | Ollama |
| Endpoint (Base URL) | http://127.0.0.1:11434/v1 |
| Protocol | openai_chat_completions |
| API Key | 留空(或随意填写 ollama) |
| Models | 输入你已拉取的模型名,如 llama3.1, qwen2.5 |
为什么 Ollama 的 endpoint 是 :11434/v1? Ollama 从 0.1.32 版本开始原生支持 OpenAI 兼容 API,路径为 /v1/chat/completions。 CCR 通过 openai_chat_completions 协议将 Anthropic 请求转换后发送到此端点。
也可以直接通过 URL Scheme 快速添加:
|
1 |
ccr://provider?name=Ollama&base_url=http%3A%2F%2F127.0.0.1%3A11434%2Fv1&api_key=ollama&models=llama3.1,qwen2.5&protocol=openai_chat_completions |
在浏览器中打开此链接,CCR 会弹出确认对话框。
在终端验证 Ollama 的 OpenAI 兼容 API 是否正常:
|
1 2 3 4 5 6 |
curl http://127.0.0.1:11434/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "llama3.1", "messages": [{"role": "user", "content": "Hello"}] }' |
应返回包含 choices 字段的 JSON 响应。
| 字段 | 值 |
|---|---|
| Provider Name | DeepSeek |
| Endpoint | https://api.deepseek.com/v1 |
| Protocol | openai_chat_completions |
| API Key | sk-xxxxxxxxxxxxxxxxxxxx(你的 DeepSeek API Key) |
| Models | deepseek-chat, deepseek-reasoner |
|
1 |
ccr://provider?name=DeepSeek&base_url=https%3A%2F%2Fapi.deepseek.com%2Fv1&api_key=sk-xxxxxxxxx&models=deepseek-chat,deepseek-reasoner&protocol=openai_chat_completions |
| 模型 ID | 说明 | 适用场景 |
|---|---|---|
| deepseek-chat | DeepSeek V3 / 最新聊天模型 | 日常编码、代码生成 |
| deepseek-reasoner | DeepSeek R1 推理模型 | 复杂推理、调试分析 |
建议勾选 Auto-start,这样每次开机 CCR 会自动启动网关。
编辑 ~/.claude/settings.json(macOS/Linux)或 %USERPROFILE%\.claude\settings.json(Windows):
|
1 2 3 4 5 6 |
{ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:3456", "ANTHROPIC_API_KEY": "ccr-local" } } |
ANTHROPIC_API_KEY 的值可以是任意非空字符串——CCR 作为本地网关不验证这个 key,但 Claude Code 要求必须有值才会绕过登录流程。
在项目根目录创建 .claude/settings.local.json(此文件会自动被 gitignore):
|
1 2 3 4 5 6 |
{ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:3456", "ANTHROPIC_API_KEY": "ccr-local" } } |
|
1 2 |
export ANTHROPIC_BASE_URL=http://127.0.0.1:3456 export ANTHROPIC_API_KEY=ccr-local |
CCR 提供了 Profile 功能,可以一键应用配置:
在 CCR 的 Routing 面板中设置:
| 路由项 | 推荐配置 |
|---|---|
| Default Provider | 选择你配置的 Ollama 或 DeepSeek |
| Default Model | 选择具体模型,如 llama3.1 或 deepseek-chat |
你还可以配置针对不同工作负载的路由规则:
- Background(后台任务)→ 可以用更便宜的模型
- Thinking(推理任务)→ 可以用更强的模型
- Subagent(子智能体)→ 可以用性价比更高的模型
在配置好环境变量后,先用 curl 测试 CCR 网关是否正常响应:
|
1 2 3 4 5 |
curl -X POST http://127.0.0.1:3456/v1/messages \ -H "Authorization: Bearer ccr-local" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{"model": "llama3.1", "max_tokens": 50, "messages": [{"role": "user", "content": "Say hello"}]}' |
注意:这里的 model 名称必须与你之前在 CCR 中添加的模型名称一致。 如果 DeepSeek 使用 deepseek-chat,如果 Ollama 使用你拉取的模型名如 llama3.1。
如果返回 JSON 且包含 content 字段,说明 CCR 工作正常。
|
1 2 |
cd your-project claude |
如果一切正常,Claude Code 应该 跳过登录界面,直接进入会话。
在 Claude Code 中运行:
|
1 |
/status |
查看以下关键信息:
| 状态项 | 期望值 |
|---|---|
| Anthropic base URL | http://127.0.0.1:3456 |
| API key | 应显示 ANTHROPIC_API_KEY(而非 Login method) |
尝试发送一条简单的消息,比如:
|
1 |
Hello, what model are you running on? |
如果 CCR 路由配置正确,你会收到模型回复,并能在 CCR 的 Dashboard 中看到请求记录。
CCR 支持根据请求特征将不同任务路由到不同模型:
| 路由条件 | 目标模型 | 用途 |
|---|---|---|
| Default | deepseek-chat | 日常对话和编码 |
| Background | llama3.1 (本地 Ollama) | 后台任务、代码搜索 |
| Thinking | deepseek-reasoner | 需要深度推理的任务 |
| Long Context | deepseek-chat | 处理大文件 |
配置方式:在 CCR → Routing → Add Routing Rule 中设置。
可以创建虚拟模型名称来简化模型选择:
|
1 2 3 |
llama3.1 → Ollama 上的 llama3.1 default-coding → deepseek-chat default-reasoning → deepseek-reasoner |
在 CCR → Routing → Virtual Models 中配置。
当主模型不可用时,CCR 可以自动切换到备用模型:
|
1 2 |
Primary: deepseek-chat (DeepSeek) Fallback: llama3.1 (Ollama,本地运行,不需要网络) |
在 Routing → 编辑路由规则 → 配置 Fallback 模型。
对 DeepSeek 等 API 服务,可以配置多个 API Key 实现负载均衡和故障转移:
在 Providers → 编辑 DeepSeek → API Key 字段使用逗号分隔多个 key:
|
1 |
sk-key1,sk-key2,sk-key3 |
CCR 会在请求失败时自动轮换到下一个 key。
原因:CCR 的网关配置未被 Claude Code 读取到。
解决:
原因:CCR 网关未启动。
解决:
原因:可能存在多种问题。
解决步骤:
对于 Ollama:
|
1 2 3 4 5 6 |
# 检查 Ollama 服务状态 ollama list # 确认模型已加载 ollama run llama3.1 # 检查 Ollama 日志 ollama serve |
对于 DeepSeek:
|
1 2 3 4 5 |
# 直接测试 DeepSeek API curl https://api.deepseek.com/v1/chat/completions \ -H "Authorization: Bearer sk-your-key" \ -H "Content-Type: application/json" \ -d '{"model": "deepseek-chat", "messages": [{"role": "user", "content": "hi"}]}' |
原因:API Key 未正确传递。
解决:
原因:CCR 在 Anthropic Messages ↔ OpenAI Chat Completions 之间转换时可能遇到不兼容的字段。
解决:
|
1 2 3 4 5 6 7 |
{ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:3456", "ANTHROPIC_API_KEY": "ccr-local", "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1" } } |
CCR 桌面应用中的 Network Logs 面板可以查看所有通过的请求和响应,是排查问题的最佳工具。
如果需要完全重置:
|
1 2 3 4 5 6 |
# 备份现有配置 cp ~/.claude-code-router/config.json ~/.claude-code-router/config.json.bak # 删除配置(CCR 会在下次启动时重新创建) rm ~/.claude-code-router/config.json # 清除 Claude Code 缓存 rm -rf ~/.claude/cache |
|
1 2 3 4 5 6 7 8 |
{ "env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:3456", "ANTHROPIC_API_KEY": "ccr-local", "CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS": "1", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1" } } |
正确的启动顺序是: