Seedream 5.5 is live on Atlas Cloud — native transparent PNG & 80+ round editing

개발자를 위한 생성형 AI API: "성공적인" 실패를 배포하지 마세요

개발자를 위한 생성형 AI API를 사용하면 애플리케이션이 모델에 입력을 보내고 생성된 콘텐츠를 받을 수 있습니다. 요구되는 입력, 출력 형식, 대기 시간, 수용 기준에 따라 하나를 선택하세요.

요청은 성공적으로 반환됩니다. 하지만 애플리케이션에는 여전히 사용할 수 있는 이미지가 없습니다. 응답에 작업 ID가 포함되어 있거나, 완성된 그림에 페이지에 부적합한 추가 객체가 포함되어 있을 수 있습니다.

개발자를 위한 생성형 AI API는 애플리케이션이 모델에 입력을 보내고 생성된 콘텐츠를 받을 수 있게 해줍니다. 필요한 입력, 출력 형식, 대기 시간, 수용 기준을 기준으로 선택하세요. 그런 다음 응답을 사용자가 사용할 수 있는 것으로 바꾸는 작업 처리와 검사를 구축하세요.

이 가이드는 선택부터 전달까지의 이미지 워크플로를 따릅니다. 작업 선택 표, 일치하는 JavaScript 및 Python 예제, 3개의 구체적인 이미지 브리프, 비용 워크시트를 얻게 됩니다. 동일한 의사 결정 과정이 텍스트와 비디오에도 적용되지만, 프로토콜과 출력 검사는 다릅니다.

핵심 요약

  • 모델보다 작업과 수용 기준을 먼저 선택하세요.
  • 비동기 작업 ID를 저장하여 중단된 작업을 재개할 수 있게 하세요.
  • 거부된 생성물을 포함하여 수용된 출력당 비용을 측정하세요.
  • 완성된 결과를 보여주기 전에 파일과 비즈니스 제약 조건을 테스트하세요.

개발자를 위한 생성형 AI API: 무엇을 하는가

모델이 생성을 수행합니다. API는 소프트웨어가 해당 작업을 요청하는 방식을 정의합니다. SDK는 언어별 도우미로 인터페이스를 감쌉니다. 호스팅 플랫폼은 모델에 대한 접근을 운영하고, 애플리케이션은 사용자 경험, 권한 및 결과를 수용하는 규칙을 제공합니다.

이러한 구분은 제품 페이지를 읽을 때 중요합니다. 그림을 만드는 채팅 애플리케이션이 있다고 해서 개발자 엔드포인트가 동일한 입력을 받는다는 것을 의미하지는 않습니다. 편리한 메서드가 있는 SDK가 있다고 해서 기본 응답 및 실패 상태를 이해할 필요가 없어지는 것은 아닙니다.

다음 작업 맵부터 시작하세요. 상호 작용 열은 모든 제공자가 해당 모드를 지원한다는 약속이 아니라 평가할 애플리케이션 설계를 설명합니다.

작업입력필요한 기능출력평가할 상호 작용수용 기준
지원 답변 초안티켓 및 승인된 도움말 콘텐츠근거 기반 텍스트 생성초안 텍스트동기 또는 스트리밍티켓에 답변; 정책을 만들어내지 않음
문서 필드 추출문서 텍스트 또는 지원되는 파일구조화된 추출JSON 필드요청 또는 대기 작업유효한 스키마 및 출처 증거
편집용 일러스트레이션작성된 시각 브리프텍스트-이미지이미지 파일비동기 작업정확한 객체, 레이아웃, 크기
이미지 편집원본 이미지 및 지침이미지 조건부 편집편집된 이미지비동기 작업요청된 변경; 보존된 세부 사항
비디오 생성프롬프트 또는 지원되는 참조비디오 생성비디오 파일대기 작업정확한 길이, 움직임, 필요한 경우 오디오
검색 보조 답변질문 및 검색된 구절검색 및 생성답변 및 참조동기 또는 스트리밍검색된 구절로 뒷받침되는 주장

이미지 생성, 업로드된 이미지 분석, 기존 이미지 편집은 별개의 기능입니다. 각각을 명시적으로 확인하세요. 마찬가지로 비디오 엔드포인트는 시작 프레임을 지원하지만 임의의 다중 이미지 참조를 지원하지 않을 수 있습니다.

임베딩은 입력을 검색 및 유사성에 유용한 벡터로 변환합니다. 답변이 생성되기 전에 관련 문서를 찾는 데 도움이 될 수 있습니다. 임베딩 자체가 답변을 생성하거나 검색된 콘텐츠가 주장을 뒷받침한다는 것을 입증하지는 않습니다.

실질적인 경계는 입력 → 요청 → 출력 → 애플리케이션 수용입니다. 최종 단계는 귀하의 책임입니다. 생성된 인보이스 필드는 여전히 검증이 필요하고, 그림은 여전히 검사가 필요하며, 지원 응답은 포함된 약속을 할 권한이 여전히 필요합니다.

프로토콜 선택도 다양합니다. Google의 참조는 표준 생성, 스트리밍, 라이브 상호 작용을 구분합니다. 이를 다른 곳에서도 동일한 지원이 있다고 가정하기보다 상호 작용 모드가 다르다는 증거로 받아들이세요. (Google Gemini API 참조, 2026년 9월 접속.)

개발자를 위한 생성형 AI API: 선택 방법

