공식 Anthropic /v1/messages 프로토콜입니다. 필드는 공식 API와 완전히 일치하여 기존 Anthropic SDK 코드를 거의 수정 없이 이전할 수 있습니다.
엔드포인트
POST https://relay.4aicode.com/v1/messages
요청
POST /v1/messages HTTP/1.1
Host: relay.4aicode.com
Authorization: Bearer sk-4ai-xxxxxxxxxxxxxxxx
anthropic-version: 2023-06-01
content-type: application/json
{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"stream": true,
"messages": [
{ "role": "user", "content": "Say hi" }
]
}
필수
| 필드 | 설명 |
|---|---|
model | Claude 모델(Sonnet / Haiku / Opus) 또는 지원 gpt-* 모델 |
max_tokens | 생성할 최대 토큰 수 |
messages | 대화 배열 |
/v1/messages는 model에 해당하는 업스트림으로 라우팅하며 claude-*와 gpt-* 모두 지원합니다. Claude Code 등 Anthropic Messages 프로토콜 클라이언트는 이 엔드포인트로 해당 모델에 접근할 수 있습니다.
자주 쓰는 선택 필드
| 필드 | 설명 |
|---|---|
stream | true로 SSE 활성화 |
system | 시스템 프롬프트 |
temperature | 0–1 |
tools | Function calling |
stop_sequences | 중단 시퀀스 |
스트리밍 응답
stream: true이면 text/event-stream과 공식 API와 동일한 이벤트 순서:
event: message_start
event: content_block_start
event: content_block_delta
event: content_block_stop
event: message_delta
event: message_stop
릴레이는 어느 단계에서도 SSE를 버퍼링하지 않아, 첫 바이트 시간은 직접 연결과 거의 같습니다.
비스트리밍 응답
{
"id": "msg_xxxx",
"type": "message",
"role": "assistant",
"content": [{ "type": "text", "text": "Hi!" }],
"model": "claude-sonnet-4-6",
"stop_reason": "end_turn",
"usage": { "input_tokens": 8, "output_tokens": 3 }
}
usage는 과금에 사용됩니다(할당량 참고).
ChatGPT 모델
Claude Code에서 ChatGPT 모델을 쓰려면 지원 gpt-* 모델로 설정하면 됩니다.
export ANTHROPIC_BASE_URL=https://relay.4aicode.com
export ANTHROPIC_AUTH_TOKEN=sk-4ai-xxxxxxxxxxxxxxxx
export ANTHROPIC_DEFAULT_OPUS_MODEL=gpt-5.6-terra
export ANTHROPIC_DEFAULT_OPUS_MODEL_NAME="4AICode GPT 5.6 Terra"
export ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES=effort,xhigh_effort,thinking,adaptive_thinking,interleaved_thinking
export ANTHROPIC_MODEL=opus
export ANTHROPIC_DEFAULT_HAIKU_MODEL=gpt-5.4-mini
export CLAUDE_CODE_EFFORT_LEVEL=xhigh
claude --effort xhigh
ANTHROPIC_DEFAULT_OPUS_MODEL로 Claude Code가 릴레이에 gpt-5.6-terra를 요청합니다. CLAUDE_CODE_EFFORT_LEVEL=xhigh는 Anthropic output_config.effort를 OpenAI Responses reasoning.effort=xhigh에 매핑합니다.
지원 모델은 /v1/chat/completions와 동일: gpt-6-astra, gpt-6-sol, gpt-6.1-sol, gpt-6.1-terra, gpt-6-luna, gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-5.5, gpt-5.4, gpt-5.4-mini, gpt-5.3-codex.
오류
| HTTP | 의미 |
|---|---|
| 400 | 잘못된 필드(max_tokens 누락, 없는 model 등) |
| 401 | 잘못된 토큰 |
| 403 | 팀 정지 |
| 429 | 속도 제한 또는 할당량 초과 |
| 502 | 업스트림 Claude 불안정; 재시도 |
| 503 | 업스트림 일시 불가; 서비스 쿨다운 및 재시도 |
503 예:
{
"code": "no_account_available",
"message": "all accounts cooling down, retry in 60s"
}
전체 예제 (Python)
from anthropic import Anthropic
client = Anthropic(
base_url="https://relay.4aicode.com",
api_key="sk-4ai-xxxxxxxxxxxxxxxx",
)
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=512,
messages=[{"role": "user", "content": "Introduce yourself in one sentence"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)