채팅 (claude·gpt 티어) — 프런티어 LLM
claude·gpt 티어는 게이트웨이 뒤에서 Claude·GPT 계열 프런티어 채팅 모델을
OpenAI 호환 인터페이스로 노출합니다. infer(로컬 LLM)와 동일하게 베이스 URL만
바꾸면 기존 OpenAI 클라이언트·SDK를 그대로 사용할 수 있습니다.
티어는 경로가 결정합니다
섹션 제목: “티어는 경로가 결정합니다”어느 계열을 쓸지는 엔드포인트 경로로 고릅니다 — 요청 바디의 model 필드가
아니라 경로 접두사가 백엔드 티어를 결정합니다.
| 티어 | 경로 접두사 | 계열 |
|---|---|---|
claude | /v1/claude/ | Claude(Anthropic) 계열 채팅 모델 |
gpt | /v1/gpt/ | GPT(OpenAI) 계열 채팅 모델 |
두 티어 모두 게이트웨이의 엔드포인트 경로 규칙을 따릅니다 —
접두사 뒤 경로가 백엔드로 그대로 전달됩니다. 따라서 OpenAI의
/v1/chat/completions는 각각 다음 경로로 노출됩니다:
POST https://api.danny22.com/v1/claude/v1/chat/completionsPOST https://api.danny22.com/v1/gpt/v1/chat/completions모든 요청은 인증이 필요합니다(Authorization: Bearer <token>).
서버-대-서버·스크립트 호출에는 ak_ API 키를 권장합니다.
model 필드
섹션 제목: “model 필드”model은 선택입니다. 티어(계열)는 위 경로가 이미 고정하므로, model로 다른
티어를 호출할 수는 없습니다 — GPT 계열을 쓰려면 /v1/gpt/로, Claude 계열을 쓰려면
/v1/claude/로 보내세요.
claude티어:sonnet·opus·haiku또는claude-3-5-sonnet같은 이름을 넣으면 해당 계열 내에서 정규화됩니다. 생략하면 티어 기본값이 쓰입니다.gpt티어:gpt-4o·gpt-4o-mini·o1·o3같은 이름을 사용합니다.
매핑에 없는 model 문자열도 거부하지 않고 그대로 통과시킵니다(엄격 검증은 진짜 malformed 요청에만 적용). 경로와 다른 계열의 model 이름을 넣어도 티어는 경로대로 유지됩니다.
채팅 완성
섹션 제목: “채팅 완성”POST /v1/<tier>/v1/chat/completions
섹션 제목: “POST /v1/<tier>/v1/chat/completions”OpenAI Chat Completions와 동일한 요청/응답 스키마입니다.
요청 예시 (claude 티어)
curl -s https://api.danny22.com/v1/claude/v1/chat/completions \ -H "Authorization: Bearer $DANNY22_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "sonnet", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "한 문장으로 인사해줘." } ] }'요청 예시 (gpt 티어)
curl -s https://api.danny22.com/v1/gpt/v1/chat/completions \ -H "Authorization: Bearer $DANNY22_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o", "messages": [{ "role": "user", "content": "한 문장으로 인사해줘." }] }'응답 예시
{ "id": "chatcmpl-...", "object": "chat.completion", "model": "sonnet", "choices": [ { "index": 0, "finish_reason": "stop", "message": { "role": "assistant", "content": "안녕하세요! 만나서 반갑습니다." } } ]}스트리밍
섹션 제목: “스트리밍”"stream": true를 주면 응답이 Server-Sent Events(SSE)로 토큰 단위 스트리밍됩니다.
각 이벤트의 choices[].delta.content를 이어 붙여 출력을 구성하고, 종료는 data: [DONE] 라인으로 표시됩니다.
curl -N -s https://api.danny22.com/v1/gpt/v1/chat/completions \ -H "Authorization: Bearer $DANNY22_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o", "messages": [{ "role": "user", "content": "긴 이야기를 들려줘." }], "stream": true }'OpenAI SDK로 호출
섹션 제목: “OpenAI SDK로 호출”OpenAI 호환이므로 공식 SDK의 베이스 URL을 원하는 티어의 .../v1/<tier>/v1로,
API 키를 발급받은 ak_ 키로 설정하면 그대로 동작합니다.
from openai import OpenAI
client = OpenAI( base_url="https://api.danny22.com/v1/claude/v1", # gpt 티어면 .../v1/gpt/v1 api_key="ak_xxxxxxxx.yyyyyyyyyyyyyyyy", # platform 콘솔에서 발급)
resp = client.chat.completions.create( model="sonnet", messages=[{"role": "user", "content": "안녕!"}],)print(resp.choices[0].message.content)SDK는 베이스 URL 뒤에
/chat/completions를 이어 붙입니다. 따라서 베이스 URL을.../v1/<tier>/v1까지로 지정해야 최종 경로가.../v1/<tier>/v1/chat/completions로 맞습니다.