카탈로그를 비교하기 전에 작은 수용 브리프를 작성하세요. 편집용 이미지 기능의 경우 가로 출력, 제한된 객체 수, 눈에 띄는 브랜딩 없음, 사람 검토 단계를 명시할 수 있습니다. 티켓 분류의 경우 고정된 레이블 세트와 명시적인 불확실한 결과를 명시할 수 있습니다.

다음 순서로 후보를 평가하세요:

  1. 입력 및 출력. 지원되는 파일, 입력 제한, 출력 형식, 참조 이미지 동작에 대해 정확한 모델 엔드포인트를 확인하세요. 모델 패밀리 이름은 계약으로 사용하기에는 너무 광범위합니다.
  2. 작업 준수. 어색한 브리프를 포함하여 대표적인 브리프를 시도하세요. 파일 또는 네트워크 실패와 제약 조건 실패를 별도로 계산하여 무엇을 수정해야 하는지 파악하세요.
  3. 통합 적합성. 인증, 응답 봉투, 작업 상태 값, 클라이언트 라이브러리 지원을 확인하세요. 이를 기존 백엔드에 적용하는 데 필요한 작업을 포함하세요.
  4. 대기 시간 및 동시성. 사용자가 떠났다가 돌아올 수 있는지 결정하세요. 짧은 마감 시간의 대화형 경험에 전념하기 전에 예상 워크로드를 테스트하세요.
  5. 청구 명확성. 청구 단위와 이를 변경하는 설정을 파악하세요. 모든 제출된 요청이 동일한 요금을 받는다고 가정하지 말고 실패 및 환불 처리를 확인하세요.
  6. 데이터 요구 사항. 실제로 전송하려는 데이터에 대해 입력 처리, 보존, 삭제 및 적용 가능한 약관을 검토하세요. 민감한 자료를 사용하기 전에 해결되지 않은 질문을 문서화하세요.
  7. 변경 관리. 회귀 세트를 유지하고 모델 식별자, 프롬프트, 매개변수를 기록하세요. 업데이트 또는 교체 후 동작을 재평가하는 방법을 계획하세요.

기관 지침은 접근 및 데이터 규칙이 이 결정에 포함되어야 하는 이유를 보여줍니다: Harvard는 AI 개발자 도구에 대한 승인된 접근 경로와 제한 사항을 설명합니다. 이는 Harvard의 조치이며 애플리케이션에 대한 보편적인 권한이 아닙니다. (Harvard University Information Technology, 2026년 9월 접속.)

접근 경로적합한 팀통합 작업운영 책임주요 제한선택 전 확인
직접 모델 제공자한 제공자의 기능에 집중하는 팀제공자별 API, 계정, 어댑터귀하의 앱 및 작업; 제공자 추론추가 제공자는 별도의 계약을 추가함엔드포인트 기능, 지역, 할당량, 약관
다중 모델 호스팅 플랫폼여러 지원 모델을 평가하는 팀공유 접근 및 모델별 검증귀하의 앱 및 작업; 플랫폼 호스팅 추론공유 접근이 모든 매개변수를 표준화하지는 않음정확한 모델, 스키마, 청구, 데이터 경로
자체 호스팅 오픈 모델인프라 및 모델 서빙 기술을 갖춘 팀추론 배포, 노출, 보안, 유지 관리하드웨어, 서빙, 확장, 모니터링, 업데이트용량 및 엔지니어링 오버헤드라이선스, 하드웨어 적합성, 처리량, 유지 관리

Atlas Cloud는 여러 모델 기능이 동일한 애플리케이션에 속할 때 평가할 수 있는 호스팅 옵션 중 하나입니다. 이 글은 이미지 작업 인터페이스를 구체적인 예로 사용합니다. 각 모델의 입력과 출력을 검증해야 하며, 모델 ID만 변경하는 것으로는 충분하지 않습니다.

image.png

공식 이미지 엔드포인트 문서: 출력 형식, 품질, 크기 제약 조건 표시

모델별 매개변수는 통합 계약의 일부입니다. 요청 본문을 재사용하기 전에 허용된 값을 읽으세요.

소규모 SaaS 팀에게 유용한 비교는 하나의 수용된 결과를 제공하기 위한 총 노력입니다. 추론 요금과 함께 어댑터 코드, 지원 조사, 검토 시간, 마이그레이션 테스트를 포함하세요. 이렇게 하면 편리한 프로토타입이 값비싼 프로덕션 워크플로를 숨기지 못합니다.

개발자를 위한 생성형 AI API: 첫 번째 요청

예제는 GPT Image 2 Text-to-Image를 모델 ID openai/gpt-image-2/text-to-image와 함께 사용합니다. 해당 엔드포인트 문서에는 quality: high, size: 2048x1152, output_format: png가 나열되어 있습니다. 아래 예제에서 요청하는 설정입니다.

1. 플레이그라운드에서 프롬프트를 설정하세요. 참조 이미지를 추가하지 않고 아래 아침 식사 브리프를 사용하세요. Run을 누르기 전에 모델 이름과 커밋된 설정을 확인하세요. 필드를 떠날 때 되돌아가는 선택은 요청한 설정이 아닙니다.

plaintext
1Create a realistic editorial food photograph for an article about a simple breakfast.
2
3On a light oak table, show exactly one white ceramic plate holding exactly two slices of toasted sourdough bread, one small clear glass bowl of strawberry jam, and one stainless steel butter knife resting to the right of the plate.
4
5Use soft morning window light from the left, natural colors, a three-quarter overhead camera angle, and realistic bread texture. Keep every requested object fully inside the frame.
6
7No people, no hands, no drinks, no extra dishes, no packaging, no logos, no text, and no watermark. Landscape composition, 16:9.

