Skip to content

knight76/claude-code-proxy

 
 

Repository files navigation

Claude Code Proxy

Claude Code가 OpenAI 호환 API 제공자와 작동하도록 하는 프록시 서버입니다. Claude API 요청을 OpenAI API 호출로 변환하여 Claude Code CLI에서 다양한 LLM 제공자를 사용할 수 있습니다.

Claude Code Proxy

특징

  • 완전한 Claude API 호환: /v1/messages 엔드포인트 완벽 지원
  • 다중 제공자 지원: OpenAI, Azure OpenAI, 로컬 모델 (Ollama) 및 모든 OpenAI 호환 API
  • 스마트 모델 매핑: 환경변수를 통한 BIG, MIDDLE, SMALL 모델 설정
  • 함수 호출: 완전한 tool use 지원 및 변환
  • 스트리밍 응답: 실시간 SSE 스트리밍 지원
  • 이미지 지원: Base64 인코딩 이미지 입력
  • 커스텀 헤더: API 요청에 대한 커스텀 HTTP 헤더 자동 주입
  • 에러 처리: 포괄적인 에러 처리 및 로깅

빠른 시작

1. 의존성 설치

# UV 사용 (권장)
uv sync

# 또는 pip 사용
pip install -r requirements.txt

2. 설정

cp .env.example .env
# .env를 편집하고 API 설정 추가
# 참고: 환경변수는 .env 파일에서 자동으로 로드됩니다

3. 서버 시작

# 직접 실행
python start_proxy.py

# 또는 UV 사용
uv run claude-code-proxy

# 또는 docker compose 사용
docker compose up -d

4. Claude Code와 함께 사용

# 프록시에 ANTHROPIC_API_KEY가 설정되지 않은 경우:
ANTHROPIC_BASE_URL=http://localhost:8082 ANTHROPIC_API_KEY="any-value" claude

# 프록시에 ANTHROPIC_API_KEY가 설정된 경우:
ANTHROPIC_BASE_URL=http://localhost:8082 ANTHROPIC_API_KEY="exact-matching-key" claude

설정

애플리케이션은 python-dotenv를 사용하여 프로젝트 루트의 .env 파일에서 환경변수를 자동으로 로드합니다. 셸에서 직접 환경변수를 설정할 수도 있습니다.

환경 변수

필수:

  • OPENAI_API_KEY - 대상 제공자의 API 키

보안:

  • ANTHROPIC_API_KEY - 클라이언트 검증을 위한 예상 Anthropic API 키
    • 설정된 경우, 클라이언트는 프록시에 접근하기 위해 정확한 API 키를 제공해야 함
    • 설정되지 않은 경우, 모든 API 키가 허용됨

모델 설정:

  • BIG_MODEL - Claude opus 요청용 모델 (기본값: gpt-4o)
  • MIDDLE_MODEL - Claude sonnet 요청용 모델 (기본값: gpt-4o)
  • SMALL_MODEL - Claude haiku 요청용 모델 (기본값: gpt-4o-mini)

