연동 가이드
Responses
POST /v1/responses 에서 Gateway가 받는 필드와 제공사별 차이를 설명합니다.
POST /v1/responses는 OpenAI Responses 형식으로 요청을 받습니다.
미지원 필드와 표에 없는 필드는 Gateway가 400으로 거절합니다.
“제공사별 차이”가 비어 있는 필드는 OpenAI, Anthropic, Gemini, DeepSeek, Kimi 중 어디로 배정되어도 동작이 같습니다. Vertex AI로 부르는 Gemini는 이 페이지의 Gemini와 같게 동작하며, 추론 항목의 format만 google-vertex-v1입니다.
공통 규칙과 오류 출처는 Gateway 개요에 있습니다. Chat Completions와 이름이 같은 필드는 Chat Completions와 같은 규칙을 따릅니다.
대화 상태
섹션 제목: “대화 상태”Gateway는 응답을 저장하지 않습니다.
OpenAI로는 항상 store: false로 보내며, 저장된 응답이나 대화를 가리키는 previous_response_id, conversation, item_reference는 받지 않습니다.
대화를 이어갈 때는 응답의 output에 있는 항목을 다음 요청의 input에 그대로 이어 붙입니다.
응답의 id는 abto-로 시작하는 Gateway 요청 ID이며 x-abto-request-id 헤더와 같습니다.
제공사별 주요 차이
섹션 제목: “제공사별 주요 차이”- OpenAI로 배정되면 Responses 형식 그대로 보내고, 다른 제공사로 배정되면 그 제공사의 API 형식으로 바꿔 보냅니다.
instructions는 Anthropic과 Gemini에서 시스템 프롬프트 자리에 다른system,developer메시지와 이어 붙여 보냅니다. DeepSeek과 Kimi에는 맨 앞system메시지로 보냅니다.reasoning.summary는 OpenAI와 Gemini만 반영합니다. Gemini는 요약의 길이를 고르지 않으므로concise와detailed도 기본 요약을 반환합니다.- 다른 제공사가 만든 응답 항목에는 Gateway가 OpenAI 형식의
id(msg_,fc_,rs_로 시작)를 붙입니다. 대화 중간에 OpenAI로 배정되어도 이 항목을 그대로 보낼 수 있습니다. - Anthropic은 최대 토큰이 필수입니다.
max_output_tokens를 생략하면 그 모델의 출력 상한을 넣습니다.
요청 필드
섹션 제목: “요청 필드”입력과 메시지
섹션 제목: “입력과 메시지”| 필드 | 지원 | 제공사별 차이 |
|---|---|---|
model | 지원 | |
instructions | 지원 | Anthropic, Gemini: 시스템 프롬프트에 이어 붙여 보냅니다 |
input (문자열) | 지원 | |
input[] message (user, assistant, system, developer) | 지원 | Anthropic, Gemini: system과 developer를 이어 붙여 맨 앞 하나로 보냅니다 |
input[].content[] input_text | 지원 (user, system, developer 메시지) | |
input[].content[] output_text | 지원 (assistant 메시지) | |
input[].content[] input_image | 지원 (base64 data URL 또는 http(s) URL) | Chat Completions의 image_url과 같습니다 |
input[].content[] input_file | 지원 (base64 PDF data URL만) | Chat Completions의 file과 같습니다 |
input[].content[].detail | 지원 (auto, low, high, original) | Gemini: 이미지의 low, high만 반영합니다Anthropic: 반영되지 않습니다 |
input[].id | 지원 | OpenAI 밖의 제공사: 반영되지 않습니다 |
input[].phase (assistant) | 지원 | OpenAI 밖의 제공사: 반영되지 않습니다 |
- 시스템 프롬프트:
instructions도system,developer메시지와 같은 시스템 프롬프트입니다. 노드에 시스템 프롬프트 사용을 허용한 경우, 시스템 프롬프트를 지정한 옵션에 배정된 요청은 옵션의 시스템 프롬프트를 사용합니다. - 미디어: 이미지와 PDF는
user메시지에서만 받습니다. 받는 형식은 Chat Completions와 같으며,detail의original은input_image에서만 받습니다. - 응답 항목 되돌리기: 응답의
output항목을 그대로 보낼 수 있습니다.status는 받지만 제공사에 보내지 않고,output_text의annotations와logprobs는 빈 배열만 받습니다.
출력 길이와 스트리밍
섹션 제목: “출력 길이와 스트리밍”| 필드 | 지원 | 제공사별 차이 |
|---|---|---|
max_output_tokens | 지원 | Anthropic: 생략하면 모델의 출력 상한 |
stream | 스트리밍 미지원 (false만) | |
store | 응답 저장 미지원 (false만) | |
background | 백그라운드 실행 미지원 (false만) | |
truncation | 자동 줄임 미지원 (disabled만) |
생성 파라미터
섹션 제목: “생성 파라미터”| 필드 | 지원 | 제공사별 차이 |
|---|---|---|
temperature | 지원 | Chat Completions와 같습니다 |
top_p | 지원 | Chat Completions와 같습니다 |
reasoning.effort | 지원 | DeepSeek, Kimi: 받는 값이 OpenAI와 다르므로 대시보드에서 확인하세요 |
text.verbosity | 지원 | DeepSeek, Kimi: 반영되지 않습니다 |
reasoning.summary | 지원 (auto, concise, detailed) | Gemini: 길이를 고르지 않습니다 Anthropic, DeepSeek, Kimi: 반영되지 않습니다 |
- 라우팅을 설정한 뒤: 생성 파라미터는 배정된 옵션의 값을 사용합니다. 규칙은 Chat Completions와 같습니다.
- 옵션과 요청 형식: OpenAI 옵션은 Chat Completions와 Responses 요청에 함께 쓰입니다. Responses 요청에는
reasoning_effort를reasoning.effort로,verbosity를text.verbosity로 바꿔 보내고seed,frequency_penalty,presence_penalty는 보내지 않습니다. Chat Completions 요청에는 반대로 바꿔 보내며,reasoning.effort의max는xhigh로 보냅니다. 대시보드는 노드에 마지막으로 들어온 요청 형식의 이름으로 파라미터를 표시합니다.
출력 형식
섹션 제목: “출력 형식”| 필드 | 지원 | 제공사별 차이 |
|---|---|---|
text.format: text | 지원 | |
text.format: json_schema | 지원 | Chat Completions의 json_schema와 같습니다 |
text.format: json_object | 지원 | Chat Completions의 json_object와 같습니다 |
- 형식:
text.format은type,name,description,strict,schema를 한 객체에 담습니다. 그 밖의 키는 제공사에 전달되지 않습니다. - 함께 보내는 규칙:
json_object는tools와 함께 보낼 수 없습니다.
도구 호출
섹션 제목: “도구 호출”| 필드 | 지원 | 제공사별 차이 |
|---|---|---|
tools | 지원 (type: function만) | |
tools[].strict | 지원 | 생략하면 OpenAI는 strict를 시도하고, 다른 제공사는 strict 없이 호출합니다 Gemini: 하나라도 true면 모든 도구를 검증합니다 |
tool_choice | 지원 (none, auto, required, 함수 지정) | |
tool_choice: allowed_tools | 지원 (mode는 auto, required만) | Anthropic, DeepSeek, Kimi: 허용 밖 도구를 빼고 보냅니다 |
parallel_tool_calls | 병렬 호출 끄기 미지원 (true만) | |
input[] function_call | 지원 | |
input[] function_call_output | 지원 (문자열 또는 input_text 파트) |
- 결과 되돌리기:
function_call의call_id와function_call_output의call_id는 응답에서 받은 값을 그대로 보냅니다.arguments는 JSON object 문자열이어야 합니다.
| 필드 | 지원 | 제공사별 차이 |
|---|---|---|
input[] reasoning | 지원 | 만든 제공사와 다른 제공사로 배정되면 보내지 않습니다 |
include: ["reasoning.encrypted_content"] | 지원 |
- 응답에 오는 값: 추론하는 모델은
output에reasoning항목을 반환합니다. OpenAI가 만든 항목은encrypted_content에 제공사만 읽을 수 있는 값을 담고,reasoning.summary를 요청했으면summary에 요약을 담습니다. - 다른 제공사의 추론: Anthropic, Gemini, DeepSeek, Kimi가 만든 항목에는
format이 붙어 추론을 만든 제공사를 나타내며, Anthropic과 Gemini의 서명은signature에 담깁니다. OpenAI가 만든 항목에는format이 없습니다. - 다음 턴으로 잇기:
reasoning항목을 고치지 않고 다음 요청의input에 그대로 보냅니다. Gateway는 추론을 만든 제공사로 배정된 요청에만 그 항목을 보냅니다. - 같은 대화는 같은 옵션으로: 여러 턴을 이어갈 때는 모든 요청에 같은
x-abto-device-id를 보냅니다. 값이 없으면 요청마다 옵션이 따로 정해지며, 제공사가 바뀐 턴부터는 이전 추론을 사용하지 않고 다시 추론합니다. - OpenAI로 직접 보낼 때: OpenAI는
format과signature가 붙은 항목을 거절합니다. Gateway를 거치지 않고 OpenAI로 직접 보내는 대화에 다른 제공사가 만든reasoning항목이 있으면 그 항목을 빼고 보내야 합니다.
응답은 OpenAI Responses 형식입니다. Chat Completions와 다른 점은 다음과 같습니다.
- 종료 상태:
status는completed또는incomplete입니다.incomplete면incomplete_details.reason이max_output_tokens(출력 상한이나 컨텍스트 길이)와content_filter(차단이나 거절) 중 하나입니다. - 요청 값:
tools,tool_choice,max_output_tokens,text.format,instructions는 요청에 보낸 값을 돌려줍니다. 옵션이 정하는temperature와top_p는null이고reasoning은 포함하지 않습니다. 배정된 제공사는x-abto-provider헤더, 모델은model에서 확인하세요. - 고정 값:
store는false,parallel_tool_calls는true,truncation은disabled입니다.
미지원 필드
섹션 제목: “미지원 필드”아래 필드를 보내면 Gateway가 400으로 거절합니다. 표에 없는 필드도 같습니다.
| 구분 | 필드 |
|---|---|
| 저장된 상태 | previous_response_id, conversation, prompt, context_management, input[] item_reference |
| 제공사 내장 도구 | tools의 web_search 등 function 밖의 도구, 내장 도구 항목(web_search_call 등), max_tool_calls |
| Responses에 없는 생성 파라미터 | seed, frequency_penalty, presence_penalty, reasoning_effort, verbosity |
| 제공사 전용 설정 | reasoning.mode, reasoning.context, service_tier |
| 파일 참조 | input_image.file_id, input_file.file_id, input_file.file_url, input_file.file_data의 http(s) URL |
| 그 밖 | include의 reasoning.encrypted_content 밖 값, refusal 파트, top_logprobs, stream_options, metadata, user, safety_identifier, prompt_cache_key, prompt_cache_retention |
제공사 API 참조
섹션 제목: “제공사 API 참조”Gateway는 OpenAI로 배정된 요청을 Responses API로 보냅니다. 다른 제공사의 API 형식은 Chat Completions와 같습니다.