머신러닝AI2026. 4. 27. 00:35

Claude Code는 Anthropic 모델만 써야할것 같지만, 그렇지 않다. 아주 간단하게 다른 LLM을 쓸 수 있다.

 

다음과 같이 claude code에 명령하면 claude code를 다른 LLM에서 쓸 수 있도록 할 수 있다

 

"나는 ollama 서버를 xxx.xxx.xxx.xxx IP에 설치해서 가지고 있는데, 여기있는 gemma4:26b 를 사용해서 claude code를 쓸 수 있도록 환경변수를 정의하고, claude code를 실행하는 claude_w.sh 라는 쉘스크립트를 짜줘. 이를 위해서 ccr을 설치하고 설정해줘."

"claude_w.sh를 검증하고 부족한 점을 보완해줘"

 

아래는 이를 위한 사전 지식 정보이다.

 

1) Claude Code를 실행할때 적절한 환경변수를 선언하면, LLM API 서버를 바꾸어서 작동하게 할 수 있다

 

 그리고 연관 환경변수는 아래와 같다

 

   $ export ANTHROPIC_BASE_URL="$CCR_URL"
   $ export ANTHROPIC_AUTH_TOKEN="ccr"
   $ export ANTHROPIC_MODEL="$MAIN_MODEL"
   $ export ANTHROPIC_SMALL_FAST_MODEL="$SMALL_MODEL"

 

   $ claude

 

   하면 claude가 위 URL의 LLM 서버를 사용하도록 구동된다.

 

2) Claude Code LLM 서버 스펙을 지원하면서 ollama 서버와 붙일 수 있는 중간 G/W역할을 하는 Claude Code Router(CCR)가 존재한다.

 

따라서 CCR에 ollama 서버를 등록한 후 실행하면, Claude Code가 접속하여 사용가능한 local LLM API 서버가 구동된다.

 

3) 결과적으로

 

    a) CCR을 실행하고

    b) 환경변수를 적절히 선언한 후

    c) Claude Code가 실행되면, 해당 Claude Code는 해당 ollama 서버로 붙게 된다.

 

 하지만 Web Search같은 기능들이 작동하지 않거나(Anthropic API 서버에서 제공) 기존보다 품질이 떨어지는 경우가 있기 때문에(gemma4, qwen 3.6등 테스트해보았다) claude code에 대안을 제시해줘야 하며, 각 모델별 다양한 장단점 파악하에 사용하면 된다.

 

4) 아래 첨부는 claude code가 만들어준 macos용 쉘 스크립트이다. 

 

 참고하도록 하자.

 

  $ claude_w.sh gemma4   <-- ollama에서 gemma4를 사용하도록 claude code를 실행한다.

 

#!/usr/bin/env bash
# Launch Claude Code against a chosen Ollama model on 192.168.0.96,
# routed through the local claude-code-router proxy.
#
# Usage:
#   claude_w.sh <model-key> [claude args...]
#   claude_w.sh list
set -euo pipefail

CCR_URL="http://127.0.0.1:3456"
OLLAMA_HOST="http://192.168.0.96:11434"
SMALL_DEFAULT="ollama,gemma4_e4b_justin:latest"

# Model key → main ollama model. Kept as a case for bash 3.2 (macOS default) compat.
resolve_model() {
  case "$1" in
    qwen36)      echo "ollama,qwen3.6:27b" ;;
    gemma4)      echo "ollama,gemma4:26b" ;;
    gemma4-e4b)  echo "ollama,gemma4_e4b_justin:latest" ;;
    *)           return 1 ;;
  esac
}

print_models() {
  cat <<'EOF'
Supported model keys:
  qwen36       ollama,qwen3.6:27b                 Qwen3.6 27B  - main reasoning, tool calling supported
  gemma4       ollama,gemma4:26b                  Gemma4 26B   - limited tool calling
  gemma4-e4b   ollama,gemma4_e4b_justin:latest    Gemma4 E4B 7.5B - small/fast, limited tool calling
EOF
}

usage() {
  cat <<'EOF'
Usage:
  claude_w.sh <model-key> [claude args...]
  claude_w.sh list
EOF
  print_models
}

[[ $# -ge 1 ]] || { usage >&2; exit 2; }

KEY="$1"; shift

case "$KEY" in
  list|-l|--list)   print_models; exit 0 ;;
  -h|--help|help)   usage;        exit 0 ;;
esac

if ! MAIN_MODEL="$(resolve_model "$KEY")"; then
  echo "[claude_w] unknown model key: $KEY" >&2
  print_models >&2
  exit 2
fi

# When the small/fast e4b model is the chosen main, reuse it; otherwise default.
if [[ "$KEY" == "gemma4-e4b" ]]; then
  SMALL_MODEL="$MAIN_MODEL"
else
  SMALL_MODEL="$SMALL_DEFAULT"
fi

# 1) Ensure ccr proxy is running. Surface errors instead of swallowing them.
if ! ccr status >/dev/null 2>&1; then
  ccr start || { echo "[claude_w] ccr start failed" >&2; exit 1; }
fi

# 2) Wait up to ~5s for ccr to bind 127.0.0.1:3456 (avoids ECONNREFUSED race).
for _ in $(seq 1 25); do
  (exec 3<>/dev/tcp/127.0.0.1/3456) >/dev/null 2>&1 && { exec 3<&-; exec 3>&-; break; }
  sleep 0.2
done
(exec 3<>/dev/tcp/127.0.0.1/3456) >/dev/null 2>&1 \
  || { echo "[claude_w] ccr proxy not responding at $CCR_URL" >&2; exit 1; }
exec 3<&- 3>&- 2>/dev/null || true

# 3) Verify remote ollama is reachable and has the requested model.
TAGS="$(curl -sf --max-time 3 "$OLLAMA_HOST/api/tags" || true)"
[[ -n "$TAGS" ]] \
  || { echo "[claude_w] remote ollama unreachable: $OLLAMA_HOST" >&2; exit 1; }
MODEL_NAME="${MAIN_MODEL#ollama,}"
grep -q "\"name\":\"$MODEL_NAME\"" <<<"$TAGS" \
  || { echo "[claude_w] model not present on remote ollama: $MODEL_NAME" >&2; exit 1; }

export ANTHROPIC_BASE_URL="$CCR_URL"
export ANTHROPIC_AUTH_TOKEN="ccr"
export ANTHROPIC_MODEL="$MAIN_MODEL"
export ANTHROPIC_SMALL_FAST_MODEL="$SMALL_MODEL"

echo "[claude] main=$MAIN_MODEL  small=$SMALL_MODEL  via $ANTHROPIC_BASE_URL"
[[ "$MAIN_MODEL" == *gemma* ]] \
  && echo "[warn] gemma tool-calling support is limited; expect reduced reliability"

exec claude "$@"

 

5) 완전히 다른 방법으로, ollama가 설치된 서버에서 claude를 바로 실행할 수 있다면 아래 방법도 시도해볼만한다.

    (ollama의 공식 제안 방법이다)

 

 

$ ollama launch claude

 

그러면 ollama가 환경설정을 알아서 해주고 claude가 실행된다.

 

 

반응형
Posted by 작동미학