让Claude Code使用本地LLM

上周我想运行 Claude Code 时使用本地模型而不是支付 API 调用费用。经过一些研究,我发现了 claude-codex-settings —— Fatih C. Akyon 的一个仓库,其中包含有用的 Claude Code 插件,包括用于 LLM 代理集成的 ccproxy-tools

设置过程并不简单,但结果值得:零 API 成本和离线能力。

1、什么是 claude-codex-settings?

fcakyon/claude-codex-settings 是一个 Claude Code 插件和配置的集合。该仓库包括:

  • ccproxy-tools:用于 ccproxy(基于 LiteLLM 的代理)的集成插件
  • 各种 Claude Code 设置和优化
  • 不同 LLM 提供商的设置向导

ccproxy-tools 插件使连接 Claude Code 与替代后端(如 Ollama、OpenAI、GitHub Copilot,甚至通过 OAuth 的 Claude Pro/Max)变得容易。

2、开始使用

首先,您需要在 Claude Code 中注册插件市场:

/plugin marketplace add fcakyon/claude-codex-settings

输出:

Successfully added marketplace: claude-settings

重要提示: 市场注册为 claude-settings,而不是仓库名称。这最初让我措手不及。

2.1 安装 ccproxy-tools

现在使用正确的市场名称安装插件:

/plugin install ccproxy-tools@claude-settings

我的第一次尝试使用了错误的名称(@fcakyon-claude-plugins)并且静默失败。正确的市场名称是 @claude-settings

2.2 安装 ccproxy 包

插件需要 claude-ccproxy 包。确保您已安装 uv,然后:

uv tool install claude-ccproxy --with 'litellm[proxy]' --force

警告: 不要从 PyPI 安装仅 ccproxy ——那是不同的、已废弃的包。正确的包是 claude-ccproxy

+ claude-ccproxy==1.2.0
+ litellm==1.80.11
Installed 1 executable: ccproxy

2.3 运行设置向导

插件包含一个交互式设置向导:

/ccproxy-tools:setup

这将引导您选择提供商:

  1. Claude Pro/Max (OAuth)
  2. GitHub Copilot (LiteLLM)
  3. OpenAI API (LiteLLM)
  4. Gemini API (LiteLLM)

我最初尝试使用 Claude Pro/Max 但遇到了 OAuth 问题(下面会更多说明)。最后我改用了 Ollama。

3、我的设置:使用 DeepSeek R1 的 Ollama

OAuth 障碍

当我第一次尝试使用 Claude Pro/Max 启动 ccproxy 时:

ccproxy start

我得到了这个错误:

OAuth command for provider 'anthropic' failed with exit code 2:
jq: error: Could not open file ~/.claude/.credentials.json:
No such file or directory

OAuth 流程期望一个 Claude Code CLI 不会自动创建的凭据文件。与其进一步调试这个问题,我转向了 Ollama。

3.1 为 Ollama 配置

我已经运行了带有 DeepSeek R1 的 Ollama。下面是我如何配置 ccproxy 来使用它。

~/.ccproxy/config.yaml —— 模型路由:

model_list:
  - model_name: default
    litellm_params:
      model: ollama/deepseek-r1:1.5b
      api_base: http://localhost:11434
  - model_name: deepseek-r1
    litellm_params:
      model: ollama/deepseek-r1:1.5b
      api_base: http://localhost:11434
  # Map Claude model names to Ollama
  - model_name: claude-sonnet-4-5-20250929
    litellm_params:
      model: ollama/deepseek-r1:1.5b
      api_base: http://localhost:11434
  - model_name: claude-opus-4-5-20251101
    litellm_params:
      model: ollama/deepseek-r1:1.5b
      api_base: http://localhost:11434
  - model_name: claude-haiku-4-5-20251001
    litellm_params:
      model: ollama/deepseek-r1:1.5b
      api_base: http://localhost:11434
  - model_name: claude-3-5-haiku-20241022
    litellm_params:
      model: ollama/deepseek-r1:1.5b
      api_base: http://localhost:11434
litellm_settings:
  callbacks:
    - ccproxy.handler
  drop_params: true
general_settings:
  forward_client_headers_to_llm_api: true
  master_key: sk-dummy

~/.ccproxy/ccproxy.yaml —— 禁用 OAuth:

ccproxy:
  debug: true
  handler: "ccproxy.handler:CCProxyHandler"
  
  # Disable OAuth for Ollama
  oat_sources: {}
  
  hooks:
    - ccproxy.hooks.rule_evaluator
    - ccproxy.hooks.model_router
    - ccproxy.hooks.capture_headers
  
  default_model_passthrough: true
  rules: []
litellm:
  host: 127.0.0.1
  port: 4000
  num_workers: 4
  debug: true
  detailed_debug: false

关键更改:oat_sources: {} 完全禁用 OAuth。

3.2 启动和测试代理

启动代理:

ccproxy stop 2>/dev/null ccproxy start --detach LiteLLM started in background Log file: ~/.ccproxy/litellm.log

健康检查:

curl -s -H "Authorization: Bearer sk-dummy" http://localhost:4000/health | jq '.healthy_count' 6

所有 6 个模型端点都健康。

API 测试:

curl -s -X POST "http://localhost:4000/v1/chat/completions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-dummy" \
  -d '{"model":"deepseek-r1","messages":[{"role":"user","content":"Hello"}],"max_tokens":50}'
{
  "model": "ollama/deepseek-r1:1.5b",
  "choices": [{
    "message": {
      "content": "Hello! How can I assist you today? 😊",
      "role": "assistant"
    }
  }]
}

DeepSeek 通过代理响应。成功!

3.3 将 Claude Code 连接到代理

最后一步 —— 更新 ~/.claude/settings.json

{
  "env": {
    "ANTHROPIC_BASE_URL": "http://localhost:4000",
    "ANTHROPIC_AUTH_TOKEN": "sk-dummy"
  }
}

现在 Claude Code 将通过 ccproxy 将所有请求路由到您的本地 Ollama 实例。

3.4 故障排除:我遇到的错误

错误 原因 解决方案
插件静默失败 错误的市场名称 使用 @claude-settings 而不是 @fcakyon-claude-plugins
"No executables provided" 错误的 PyPI 包 安装 claude-ccproxy,而不是 ccproxy
"credentials.json not found" OAuth 期望 Claude Desktop 为 Ollama 设置 oat_sources: {}
"No api key passed in" 缺少认证头 使用 Bearer sk-dummy
端口 4000 被占用 先前代理运行 先运行 ccproxy stop

4、结束语

Fatih C. Akyon 的 claude-codex-settings 仓库提供了一种干净的方式来使用额外集成扩展 Claude Code。特别是 ccproxy-tools 插件使以下操作变得简单:

  • 使用本地 LLM(Ollama、LM Studio)
  • 连接到替代云提供商(OpenAI、Gemini)
  • 可能通过 OAuth 使用 Claude Pro/Max 订阅

对于我的用例 —— 使用本地 Ollama 模型运行 Claude Code —— 设置花费了大约 2 小时,包括调试。结果:

Proxy:    http://localhost:4000
Auth:     Bearer sk-dummy  
Backend:  Ollama (localhost:11434)
Model:    deepseek-r1:1.5b
Status:   6/6 endpoints healthy ✓

零 API 成本、完全隐私、离线工作。


原文链接:Using Local LLM Models with Claude Code: A Step-by-Step Guide with ccproxy-tools

汇智网翻译整理,转载请标明出处