2. 서버에서 인증을 유지하세요. 프런트엔드는 자체 백엔드에 작업 시작을 요청해야 합니다. ATLAS_API_KEY를 서버 환경에 저장하세요. 브라우저 JavaScript, 이미지 URL 또는 클라이언트에 표시되는 로그에 절대 포함하지 마세요. ATLAS_API_HOST를 api.atlascloud.ai로 설정하세요. 이는 스킴이나 경로가 없는 호스트 이름입니다.

3. 한 번 제출하고 ID를 유지하세요. 문서화된 생성 경로는 POST /api/v1/model/generateImage입니다. data.id를 읽고 애플리케이션의 작업에 대해 저장하세요. 제출 응답이 손실되면 잠재적으로 청구 가능한 다른 작업을 만들기 전에 조사하세요.

4. 저장된 작업을 폴링하세요. GET /api/v1/model/prediction/{prediction_id}를 쿼리하세요. 예측 문서는 processing, completed, failed를 설명하며 출력 URL은 data.outputs에 있습니다. 완료 상태라도 비어 있지 않은 출력 배열을 확인해야 합니다.

5. 다운로드 및 검증. 파일을 귀하의 통제 하에 저장하고, 디코딩되는지 확인하고, 브리프에 따라 검사하세요. 그런 다음에만 수용된 결과를 애플리케이션에 반환하세요. 다운로드 또는 검증 오류는 기존 작업에 연결된 상태로 유지되어야 합니다.

다음 코드는 공식 인터페이스 문서에서 구성되었습니다. 라이브 API 벤치마크로 제시되지 않습니다. 이 글의 미디어 워크플로는 API 키가 아닌 브라우저 테스트 플레이그라운드를 사용합니다.

정확한 아침 식사 프롬프트를 prompt.txt로 저장하세요. Node.js의 경우 내장 fetch가 있는 환경을 사용하고, sharp를 설치하고, 이를 generate.mjs로 저장하세요. 전용 작업 디렉터리에서 실행하세요. 의도적으로 두 개의 작업을 원하지 않는 한 두 언어 예제 중 하나만 실행하세요.

javascript
1import { readFile, writeFile, mkdir } from 'node:fs/promises';
2import sharp from 'sharp';
3
4const key = process.env.ATLAS_API_KEY;
5const host = process.env.ATLAS_API_HOST;
6if (!key || host !== 'api.atlascloud.ai') {
7  throw new Error('Set ATLAS_API_KEY and ATLAS_API_HOST');
8}
9const base = 'https:' + '//' + host;
10const headers = { Authorization: `Bearer ${key}` };
11const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
12const payload = {
13  model: 'openai/gpt-image-2/text-to-image',
14  prompt: await readFile('prompt.txt', 'utf8'),
15  quality: 'high', size: '2048x1152', output_format: 'png'
16};
17await mkdir('output', { recursive: true });
18await writeFile('output/request.json', JSON.stringify(payload, null, 2));
19
20async function api(path, method = 'GET', body) {
21  const response = await fetch(base + path, {
22    method,
23    headers: { ...headers, 'Content-Type': 'application/json' },
24    body: body ? JSON.stringify(body) : undefined,
25    signal: AbortSignal.timeout(30000)
26  });
27  const requestId = response.headers.get('x-request-id');
28  console.error(JSON.stringify({ method, status: response.status, requestId }));
29  if (!response.ok) {
30    const error = new Error(`HTTP ${response.status}; request ${requestId}`);
31    error.retryable = [429, 500, 503, 504].includes(response.status);
32    throw error;
33  }
34  const json = await response.json();
35  if (!json.data) throw new Error('Missing response data');
36  return json.data;
37}
38
39let id = process.env.PREDICTION_ID;
40try {
41  if (!id) {
42    // Deliberately no automatic retry for submission.
43    const submitted = await api('/api/v1/model/generateImage', 'POST', payload);
44    id = submitted.id;
45    if (typeof id !== 'string' || !id) throw new Error('Missing prediction ID');
46    await writeFile('output/prediction-id.txt', id);
47  }
48  const deadline = Date.now() + 600000;
49  let errors = 0;
50  let outputUrl;
51  while (Date.now() < deadline) {
52    let job;
53    try {
54      job = await api('/api/v1/model/prediction/' + encodeURIComponent(id));
55      errors = 0;
56    } catch (error) {
57      const transient = error.retryable ||
58        ['TimeoutError', 'AbortError'].includes(error.name) ||
59        error instanceof TypeError;
60      if (!transient || ++errors > 3) throw error;
61      await sleep(Math.min(30000, 1000 * 2 ** errors) + Math.random() * 500);
62      continue;
63    }
64    if (job.status === 'failed') {
65      throw new Error(`Task failed; code ${job.error_code ?? 'unknown'}`);
66    }
67    if (job.status === 'completed') {
68      outputUrl = job.outputs?.[0];
69      if (typeof outputUrl !== 'string' || !outputUrl) {
70        throw new Error('Completed task has no output');
71      }
72      break;
73    }
74    if (job.status !== 'processing') throw new Error('Unexpected task status');
75    await sleep(2000);
76  }
77  if (!outputUrl) throw new Error('Polling deadline reached; resume this ID');
78  const url = new URL(outputUrl);
79  if (url.protocol !== 'https:') throw new Error('Unexpected output protocol');
80  // Do not forward the API credential to the media host.
81  const file = await fetch(url, { signal: AbortSignal.timeout(60000) });
82  if (!file.ok) throw new Error(`Download HTTP ${file.status}`);
83  const bytes = Buffer.from(await file.arrayBuffer());
84  await sharp(bytes, { limitInputPixels: 20000000 }).raw().toBuffer();
85  const meta = await sharp(bytes).metadata();
86  if (meta.format !== 'png' || meta.width !== 2048 || meta.height !== 1152) {
87    throw new Error('File format or dimensions differ from the request');
88  }
89  await writeFile('output/breakfast.png', bytes);
90  console.log(JSON.stringify({ id, state: 'ready_for_review',
91    file: 'output/breakfast.png' }));
92} catch (error) {
93  console.error(JSON.stringify({ id: id ?? null, state: 'needs_attention',
94    error: error.message }));
95  process.exitCode = 1;
96}

