OpenAI 결정 API 대 응답 API

Decisions API 대 Responses API: 양방향으로 라우팅되는 단일 티켓, 각 API의 반환 값, 계산 방식을 포함한 입력 전용 대 출력 청구, 그리고 기능 매트릭스.

INEZA Felin-Michel

INEZA Felin-Michel

10 October 2026

OpenAI 결정 API 대 응답 API

Apidog 엔터프라이즈

온프레미스 배포

SSO & RBAC

SOC 2 준수

Apidog Enterprise 살펴보기

Decisions API는 분류, 라우팅, 점수 매기기 또는 게이팅 작업에서 확률 값을 반환받고 싶을 때 사용하세요. 이 API는 GPT-6 Luna에서 실행되며, 텍스트 대신 유형이 지정된 답변을 반환하고, 출력, 캐시 읽기 또는 캐시 쓰기 요금 없이 1백만 토큰당 $0.10의 입력 비용만 청구하며, OpenAI는 Responses API보다 약 10배 빠르다고 말합니다. Responses API는 생성된 텍스트, 자체 스키마의 JSON, 도구 호출, 스트리밍 또는 대화 상태가 필요할 때 사용하세요. Decisions는 2026년 10월 6일에 공개 베타를 시작했습니다.

이 게시물에서는 하나의 작업(지원 티켓 라우팅)을 두 엔드포인트 모두에서 실행하고, 각 엔드포인트가 반환하는 내용을 비교하며, 비용을 한 번 계산한 다음, 마이그레이션 참고 사항과 하나의 Apidog 프로젝트에서 두 가지를 모두 테스트하는 방법으로 마무리합니다. 엔드포인트의 구조에 대한 자세한 내용은 Decisions API 핵심 가이드를 참조하고, 기본 정보는 Responses API 가이드를 참조하세요.

버튼

기능 매트릭스

Decisions API Responses API (GPT-6 Luna)
엔드포인트 POST /v1/decisions POST /v1/responses
출력 엔드포인트에서 제공하는 확률 및 신뢰도를 포함한 predicate, choice, score 답변 (및 refusal) 생성된 텍스트, 또는 text.format을 통해 스키마를 따르는 JSON
자체 JSON 스키마 아니요 예, strict: true가 있는 json_schema
도구 / 함수 호출 아니요 예
스트리밍 아니요 예
대화 상태 아니요 예
프롬프트 캐싱 캐시 요금 없음; OpenAI 포럼에 따르면 아직 캐싱 없음 예, 캐시된 입력은 1백만 토큰당 $0.01
배치 문서화되지 않음 예, 표준의 50%
이미지 예, base64 데이터 URL; 참조 문서에는 공개 HTTP(S) URL도 나열되어 있으며, 요청당 최대 128개 예, Luna는 텍스트와 이미지를 처리함
연쇄적 (종속적) 결정 별도의 요청 하나의 생성된 응답이 종속 필드를 포함할 수 있음
1백만 토큰당 가격, 짧은 컨텍스트 입력 $0.10; 출력 요금 없음 입력 $0.10, 추론 토큰을 포함한 출력 $0.50
ZDR / HIPAA 적격 고객에게 지원; 미국 및 EU 내 지역 처리 이 비교에는 포함되지 않음; OpenAI의 데이터 제어 페이지 참조

모든 행은 OpenAI의 Decisions 가이드, API 참조 및 가격 책정 페이지에서 가져왔습니다.

동일한 작업 두 가지 방법: 지원 티켓 라우팅

티켓 내용은 "주문에 대해 두 번 청구되었습니다." 입니다. 부서는 청구, 기술, 배송 및 기타입니다. 다음은 Structured Outputs를 사용한 Responses 요청으로, 대부분의 팀이 오늘날 이 방법을 사용합니다:

curl https://api.openai.com/v1/responses \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-luna",
    "input": "Route this support ticket to one department.\n\nTicket: I was charged twice for my order.",
    "text": {
      "format": {
        "type": "json_schema",
        "name": "ticket_route",
        "strict": true,
        "schema": {
          "type": "object",
          "properties": {
            "department": {
              "type": "string",
              "enum": ["billing", "technical", "shipping", "other"]
            }
          },
          "required": ["department"],
          "additionalProperties": false
        }
      }
    }
  }'

동일한 티켓에 대한 Decisions 요청은 다음과 같습니다:

curl https://api.openai.com/v1/decisions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-luna",
    "input": "I was charged twice for my order.",
    "questions": [
      {
        "type": "choice",
        "name": "department",
        "instructions": "Which department should handle this ticket?",
        "choices": [
          {"value": "billing", "description": "Charges, refunds, invoices"},
          {"value": "technical", "description": "Bugs, errors, login problems"},
          {"value": "shipping", "description": "Delivery, tracking, returns in transit"},
          {"value": "other", "description": "Anything else"}
        ]
      }
    ]
  }'

