上一篇我们用 llama.cpp 在本地跑起了大模型,这一篇让它真正干活:把 Claude Code(Anthropic 的终端 AI 编程助手)接到本地模型上。默认情况下 Claude Code 走 Anthropic 官方 API,通过 CCR(claude-code-router) 这个路由网关,可以把它的请求全部转发到本地 llama-server,实现本地推理、数据不出本机。

核心概念先搞清楚

Claude Code

Claude Code 是 Anthropic 推出的命令行 AI 编程助手,直接在终端里工作:可以读项目代码、按指令修改文件、执行命令,适合在编辑器旁边配合使用。它默认通过 Anthropic 官方 API 或账号订阅访问 Claude 模型,但这套协议是可以通过环境变量重定向的,这正是本文接入本地模型的切入点。

CCR(claude-code-router)

CCR 是 @musistudio/claude-code-router 这个开源项目,作用是一个轻量网关:

  • 接收 Claude Code 发来的请求,再转发到任意 OpenAI 兼容的模型端点;
  • 支持配置多个 Provider(模型提供方),按模型名路由;
  • 可以区分前台和后台任务走不同的模型(Router 里的 defaultbackground)。

有了它,Claude Code 就能用上本地模型,而不是只能连 Anthropic 官方服务。

OpenAI 兼容接口

llama-server 除了自带聊天界面,还暴露了一组 OpenAI 兼容的 HTTP 接口:/v1/models(查询可用模型)、/v1/chat/completions(对话补全)。CCR 正是通过这组接口把请求转给本地模型的,所以配置里的 api_base_url 指向 llama-server 的地址。

npmmirror

npmmirror(原淘宝 npm 镜像)是国内的 npm 仓库镜像,用来加速依赖下载。安装 Claude Code 和 CCR 之前先设置镜像,可以避免网络超时。

安装 Claude Code

1
2
3
4
5
6
7
8
# 设置国内镜像
npm config set registry https://registry.npmmirror.com/

# 安装命令
npm install -g @anthropic-ai/claude-code

# 安装验证
claude --version

安装完成后,在任意项目目录输入 claude 即可启动 Claude Code 的交互界面。

安装并配置 CCR

1
npm install -g @musistudio/claude-code-router

创建配置文件 ~/.claude-code-router/config.json。注意:CCR 默认端口号是 8080,这是常用端口,容易和本地模型的 8080 冲突,这里统一调整为 11122:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"Providers": [
{
"name": "llamacpp",
"api_base_url": "http://127.0.0.1:11122/v1/chat/completions",
"api_key": "ollama",
"models": ["qwen3-uncensored"]
}
],
"Router": {
"default": "llamacpp,qwen3-uncensored",
"background": "llamacpp,qwen3-uncensored"
}
}

配置项说明:

配置项 含义
Providers[].name Provider 名称,自定义标识
Providers[].api_base_url 模型端点地址,指向 llama-server 的 OpenAI 兼容接口
Providers[].api_key 本地服务不校验密钥,随便填一个占位即可
Providers[].models 该 Provider 下可用的模型名列表
Router.default 默认路由,格式为 Provider 名 + 模型名
Router.background 后台任务(如总结、索引)走的路由

确认模型 ID

配置中的模型名称 qwen3-uncensored(三处需要统一)可以使用 llama-server 暴露的接口确认:

1
curl http://127.0.0.1:11122/v1/models

返回结果里的 id 默认就是模型文件名去掉 .gguf,例如 Qwen3.6-35B-A3B-xxx-Q4_K_PCCR 配置里的模型名必须和这个 id 一致。

模型名称太长的话,启动模型时可以加一个别名参数 --alias qwen3-uncensored,这样 /v1/models 返回的 id 就是别名,配置更简洁。完整启动命令:

1
llama-server -m "Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf" --mmproj "mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf" -ngl 999 -c 131072 -n 8192 --host 127.0.0.1 --port 11122 --alias qwen3-uncensored

启动链路

整条链路需要三个终端配合:模型服务 → CCR 网关 → Claude Code。

终端 1:启动模型(也可以用上一篇的 start.sh 脚本,把端口改成 11122):

1
llama-server -m "Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-Q4_K_M.gguf" --mmproj "mmproj-Qwen3.6-35B-A3B-Uncensored-HauhauCS-Aggressive-f16.gguf" -ngl 999 -c 131072 -n 8192 --host 127.0.0.1 --port 11122 --alias qwen3-uncensored

终端 2:启动 CCR 网关(关闭命令是 ccr stop):

1
ccr start

终端 3:配置环境变量并运行 Claude Code:

1
2
3
export ANTHROPIC_BASE_URL="http://127.0.0.1:3456"
export ANTHROPIC_AUTH_TOKEN="ccr-profile-vRkpFNjkyMZtkz-Dg88HGiRsbDzkt_iu"
claude --model qwen3-uncensored

环境变量说明:

变量 含义
ANTHROPIC_BASE_URL 把 Claude Code 的 API 地址重定向到 CCR 网关(默认 3456 端口)
ANTHROPIC_AUTH_TOKEN CCR 本地生成的访问令牌,让网关识别请求
claude --model 指定使用哪个模型,对应 CCR 配置里的模型名

启动后效果

三个终端都起来后,Claude Code 就会通过 CCR 和本地模型对话,效果如下:

Claude Code 使用本地模型

请求链路是 Claude Code → CCR(3456) → llama-server(11122) → 本地模型,整个过程不经过任何外部服务,代码和对话内容都留在本机。

常见问题

  • 模型名对不上:CCR 配置、claude --model/v1/models 返回的 id 三处必须完全一致,建议用 --alias 统一成短名称;
  • 环境变量不生效export 只在当前终端有效,新开终端要重新设置,或者写进 shell 配置文件;
  • 想换模型:修改 config.json 里的模型名和 llama-server 的 -m 参数,重启服务即可;
  • 关闭 CCR:用 ccr stop,不影响模型服务本身的运行。