엔드포인트 하나로 모든 Gemini 상호작용 다루기
텍스트와 이미지, 도구 호출, JSON 모드 요청은 모두 같은 generateContent 엔드포인트로 보내. 스트리밍 버전은 streamGenerateContent?alt=sse야. 이 구조만 익히면 Gemini의 나머지도 훨씬 단순하게 보여.
요청 구조
요청에는 최상위 필드가 최대 네 개 있어:
contents— 대화 내용이야.{role, parts}객체의 목록이며, role은"user"와"model"을 써."system"역할은 없어.system_instruction— 시스템 프롬프트를 넣는 별도 최상위 필드야. "you are an X" 같은 지시가 여기 들어가.generationConfig— temperature, top-p, top-k, 최대 출력 토큰, 응답 MIME 형식, seed를 정해.safetySettings— 위해 범주마다 차단 기준을 정해.
Parts가 원자 단위야
콘텐츠의 parts 배열에서 각 part는 다음 중 하나야:
- 텍스트 —
{"text": "..."} - 인라인 데이터 —
{"inline_data": {"mime_type": "image/png", "data": "base64..."}} - 파일 데이터 —
{"file_data": {"file_uri": "files/abc"}}(File API에 업로드한 뒤 사용) - 함수 호출 —
{"function_call": {"name": "...", "args": {...}}}(모델 출력) - 함수 응답 —
{"function_response": {"name": "...", "response": {...}}}(도구 실행 결과)
하나의 콘텐츠에 든 parts 배열에는 여러 part를 넣을 수 있어. "이 이미지를 설명해"라는 텍스트와 이미지 자체를 한 사용자 차례에 함께 보내는 식이야.
응답 구조
응답은 모델 출력을 candidates로 감싸. 후보는 거의 항상 하나야. finishReason은 생성이 끝난 이유를 알려 줘. STOP은 정상 종료, MAX_TOKENS는 예산 소진, SAFETY는 필터링, RECITATION은 학습 데이터 반복, OTHER는 보고 싶지 않은 기타 종료야.