더 짧은 Python 버전은 requests와 Pillow, 동일한 prompt.txt, 동일한 설정을 사용합니다. 재개를 위해 PREDICTION_ID도 허용합니다. 이 스크립트는 하나의 로컬 작업을 보여줍니다. 배포된 서비스에는 영구 작업 기록과 제한된 다운로드가 필요합니다.

python
1import io, json, os, random, time
2from pathlib import Path
3from urllib.parse import quote, urlparse
4import requests
5from PIL import Image
6
7key = os.environ['ATLAS_API_KEY']
8assert os.environ['ATLAS_API_HOST'] == 'api.atlascloud.ai'
9base = 'https:' + '//' + os.environ['ATLAS_API_HOST']
10headers = {'Authorization': 'Bearer ' + key}
11out = Path('output')
12out.mkdir(exist_ok=True)
13payload = dict(model='openai/gpt-image-2/text-to-image',
14               prompt=Path('prompt.txt').read_text(encoding='utf-8'),
15               quality='high', size='2048x1152', output_format='png')
16job_id = os.getenv('PREDICTION_ID')
17try:
18    if not job_id:
19        # A submission timeout needs investigation, not a blind retry.
20        r = requests.post(base + '/api/v1/model/generateImage',
21                          headers=headers, json=payload, timeout=30)
22        r.raise_for_status()
23        job_id = r.json()['data']['id']
24        if not isinstance(job_id, str) or not job_id:
25            raise ValueError('Missing prediction ID')
26        (out / 'prediction-id.txt').write_text(job_id)
27    deadline, errors, url = time.monotonic() + 600, 0, None
28    while time.monotonic() < deadline:
29        try:
30            r = requests.get(base + '/api/v1/model/prediction/' +
31                             quote(job_id, safe=''), headers=headers, timeout=30)
32            r.raise_for_status()
33        except requests.RequestException as exc:
34            status = exc.response.status_code if exc.response is not None else None
35            if status not in (None, 429, 500, 503, 504) or errors >= 3:
36                raise
37            errors += 1
38            time.sleep(min(30, 2 ** errors) + random.random() / 2)
39            continue
40        errors = 0
41        job = r.json()['data']
42        if job['status'] == 'failed':
43            raise RuntimeError('Task failed: ' + str(job.get('error_code')))
44        if job['status'] == 'completed':
45            outputs = job.get('outputs') or []
46            if not outputs or not isinstance(outputs[0], str) or not outputs[0]:
47                raise ValueError('Completed task has no output')
48            url = outputs[0]
49            break
50        if job['status'] != 'processing':
51            raise ValueError('Unexpected task status')
52        time.sleep(2)
53    if not url:
54        raise TimeoutError('Polling deadline reached; resume this ID')
55    if urlparse(url).scheme != 'https':
56        raise ValueError('Unexpected output protocol')
57    r = requests.get(url, timeout=60)  # No Authorization header here.
58    r.raise_for_status()
59    with Image.open(io.BytesIO(r.content)) as image:
60        image.load()
61        if image.format != 'PNG' or image.size != (2048, 1152):
62            raise ValueError('Unexpected file format or dimensions')
63    (out / 'breakfast.png').write_bytes(r.content)
64    print(json.dumps(dict(id=job_id, state='ready_for_review')))
65except Exception as exc:
66    print(json.dumps(dict(id=job_id, state='needs_attention', error=str(exc))))
67    raise SystemExit(1)

image.png완료된 GPT Image 2 플레이그라운드: 제출된 아침 식사 프롬프트와 완성된 출력 표시

완료된 플레이그라운드 실행은 제출된 프롬프트, 출력 크기, 품질 설정 및 생성된 결과를 함께 기록합니다.

폴링 마감 시간은 이 클라이언트가 기다리는 것을 중단하지만 서버 측 작업을 취소하지는 않습니다. 이미 진행 중인 요청은 폴링 창 이후에 완료될 수 있으므로 엄격한 종단 간 지연 시간 보장이 아닙니다. ID를 보존하고 작업자가 나중에 확인할 수 있게 하세요.

개발자를 위한 생성형 AI API: 실제 사용 사례

아래 3개의 브리프는 서로 다른 요구 사항을 테스트합니다. 이들은 독립적인 요청이며 하나의 결과가 다음 입력이 되는 체인이 아닙니다. 브리프의 차이를 쉽게 이해할 수 있도록 동일한 모델과 요청된 설정을 유지하세요.

