Gemini API를 호출하여 이미지를 기대했는데 응답이 비어 있었던 경험이 있으신가요? 이미지 데이터도 없고, 오류 메시지도 없고, 그냥 아무것도 없는 상황 말입니다. 아니면 더 나쁜 경우로, 텍스트로 가득 찬 응답 객체를 받았지만 이미지 파트는 하나도 없고 무엇이 잘못되었는지 명확한 설명도 없는 상황이 있습니다. 이 가이드는 Gemini의 finish reason과 안전 신호가 정확히 무엇을 의미하는지, 이를 어떻게 안정적으로 감지하는지, 그리고 각 실패 유형을 어떻게 수정하여 이미지 생성 파이프라인이 일관되게 작동하도록 하는지 설명합니다.
핵심 요약

| 증상 | 가장 가능성 높은 원인 | 빠른 해결책 |
|---|---|---|
| 응답에 candidates는 있지만 이미지 파트 없음 | finishReason: "OTHER" 또는 안전 차단 | 모든 파트 파싱, finish reason 확인 |
| 이미지 대신 텍스트 반환 | 모델이 텍스트 전용 모드로 기본 설정 | imagen-3.0-generate-* 모델 명시적 지정 |
finish reason에 IMAGE_SAFETY | 프롬프트가 콘텐츠 정책에 의해 플래그됨 | 주제/동작/배경 재구성 |
| candidates 배열이 비어 있음 | 할당량 초과 또는 요청 수준 안전 차단 | 할당량 대시보드 확인, 프롬프트 단순화 |
finishReason: "STOP"이지만 이미지 없음 | 응답에 텍스트 전용 파트 포함 | 첫 번째 파트만이 아닌 모든 parts[] 검사 |
Gemini가 이미지를 차단했는지 확인하는 방법
Gemini 이미지 실패를 디버깅할 때 가장 어려운 점은 API가 명시적인 오류를 거의 던지지 않는다는 것입니다. 대신 이미지가 단순히 존재하지 않는 잘 형성된 응답 객체를 반환합니다. response.text만 확인하거나 첫 번째 candidate 파트가 항상 이미지라고 가정하는 개발자들은 실패를 전혀 알아채지 못하게 됩니다.
Gemini는 모든 응답을 candidates 목록으로 구조화하며, 각 candidate는 parts 목록을 포함합니다. 파트는 텍스트이거나 인라인 데이터(base64로 인코딩된 이미지 바이트)일 수 있습니다. 이미지 생성이 차단되거나 자동으로 실패하면 응답에는 여전히 candidates가 있지만, 해당 candidates에는 텍스트 파트만 포함되어 있거나 실패가 파이프라인의 어느 단계에서 발생했느냐에 따라 파트가 전혀 없을 수도 있습니다.
누락된 이미지를 감지하는 가장 신뢰할 수 있는 방법은 candidate의 finishReason 필드를 검사한 다음 모든 파트를 반복하여 유형을 확인하는 것입니다. finishReason은 생성이 중단된 이유를 알려줍니다: "STOP"은 정상 완료를 의미하고, "IMAGE_SAFETY"는 이미지가 콘텐츠 정책에 의해 차단되었음을 의미하며, "SAFETY"는 프롬프트 자체가 플래그되었음을 의미하고, "OTHER"는 일반적으로 속도 제한, 할당량 소진 또는 지정되지 않은 백엔드 문제를 의미합니다.
다음은 이 검사를 명확하게 수행하는 Python 분류기입니다:
pythondef classify_gemini_image_result(response): """ Classifies a Gemini API response to determine image generation outcome. Returns a tuple of (status, detail) where status is one of: 'success', 'image_safety', 'prompt_safety', 'quota_other', 'text_only', 'empty' """ if not response.candidates: return ('empty', 'No candidates returned — likely a request-level safety block or quota issue') candidate = response.candidates[0] finish_reason = candidate.finish_reason.name # e.g. 'STOP', 'IMAGE_SAFETY', 'SAFETY', 'OTHER' if finish_reason == 'IMAGE_SAFETY': return ('image_safety', 'Image was generated but blocked by IMAGE_SAFETY policy') if finish_reason == 'SAFETY': return ('prompt_safety', 'Prompt flagged before image generation — check safety_ratings') if finish_reason == 'OTHER': return ('quota_other', 'Generation stopped for unspecified reason — check quota or simplify prompt') # finish_reason is STOP — check what parts exist has_image = any( hasattr(part, 'inline_data') and part.inline_data for part in candidate.content.parts ) has_text = any( hasattr(part, 'text') and part.text for part in candidate.content.parts ) if has_image: return ('success', 'Image returned successfully') elif has_text: return ('text_only', 'Only text returned — model may have defaulted to text-only mode') else: return ('empty', 'Candidate has no usable parts despite STOP finish reason')
이 분류기는 문서화된 모든 실패 모드를 단일 패스로 처리합니다. 이미지 바이트를 추출하려고 시도하기 전에 모든 응답에 대해 실행하면 오류 처리 로직의 어느 분기를 따라야 할지 즉시 알 수 있습니다.
IMAGE_SAFETY, NO_IMAGE, STOP이 실제로 의미하는 것
Gemini의 finish reason 어휘를 이해하는 것은 견고한 이미지 파이프라인을 구축하는 데 필수적입니다. 이것들은 일반적인 오류 코드가 아닙니다. 각 코드는 Gemini의 콘텐츠 파이프라인에서 특정 단계에 대응하며, 각각 수정 방법이 다릅니다.
IMAGE_SAFETY는 이미지가 기술적으로 이미 생성된 후에 나타나기 때문에 가장 혼란스럽습니다. Gemini의 안전 시스템은 입력 프롬프트뿐만 아니라 생성된 출력물도 평가하므로, 완전히 무해하게 들리는 프롬프트도 사후 생성 필터링을 트리거하는 이미지를 생성할 수 있습니다. 이는 현실적인 인체 해부학, 역사적 사건, 인식 가능한 공인, 또는 추상적이거나 예술적인 맥락에서도 폭력으로 해석될 수 있는 모든 것을 포함하는 프롬프트에서 가장 자주 발생합니다. 핵심은 프롬프트를 더 추상적이거나 허구적으로 재구성하면 차단이 완전히 해결되는 경우가 많다는 것입니다. 근본적인 주제 자체는 허용 가능하지만, 특정 단어 조합이 임계값을 초과하는 이미지로 모델을 유도합니다.
STOP이지만 이미지가 없는 경우는 두 번째로 흔한 시나리오이며 가장 쉽게 잘못 진단됩니다. finishReason: "STOP"이지만 parts 목록에 텍스트만 있을 때, Gemini 관점에서는 생성이 정상적으로 완료된 것입니다. 단지 이미지 대신 텍스트를 생성했을 뿐입니다. 이는 이미지 생성 전용 모델 대신 gemini-2.0-flash 또는 gemini-1.5-pro와 같은 범용 모델을 사용할 때 거의 항상 발생합니다. 범용 모델은 올바른 응답 MIME 유형과 모델 변형을 사용하여 이미지 출력을 위해 명시적으로 구성하지 않으면 기본적으로 텍스트를 생성합니다. 해결책은 imagen-3.0-generate-*로 전환하거나 명시적인 이미지 출력 구성으로 gemini-2.0-flash-exp를 사용하는 것입니다.
OTHER는 Gemini가 지정할 수 없거나 지정하지 않을 실패에 대한 포괄적인 코드입니다. 실제로 이 finish reason은 무료 티어 할당량을 초과했을 때(2026년 3월 기준 Vertex AI 무료 티어에서 분당 60개 요청, AI Studio 무료 티어에서 분당 10개 요청으로 ai.google.dev 속도 제한 페이지에서 확인됨), 생성 중 백엔드 오류가 발생할 때, 또는 프롬프트가 매우 복잡하여 생성이 중간에 중단될 때 가장 자주 나타납니다. 이러한 경우 Gemini는 429 HTTP 오류 코드를 반환하지 않고 본문 내에 finishReason: "OTHER"가 있는 200을 반환하기 때문에 할당량과의 연관성이 항상 명확하지는 않습니다.
텍스트 전용 응답에 대한 빠른 수정
Gemini가 이미지 대신 텍스트를 반환할 때 근본 원인은 거의 항상 모델 선택이나 출력 구성에 있습니다. 범용 Gemini 모델은 주로 텍스트 작업을 위해 학습되었으며, 일부는 멀티모달 워크플로우에서 이미지를 생성할 수 있지만 안정적으로 그렇게 하려면 명시적인 구성이 필요합니다.
가장 직접적인 수정은 전용 이미지 생성 모델로 전환하는 것입니다. Imagen 3(imagen-3.0-generate-001 및 imagen-3.0-fast-generate-001)은 이미지 출력만을 위해 설계되었으며 정상적인 조건에서 텍스트 전용 응답을 반환하지 않습니다. Gemini의 대화형 기능과 이미지 생성을 함께 사용해야 한다면, generation config에서 응답 MIME 유형을 image/png 또는 image/jpeg로 설정하여 gemini-2.0-flash-exp를 사용하십시오.
Python SDK를 사용할 때 올바른 구성은 다음과 같습니다:
pythonfrom google import genai from google.genai import types client = genai.Client(api_key="YOUR_API_KEY") response = client.models.generate_content( model="gemini-2.0-flash-exp", contents="A photorealistic mountain landscape at golden hour", config=types.GenerateContentConfig( response_modalities=["IMAGE", "TEXT"], response_mime_type="image/png", ) ) status, detail = classify_gemini_image_result(response) if status == 'success': image_data = next( part.inline_data.data for part in response.candidates[0].content.parts if hasattr(part, 'inline_data') and part.inline_data )
response_modalities 파라미터가 중요합니다. 이를 생략하거나 ["TEXT"]만으로 설정하면 모델이 이미지 요청을 완전히 무시합니다. REST API를 직접 사용하는 경우 동등한 필드는 요청 본문의 generationConfig.responseModalities입니다.
한 가지 주목할 만한 세부 사항이 있습니다: 올바른 모델과 구성을 사용하더라도 이미지 설명이 아닌 질문이나 지시로 구성된 프롬프트는 텍스트 전용 응답을 트리거할 수 있습니다. 「산악 풍경이 어떻게 생겼는지 설명해 주세요」라는 프롬프트는 텍스트를 반환합니다. 「황금 시간대의 사실적인 산악 풍경」이라는 프롬프트는 이미지를 반환합니다. 프롬프트를 의문형이나 지시형이 아닌 선언적이고 서술적으로 유지하는 것은 이 범주의 실패 전체를 방지하는 간단한 습관입니다.
IMAGE_SAFETY 차단에 대한 빠른 수정

