OpenAI 결정 API 공개 베타: 텍스트 및 이미지에 대한 빠르고 구조화된 분류

TL‑R; OpenAI 결정 API는 이제 베타 공개되어 다음과 같은 기능을 제공합니다

  • 무엇: gpt‑6‑luna 모델 기반의 새로운 /v1/decisions 엔드포인트로, 타입화된 "결정" 응답(예측에 대한 확률, 예/아니오)을 반환합니다.
  • 왜
    • 10배 빠름 (10‑×)
    • 10배 빠름 (10‑×)

결정 API란 무엇인가요?

결정 API는 gpt‑6‑luna 모델 위에 구축된 특화된 결정 지원 서비스입니다. 단일 요청을 받아 다음을 포함합니다:

필드 목적
model 현재는 gpt‑6‑luna만 지원됩니다.
input 텍스트, 사용자 메시지, 또는 base-64 인코딩된 이미지로, 결정에 필요한 증거를 제공합니다.
questions 하나 이상의 질문 객체로, 필요로 하는 결정의 유형(예측, 선택, 점수)을 설명합니다.

응답은 answers 배열이며, 각 응답은 질문에 지정한 name과 일치하므로 애플리케이션 로직으로 결과를 쉽게 매핑할 수 있습니다.


결정 API vs 응답 API 사용 시기

사용 사례 추천 API
이진 예/아니오 분류, 예: "보이는 손상이 있나요?" 결정 API – 단일 확률(0-1)을 반환하며 약 10배 빠릅니다.
고정된 목록에서 카테고리 선택, 예: 고객 지원 티켓 라우팅
결정 API – 선택된 값, 각 옵션에 대한 확률, 신뢰도 점수를 반환합니다.
순서가 있는 기준(중요도, 위험도 등)에 따라 항목 평가
결정 API – 확률 가중 평균 수치 점수와 분포를 반환합니다.
복잡한 JSON 객체, 자유 형식 설명, 함수 호출이 필요할 경우
응답 API (구조화된 출력 또는 함수 호출).

요약하면, 타입화된 응답(예측/선택/점수)만 필요하고 지연 시간과 비용을 고려할 때는 결정 API를 사용하세요.


질문 유형 및 출력 내용

유형 일반적인 시나리오 응답의 주요 필드
predicate 예/아니오 확인 – 손상 탐지, 준수 여부, 감성 분석
probability (0-1)
choice 카테고리 기반 라우팅 – 부서, 제품 유형, 언어
choice (선택된 값), probabilities (배열), confidence
score 순서가 있는 평가 – 중요도, 우선순위, 품질 등급
score (실수형), probabilities (레벨별), confidence

예측은 단일 확률을 반환합니다. 선택은 선택된 값과 전체 확률 분포, 전반적인 신뢰도 지표를 반환합니다. 점수는 이산 레벨 사이에 위치할 수 있는 가중 평균을 반환하여 흐릿한 순위 매기기에 유용합니다.


빠른 시작 코드 스니펫 (Python, Node, Go, Java, Ruby)

모든 SDK 예제는 OpenAI SDK ≥ Python 3.26.0, JavaScript 7.30.0, Go 3.73.0, Ruby 0.101.0 이상을 필요로 합니다.

Python (예측 – 이미지 손상 탐지)

import base64, pathlib
from openai import OpenAI

client = OpenAI()
img_b64 = base64.b64encode(pathlib.Path('product.png').read_bytes()).decode()
decision = client.decisions.create(
    model='gpt-6-luna',
    input=[{
        'role': 'user',
        'content': [
            {'type': 'input_text', 'text': '이 사진의 제품을 검사하세요.'},
            {'type': 'input_image', 'image_url': f'data:image/png;base64,{img_b64}'}
        ]
    }],
    questions=[{
        'type': 'predicate',
        'name': 'visible_damage',
        'instructions': '제품에 보이는 손상(균열, 찢어짐, 흠집)이 있나요?'
    }]
)
print(decision.answers[0].probability)

Node (선택 – 티켓 라우팅)

import OpenAI from 'openai';
const client = new OpenAI();
const decision = await client.decisions.create({
  model: 'gpt-6-luna',
  input: '내 주문에 두 번 청구되었습니다.',
  questions: [{
    type: 'choice',
    name: 'department',
    instructions: '이 불만을 처리할 부서는 어디인가요?',
    choices: [
      {value: 'billing', description: '결제, 송장, 환불'},
      {value: 'technical', description: '제품 사용 문제'},
      {value: 'shipping', description: '배송 및 추적'},
      {value: 'other', description: '기타 모든 사항'}
    ]
  }]
});
const ans = decision.answers[0];
console.log(`${ans.choice} (신뢰도 ${ans.confidence})`);

Go (점수 – 이슈 중대도)

import (
    "context"
    "encoding/base64"
    "os"
    "github.com/openai/openai-go/v3"
)

func main() {
    img, _ := os.ReadFile("product.png")
    client := openai.NewClient()
    decision, _ := client.Decisions.New(context.Background(), openai.DecisionNewParams{
        Model: "gpt-6-luna",
        Input: openai.DecisionNewParamsInputUnion{OfString: openai.String("Safari에서 내보내기 실패, Chrome에서는 작동함.")},
        Questions: []openai.DecisionNewParamsQuestionUnion{{
            OfScore: &openai.DecisionNewParamsQuestionScore{
                Name: openai.String("severity"),
                Instructions: "이 문제의 중대도는 어느 정도인가요?",
                Levels: []openai.DecisionNewParamsQuestionScoreLevel{{Label: "미관상"}, {Label: "대체 방법 필요"}, {Label: "작동 불가"}},
            },
        }},
    })
    fmt.Println(decision.Answers[0].AsAny().(openai.DecisionAnswerScore).Score)
}

