Skip to main content

개요

gemini-3-pro-image-preview (즉, Nano Banana Pro)는 엄격한 콘텐츠 안전성 제어를 적용하며, 여러 계층에서 규정에 맞지 않는 요청을 거부합니다. 단순한 “생성 실패” 메시지는 사용자가 문제를 이해하는 데 도움이 되지 않습니다. 적절한 오류 처리는 다음을 충족해야 합니다.
  • 거부 사유를 정확히 식별해야 합니다 — 콘텐츠 위반, 지식 베이스 제한, 기술 오류를 구분해야 합니다
  • 친절한 사용자 메시지를 제공해야 합니다 — 기술적 오류를 이해하기 쉬운 설명으로 바꿔야 합니다
  • 실행 가능한 제안을 제공해야 합니다 — 성공할 수 있도록 요청을 어떻게 조정해야 하는지 알려야 합니다
  • 완전한 기술 세부 정보를 유지해야 합니다 — 개발자 디버깅용입니다
요청이 HTTP 200이지만 이미지가 없는 경우라면, 이는 보통 Google 쪽에서 내린 안전성 판단입니다. APIYI의 투명한 프록시는 결과를 있는 그대로 전달할 뿐입니다 — 저희도 고객이 이미지를 성공적으로 생성하길 바랍니다. 감지 및 메시징 로직은 애플리케이션 측에서 구현해야 합니다.

Google 콘텐츠 검토 정책 (2026 업데이트)

Google의 이미지 생성은 2단계 안전 메커니즘을 사용합니다.
  1. 구성 가능한 필터: 괴롭힘, 혐오 발언, 성적으로 노골적인 콘텐츠, 위험한 콘텐츠의 네 가지 범위를 다루며, safetySettings을 통해 조정할 수 있습니다
  2. 내장 보호 조치: 아동 안전과 같은 핵심 유해 행위에 대해서는 항상 활성화되어 있으며, 매개변수를 통해 비활성화할 수 없습니다
명시적으로 금지되는 콘텐츠에는 다음이 포함됩니다: 아동 성적 학대 및 착취(CSAE), 폭력적 극단주의/테러리즘, 비동의 친밀 이미지(NCII), 자해, 성적으로 노골적인 콘텐츠, 혐오 발언, 그리고 괴롭힘과 따돌림입니다.
2026년 2월, Nano Banana 2 출시 이후 Google은 사람과 저작권에 관한 정책을 크게 강화했으며, 다음과 같은 자주 발생하는 거절 시나리오를 추가/강화했습니다(데이터 기준: 2026년 5월 (UTC+8)):
  • 공인 / 유명인: 사실적인 사진풍의 식별 가능한 실제 인물
  • 얼굴 바꾸기(faceswap)
  • 실제 인물의 재의상/얼굴 변경
  • 금융 또는 주문 정보 조작
  • 잘 알려진 IP(예: Disney, 2026년 1월 23일 이후)
  • 워터마크 제거미성년자 관련 콘텐츠
여전히 허용되는 항목: 가상 캐릭터, 스타일화된 초상, 그리고 일러스트 형 인물입니다.
Google의 공식 정책 문서입니다(직접 복사하여 방문하십시오):
  • 생성형 AI 금지 사용 정책: policies.google.com/terms/generative-ai/use-policy
  • 생성형 콘텐츠 일반 오류 참고 자료: ai.google.dev/api/generate-content

세 가지 핵심 진단 지표

다음 순서로 우선순위, 높은 것부터 낮은 것까지 확인하십시오:

1. candidatesTokenCount (최우선) ⭐

  • 위치: response.usageMetadata.candidatesTokenCount
  • 의미: API가 생성한 후보 콘텐츠의 token 수입니다
  • 규칙: 값이 0이면 요청이 콘텐츠 검열 단계에서 즉시 거부되었으며 후보 콘텐츠가 아예 생성되지 않았다는 뜻입니다. 이는 가장 엄격한 거부입니다.