Responses 본문은 프롬프트 내부에 질문을, 스키마 내부에 허용되는 답변을 담고 있습니다. Decisions 본문은 원본 티켓을 input으로, 질문을 2에서 255개의 고유 값을 가진 choice로 담고 있습니다. 이 엔드포인트에는 temperature, reasoning, stream 또는 text 필드가 없습니다.

각각 반환하는 것

Responses는 생성된 텍스트를 반환합니다. 엄격한 스키마를 사용하면 해당 텍스트는 유효한 JSON이므로, 파싱 후 레이블을 얻을 수 있습니다:

{"department": "billing"}

신뢰도(confidence) 숫자를 원한다면 스키마에 필드를 추가하고 모델에게 작성하도록 요청합니다. 반환되는 것은 확률처럼 보이는 생성된 텍스트이지 측정된 값이 아닙니다.

Decisions는 레이블과 함께 그 뒤에 있는 분포를 반환합니다. 아래 숫자는 이 정확한 입력에 대한 OpenAI의 가이드 예시입니다:

{
  "model": "gpt-6-luna",
  "answers": [
    {
      "type": "choice",
      "name": "department",
      "choice": "billing",
      "probabilities": [
        {"value": "billing", "probability": 0.95},
        {"value": "technical", "probability": 0.02},
        {"value": "shipping", "probability": 0.01},
        {"value": "other", "probability": 0.02}
      ],
      "confidence": 0.93
    }
  ]
}

usage 객체는 answers 뒤에 옵니다(비용 섹션에 표시). 파서나 정규식은 필요 없습니다. confidence 필드는 임계값을 설정하는 데 사용되며, OpenAI의 지침은 정확도나 보정 수치가 게시되지 않으므로 자체적으로 레이블링된 예시를 통해 임계값을 설정하는 것입니다. 거부(refusal)는 {"type": "refusal", "name": "department"}로 도착합니다. 동일한 요청의 다른 질문은 여전히 답변을 받습니다.

비용: 한 번의 계산

두 엔드포인트 모두 짧은 컨텍스트(최대 272K 입력 토큰)에서 Luna 입력에 대해 1백만 토큰당 $0.10를 청구합니다. 출력에 따라 달라집니다. 1,000,000 요청에서 500 토큰짜리 티켓을 가정해 봅시다:

따라서 레이블만으로도 $50 대 $70의 분명한 차이가 있습니다. 더 큰 차이는 추론 라인이며, 솔직히 말하면 Decisions는 출력 토큰을 전혀 청구하지 않습니다. OpenAI의 참조 예시에서는 두 카운터 모두 0으로 표시됩니다:

"usage": {
  "input_tokens": 42,
  "input_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0},
  "output_tokens": 0,
  "output_tokens_details": {"reasoning_tokens": 0},
  "total_tokens": 42
}

두 가지 주의사항. Responses에는 Decisions에 없는 지렛대가 있습니다: reasoning.effort는 Luna에서 none까지 내려가고, 프롬프트 캐싱은 반복되는 입력을 1백만 토큰당 $0.01로 낮추며, Batch API는 표준 요금을 절반으로 줄입니다. Decisions에 대해서는 이러한 기능 중 어느 것도 문서화되어 있지 않습니다. 그리고 긴 컨텍스트 입력(272K 토큰 이상)은 두 API 모두에서 입력 요율을 두 배로 늘리므로, 긴 Decisions 요청은 1백만 입력 토큰당 $0.20입니다(가격 책정 페이지의 승수에서 파생); 지역 처리는 10%를 추가합니다.

속도

OpenAI는 Decisions API가 Responses API보다 약 10배 빠르다고 말합니다. 절대적인 지연 시간은 게시되지 않았으므로, 이 주장을 예산보다는 방향으로 받아들이고 중요한 경로를 이동하기 전에 자신만의 p50 및 p95를 측정하세요. OpenAI 포럼의 한 개발자는 느린 연결에서 이미지 입력 결정이 약 0.8초 만에 반환되었다고 보고했습니다. 이것은 일화일 뿐 벤치마크는 아닙니다. 방향은 그럴듯합니다: Responses는 추론을 포함한 토큰을 생성하며, 마지막 토큰을 기다려야 합니다.

결정 규칙

출력이 다음 중 하나일 때 Decisions를 선택하세요:

다음 중 하나라도 해당할 때 Responses를 선택하세요:

많은 파이프라인은 두 가지 모두를 원합니다: 분류 및 게이팅에는 Decisions를, 답변 작성에는 Responses를 사용합니다.

Responses에서 Decisions로 분류기 마이그레이션

