짧은 답변
- “이미지를 볼 수 있다”와 “이미지를 만들 수 있다”는 서로 다른 기능입니다. 거의 모든 최신 채팅 모델은 이미지를 읽을 수 있습니다(일반적으로 이것이 “멀티모달”이라는 의미입니다). 그러나 이미지를 생성할 수는 없으며, 이는 전용 이미지 모델이라는 별도의 유형에 해당합니다.
- 하나의 엔드포인트에서 텍스트와 이미지를 함께 반환하는 것은 Gemini 이미지 제품군뿐입니다.
gemini-3-pro-image(Nano Banana Pro),gemini-3.1-flash-image(Nano Banana 2) 및 유사 모델은 동일한 응답에서 텍스트 부분과 이미지 부분을 번갈아 반환합니다. - 그 외의 모든 방식은 오케스트레이션입니다. 즉, 채팅 모델과 독립적인 이미지 엔드포인트(이미지 API)가 함께 작동하는 방식입니다. OpenAI Responses의 네이티브
image_generation도구는 APIYI에서 권장되지 않습니다. 호출당 고정 요율로만 과금할 수 있어 합리적인 과금 모델이 아니며, 안정성도 보장할 수 없습니다.
먼저 들어가는 이미지와 나오는 이미지를 구분하십시오
대부분의 혼란은 “multimodal”이라는 단어에서 비롯됩니다. API 맥락에서는 이것이 기본적으로 입력 측을 뜻하며, 즉 “모델에 이미지를 넣을 수 있다”는 의미이지, “모델이 이미지를 생성해 준다”는 의미가 아닙니다. 이 두 가지는 서로 다른 모델 풀, 서로 다른 엔드포인트, 그리고 서로 다른 과금 방식을 사용합니다.이미지 얻기를 위한 네 가지 경로
A. 독립형 이미지 엔드포인트 — 거의 모든 경우 이 경로를 선택하십시오
A. 독립형 이미지 엔드포인트 — 거의 모든 경우 이 경로를 선택하십시오
data[0].url을 반환하며, GPT-Image 제품군은 data[0].b64_json을 반환합니다.
이 경로는 대화형 텍스트를 전혀 반환하지 않습니다 — Chat 엔드포인트가 아닙니다.전체 모델 표: 이미지 및 동영상 생성 모델.
모델별 엔드포인트, 타임아웃 및 출력 형식 차이:
이미지 API 참고 사항 및 모범 사례.B. Gemini 이미지 제품군 — 텍스트와 이미지를 네이티브 방식으로 함께 반환하는 유일한 제품군
B. Gemini 이미지 제품군 — 텍스트와 이미지를 네이티브 방식으로 함께 반환하는 유일한 제품군
gemini-3-pro-image, gemini-3.1-flash-image 등)는 네이티브 Gemini 엔드포인트를 사용하며,
candidates[0].content.parts은 이기종 배열입니다. 이미지 파트만 포함할 수도 있고, 텍스트 파트와 이미지 파트가
번갈아 포함될 수도 있습니다. 한 번의 호출로 두 가지를 모두 제공하는 제품군은 이 제품군뿐입니다.미리 알아 두어야 할 함정이 하나 있습니다. 파트의 개수와 순서는 어느 것도 보장되지 않습니다. 테스트에서 다음
세 가지 배열이 관찰되었습니다.parts[0] 또는 parts[1]을 하드코딩하면 간헐적으로 실패합니다. 올바른 방법은 필드
존재 여부로 필터링한 후 마지막 inlineData을 가져오는 것입니다(복잡한 프롬프트에서는 모델이 여러 이미지를 반환하며, 마지막
이미지가 최종 버전입니다).C. Responses 네이티브 image_generation 도구 — APIYI에서는 권장하지 않음
C. Responses 네이티브 image_generation 도구 — APIYI에서는 권장하지 않음
POST /v1/responses을 gpt-5.5과 함께 호출하고 네이티브 이미지 도구를 추가합니다.output 배열의
image_generation_call 항목 내부에 base64로 반환됩니다.
형태상 OpenAI 측에서 “그림을 그리는 채팅 모델”에 가장 가까운 방식이지만 — APIYI에서는 이를 권장하지 않습니다.D. 이미지 모델의 Chat 엔드포인트 — 대화형처럼 보이지만 여전히 이미지 모델
D. 이미지 모델의 Chat 엔드포인트 — 대화형처럼 보이지만 여전히 이미지 모델
gpt-image-2-all 및 gpt-image-2-vip은 /v1/chat/completions을 통해 호출할 수 있으며, 이미지는 choices[0].message.content 내부에
Markdown 링크로 삽입됩니다.“대화도 하고 그림도 그리는 하나의 Chat 엔드포인트”처럼 보이지만, 그림을 그릴 수 있는 Chat 모델은 아닙니다 —
내부적으로는 여전히 Chat 스키마로 감싼 이미지 모델이며, 일반적인 대화 기능은 없습니다.
또한 기본 이미지로 마지막 user 메시지의 image_url만 읽고, assistant 기록의 이미지는 무시합니다.이 경로는 더 이상 권장하지 않습니다 — 새 통합에는 경로 A를 사용해야 합니다.“채팅과 그림 그리기” 제품 구축: 권장 구조
대부분의 에이전트와 제품이 실제로 필요한 것은 하나의 마법 같은 엔드포인트가 아니라 명확한 오케스트레이션 체인입니다:채팅 모델이 의도를 분류하게 하십시오
gpt-5.5, claude-opus-5, gemini-3-pro 등)을 사용해 사용자
입력을 처리하고 이번 턴이 대화인지 이미지 요청인지 판단하게 합니다. 도움이 된다면 구조화된 플래그를
반환하도록 하면 됩니다.채팅 모델이 이미지 prompt를 작성하게 하십시오
이미지 엔드포인트를 호출하십시오
/v1/images/generations를 사용합니다. 반환된 url 또는 b64_json를 가져와 자체
오브젝트 스토리지에 저장합니다.이미지를 대화에 다시 반영하십시오
모델이 이미지를 지원하는지 확인하는 방법
1. 모델 상세 페이지를 확인합니다
/models/<model-name>을 열고 상단의 사양 표에 있는 입력 방식 행을 확인합니다 — 여기에
“image”가 표시되면 해당 모델은 비전 입력을 지원합니다. 가장 빠른 확인 방법입니다.2. 확신이 없으면 직접 테스트합니다
3. 오류 문자열을 확인합니다
Model do not support image input
(문법은 그쪽의 것이며, 오타가 아닙니다). 이 줄이 보이면 해당 모델은 이미지를 지원하지 않으므로 다른 모델로 전환합니다.자주 발생하는 5가지 오해
1. 멀티모달 모델은 이미지를 생성할 수 있다
1. 멀티모달 모델은 이미지를 생성할 수 있다
gpt-5.5은 사용자가 전송한 디자인 목업을 읽을 수 있지만, 자체적으로 이미지를 출력할 수는 없습니다. 이미지를 얻으려면 이미지 엔드포인트를 별도로 호출해야 합니다(경로 A). Responses 네이티브 이미지 도구(경로 C)는 APIYI에서 권장되지 않습니다.2. 이미지 모델을 채팅 모델로 사용할 수 있다
2. 이미지 모델을 채팅 모델로 사용할 수 있다
gpt-image-2을 지원 챗봇의 기반으로 사용해서는 안 됩니다. 채팅 엔드포인트(경로 D)를 지원하는 -all / -vip 변형조차도 내부적으로는 여전히 이미지 모델입니다.3. responseModalities에 TEXT를 포함하면 텍스트 파트가 보장된다
3. responseModalities에 TEXT를 포함하면 텍스트 파트가 보장된다
responseModalities: ["TEXT", "IMAGE"]을 선언해도 응답에 텍스트 파트가 포함된다는 보장은 없습니다. 모델은 이미지만 반환할 수 있습니다. 다만 반대 방향은 유용합니다. ["IMAGE"]을 명시적으로 선언하면 불필요한 텍스트 파트가 포함되는 것을 줄일 수 있습니다.4. parts[0]과 parts[1]을 전환하면 이미지 추출 오류가 해결된다
4. parts[0]과 parts[1]을 전환하면 이미지 추출 오류가 해결된다
[0] 또는 [1]에 위치하므로 어느 쪽을 선택하든 일부 요청에서는 이미지를 찾지 못합니다. 인덱스를 변경하면 실패하는 요청만 바뀔 뿐입니다. 필드 존재 여부로 필터링하는 방법만 안정적입니다.5. /v1/images/generations에 참조 이미지를 전달하면 편집이 수행된다
5. /v1/images/generations에 참조 이미지를 전달하면 편집이 수행된다
image / image_url /
images을 생성 엔드포인트에 전달하면 정상적인 이미지와 함께 200을 반환하지만, 참조 이미지는 조용히 폐기되고 평소와 동일하게 과금됩니다. 반환되는 결과는 일반적인 텍스트-이미지 결과입니다.이미지 편집은 반드시 /v1/images/edits을 통해 수행해야 합니다. (또한 Grok Imagine은 해당 엔드포인트에서 multipart/form-data을 추가로 요구합니다. JSON을 전송하면 즉시 400 오류가 반환됩니다.)