API 설정:

  • OPENAI_BASE_URL - API 베이스 URL (기본값: https://api.openai.com/v1)

서버 설정:

  • HOST - 서버 호스트 (기본값: 0.0.0.0)
  • PORT - 서버 포트 (기본값: 8082)
  • LOG_LEVEL - 로깅 레벨 (기본값: WARNING)

성능:

  • MAX_TOKENS_LIMIT - 토큰 제한 (기본값: 4096)
  • REQUEST_TIMEOUT - 요청 타임아웃 (초) (기본값: 90)

프록시 설정:

  • PROXY_URL - HTTP/HTTPS/SOCKS5 프록시 URL (선택사항)
    • 예시: http://proxy.example.com:8080
    • 예시: socks5://proxy.example.com:1080

커스텀 헤더:

  • CUSTOM_HEADER_* - API 요청용 커스텀 헤더 (예: CUSTOM_HEADER_ACCEPT, CUSTOM_HEADER_AUTHORIZATION)
    • 커스텀 헤더를 활성화하려면 .env 파일에서 주석 해제

커스텀 헤더 설정

CUSTOM_HEADER_ 접두사가 있는 환경변수를 설정하여 API 요청에 커스텀 헤더를 추가합니다:

# 커스텀 헤더를 활성화하려면 주석 해제
# CUSTOM_HEADER_ACCEPT="application/jsonstream"
# CUSTOM_HEADER_CONTENT_TYPE="application/json"
# CUSTOM_HEADER_USER_AGENT="your-app/1.0.0"
# CUSTOM_HEADER_AUTHORIZATION="Bearer your-token"
# CUSTOM_HEADER_X_API_KEY="your-api-key"
# CUSTOM_HEADER_X_CLIENT_ID="your-client-id"
# CUSTOM_HEADER_X_CLIENT_VERSION="1.0.0"
# CUSTOM_HEADER_X_REQUEST_ID="unique-request-id"
# CUSTOM_HEADER_X_TRACE_ID="trace-123"
# CUSTOM_HEADER_X_SESSION_ID="session-456"

헤더 변환 규칙

CUSTOM_HEADER_ 접두사가 있는 환경변수는 자동으로 HTTP 헤더로 변환됩니다:

  • 환경 변수: CUSTOM_HEADER_ACCEPT

  • HTTP 헤더: ACCEPT

  • 환경 변수: CUSTOM_HEADER_X_API_KEY

  • HTTP 헤더: X-API-KEY

  • 환경 변수: CUSTOM_HEADER_AUTHORIZATION

  • HTTP 헤더: AUTHORIZATION

지원되는 헤더 유형

  • Content Type: ACCEPT, CONTENT-TYPE
  • 인���: AUTHORIZATION, X-API-KEY
  • 클라이언트 식별: USER-AGENT, X-CLIENT-ID, X-CLIENT-VERSION
  • 추적: X-REQUEST-ID, X-TRACE-ID, X-SESSION-ID

사용 예시

# 기본 설정
OPENAI_API_KEY="sk-your-openai-api-key-here"
OPENAI_BASE_URL="https://api.openai.com/v1"

# 커스텀 헤더 활성화 (필요에 따라 주석 해제)
CUSTOM_HEADER_ACCEPT="application/jsonstream"
CUSTOM_HEADER_CONTENT_TYPE="application/json"
CUSTOM_HEADER_USER_AGENT="my-app/1.0.0"
CUSTOM_HEADER_AUTHORIZATION="Bearer my-token"

프록시는 대상 LLM 제공자로의 모든 API 요청에 이러한 헤더를 자동으로 포함합니다.

모델 매핑

프록시는 Claude 모델 요청을 설정된 모델로 매핑합니다:

Claude 요청 매핑됨 환경 변수
"haiku"가 포함된 모델 SMALL_MODEL 기본값: gpt-4o-mini
"sonnet"이 포함된 모델 MIDDLE_MODEL 기본값: BIG_MODEL
"opus"가 포함된 모델 BIG_MODEL 기본값: gpt-4o

제공자 예시

OpenAI

OPENAI_API_KEY="sk-your-openai-key"
OPENAI_BASE_URL="https://api.openai.com/v1"
BIG_MODEL="gpt-4o"
MIDDLE_MODEL="gpt-4o"
SMALL_MODEL="gpt-4o-mini"

Azure OpenAI

OPENAI_API_KEY="your-azure-key"
OPENAI_BASE_URL="https://your-resource.openai.azure.com/openai/deployments/your-deployment"
BIG_MODEL="gpt-4"
MIDDLE_MODEL="gpt-4"
SMALL_MODEL="gpt-35-turbo"

로컬 모델 (Ollama)

OPENAI_API_KEY="dummy-key"  # 필수지만 더미 값 가능
OPENAI_BASE_URL="http://localhost:11434/v1"
BIG_MODEL="llama3.1:70b"
MIDDLE_MODEL="llama3.1:70b"
SMALL_MODEL="llama3.1:8b"

기타 제공자

적절한 OPENAI_BASE_URL을 설정하여 모든 OpenAI 호환 API를 사용할 수 있습니다.

프록시 사용

프록시 서버를 통해 요청을 라우팅해야 하는 경우:

OPENAI_API_KEY="sk-your-openai-key"
OPENAI_BASE_URL="https://api.openai.com/v1"
PROXY_URL="http://your-proxy-server:8080"

# 또는 SOCKS5 프록시 사용
PROXY_URL="socks5://your-proxy-server:1080"

사용 예시

기본 채팅

import httpx

response = httpx.post(
    "http://localhost:8082/v1/messages",
    json={
        "model": "claude-3-5-sonnet-20241022",  # MIDDLE_MODEL로 매핑
        "max_tokens": 100,
        "messages": [
            {"role": "user", "content": "Hello!"}
        ]
    }
)

Claude Code와의 통합

이 프록시는 Claude Code CLI와 원활하게 작동하도록 설계되었습니다:

# 프록시 시작
python start_proxy.py

# 프록시와 함께 Claude Code 사용
ANTHROPIC_BASE_URL=http://localhost:8082 claude

# 또는 영구적으로 설정
export ANTHROPIC_BASE_URL=http://localhost:8082
claude

테스트

프록시 기능 테스트:

# 포괄적인 테스트 실행
python src/test_claude_to_openai.py

개발

UV 사용

# 의존성 설치
uv sync

# 서버 실행
uv run claude-code-proxy

# 코드 포맷팅
uv run black src/
uv run isort src/

# 타입 체킹
uv run mypy src/

프로젝트 구조

claude-code-proxy/
├── src/
│   ├── main.py                     # 메인 서버
│   ├── test_claude_to_openai.py    # 테스트
│   └── [기타 모듈...]
├── start_proxy.py                  # 시작 스크립트
├── .env.example                    # 설정 템플릿
└── README.md                       # 이 파일

성능

  • 높은 동시성을 위한 Async/await
  • 효율성을 위한 연결 풀링
  • 실시간 응답을 위한 스트리밍 지원
  • 설정 가능한 타임아웃 및 재시도
  • 상세한 로깅을 통한 스마트 에러 처리

라이선스

MIT License

About

Claude Code to OpenAI API Proxy

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 99.7%
  • Dockerfile 0.3%