엄격한 enum 스키마로 티켓을 이미 라우팅하고 있다면, 마이그레이션은 간단합니다:

  1. 동일한 input을 유지하되, 원본 티켓으로 되돌리고 질문은 프롬프트 밖으로 이동합니다.
  2. 질문을 questions에 choice로 넣고, enum 값을 choices[].value로, 한 줄 설명을 각 description으로 추가합니다. 값은 문자열 또는 부울일 수 있으며, true와 "true"는 다릅니다.
  3. 파서를 삭제합니다. answers[0].choice와 answers[0].confidence를 읽습니다. 답변은 요청한 순서대로 도착하며 설정한 name을 에코합니다. 그런 다음 레이블이 지정된 샘플에서 임계값을 설정합니다.
  4. 입력 경로를 확인합니다. Decisions는 사용자 메시지만 허용합니다: 시스템 또는 어시스턴트 역할, 함수 호출, 파일, file_id는 없습니다. 시스템 프롬프트 규칙은 instructions 또는 선택 항목 설명에 포함시킵니다. 이미지는 base64 데이터 URL로 입력됩니다. 참조 문서에는 공개 HTTP(S) URL도 나열되어 있으므로 호스팅된 이미지를 먼저 테스트합니다.
  5. 체인을 분할합니다. "분류 후 청구라면 환불 자격 결정"은 두 개의 요청이 됩니다.

하나의 Apidog 프로젝트에서 두 가지 모두 테스트

결정하는 가장 깔끔한 방법은 동일한 레이블이 지정된 티켓에 대해 두 요청을 모두 실행하고 비교하는 것입니다. Apidog에서 키를 환경 변수로 한 번 저장하고, 두 저장된 요청의 Authorization: Bearer 헤더에 {{OPENAI_API_KEY}}를 참조하여 리터럴 키가 저장된 본문에 포함되지 않도록 합니다.

두 요청에 동일한 어설션(assertion)을 부여합니다: 부서는 billing과 같아야 합니다. Decisions 요청에서는 $.answers[0].choice에 대한 JSONPath 어설션이며, $.answers[0].confidence가 0.8보다 크고 $.usage.output_tokens가 0과 같아야 합니다. Responses 요청에서는 레이블이 생성된 텍스트 안에 있으므로, 짧은 후처리 스크립트가 이를 어설션이 확인하는 변수로 파싱합니다. 그런 다음 두 응답의 usage를 비교합니다: Decisions는 출력 및 추론 토큰이 0이라고 보고하지만, Responses는 그렇지 않습니다.

이 쌍을 티켓 텍스트와 예상 부서의 CSV 파일을 통한 데이터 기반 테스트 시나리오로 전환하면, 각 엔드포인트가 신뢰도 임계값 이상으로 올바르게 라우팅하는 티켓 수를 보여줍니다. 라우터가 먼저 구축될 수 있도록 answers 배열을 모의(mock)하고, 조건부 모의 응답처럼, Apidog CLI로 CI에서 시나리오를 실행하여 문구 또는 모델 별칭 변경으로 인해 티켓이 잘못 라우팅되는 대신 테스트가 실패하도록 합니다. 더 많은 어설션 패턴은 LLM 애플리케이션 테스트를 참조하세요.

FAQ

Responses API도 Decisions처럼 확률을 반환할 수 있나요? 측정된 값으로는 안 됩니다. JSON 스키마의 confidence 필드는 모델이 작성한 숫자, 즉 생성된 텍스트를 제공합니다. Decisions는 엔드포인트 자체에서 제공한 옵션에 대한 확률을 반환합니다.

Decisions에서 GPT-6 Luna 외 다른 모델을 사용할 수 있나요? 아니요. 가이드에 따르면 gpt-6-luna가 현재 사용 가능한 유일한 모델입니다. GPT-6 Luna 개요를 참조하세요.

Decisions는 TypeSafe의 Jev와 어떻게 다른가요? 둘 다 확률을 포함한 유형이 지정된 답변을 반환하고 입력만 비용을 청구합니다. 가격, 입력 및 응답 형태가 다릅니다. Decisions API vs Jev를 참조하세요.

Decisions API는 무료인가요? 아니요. 1백만 입력 토큰당 $0.10가 청구되며, 문서화된 무료 Decisions 계층은 없습니다. Luna 자체에 대한 무료 경로는 GPT-6 Luna를 무료로 사용하는 방법을 참조하세요.

다음 단계

오늘날 Responses를 통해 실행하는 분류기 중 하나를 가져와 choice 질문으로 재구성한 다음, Apidog에서 동일한 어설션으로 50개의 레이블이 지정된 티켓에 대해 둘 다 실행해 보세요. 신뢰도 임계값이 유지되고 사용량이 0개의 출력 토큰을 보여준다면, 답을 얻은 것입니다. Apidog를 다운로드하고, Decisions API 사용 방법에 따라 첫 번째 호출과 전체 테스트 연습을 진행하세요.

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요