OpenAI Decisions API는 GPT-6 Luna에서 실행되는 POST /v1/decisions 엔드포인트로, 텍스트 또는 이미지와 질문 목록을 받아 산문 대신 유형화된 답변을 반환합니다: `predicate` 확률, 옵션별 확률이 있는 `choice`, 또는 순서가 있는 레벨에 대한 `score`입니다. 입력 비용은 100만 토큰당 0.10달러이며, 출력, 캐시 읽기 또는 캐시 쓰기 요금은 없습니다. 이 엔드포인트는 2026년 10월 6일부터 공개 베타 상태였으며, OpenAI는 GA(General Availability)가 "몇 주 내에" 예상된다고 밝혔습니다.
이 게시물은 엔드포인트가 반환하는 것, 비용, Structured Outputs 및 함수 호출과의 관계, 그리고 테스트 방법을 다룹니다. curl, Python, JavaScript를 이용한 사용법은 다음으로 OpenAI Decisions API 사용 방법을 읽어보세요. 이미 Responses API를 사용 중이라면, Decisions vs Responses 비교에서 동일한 작업을 두 가지 방식으로 수행하는 방법을 보여줍니다. 전체적으로, 우리는 Apidog를 사용하여 키를 저장하고, 요청을 저장하며, `answers` 배열에 대해 어설션을 수행하여 모델 동작 변경 시 티켓이 잘못 라우팅되는 대신 테스트가 실패하도록 할 것입니다.
Decisions 요청 및 응답의 구조
세 가지 요청 필드, 세 가지 응답 필드. `id` 없음, 생성된 텍스트 없음, 파싱할 것 없음.
| 부분 | 필드 | 내용 |
|---|---|---|
| 요청 | model |
현재 사용 가능한 유일한 모델인 gpt-6-luna |
| 요청 | input |
문자열 또는 input_text와 input_image 부분을 혼합한 사용자 메시지 배열 |
| 요청 | questions |
각 질문이 type, 필수 instructions, 그리고 선택적 name을 포함하는 질문 배열 |
| 요청 | safety_identifier |
선택 사항인 최종 사용자 ID, 최대 128자 |
| 응답 | model |
gpt-6-luna를 에코(반복)함 |
| 응답 | answers |
요청한 순서대로 각 질문당 하나의 항목, type과 name 포함 |
| 응답 | usage |
input_tokens, input_tokens_details, output_tokens, output_tokens_details, total_tokens |
누락된 사항에 주목하십시오: `temperature`, `reasoning`, `stream`, `store`, `tools` 또는 `text.format`이 없습니다. 이러한 기능이 필요하면 Responses API를 사용하십시오. OpenAI 자체 참조 예시에서 `output_tokens`가 0인 이유로 아래 가격 책정에는 출력 관련 항목이 없습니다.
세 가지 질문 유형
각 질문에는 고유한 `type`이 있으며, 하나의 입력에 여러 유형을 혼합할 수 있습니다. 독립적인 질문은 동일한 요청에 넣으십시오. 이전 답변에 의존하는 결정의 경우, OpenAI 가이드에서는 별도의 요청을 보내라고 명시합니다.
predicate: 예/아니오 확률
`predicate`는 조건이 성립하는지 묻고, 성립할 확률을 0에서 1 사이의 값으로 반환합니다.
curl https://api.openai.com/v1/decisions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6-luna",
"input": "The box arrived crushed and the screen is cracked.",
"questions": [
{"type": "predicate", "name": "damaged",
"instructions": "Is the product described as damaged?"}
]
}'
이 형태에 대한 OpenAI의 참조 예시는 다음을 반환합니다:
{
"model": "gpt-6-luna",
"answers": [
{"type": "predicate", "name": "damaged", "probability": 0.95}
],
"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
}
}
choice: 순서가 없는 집합에서 하나의 레이블
`choice`는 `{value, description}` 객체의 `choices` 배열을 추가합니다: 2개에서 255개의 고유한 선택지가 있으며, 여기서 `value`는 문자열 또는 부울 값입니다 (`true`와 `"true"`는 다릅니다). OpenAI는 카테고리가 모든 입력을 다루지 못할 경우 `other`와 같은 대체 옵션을 권장합니다.
{
"model": "gpt-6-luna",
"input": "I was charged twice for my order.",
"questions": [
{"type": "choice", "name": "department",
"instructions": "Which team should handle this ticket?",
"choices": [
{"value":"billing"}, {"value":"technical"},
{"value":"shipping"}, {"value":"other"}
]}
]
}
이 입력에 대한 가이드의 예시 답변:
{"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}
score: 순서 있는 척도상의 위치
`score`는 `{label, description}`으로 구성된 `levels` 배열을 추가하며, 이는 가장 낮은 것부터 가장 높은 것까지 순서대로 정렬됩니다. 인덱스는 0부터 시작하며, 반환된 `score`는 해당 인덱스의 확률 가중 평균이므로 레벨 사이에 위치할 수 있습니다.
{
"model": "gpt-6-luna",
"input": "Export fails in Safari but works in Chrome.",
"questions": [
{"type": "score", "name": "severity",
"instructions": "How badly does this bug block the user?",
"levels": [
{"label":"Cosmetic"},
{"label":"Workaround available"},
{"label":"Fully blocked"}
]}
]
}
가이드의 예시에서는 세 가지 레벨에 걸쳐 확률이 0.1, 0.7, 0.2로 주어져 `score`는 1.1, `confidence`는 0.55입니다. 1.1은 "레벨 1과 레벨 2 사이, 1에 가까움"으로 해석합니다. 가이드의 규칙: 부서와 같은 순서가 없는 카테고리에는 `choice`를, 심각도와 같은 순서가 있는 레벨에는 `score`를 사용합니다.
네 번째 답변 유형인 `refusal`은 `{"type":"refusal","name":...}` 형태로 단일 질문에 대해 나타날 수 있습니다. 동일한 요청의 다른 질문들은 여전히 답변을 받을 수 있으므로, 필드를 읽기 전에 `type`에 따라 분기 처리하십시오.
OpenAI가 설명하는 속도
OpenAI는 Decisions API가 Responses API보다 약 10배 빠르다고 말합니다. 발표에서는 Responses를 통해 GPT-6 Luna보다 최대 10배 빠르다고 표현합니다. OpenAI는 절대적인 지연 시간 수치를 공개하지 않습니다. OpenAI 포럼의 한 개발자는 느린 연결에서 이미지 입력 결정이 약 0.8초 만에 반환되었다고 보고했습니다. 이는 일화일 뿐 벤치마크는 아닙니다. 어떤 것을 약속하기 전에 자체적인 p95를 측정하십시오.
가격: 백만 입력 토큰당 0.10달러, 그 외에는 없음
gpt-6-luna를 사용하면 입력 비용은 100만 토큰당 0.10달러입니다. 입력 토큰에 대해서만 비용을 지불하며, 캐시 읽기, 캐시 쓰기 또는 출력 토큰 요금은 없습니다. `usage` 객체에는 `cached_tokens` 및 `cache_write_tokens` 필드가 포함되지만, OpenAI 개발자 포럼의 답변에 따르면 Decisions에는 아직 캐싱이 없으므로 0으로 예상됩니다.
두 가지 승수가 적용됩니다. 272K 토큰을 초과하는 입력은 2배로 청구되어 100만 토큰당 0.20달러가 됩니다(가격 페이지의 긴 컨텍스트 승수에서 파생). 미국 또는 EU 데이터 레지던시 엔드포인트를 통한 지역 처리는 10%가 추가됩니다. `/v1/decisions`에 대한 Batch, Flex 또는 Fast 계층은 문서화되어 있지 않으므로, Responses에만 존재하는 할인을 계획하지 마십시오.
다음은 지원 라우팅 작업량에 대한 계산입니다. 세 가지 질문이 포함된 500토큰짜리 티켓 하나의 요청 비용은 500 / 1,000,000 x $0.10 = $0.00005입니다. 이러한 티켓 백만 개는 50달러가 듭니다. 동일한 티켓을 Responses API를 통해 100만 출력 토큰당 0.50달러의 40토큰 JSON 레이블로 처리하면, 추론 토큰 이전에 입력 외에 요청당 40 / 1,000,000 x $0.50 = $0.00002가 추가됩니다. Luna는 Responses에서 이를 출력으로 청구하지만 Decisions에서는 전혀 청구하지 않습니다. 솔직한 표현은 "Decisions는 출력 토큰을 청구하지 않습니다"이지, 퍼센티지가 아닙니다. 전체 Luna 요금표와 프롬프트 캐싱이 Responses에서 수행하는 작업에 대한 자세한 내용은 GPT-6 Luna란 무엇인가를 참조하십시오.
Decisions, Structured Outputs 또는 함수 호출을 언제 사용해야 할까요
OpenAI는 다음과 같이 자체적으로 선을 긋습니다: 추출된 필드 또는 서면 설명과 같이 사용자 고유의 JSON 스키마를 따르는 객체가 필요할 때는 Responses API와 함께 Structured Outputs를 사용하고, 모델이 인수를 사용하여 도구 호출을 요청해야 할 때는 함수 호출을 사용하십시오. Decisions는 콘텐츠 분류, 요청 라우팅, 작업 우선순위 지정에 사용됩니다.
| 필요할 때 | 사용 |
|---|---|
| 레이블, 확률, 또는 신뢰도를 포함한 심각도 | Decisions API |
| 자체 JSON 스키마의 객체 (추출된 필드, 설명) | Responses의 Structured Outputs |
| 모델이 도구를 선택하고 인수를 채우도록 할 때 | Responses의 함수 호출 |
| 스트리밍, 대화 상태, 도구, 캐싱 또는 배치 | Responses API |
Structured Outputs 열거형은 레이블을 반환할 수 있습니다. 하지만 모델에 직접 작성하도록 요청하지 않는 한 확률 분포 또는 `confidence` 필드를 반환할 수 없으며, 이 경우 측정된 확률이 아니라 생성된 텍스트입니다. Decisions는 임계값을 설정할 수 있는 숫자를 제공합니다. OpenAI는 정확도나 보정 수치가 공개되지 않으므로, 사용자 애플리케이션의 레이블이 지정된 예시에서 임계값을 설정하고, 오탐(false positives) 비용과 미탐(false negatives) 비용을 비교 검토하라고 말합니다. 두 번째 유형화된 결정 공급업체를 고려 중이신가요? Decisions vs Jev 비교는 가격, 입력 및 출력 형태를 나란히 다룹니다.
이미지 및 base64 주의사항
input은 `input_text`와 `input_image` 부분이 혼합된 사용자 메시지를 받으며, `low`, `high`, `auto`(기본값) 또는 `original`의 선택적 `detail`을 포함할 수 있습니다. 가이드에 따르면 이미지는 인라인 base64 데이터 URL이어야 하며, 호스팅된 URL과 `file_id`는 지원되지 않습니다. API 참조에는 공개적으로 액세스 가능한 HTTP(S) URL도 나열되어 있으며, 요청당 최대 128개의 이미지가 가능합니다. base64를 문서화된 경로로 간주하고, 호스팅된 URL을 사용하기 전에 테스트하십시오.
데이터 제어
Decisions API는 자격이 되는 고객을 위한 Zero Data Retention 및 HIPAA 사용을 지원합니다. 데이터 상주 및 지역 처리는 `us.api.openai.com` 및 `eu.api.openai.com`을 통해 미국 및 유럽(EEA + 스위스)에서 지원됩니다. 이 엔드포인트는 지원되는 모든 API 지역에서 도달 가능하지만, 특정 지역에서의 가용성이 해당 지역에서 추론이 실행됨을 의미하지는 않습니다. 악용 모니터링 로그는 기본적으로 최대 30일 동안 보존됩니다. 환자 메시지를 라우팅하는 경우, 먼저 저희의 HIPAA API 규정 준수 가이드를 읽어보십시오.
가용성: 현재 베타, 곧 GA
이 엔드포인트는 2026년 10월 6일에 모든 개발자를 위한 공개 베타로 전환되었으며, 참조 문서의 "Beta APIs" 아래에 있습니다. OpenAI의 가이드에는 GA(General Availability)가 "몇 주 내에" 예상된다고 되어 있지만, 날짜는 명시되어 있지 않습니다. SDK 예시에는 Python 3.26.0, JavaScript 7.30.0, Go 3.73.0, Ruby 0.101.0 또는 Java 4.78.0 이상이 필요하며, 호출은 Python 및 JavaScript에서 client.decisions.create(...)입니다. platform.openai.com/decisions의 Playground에서 코드를 작성하기 전에 질문을 시도해볼 수 있습니다. Decisions에 특정한 속도 제한은 게시되어 있지 않습니다. 조직의 제한 페이지를 확인하십시오. 무료 Decisions 계층은 없습니다. 무료 Luna 액세스에 대해서는 Luna 무료 경로 게시물을 참조하십시오.
Apidog에서 Decisions 호출 테스트
유형화된 답변은 어설션하기 쉽다는 것이 핵심입니다. 세 가지 단계가 대부분의 팀에 적용됩니다.
키를 한 번 저장합니다. OPENAI_API_KEY를 Apidog 환경 변수에 넣고, Authorization: Bearer 헤더에서 {{OPENAI_API_KEY}}를 참조하여 실제 키가 공유 요청에 노출되지 않도록 합니다.
각 질문 유형별로 하나의 요청을 JSONPath 어설션과 함께 저장합니다: 상태 200, $.answers[0].type이 choice와 같고, $.answers[0].choice가 billing과 같고, $.answers[0].confidence가 0.8보다 크고, $.answers[?(@.name=='damaged')].probability가 0.9보다 크며, $.usage.output_tokens가 0과 같아야 합니다. 이는 청구서가 발행되기 전에 예상치 못한 청구 문제를 잡아냅니다.
레이블이 지정된 세트에서 임계값을 선택합니다. Apidog에서 티켓 텍스트 및 예상 부서의 CSV에 대해 동일한 요청을 실행하는 테스트 시나리오를 구축한 다음, 오탐 비용이 검토 대기열 비용을 초과하는 지점에 자동 라우팅 임계값을 설정합니다. Apidog CLI를 사용하여 CI에서 실행하여 모델 또는 별칭 변경 시 고객에게 문제가 발생하기 전에 테스트가 실패하도록 합니다. 사용 방법 가이드는 라우터가 최종화되기 전에 프런트엔드를 구축할 수 있도록 answers 배열을 모의(mocking)하는 것을 포함하여 각 단계를 다룹니다.
자주 묻는 질문
Decisions API는 새로운 모델인가요? 아닙니다. GPT-6 Luna에서 실행되는 엔드포인트인 POST /v1/decisions입니다. Luna는 2026년 9월 22일에 출시되었고, 이 엔드포인트는 2026년 10월 6일에 공개 베타로 전환되었습니다.
Decisions API 비용은 얼마인가요? 출력, 캐시 읽기 또는 캐시 쓰기 요금 없이 100만 입력 토큰당 0.10달러입니다. 272K 토큰을 초과하는 입력은 2배로 청구되며, 지역 처리 시 10%가 추가됩니다.
사용자 고유의 JSON 스키마를 반환하나요? 아닙니다. probability, choice 또는 score 필드를 포함하는 answers를 반환합니다. 사용자 고유의 스키마를 위해서는 Responses API의 Structured Outputs를 사용하십시오.
정확도는 어떤가요? OpenAI는 정확도나 보정 수치를 공개하지 않습니다. 사용자 고유의 레이블이 지정된 데이터에서 임계값을 설정하십시오. 데이터 기반의 LLM 테스트 시나리오가 실용적인 방법입니다.
시작하는 방법
현재 앱이 정규 표현식 또는 프롬프트-파싱 루프로 수행하는 라우팅 결정 중 하나를 선택하고, 이를 other 대체 옵션을 포함하는 단일 choice 질문으로 작성한 다음, 50개의 레이블이 지정된 예시를 통해 실행해 보십시오. 신뢰도 분포가 명확하게 구분된다면 임계값과 테스트를 얻게 됩니다. 그렇지 않다면 질문에 더 명확한 기준이 필요합니다. 저장된 요청 및 어설션을 사용하여 이 실험을 실행하려면 Apidog를 다운로드하고 위에 있는 curl을 가져오십시오.