2. finishReason (두 번째 우선순위)

  • 위치: response.candidates[0].finishReason
  • 규칙: STOP 이외의 값은 특수 처리가 필요한 비정상 종료를 의미합니다
최신 이미지 관련 finishReason 값입니다(참고로 Nano Banana 시리즈는 IMAGE_ 접두사가 붙은 이미지 전용 값을 추가했습니다):

3. 텍스트 거부 설명 (중요)

  • 위치: response.candidates[0].content.parts[].text
  • 규칙: finishReasonSTOP이지만 partstext만 있고 이미지 데이터가 없을 때, API는 이미지 대신 거부 설명을 반환합니다. 텍스트는 중국어 또는 영어일 수 있으며, 예를 들면:

오류 시나리오 빠른 참고

처리 흐름(결정 순서)

핵심 코드 구현

위의 검사들을 하나의 파싱 함수로 결합합니다:
스마트 키워드 감지(선택 사항, 더 구체적인 메시지를 위해):
가장 흔한 함정: thoughtSignature이 포함된 부분에도 중요한 text이 여전히 포함될 수 있습니다. 항상 먼저 텍스트를 수집한 뒤, 건너뛸지 결정하십시오 — 그렇지 않으면 거부 설명이 사라지고 사용자는 “generation failed.”만 보게 됩니다.

소비자 친화적 메시지

설계 원칙: 명확하고 간결함, 긍정적인 안내, 실행 가능함, 비난 없음. 권장 템플릿:
단계별 표시 권장 사항:
  • 소비자 사용자: 기본적으로 친절한 설명 + 수정 제안만 표시합니다
  • 비즈니스 / 도구 제공자: 기본적으로 기술 세부 정보(finishReason, candidatesTokenCount 등)를 펼쳐서 표시합니다
  • 개발자: 전체 JSON 응답을 볼 수 있도록 “펼치기/접기” 토글을 제공합니다

모범 사례

  1. 우선순위에 따라 엄격하게 확인합니다: candidatesTokenCountfinishReasonparts → 데이터 추출 → 키워드 감지
  2. thoughtSignature를 확인하기 전에 텍스트를 먼저 수집합니다: 거부 설명을 잃지 않기 위함입니다
  3. 전체 응답을 유지합니다: 개발/테스트 도구는 문제 해결을 위해 항상 원시 JSON을 저장해야 합니다
  4. 중국어와 영어 거부 텍스트를 지원합니다: Google은 중국어나 영어를 반환할 수 있으므로 키워드 매칭은 둘 다를 포괄해야 합니다
  5. 점진적 폴백을 적용합니다: 스마트 감지가 성공하면 구체적인 메시지를 표시하고, 그렇지 않으면 API 텍스트를 직접 표시하며, 그다음에는 친숙한 finishReason 이름을 사용하고, 마지막에만 일반 메시지로 폴백합니다
  6. “알 수 없는 오류”는 절대 표시하지 않습니다: 항상 실행 가능한 제안이나 전체 응답을 포함해야 합니다

자주 묻는 질문

Google의 안전 필터링은 무작위성과 문맥 의존성이 있습니다. 참조 이미지의 내용과 prompt를 결합하는 방식이 모두 판단에 영향을 미칩니다. 문구를 조정하거나 더 간접적인 표현을 사용해 보십시오.
candidatesTokenCount: 0 또는 finishReason: PROHIBITED_CONTENT → 콘텐츠 문제; Failed to fetch 또는 HTTP 오류 → 기술 문제; API 텍스트 설명 → 보통 콘텐츠 문제입니다.
단계적 표시: 기본적으로는 친절한 설명 + 수정 제안을 보여주고, 필요하면 기술 세부 정보를 펼쳐 보이며, 개발 모드에서는 전체 JSON 응답을 표시합니다.
아닙니다. 매핑 테이블과 일반적인 폴백이면 충분합니다: reasonMessages[finishReason] || 그런 다음 원시 값을 표시합니다.

관련 읽을거리