A. 음식 편집 이미지: 수량 및 배치. 아침 식사 프롬프트는 출력에 토스트 2조각, 접시 1개, 잼 볼 1개, 칼 1개가 포함되어 있는지 테스트합니다. 칼은 접시 오른쪽에 있어야 하며 모든 필수 객체는 프레임 안에 남아 있어야 합니다.

image.png

아침 식사 이미지 생성 예시와 객체 수 및 칼 배치 검사sT생성된 결과에는 요청된 접시, 토스트, 잼 볼, 오른쪽 칼이 포함되어 있으며 아래 배치 검토를 준비합니다.

겹치는 조각을 개별적으로 검사하세요. 시각적으로 설득력 있는 아침 식사라도 컵이 배경에 나타나거나 칼이 접시 위로 이동하면 실패할 수 있습니다. 결과가 실패하면 모호한 공간 지침을 수정하고, 하나의 변수를 변경하고, 거부 이유를 유지하세요. 일반적으로 더 나은 그림을 반복해서 요청하지 마세요.

B. 기사 표지: 사용 가능한 헤드라인 공간. 이 요청은 구성을 레이아웃 종속성으로 취급합니다. 페이지 편집자는 왼쪽에 빈 공간이 필요하고 오른쪽에는 도구와 화분이 있습니다. 실제 제목은 나중에 HTML/CSS를 사용하여 추가하여 편집 가능하고 읽기 쉽게 유지하세요.

plaintext
1Create a realistic editorial photograph for an article about repairing everyday objects.
2
3On the right half of a light wooden workbench, show one pair of worn gardening gloves, one small metal hand trowel, and one unbranded terracotta plant pot. The left 45 percent of the image must remain an empty, softly lit section of the same workbench, suitable for adding a headline later.
4
5Use natural side light from a nearby window, believable material textures, neutral colors, and a slightly elevated camera angle.
6
7No people, no hands, no extra tools, no plants, no logos, no letters, no text, and no watermark. Landscape composition, 16:9.

image.png작업대 표지 예시: 요청된 왼쪽 헤드라인 공간과 오른쪽 객체 표시

결과는 오른쪽에 장갑, 화분, 모종삽을 유지하면서 왼쪽에 사용 가능한 빈 공간을 보존합니다.

의도된 게시 크롭에서 결과를 확인하세요. 가로 원본은 모바일 카드가 중앙을 크롭할 때 유용한 빈 영역을 잃을 수 있습니다. 구성이 실패하면 더 좁은 객체 경계를 지정하거나 애플리케이션 크롭을 변경하세요. 요청된 피사체 위에 텍스트를 배치하여 실패를 숨기지 마세요.

C. 패브릭 일러스트레이션: 디테일 및 순서. 다음 요청은 구별 가능한 가시적 질감을 가진 3개의 접힌 스와치를 요청합니다. 이는 수량, 위치, 그리고 독자가 보게 될 크기에서 설명용 일러스트레이션을 지원하는지 테스트합니다.

plaintext
1Create a realistic close-up editorial photograph for an article explaining common fabric textures.
2
3Show exactly three folded fabric swatches arranged side by side on a neutral matte gray surface: natural beige linen on the left, blue cotton denim in the center, and dark green wool on the right.
4
5Use the same soft daylight across all three fabrics, an overhead camera angle, and sufficient depth of field to keep the visible weave of each fabric in focus. Preserve natural wrinkles and believable fiber detail.
6
7No labels, no rulers, no sewing tools, no hands, no additional objects, no text, no logos, and no watermark. Landscape composition, 16:9.

image.png베이지, 파란색, 짙은 녹색 스와치 배치 검사를 포함한 AI 생성 패브릭 일러스트레이션

요청된 세 개의 스와치는 시각적으로 구별됩니다. 이 생성된 질감은 일러스트레이션이며 실제 제품의 섬유 구성에 대한 증거가 아닙니다.

중앙 스와치에 읽을 수 있는 직조가 없으면 해당 문제를 기록하고 프레이밍이나 세부 지침을 조정하세요. 생성된 질감을 실제 제품의 측정된 속성으로 설명하지 마세요.

텍스트 기능도 유사하게 좁은 검사가 필요합니다. 티켓 분류의 경우 허용된 세트 외부의 레이블을 거부하고 불확실한 경로를 유지하세요. 문서 추출의 경우 구문 분석 가능한 JSON과 함께 필드 및 소스 범위를 요구하세요. 구문적으로 유효한 응답도 잘못된 필드에 잘못된 금액을 넣을 수 있습니다.

개발자를 위한 생성형 AI API: 실패 처리

전송 성공, 작업 완료, 비즈니스 수용을 별도로 추적하세요. 성공적인 HTTP 응답에 처리 중인 작업이 포함될 수 있습니다. 완료된 작업이 손상된 다운로드를 생성할 수 있습니다. 읽을 수 있는 이미지가 브리프를 위반할 수 있습니다. 각각 다른 복구 조치가 필요합니다.

3개의 시계를 의도적으로 설정하세요: 개별 HTTP 타임아웃, 폴링 간격, 전체 대기 창입니다. 예제는 30초 API 요청 타임아웃, 2초 폴링, 10분 폴링 창을 사용합니다. 이는 애플리케이션 선택이며 광고된 서비스 성능이 아닙니다.

