Claude Code가 OpenAI 호환 API 제공자와 작동하도록 하는 프록시 서버입니다. Claude API 요청을 OpenAI API 호출로 변환하여 Claude Code CLI에서 다양한 LLM 제공자를 사용할 수 있습니다.
- 완전한 Claude API 호환:
/v1/messages엔드포인트 완벽 지원 - 다중 제공자 지원: OpenAI, Azure OpenAI, 로컬 모델 (Ollama) 및 모든 OpenAI 호환 API
- 스마트 모델 매핑: 환경변수를 통한 BIG, MIDDLE, SMALL 모델 설정
- 함수 호출: 완전한 tool use 지원 및 변환
- 스트리밍 응답: 실시간 SSE 스트리밍 지원
- 이미지 지원: Base64 인코딩 이미지 입력
- 커스텀 헤더: API 요청에 대한 커스텀 HTTP 헤더 자동 주입
- 에러 처리: 포괄적인 에러 처리 및 로깅
# UV 사용 (권장)
uv sync
# 또는 pip 사용
pip install -r requirements.txtcp .env.example .env
# .env를 편집하고 API 설정 추가
# 참고: 환경변수는 .env 파일에서 자동으로 로드됩니다# 직접 실행
python start_proxy.py
# 또는 UV 사용
uv run claude-code-proxy
# 또는 docker compose 사용
docker compose up -d# 프록시에 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_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"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"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 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 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
