연동 가이드
Gateway 개요
Gateway의 요청 처리 원칙, 지원 엔드포인트, 요청 파라미터의 출처, 오류 출처를 설명합니다.
ABTO Gateway는 AI 호출을 받아 라우팅에 따라 OpenAI, Anthropic, Gemini, DeepSeek, Kimi 중 한 제공사로 전달합니다. 이 페이지는 지원 엔드포인트, 요청 파라미터의 출처, 오류 출처처럼 Gateway 전체에 적용되는 규칙을 설명합니다. 받는 필드와 제공사별 차이는 Chat Completions에 있습니다.
요청 처리 원칙
섹션 제목: “요청 처리 원칙”- Gateway는 지원하지 않는 필드를 무시하지 않고
400으로 거절합니다. - 지원하는 필드는 배정된 제공사의 API 형식으로 변환해 전달합니다. 값의 적용 여부는 제공사가 결정하며, 제공사가 거절한 요청은 제공사의 상태코드와 오류 메시지로 돌아옵니다.
- 배정된 제공사에 따라 동작이 달라지는 필드가 있습니다. 어떤 필드가 어떻게 달라지는지는 Chat Completions의 제공사별 주요 차이에서 확인하세요.
지원 엔드포인트
섹션 제목: “지원 엔드포인트”Gateway는 아래 엔드포인트만 받습니다.
| 엔드포인트 | 형식 | 문서 |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | Chat Completions |
GET /v1/models | OpenAI Models | 모델 목록 |
요청 본문이 20MB를 넘으면 413을 반환합니다.
요청마다 보내야 하는 헤더는 레퍼런스에 있습니다.
요청 파라미터의 출처
섹션 제목: “요청 파라미터의 출처”라우팅을 설정하기 전에는 모든 요청이 보낸 값 그대로 OpenAI로 전달되므로 x-abto-key-openai가 필요합니다.
이때 코드가 사용하던 설정이 Origin 옵션으로 자동 등록됩니다.
기능에 라우팅을 설정하면 요청 필드는 아래 세 가지로 나뉩니다.
요청 원본값 사용
섹션 제목: “요청 원본값 사용”| 요청 내용 | 요청 필드 |
|---|---|
| 대화 내용 | user, assistant, tool 메시지 |
| 출력 길이 제한 | max_completion_tokens, max_tokens |
| 응답 형식 | response_format |
| 도구 호출 | tools, tool_choice, functions, function_call |
라우팅과 무관하게 요청에 보낸 값을 그대로 사용합니다.
옵션에 있으면 교체
섹션 제목: “옵션에 있으면 교체”| 요청 내용 | 요청 필드 |
|---|---|
| 시스템 프롬프트 | system, developer 메시지 |
옵션에 시스템 프롬프트가 있으면 보낸 메시지 대신 그 값을 사용하고, 비어 있으면 보낸 메시지를 그대로 사용합니다.
옵션 값으로 교체
섹션 제목: “옵션 값으로 교체”| 요청 내용 | 요청 필드 |
|---|---|
| 모델 | model |
| 생성 파라미터 | temperature, top_p, seed, reasoning_effort 등 |
배정된 옵션이 이 값들을 정하고, 요청에 보낸 값은 사용하지 않습니다. 제공사도 옵션이 정합니다. 옵션에 설정하지 않은 파라미터는 제공사에 전달되지 않고, 제공사 기본값이 적용됩니다. 옵션에는 이 표에 없는 제공사 전용 파라미터도 존재합니다. 설정할 수 있는 목록은 대시보드가 제공사와 모델별로 보여줍니다.
모델 목록
섹션 제목: “모델 목록”GET /v1/models는 ABTO가 지원하는 모델을 OpenAI Models 형식으로 반환합니다. Chat Completions와 같은 API 키로 인증하며, OpenAI SDK의 models.list()로 그대로 읽을 수 있습니다.
{ "object": "list", "data": [ { "id": "gpt-5.4", "object": "model", "owned_by": "openai", "base_model": "gpt-5.4", "supported_parameters": [ { "name": "temperature", "type": "number", "range": [0, 2] }, { "name": "reasoning_effort", "type": "string", "allowed_values": ["none", "low", "medium", "high", "xhigh"], "default": "none" } ], "constraints": [ { "type": "depends_on", "param": "temperature", "ref_param": "reasoning_effort", "ref_value": "none" } ] } ]}| 필드 | 뜻 |
|---|---|
id | 모델 이름. 요청의 model에 그대로 사용합니다 |
owned_by | 제공사 (openai, anthropic, gemini, deepseek, kimi) |
base_model | 모델 계열의 이름. id와 같으면 최신 이름이고, 다르면 그 계열의 날짜 스냅샷입니다 |
supported_parameters | 이 모델이 받는 생성 파라미터와 값 범위 |
max_output_tokens | 모델이 낼 수 있는 출력 토큰 상한. 상한이 필수가 아닌 제공사는 이 필드가 없습니다 |
constraints | 파라미터 사이의 제약. mutually_exclusive는 함께 보낼 수 없고, depends_on은 ref_param이 ref_value일 때만 보낼 수 있습니다 |
- 라우팅 설정 전: 요청이 OpenAI로 전달되므로
owned_by가openai인 이름만model에 보낼 수 있습니다. - 라우팅 설정 후:
base_model이id와 같은 정본 모델만 대시보드 옵션으로 고를 수 있습니다. 날짜 스냅샷은 옵션 편집기에 나타나지 않습니다. - 비용: 제공사가 응답한 모델 이름의 단가를 우선 사용하고, 응답에 모델 이름이 없으면 배정된 모델의 단가를 사용합니다. 해당 이름의 단가가 카탈로그에 없으면 비용 없이 기록됩니다.
Origin 옵션
섹션 제목: “Origin 옵션”라우팅을 설정하기 전에는 코드가 정한 제공사, 모델, 생성 파라미터, 시스템 프롬프트로 요청이 처리됩니다. Gateway는 그 구성을 기능의 Origin 옵션으로 자동 등록합니다. 별도 설정은 필요 없습니다.
Origin 옵션은 비교의 기준선입니다. 대시보드에서 새 옵션을 만들어 라우팅을 나누면, 기존 코드 설정인 Origin과 성과를 견줍니다. 구성은 코드가 정하므로 대시보드에서 편집할 수 없고, 이름만 바꿀 수 있습니다.
코드에서 모델이나 시스템 프롬프트, 생성 파라미터를 바꾸면 Gateway가 바뀐 구성을 새 Origin 옵션으로 등록합니다. 이전 Origin 옵션은 지난 성과를 볼 수 있게 그대로 남고, 라우팅에서 Origin이 받던 비율은 새 Origin 옵션이 이어받습니다.
오류 출처
섹션 제목: “오류 출처”오류 응답의 x-abto-error-source 헤더로 요청을 거절한 곳을 구분합니다.
| 거절한 곳 | 상태코드 | x-abto-error-source | 본문 |
|---|---|---|---|
| 제공사 | 제공사 반환 상태코드 | provider | 제공사의 message, type, code |
| 제공사 연결 실패 | 502, 504, 499 | transport | type이 transport_error입니다 |
| ABTO Gateway | 400, 401, 413, 500 | gateway | {"error":{"message":"…"}} |
ABTO Gateway가 만든 오류 본문에는 type, param, code가 없습니다. 제공사 오류는 OpenAI 오류 형식에 제공사 값을 그대로 담습니다.
Gateway가 요청 본문을 거절한 응답의 message에는 거절 이유가 담깁니다.
| 예 | message |
|---|---|
| 지원하지 않는 필드 | unsupported field "logprobs" |
| 지원하지 않는 값 | n=2 is not supported: the gateway serves a single choice |
| 함께 쓸 수 없는 필드 | response_format json_object cannot be combined with tools |
| JSON 파싱 실패, 타입 불일치 | cannot parse request body |
지원 엔드포인트가 받은 응답에는 모두 x-abto-request-id가 포함됩니다.
요청 화면에는 배정을 마치고 처리에 들어간 요청이 기록됩니다. 그 응답에는 x-abto-attempt와 x-abto-provider가 함께 실리므로, 이 헤더가 없는 오류는 요청 화면에 기록이 남지 않습니다.