콘텐츠로 이동
ABTO 가이드
앱토(ABTO) 홈
무료로 시작

연동 가이드

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

Gateway는 OpenAI로 배정된 요청을 Responses API로 보냅니다. 다른 제공사의 API 형식은 Chat Completions와 같습니다.