증상가능한 원인다음 확인재시도 접근 방식
매개변수 오류지원되지 않는 필드 또는 값정확한 엔드포인트 스키마 및 제출된 페이로드먼저 요청 수정
HTTP 401인증 문제 또는 잘못된 경로키 구성 및 엔드포인트 경로변경 없는 재시도 없음
잔액 부족사용 가능한 잔액 또는 허용량계정 청구 상태먼저 자금 또는 허용량 해결
HTTP 429속도 제한 도달계정/모델 동시성 및 요청 속도지터가 있는 제한된 백오프
작업이 실패 보고모델, 입력 또는 정책 실패예측 ID, 오류 코드, 오류 세부 정보새 생성 전에 조사
폴링 타임아웃클라이언트 마감 또는 느린 작업기존 작업 상태동일한 ID로 쿼리 재개
빈 출력으로 완료누락되거나 예상치 못한 결과전체 구조화된 작업 응답조사 플래그 지정; 무작정 재제출 없음

현재 플랫폼 오류 문서에 따르면 LLM 및 미디어 엔드포인트는 Retry-After 또는 남은 속도 제한 헤더를 제공하지 않습니다. 클라이언트 측 지연 정책을 사용하세요. 이 경로가 반환하지 않는 헤더에 복구를 의존하지 마세요. 다른 API 제품군은 다르게 동작할 수 있습니다.

자동 읽기 재시도를 제한적으로 유지하세요. 지수 지연과 약간의 무작위 지터는 많은 작업자가 함께 재시도하는 것을 방지하는 데 도움이 됩니다. 제한이 지속되면 동시성을 줄이세요. 반복적인 실패는 스피너 뒤에 숨겨진 끝없는 루프가 아니라 관찰 가능한 인시던트가 되어야 합니다.

제출 재시도는 더 엄격한 처리가 필요합니다. 본문을 보낸 후 연결이 닫히면 서버가 작업을 생성했는지 알 수 없을 수 있습니다. 제출 전에 로컬 의도를 기록하고 예측 ID가 도착하지 않으면 요청 기록이나 지원 추적을 조사하세요. 엔드포인트가 문서화하지 않는 한 멱등성 헤더를 만들어내지 마세요.

ID가 있으면 이를 사용하여 재개하세요. 다운로드 실패는 다른 이미지 생성 요청이 아니라 다른 다운로드 시도나 상태 확인을 트리거해야 합니다. 예제는 의도적으로 폴링 읽기에 자동 재시도 동작을 유지하고 실패한 제출에서는 중지합니다.

모든 작업에 대해 애플리케이션 작업 ID, 예측 ID, 요청 ID, 모델, 설정, 타임스탬프 및 최종 처리를 보존하세요. 적절한 데이터 정책에 따라서만 프롬프트를 저장하세요. 일반 오류 로그에 권한 부여 헤더나 민감한 사용자 콘텐츠를 절대 넣지 마세요.

프런트엔드에 설명할 수 있는 상태를 제공하세요: 준비 중, 처리 중, 출력 확인 중, 준비 완료 또는 주의 필요. 누군가 페이지를 새로 고치면 복구 가능한 작업을 표시하세요. 동일한 로컬 작업이 대기 중일 때 반복 제출을 비활성화하되 적절한 경우 의도적인 새 요청은 허용하세요.

개발자를 위한 생성형 AI API: 실제 비용

낮은 요청 가격은 사용 가능한 기능의 비용을 알려주지 않습니다. 예산에는 청구된 금액, 수용된 출력 수, 이를 전달하는 데 필요한 지원 작업이 필요합니다.

텍스트 API는 일반적으로 입력 및 출력 토큰을 구분합니다. 긴 컨텍스트, 검색된 구절, 대화 기록, 반복된 응답은 모두 사용량에 기여할 수 있습니다. 모든 워크로드에 단일 토큰 추정치를 적용하는 대신 선택한 엔드포인트가 실제로 청구하는 범주를 기록하세요.

이미지의 경우 정확한 모델의 청구 단위와 구성을 검사하세요. 크기와 품질은 모델마다 청구에 다르게 영향을 미칠 수 있습니다. 비디오의 경우 길이, 해상도 및 모델 선택이 요금을 변경할 수 있습니다. 카탈로그의 시작 가격을 특정 구성에 대한 견적으로 바꾸지 마세요.

선택한 이미지 모델의 정확한 고품질 2048 × 1152 가격은 이 글의 조사 중 카탈로그와 세부 페이지 모두에서 확인되지 않았습니다. 현재 단가나 할인은 여기에서 주장되지 않습니다. 유료 프로덕션 평가를 실행하기 전에 확인하세요.

2가지 관련 계산을 사용하세요:

plaintext
1API cost per accepted output = actual API charges / accepted outputs
2
3Full feature cost per accepted output =
4(API charges + attributable review + storage + transfer + processing costs)
5/ accepted outputs

관찰 기간을 일관되게 유지하세요. 지속적인 저장의 경우 계산이 첫 달, 정의된 보존 기간 또는 할당된 반복 비용을 포함하는지 명시하세요. 한 모델의 추론 전용 수치를 다른 워크플로의 전체 부하 비용과 비교하지 마세요.

가상 예시: 100개의 요청을 제출하고 80개의 출력을 수용합니다. 해당 배치의 실제 총 요금을 80으로 나누세요. 100개의 요청 모두에 동일한 금액 c가 청구된 경우 수용된 출력당 API 비용은 1.25c가 됩니다. 이 조건이 중요합니다: 모든 실패한 요청이 청구된다고 가정하지 않습니다.

