endpoint 하나, 모든 Gemini 상호작용
text 보내든, image 보내든, tool call 보내든, JSON 모드 request 보내든 — 같은 endpoint 야: generateContent. streaming variant 는 streamGenerateContent?alt=sse. 모양 외우면 Gemini 의 나머지가 외울 거 없는 거처럼 느껴져.
Request 구조
request 는 최대 네 개 top-level field 가짐:
contents— 대화.{role, parts}객체 list. role 은"user"와"model"."system"role 은 없어.system_instruction— system prompt 용 별도 top-level field. "you are an X" 가 여기 들어감.generationConfig— temperature, top-p, top-k, max output tokens, response MIME type, seed.safetySettings— harm category 별 threshold.
Parts 가 원자 단위
content 의 parts 배열 안에서, 각 part 는 다음 중 하나:
- Text —
{"text": "..."} - Inline data —
{"inline_data": {"mime_type": "image/png", "data": "base64..."}} - File data —
{"file_data": {"file_uri": "files/abc"}}(File API 로 업로드 후) - Function call —
{"function_call": {"name": "...", "args": {...}}}(모델 출력) - Function response —
{"function_response": {"name": "...", "response": {...}}}(너의 tool 결과)
한 content 의 parts 배열에 여러 part 들어갈 수 있어 — "이 이미지 설명해" + 이미지 자체를 한 user turn 안에 보낼 때 그렇게 돼.
Response 모양
응답은 모델 출력을 candidates (거의 항상 한 개) 로 wrap 하고 finishReason 으로 왜 끝났는지 알려줘 — STOP (정상 종료), MAX_TOKENS (예산 소진), SAFETY (필터링), RECITATION (학습 데이터 echo), OTHER (이거 보고 싶지 않을 거야).