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

1. 原理概述
架构图
|
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)
- Claude Code Router 运行在本地,暴露一个兼容 Anthropic API 的端点 http://127.0.0.1:3456
- 通过设置 ANTHROPIC_BASE_URL=http://127.0.0.1:3456,Claude Code 将所有 API 请求发送到 CCR
- CCR 内部做协议转换:将 Anthropic Messages 格式翻译成 OpenAI Chat Completions 格式(Ollama / DeepSeek 都支持)
- 响应再从 OpenAI 格式翻译回 Anthropic 格式返回给 Claude Code
关键事实
| 事项 |
说明 |
| 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 传递凭证 |
2. 安装 Claude Code Router
系统要求
- macOS 10.15+ / Windows 10+ / Linux (支持 AppImage)
- 已安装
下载安装
- 访问
- 下载对应系统的安装包:
- macOS: .dmg 文件
- Windows: .exe 安装程序
- Linux: .AppImage 文件
- 安装并启动应用
首次启动
启动后,CCR 会在以下位置创建配置文件:
- macOS / Linux: ~/.claude-code-router/config.json
- Windows: %APPDATA%\Claude Code Router\config.json
3. 配置 Ollama 提供商
前置条件
|
1
2
3
|
ollama pull llama3.1
ollama pull qwen2.5
ollama pull deepseek-r1:7b
|
- Ollama 服务正在运行(默认监听 http://127.0.0.1:11434)
通过 CCR 界面配置
- 打开 CCR 桌面应用
- 进入 Providers → 点击 Add Provider
- 填写以下信息:
| 字段 |
值 |
| 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 |
- 点击 Save
为什么 Ollama 的 endpoint 是 :11434/v1? Ollama 从 0.1.32 版本开始原生支持 OpenAI 兼容 API,路径为 /v1/chat/completions。 CCR 通过 openai_chat_completions 协议将 Anthropic 请求转换后发送到此端点。
通过 Deeplink 配置(可选)
也可以直接通过 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 连接
在终端验证 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 响应。
4. 配置 DeepSeek 提供商
前置条件
通过 CCR 界面配置
- 打开 CCR 桌面应用
- 进入 Providers → 点击 Add Provider
- 填写以下信息:
| 字段 |
值 |
| 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 |
- 点击 Save
通过 Deeplink 配置(可选)
|
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
|
DeepSeek 模型说明
| 模型 ID |
说明 |
适用场景 |
| deepseek-chat |
DeepSeek V3 / 最新聊天模型 |
日常编码、代码生成 |
| deepseek-reasoner |
DeepSeek R1 推理模型 |
复杂推理、调试分析 |
5. 配置 Claude Code 连接到 CCR
5.1 启动 CCR 网关
- 在 CCR 桌面应用中进入 Server
- 点击 Start 启动网关服务
- 确认状态:两个端点应处于运行状态:
- Wrapper gateway: http://127.0.0.1:3456
- Core gateway runtime: http://127.0.0.1:3457
建议勾选 Auto-start,这样每次开机 CCR 会自动启动网关。
5.2 创建 Claude Code 配置文件
方法 A:全局配置(推荐)
编辑 ~/.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 要求必须有值才会绕过登录流程。
方法 B:项目级配置
在项目根目录创建 .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"
}
}
|
方法 C:Shell 环境变量(临时,适合测试)
|
1
2
|
export ANTHROPIC_BASE_URL=http://127.0.0.1:3456
export ANTHROPIC_API_KEY=ccr-local
|
5.3 使用 CCR Profiles 自动配置(推荐)
CCR 提供了 Profile 功能,可以一键应用配置:
- 在 CCR 中进入 Profiles
- 选择 Claude Code
- 选择目标模型(例如你在 Ollama 中配置的 llama3.1)
- 点击 Apply — 这会自动设置环境变量并打开 Claude Code
5.4 配置 CCR 路由
在 CCR 的 Routing 面板中设置:
| 路由项 |
推荐配置 |
| Default Provider |
选择你配置的 Ollama 或 DeepSeek |
| Default Model |
选择具体模型,如 llama3.1 或 deepseek-chat |
你还可以配置针对不同工作负载的路由规则:
- Background(后台任务)→ 可以用更便宜的模型
- Thinking(推理任务)→ 可以用更强的模型
- Subagent(子智能体)→ 可以用性价比更高的模型
6. 验证连接
6.1 快速测试(curl)
在配置好环境变量后,先用 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 工作正常。
6.2 启动 Claude Code
|
1
2
|
cd your-project
claude
|
如果一切正常,Claude Code 应该 跳过登录界面,直接进入会话。
6.3 检查状态
在 Claude Code 中运行:
查看以下关键信息:
| 状态项 |
期望值 |
| Anthropic base URL |
http://127.0.0.1:3456 |
| API key |
应显示 ANTHROPIC_API_KEY(而非 Login method) |
6.4 发送测试消息
尝试发送一条简单的消息,比如:
|
1
|
Hello, what model are you running on?
|
如果 CCR 路由配置正确,你会收到模型回复,并能在 CCR 的 Dashboard 中看到请求记录。
7. 进阶:路由规则与虚拟模型
7.1 多模型路由
CCR 支持根据请求特征将不同任务路由到不同模型:
| 路由条件 |
目标模型 |
用途 |
| Default |
deepseek-chat |
日常对话和编码 |
| Background |
llama3.1 (本地 Ollama) |
后台任务、代码搜索 |
| Thinking |
deepseek-reasoner |
需要深度推理的任务 |
| Long Context |
deepseek-chat |
处理大文件 |
配置方式:在 CCR → Routing → Add Routing Rule 中设置。
7.2 虚拟模型(Virtual Models)
可以创建虚拟模型名称来简化模型选择:
|
1
2
3
|
llama3.1 → Ollama 上的 llama3.1
default-coding → deepseek-chat
default-reasoning → deepseek-reasoner
|
在 CCR → Routing → Virtual Models 中配置。
7.3 备用路由(Fallback)
当主模型不可用时,CCR 可以自动切换到备用模型:
|
1
2
|
Primary: deepseek-chat (DeepSeek)
Fallback: llama3.1 (Ollama,本地运行,不需要网络)
|
在 Routing → 编辑路由规则 → 配置 Fallback 模型。
7.4 API Key 轮转
对 DeepSeek 等 API 服务,可以配置多个 API Key 实现负载均衡和故障转移:
在 Providers → 编辑 DeepSeek → API Key 字段使用逗号分隔多个 key:
|
1
|
sk-key1,sk-key2,sk-key3
|
CCR 会在请求失败时自动轮换到下一个 key。
8. 常见问题排查
8.1 Claude Code 仍然显示登录界面
原因:CCR 的网关配置未被 Claude Code 读取到。
解决:
- 确认 ANTHROPIC_BASE_URL 和 ANTHROPIC_API_KEY 都已正确设置
- 如果使用 settings.json,确认文件路径正确:
- 全局:~/.claude/settings.json
- 项目级:.claude/settings.local.json
- 运行 echo $ANTHROPIC_BASE_URL 检查环境变量是否生效
- 在 Claude Code 中运行 /status 查看实际生效的 base URL
8.2 连接被拒绝(Connection Refused)
原因:CCR 网关未启动。
解决:
- 确认 CCR 桌面应用正在运行
- 在 CCR → Server 中确认 Gateway 状态为 "Running"
- 检查端口是否被占用:lsof -i :3456
8.3 模型返回错误或不响应
原因:可能存在多种问题。
解决步骤:
对于 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"}]}'
|
8.4 401 认证错误
原因:API Key 未正确传递。
解决:
- 如果使用 ANTHROPIC_API_KEY,CCR 收到的是 x-api-key 头
- 如果使用 ANTHROPIC_AUTH_TOKEN,CCR 收到的是 Authorization: Bearer 头
- 大多数情况下,两者都可以,只需确保 settings.json 中的变量名与 CCR 期望的一致
8.5 协议转换错误
原因:CCR 在 Anthropic Messages ↔ OpenAI Chat Completions 之间转换时可能遇到不兼容的字段。
解决:
- 在 Claude Code 中设置环境变量:CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
- 这会让 Claude Code 少发送一些实验性字段,降低协议转换出错的概率
- 在 settings.json 中添加:
|
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"
}
}
|
8.6 检查 CCR 日志
CCR 桌面应用中的 Network Logs 面板可以查看所有通过的请求和响应,是排查问题的最佳工具。
8.7 重置配置
如果需要完全重置:
|
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
|
9. 完整配置示例
最终~/.claude/settings.json
|
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"
}
}
|
启动顺序
正确的启动顺序是:
- 启动 Ollama(如果用本地模型):ollama serve
- 启动 CCR 并确保网关处于 Running 状态
- 启动 Claude Code:claude