모델설정제출실제 요금수용된 출력수용된 출력당 API 비용측정 날짜
GPT Image 2 Text-to-Imagehigh; 2048x1152; PNG기록 예정기록 예정기록 예정계산 예정기록 예정
동일 모델, 다음 평가 배치정확한 설정 기록기록 예정기록 예정기록 예정계산 예정기록 예정

이것을 결과 표가 아닌 워크시트로 사용하세요. 이미지 데모는 대표적인 수용률이나 프로덕션 비용을 입증하지 않습니다. 특히 테스트 환경에서 평가할 때 플레이그라운드 견적을 정산된 청구 기록과 분리하세요.

수용된 출력이 0이면 배치를 실패로 보고하고 총 지출을 표시하세요. 이 경우 수용된 출력당 비용 비율은 정의되지 않습니다. 실패한 배치를 숨기면 예산이 애플리케이션 동작보다 좋아 보이게 됩니다.

먼저 낭비를 줄이세요: 제출 전에 입력을 검증하고, 작업 ID를 저장하고, 우발적 중복을 방지하고, 제품이 허용하는 경우 수용된 자산을 재사용하세요. 그런 다음 동일한 브리프와 검사에서 더 저렴한 설정을 비교하세요. 견적을 줄이지만 거부 작업을 두 배로 늘리는 설정은 기능 비용을 증가시킬 수 있습니다.

응답이 아닌 출력을 테스트하세요

프롬프트를 작성하면서 수용 기준을 작성하세요. 이렇게 하면 설득력 있는 이미지가 사후에 성공 정의를 바꾸는 것을 방지합니다. 필수 요구 사항을 선택적 선호와 분리하고 검토자가 결과를 거부한 이유를 기록하세요.

명확한 기계적 답변이 있는 검사를 자동화하세요: 다운로드 성공, 파일 디코딩, 형식, 크기, 파일 크기 제한. JSON의 경우 스키마, 필수 필드, 허용된 레이블 및 유형을 검증하세요. 누락된 필수 필드가 조용히 만들어낸 기본값이 되어서는 안 됩니다.

해석이 필요한 요구 사항에는 사람 검토를 사용하세요. 아침 식사 예시에서 검토자는 겹치는 조각을 구별하고, 칼을 식별하고, 위치를 평가하고, 추가 객체를 찾아야 합니다. 자동화된 비전 검사기가 도움을 줄 수 있지만, 단독으로 결과를 승인하게 하기 전에 그 실수를 평가하세요.

아침 식사 검토에는 다음 독립적인 검사가 포함되어야 합니다:

  • 토스트 2조각, 흰색 접시 1개, 투명 잼 볼 1개, 칼 1개.
  • 칼은 접시 오른쪽에; 필수 객체는 프레임 안에 완전히.
  • 추가 컵, 접시, 손, 포장 또는 눈에 띄는 브랜딩 없음.
  • 요청된 크기의 읽을 수 있는 PNG.

image.png파일 메타데이터 검사와 시각적 수용 검사를 분리한 검증 기록

기록은 생성된 파일의 실제 크기와 크기를 시각적 수용 검사와 별도로 보고합니다.

실제 기능에서 고정된 회귀 세트를 구축하세요: 일반적인 요청, 혼잡한 구성, 상충되는 지침, 어려운 크롭, 관련 입력 제한. 브리프와 검토자 규칙을 버전 관리하세요. 모델, 프롬프트 템플릿 또는 출력 설정을 변경할 때 반복하세요.

기술적 성공과 수용된 출력 비율을 별도로 보고하세요. 추가 객체를 포함하는 읽을 수 있는 파일은 성공적인 전달이자 콘텐츠 거부로 간주됩니다. 이러한 결과를 하나의 성공 숫자로 결합하면 팀에 필요한 수정을 숨깁니다.

2025년 개발자 설문 조사에 따르면 46%가 AI 도구 정확성을 신뢰하지 않았고 33%가 신뢰했으며 3%가 높은 신뢰를 보고했습니다. 이러한 응답은 개발 워크플로의 AI 도구에 관한 것이며 생성 API의 측정된 실패율이 아닙니다. (Stack Overflow Developer Survey, 2025.)

마찬가지로 3개의 예시 실행으로는 전체 정확도나 유용한 p95 지연 시간을 입증할 수 없습니다. 프로덕션에서 예상하는 조건 전반에 걸쳐 더 크고 관련성 있는 샘플을 수집하고 이상값을 보존하세요. 데모를 사용하여 검사를 개발한 다음 체계적인 평가를 사용하여 릴리스 결정을 내리세요.

출시 전 프로덕션 체크리스트

첫 번째 작동하는 요청은 릴리스 결정의 작은 부분만 해결합니다. 애플리케이션은 또한 지출을 억제하고, 미완료 작업을 복구하고, 결과가 없을 때 무슨 일이 있었는지 설명해야 합니다.

접근 보호. 자격 증명을 백엔드에 유지하고, 환경을 분리하고, 작업 기록에 대한 접근을 제한하고, 자격 증명 교체를 계획하세요. 모든 상태 및 다운로드 요청을 해당 작업을 소유한 사용자에 대해 승인하세요. 추측할 수 없는 작업 ID는 권한 검사를 대체하지 않습니다.