IMAGE_SAFETY 차단은 모델이 올바르게 기능하고 있기 때문에 텍스트 전용 실패와는 다른 접근 방식이 필요합니다. 모델이 무언가를 생성하고 평가한 다음 반환하지 않기로 결정한 것입니다. 옵션은 프롬프트를 수정하거나, (가능한 경우) 안전 임계값을 조정하거나, 요청의 창의적 의도를 재구성하는 것입니다.
프롬프트 수정이 먼저 시도해야 할 것이며, 개발자들이 예상하는 것보다 더 자주 성공합니다. 핵심은 Gemini의 콘텐츠 정책이 의도가 아닌 출력 이미지에 초점을 맞춘다는 것을 이해하는 것입니다. 「전투 중인 전사」를 요청하는 프롬프트는 차단될 수 있지만, 두 프롬프트 모두 유사한 장면을 묘사하더라도 「폐허가 된 성에 서 있는 기사, 드라마틱한 조명」은 차단되지 않을 수 있습니다. 행동 중심 설명에서 장면 설정 설명으로 전환하면 안전 필터를 트리거할 가능성이 줄어듭니다.
차단된 프롬프트에서 피해야 할 특정 패턴에는 다음이 포함됩니다: 부상이나 고통에 대한 명시적인 언급(「부상당한 캐릭터」→「붕대를 감은 캐릭터」로 재구성), 사실적인 혈액(「빨간 페인트 튀김」 또는 추상 예술 스타일 사용), 잠재적으로 논란이 될 수 있는 배경과 결합된 명명된 공인, 성인 인접 맥락의 아동, 그리고 클로즈업이나 처리 위치의 사실적인 무기. 더 양식화된 표현으로 재구성하는 것(「...의 수채화 그림」, 「그래픽 노블 스타일로 삽화된...」)은 종종 차단을 우회합니다. 추상 예술 스타일은 사실주의적인 요청보다 더 관대하게 처리되기 때문입니다.
프롬프트 재구성이 충분하지 않을 때, 안전 임계값 설정이 두 번째 옵션을 제공합니다. Google AI Studio와 API를 통해 특정 카테고리의 해로움 임계값을 조정할 수 있습니다: 괴롭힘, 증오 발언, 성적으로 노골적인 내용, 위험한 콘텐츠. 모든 카테고리의 기본 임계값은 BLOCK_MEDIUM_AND_ABOVE입니다. 민감한 카테고리를 BLOCK_ONLY_HIGH로 설정하면 자극적이지만 진정으로 해롭지는 않은 콘텐츠에 대해 더 많은 여유를 줍니다. 이 임계값은 어떤 설정으로도 수정할 수 없는 CSAM 및 유사한 절대적 제한을 다루는 하드코딩된 안전 필터에는 적용되지 않습니다.
합법적인 콘텐츠에서 안전 제한에 자주 부딪히는 프로덕션 애플리케이션의 경우, 모든 이미지 요청 전에 프롬프트 재작성 단계를 구현하는 것을 고려하십시오. 창의적 의도를 보존하면서 안전 필터 위험을 줄이는 방식으로 사용자의 프롬프트를 재구성하도록 지시하여 언어 모델(Gemini 자체가 이 용도에 잘 작동함)을 통해 사용자 프롬프트를 실행합니다. 이는 작은 지연 오버헤드를 추가하지만 창의적 애플리케이션의 차단된 요청 비율을 크게 줄입니다.
Gemini 안전 설정이 변경할 수 있는 것과 변경할 수 없는 것
일반적인 오해는 안전 설정이 이진적이라는 것입니다. 즉, 필터링이 있거나 없거나입니다. 실제로 Gemini의 안전 아키텍처에는 여러 독립적인 계층이 있으며, API 안전 설정은 그 중 하나만 제어합니다.
구성 가능한 계층은 네 가지 표준 해로움 카테고리를 처리합니다: 괴롭힘, 증오 발언, 성적으로 노골적인 내용, 위험한 콘텐츠. 각 카테고리에 대해 임계값을 BLOCK_NONE, BLOCK_ONLY_HIGH, BLOCK_MEDIUM_AND_ABOVE(기본값), 또는 BLOCK_LOW_AND_ABOVE로 설정할 수 있습니다. 이 설정은 API 요청의 SafetySetting 객체를 통해 구성을 수락합니다.
구성 불가능한 계층에는 어떤 API 설정이나 특별 요청으로도 변경할 수 없는 절대적인 제한이 포함됩니다. 이 계층은 임계값 구성에 관계없이 콘텐츠를 차단합니다: 아동 성적 학대 자료, 대규모 살상 무기 제조를 위한 상세한 지침, 특정 개인에 대한 실제 폭력을 촉진하도록 설계된 콘텐츠, 그리고 Google의 사용 정책에 의해 정의된 여러 다른 카테고리. 이러한 절대적 제한을 우회하기 위해 낮은 안전 임계값을 사용하려는 시도는 작동하지 않습니다. 모델은 설정에 관계없이 IMAGE_SAFETY 또는 SAFETY finish reason을 반환합니다.
많은 개발자를 놀라게 하는 세 번째 계층은 사후 생성 안전 평가입니다. 이것이 특히 IMAGE_SAFETY를 트리거하는 것입니다: 이미지가 생성되었지만 사용자에게 반환되기 전에 별도의 안전 분류기에 의해 평가됩니다. 이 분류기는 텍스트 프롬프트가 아닌 생성된 이미지의 실제 픽셀 콘텐츠에서 작동합니다. 따라서 프롬프트가 모든 텍스트 수준 안전 검사를 통과하더라도 결과 이미지는 여전히 차단될 수 있습니다. 이 계층은 직접 구성할 수 없습니다. Google의 콘텐츠 정책에 의해 완전히 제어됩니다.
이러한 계층을 이해하면 더 효율적으로 디버깅하는 데 도움이 됩니다. 특정 카테고리에서 높은 해로움 등급과 함께 finish reason에 SAFETY가 있으면 구성 가능한 텍스트 계층 필터에 걸린 것입니다. 임계값을 조정하거나 프롬프트를 재구성하면 도움이 됩니다. IMAGE_SAFETY가 있으면 사후 생성 이미지 분류기에 걸린 것입니다. 임계값 설정이 아니라 요청의 창의적 방향을 변경해야 합니다.
API vs AI Studio vs Vertex AI 실패 진단
동일한 프롬프트가 Google의 세 가지 Gemini 액세스 방법에서 다르게 동작할 수 있으며, 어떤 방법을 사용하고 있는지 파악하면 어떤 디버깅 단계를 먼저 시도할지 결정하는 데 도움이 됩니다.
Google AI Studio는 주로 실험을 위한 브라우저 기반 인터페이스입니다. API와 동일한 기본 모델을 사용하지만 UI를 통해 재정의할 수 없는 고정된 안전 구성을 적용합니다. AI Studio에서 생성이 실패하면 해당 실패가 조정된 안전 설정으로 API를 통해 재현되지 않을 수 있습니다. AI Studio는 또한 프로덕션 API보다 더 적극적인 속도 제한을 받습니다. 무료 티어는 2026년 3월 기준으로 분당 10개 요청, 하루 1,500개 요청으로 제한됩니다. AI Studio에서 무거운 워크로드를 테스트한 다음 할당량 오류를 만나는 것은 일반적인 혼란의 원인입니다.
API 키를 통해 액세스하는 Gemini API는 안전 설정에 대한 프로그래밍 방식 제어를 제공하지만 Vertex AI와는 다른 할당량 제한을 받습니다. 무료 티어는 모든 모델에 걸쳐 분당 60개 요청을 허용하며, 이미지 생성 모델은 일부 구성에서 별도로 계산됩니다. 유료 티어 할당량은 훨씬 높으며 요청에 따라 더 늘릴 수 있습니다. 무료 티어에서 할당량에 도달하면 응답이 429가 아닌 finishReason: "OTHER"가 있는 정상적인 200으로 돌아옵니다. 예기치 않은 OTHER finish reason을 볼 때 Google AI Console의 할당량 대시보드를 확인하십시오.
Vertex AI는 가장 높은 처리량과 엔터프라이즈 SLA 보장을 제공하지만 Vertex AI를 통한 이미지 생성은 다른 SDK 초기화와 Vertex AI API가 활성화된 Google Cloud 프로젝트가 필요합니다. Vertex AI는 또한 Google과의 공식 계약을 통해 특정 엔터프라이즈 사용 사례에 대한 추가적인 콘텐츠 정책 제어를 제공합니다. Gemini API에서 Vertex AI로 성공적인 프로토타입을 마이그레이션하면서 새로운 실패가 발생한다면, 모델 이름이 올바른지(Vertex AI는 약간 다른 모델 식별자를 사용함), 리전이 이미지 생성을 지원하는 리전으로 설정되었는지(모든 리전이 모든 이미지 모델을 지원하지는 않음), 서비스 계정에 aiplatform.endpoints.predict 권한이 있는지 확인하십시오.
실용적인 디버깅 매트릭스: 동일한 프롬프트로 세 가지 방법 모두에서 실패가 재현된다면 문제는 콘텐츠 자체에 있습니다. AI Studio에서만 실패한다면 속도 제한을 확인하십시오. API에서는 통과하지만 Vertex AI에서 실패한다면 모델 이름, 리전, IAM 권한을 확인하십시오. 테스트에서는 통과하지만 프로덕션에서 간헐적으로 실패한다면, finish reason을 캡처하기 위해 응답을 계측하고 시간대와 날짜별 할당량 패턴을 확인하십시오.
완전한 문제 해결 워크플로우