(다른 언어의 스니펫은 구조가 동일합니다. Ruby 및 Java의 전체 문서를 참조하세요.)


성능 및 비용

  • 지연 시간 – 공개 베타 측정 결과, 중앙값 160~175ms의 엔드투엔드 지연 시간, 95번째 백분위수 약 285ms, 최악의 경우 약 743ms (참고: @agentdev001의 댓글). 이는 유사한 작업 부하에서 일반 응답 API보다 약 10배 빠릅니다.
  • 가격 – gpt‑6‑luna 모델에 대해 입력 토큰만 100만 토큰당 $0.10의 비용이 부과됩니다. 응답 토큰에 대한 요금은 없으며, API는 구조화된 결정 필드만 반환하기 때문입니다.
  • 데이터 제어 – Zero Data Retention (ZDR) 및 HIPAA 준수 사용을 지원합니다. 미국 및 EEA + 스위스 지역에서 지역 처리가 가능합니다.

커뮤니티 인사이트 (Hacker News)

댓글 작성자 주요 통찰
@simonw 사용 가능한 llm-openai-decisions 플러그인을 공유했으며, 이 엔드포인트가 다른 제공자들 사이에서 사실상 표준이 될 수 있다고 강조했습니다.
@agentdev001 실제 세계의 지연 시간(160~175ms 중앙값)을 보고했으며, 멀티모달 이미지 지원과 함께 100만 토큰 윈도우를 확인했습니다.
@TSiege 저렴한 이진 예/아니오 점수는 AI 시장을 상품화할 수 있으며, 제공자들 사이에 가격 전쟁을 유도할 수 있다고 주장합니다.
@AM1010101 캐싱이 부족하다는 점을 지적했으며, 긴 시스템 프롬프트를 반복 사용할 수 있는 대량 처리에 영향을 줄 수 있다고 언급했습니다.
@armcat 통계 실험을 수행한 결과, 예측 확률은 잘 캘리브레이션되었지만, 선택 확률은 옵션 순서에 의해 편향될 수 있음을 발견했습니다.
@solatic 가격 차이를 지적: OpenAI는 100만 토큰당 $0.10, Jev는 $0.042로, OpenAI가 더 비쌉니다.
@mritchie712 이미지 입력을 수용할 수 있다는 점을 강조했으며, 많은 경쟁 분류기에서 빠지는 기능입니다.
@bob1029 원시 확률을 노출하면 사용자가 숫자를 잘못 해석할 경우 신뢰도가 떨어질 수 있다고 경고했습니다.
@Sunny_Fung 결정 API를 LLM 기반 에이전트의 "소뇌"로 묘사하며, 빠르고 결정적인 라우팅을 처리한다고 설명했습니다.

전반적인 분위기: 개발자들은 속도와 멀티모달 기능에 대해 기대감을 보이지만, 캘리브레이션, 가격, 전략적 위치에 대한 우려가 있습니다.


최적 실천 체크리스트

  1. 적절한 질문 유형 선택 – 이진 검사에는 predicate, 순서 없는 카테고리에는 choice, 순서가 있는 기준에는 score를 사용하세요.
  2. 각 질문에 고유한 이름 지정 – name 필드는 응답에 그대로 반영되며, 후속 로직의 주요 키입니다.
  3. 명확한 지침 및 구분 가능한 선택지 제공 – 모호한 표현은 낮은 신뢰도 점수로 이어집니다.
  4. 캘리브레이션된 데이터 기반 임계값 설정 – 보고된 0.9 확률이 실제 도메인에서 약 90%의 정확도와 일치하는지 검증하세요.
  5. 대체 옵션 포함 – choice 질문에는 "기타" 값을 추가하여 범위 밖의 입력을 포착하세요.
  6. ZDR 및 지역 처리 고려 – PHI, GDPR 민감 데이터를 다루거나 데이터 주권 보장을 필요로 할 경우 이 플래그를 활성화하세요.
  7. 지연 시간 및 비용 모니터링 – 응답의 usage 블록을 사용해 토큰 소비를 추적하고, OpenAI의 비용 분석 도구와 결합하세요.

미래 전망

OpenAI는 결정 API를 향후 몇 주 내에 GA(일반 공개)로 전환할 계획이며, gpt-6-luna를 넘어서 모델 카탈로그를 확장할 가능성이 큽니다. 커뮤니티는 음성 기반 결정을 위한 Live API와의 더 깊은 통합을 기대하며, 모델이 성숙하면 이 엔드포인트가 더 넓은 응답 API 패밀리에 포함될 가능성도 예상하고 있습니다.


결론 – 결정 API는 개발자들에게 텍스트와 이미지에서 구조화된 타입화된 분류를 빠르고 비용 효율적으로 얻는 방법을 제공하며, 일반 응답 API를 과도하게 구성하거나 맞춤 분류기를 구축하는 대안으로 실용적인 선택이 될 수 있습니다.

Sources

관련