입력 및 리소스 사용 제한. 프롬프트 길이, 업로드 유형 및 크기, 요청된 출력 설정, 지원되는 조합을 검증하세요. 다운로드한 미디어의 경우 허용된 대상, 리디렉션, 바이트 제한, 디코딩 제한을 적용하세요. 위의 간결한 스크립트는 수명 주기를 보여줍니다. 강화된 공개 다운로드 서비스가 아닙니다.

제출 전 예산 설정. 사용자별 및 작업별 제한, 최대 동시 작업 수, 더 비싼 설정을 요청할 수 있는 사람을 정의하세요. 작업이 대기 중일 때 예산을 예약하여 동시 요청이 모두 동일한 잔여 잔액 검사를 통과할 수 없도록 하세요.

상태 유지. 제공자를 호출하기 전에 로컬 작업을 작성하세요. 반환된 예측 ID를 즉시 저장하고 프로세스 재시작 후 폴링을 재개할 수 있도록 하세요. 제출 상태를 알 수 없는 경우 사용자에게 작업이 확실히 실패했다고 말하는 대신 조사 상태를 사용하세요.

전달된 자산 소유. 수용된 파일이 어디에 있고, 누가 접근할 수 있으며, 언제 만료되는지 결정하세요. 임시 출력 URL에 무기한 의존하지 말고 제공자 링크 수명 및 보존 약관을 확인하세요. 애플리케이션의 데이터 워크플로에 파생 파일 삭제를 포함하세요.

실패를 이해 가능하게 만들기. 지연된 작업, 거부된 결과, 서비스 오류를 구분하세요. 의도적으로 재시도하거나 검토를 요청할 수 있는 명확한 경로를 제공하세요. 복구를 위해 작업을 재구성할 필요가 없도록 사용자의 브리프를 보존하세요.

변경 모니터링. 완료, 수용, 비용, 대기 시간을 별도로 추적하세요. 모델 또는 매개변수 변경 후 회귀 세트를 다시 실행하고 가능한 경우 이전 구성을 사용할 수 있게 유지하세요. 민감한 로그를 수정하고 콘텐츠 및 운영 기록 모두에 보존 기간을 할당하세요.

자체 애플리케이션을 위해 예제 플랫폼을 평가하려면 Atlas Cloud 모델 카탈로그부터 시작한 다음 선택한 엔드포인트 및 예측 문서를 읽으세요. 하나의 작업을 선택하고, 수용을 정의하고, 접근을 확장하기 전에 평가가 실제로 전달하는 것을 기록하세요.

자주 묻는 질문

내 애플리케이션에 어떤 생성형 AI API를 선택해야 하나요?

기능의 입력, 출력, 허용 가능한 대기 시간, 검토 요구 사항을 기준으로 선택하세요. 법적 및 운영적으로 사용할 수 있는 후보에 대해 동일한 대표 브리프를 실행하세요. 기능과 함께 수용된 출력 비용 및 통합 작업을 비교하세요. 이 3개의 이미지 예시로 확립된 보편적인 선택은 없습니다.

개발자를 위한 무료 생성형 AI API가 있나요?

일부 서비스는 평가판이나 제한된 무료 사용을 제공하지만 가용성, 자격, 할당량 및 허용되는 사용은 변경됩니다. 정확한 엔드포인트의 현재 약관을 확인하세요. 무료 소비자 도구 허용량이 반드시 API 접근을 포함하는 것은 아닙니다. 자체 호스팅도 모델 가중치를 다운로드할 수 있는 경우에도 하드웨어, 전기 및 엔지니어링 시간을 사용합니다.

생성형 AI API를 사용하려면 머신 러닝 경험이 필요한가요?

HTTP, JSON, 인증 및 일반적인 백엔드 개발 기술로 시작할 수 있습니다. 신뢰할 수 있는 기능을 제공하려면 추가로 평가 및 운영 작업이 필요합니다. 모델을 직접 훈련할 필요 없이 수용 가능한 출력을 정의할 수 있을 만큼 모델의 한계를 이해해야 합니다.

하나의 API가 텍스트, 이미지, 비디오를 처리할 수 있나요?

플랫폼이 세 가지를 모두 제공할 수 있지만 각 기능은 다른 엔드포인트, 매개변수, 출력 유형 및 대기 패턴을 사용할 수 있습니다. 각 인터페이스를 별도로 확인하세요. 공유 계정이나 자격 증명이 텍스트 요청 본문을 이미지 또는 비디오 모델과 호환되게 만들지는 않습니다.

이미지 요청이 이미지 대신 작업 ID를 반환하는 이유는 무엇인가요?

엔드포인트는 비동기적으로 작업을 제출합니다. ID를 저장하고 문서화된 상태 경로를 쿼리하세요. 작업이 완료되면 파일을 검색한 다음 검증하세요. 클라이언트가 기다리는 것을 중단하면 서버 측 작업이 여전히 실행 중일 수 있습니다. 다른 작업을 제출하기 전에 해당 작업을 재개하세요.

워크플로를 중단하지 않고 API 비용을 줄이는 방법은 무엇인가요?

중복 제출을 방지하고, 입력을 조기에 검증하고, 적절한 경우 수용된 자산을 재사용하고, 변경되지 않은 수용 기준에 대해 더 저렴한 구성을 테스트하세요. 수용된 결과당 실제 요금을 측정하세요. 개발자를 위한 생성형 AI API는 주변 애플리케이션이 지속 가능한 비용으로 사용 가능한 작업을 제공할 수 있을 때 그 자리를 차지합니다.

최신 모델

하나의 API로 모든 미디어 AI를.

모든 모델 탐색