Gemini 이미지 실패를 디버깅하는 것은 무작위로 수정을 시도하기보다 일관된 순서를 따를 때 가장 효율적입니다. 아래 워크플로우는 첫 번째 관찰부터 해결까지의 전체 경로를 다룹니다.
1단계: 전체 응답 캡처. 아무것도 변경하기 전에 실패한 요청의 완전한 응답 객체를 기록하십시오. candidates, finish reasons, safety ratings, 모든 파트를 포함합니다. 개발자들은 정상 작동 중에 응답 메타데이터를 버리는 경우가 많아 디버깅을 더 어렵게 만듭니다. 모든 것을 캡처하기 위해 일시적으로 상세 로깅을 활성화하십시오.
2단계: finish reason을 먼저 확인. finish reason은 가장 높은 수준의 신호이며 따라야 할 디버깅 트리의 분기를 결정합니다. IMAGE_SAFETY라면 프롬프트 수정으로 이동하십시오. SAFETY라면 어떤 해로움 유형이 트리거되었는지 식별하기 위해 카테고리별 safety ratings를 검사하십시오. OTHER라면 다른 무엇보다 먼저 할당량 대시보드를 확인하십시오. STOP이라면 파트 검사로 진행하십시오.
3단계: 모든 파트 검사. 첫 번째 파트가 이미지라고 가정하지 마십시오. 완전한 파트 목록을 반복하고 각각을 분류하십시오. STOP finish reason에서 이미지 파트 없이 텍스트 파트를 발견하면 안전 문제가 아닌 모델/구성 문제가 있는 것입니다.
4단계: 변수 격리. 프롬프트 재구성으로 IMAGE_SAFETY 차단이 수정되지 않았다면, AI Studio에서 프롬프트를 테스트하여 거기서는 통과하는지 확인하십시오(귀하 측의 안전 임계값 구성 문제임을 나타냄, 프롬프트 자체가 아닌). 모델 이름 수정 후에도 텍스트 전용의 STOP이 지속된다면, 「흰 배경의 빨간 사과」와 같은 최소한의 프롬프트로 테스트하여 프롬프트별 문제를 배제하십시오.
5단계: 수정 구현 및 계측 추가. 근본 원인을 식별한 후 수정을 구현하고 프로덕션 파이프라인에 응답 분류를 추가하십시오. 앞서 보여준 Python 분류기는 이 목적으로 설계되었습니다. 이미지 생성 함수에 추가하여 미래의 모든 실패가 수동 디버깅 없이 즉시 분류되도록 하십시오.
대규모로 이미지 생성을 실행하는 팀의 경우, laozhang.ai는 할당량 소진 및 안전 인접 실패에 대한 자동 재시도 로직을 사용하여 여러 백엔드 구성에 걸쳐 Gemini 이미지 요청을 라우팅하는 통합 API를 제공합니다. 이 서비스는 finishReason: "OTHER"와 HTTP 429 응답 모두를 할당량 오류로 표시하여 오류 보고를 정규화함으로써 가장 일반적인 디버깅 혼란의 원인을 제거합니다. 설명서는 docs.laozhang.ai에서 확인할 수 있습니다.
자주 묻는 질문
이미지가 차단되었을 때 Gemini가 왜 200 OK를 반환하나요?
Gemini는 안전 차단된 응답을 결과를 반환한 성공적인 API 호출로 처리합니다. 결과가 단지 「이 콘텐츠는 생성되지 않았습니다」일 뿐입니다. 이는 API 오류 처리를 단순하게 유지하기 위한 설계 선택입니다: HTTP 상태 코드는 전송 계층 성공을 반영하고, finish reason은 콘텐츠 계층 결과를 반영합니다. HTTP 상태 외에도 항상 finish reason을 확인하십시오.
IMAGE_SAFETY 차단 후에도 생성된 이미지를 얻을 수 있나요?
아닙니다. IMAGE_SAFETY가 트리거되면 이미지가 평가되고 사용자에게 반환되기 전에 삭제됩니다. API를 통해 이를 검색할 방법이 없습니다. 유일한 방법은 안전 평가를 통과하는 새로운 콘텐츠를 생성하는 것입니다.
안전 설정이 요청 간에 유지되나요?
아닙니다. 안전 설정은 각 개별 API 요청에 포함되어야 합니다. 이는 서버 측에 저장되거나 API 키와 연결되지 않습니다. 애플리케이션 전반에 걸쳐 일관된 안전 임계값 동작을 원한다면 공유 구성 객체에 안전 설정을 설정하고 모든 요청에 전달하십시오.
동일한 프롬프트가 때로는 성공하고 때로는 실패하는 이유는 무엇인가요?
이미지 생성에는 본질적인 무작위성이 있습니다. 동일한 설정의 동일한 프롬프트는 매번 약간 다른 이미지를 생성합니다. 이러한 변형 중 일부는 안전 임계값의 잘못된 편에 떨어질 수 있고 다른 것들은 그렇지 않을 수 있습니다. 이것이 일반적으로 성공하는 프롬프트에서 간헐적인 IMAGE_SAFETY 차단을 설명합니다. 동일한 프롬프트로 재시도를 추가하면 두 번째나 세 번째 시도에서 성공하는 경우가 많습니다.
실패가 할당량 관련인지 안전 관련인지 어떻게 알 수 있나요?
finish reason을 확인하십시오: OTHER는 할당량 또는 백엔드 문제를 강력히 시사하고, IMAGE_SAFETY 또는 SAFETY는 콘텐츠 정책을 나타냅니다. 할당량 확인을 위해 현재 RPM 및 일일 요청 횟수에 대한 Google AI Console 대시보드를 확인하십시오. 사용량이 제한에 가깝다면 지수 백오프 및 재시도 로직을 구현하십시오. 프로덕션 워크로드의 경우 여러 구성에 걸쳐 할당량을 집계하여 더 높은 효과적 처리량을 제공하는 laozhang.ai 사용을 고려하십시오.
SAFETY와 IMAGE_SAFETY finish reason의 차이점은 무엇인가요?
SAFETY는 이미지 생성이 시작되기 전에 텍스트 프롬프트가 플래그되었음을 의미합니다. 모델이 입력을 평가하고 진행하지 않기로 결정한 것입니다. IMAGE_SAFETY는 프롬프트가 초기 검사를 통과하고 이미지 생성이 발생했지만 출력 이미지가 사후 생성 안전 평가에 의해 플래그되었음을 의미합니다. 실제적인 의미: SAFETY 차단은 프롬프트 재구성으로 해결될 가능성이 더 높은 반면, IMAGE_SAFETY 차단은 때로 창의적 방향의 더 근본적인 변화가 필요합니다.
