Vertex AI์—์„œ Gemini API๋กœ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ

generateContent ๋˜๋Š” streamGenerateContent๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Gemini๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Gemini ๋ชจ๋ธ ๊ณ„์—ด์—๋Š” ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ํ”„๋กฌํ”„ํŠธ ์š”์ฒญ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋ธ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ์ด๋ž€ ํ”„๋กฌํ”„ํŠธ์—์„œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ˜•์‹ ๋˜๋Š” ์ž…๋ ฅ ์œ ํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ์ด ์•„๋‹Œ ๋ชจ๋ธ์€ ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ˜•์‹์—๋Š” ํ…์ŠคํŠธ, ์˜ค๋””์˜ค, ๋™์˜์ƒ ๋“ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Google Cloud ๊ณ„์ •์„ ๋งŒ๋“ค์–ด ์‹œ์ž‘ํ•˜๊ธฐ

Vertex AI API for Gemini๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Google Cloud ๊ณ„์ •์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ณ„์ •์„ ๋งŒ๋“  ํ›„ ์ด ๋ฌธ์„œ์—์„œ Gemini ๋ชจ๋ธ ์š”์ฒญ ๋ณธ๋ฌธ, ๋ชจ๋ธ ํŒŒ๋ผ๋ฏธํ„ฐ, ์‘๋‹ต ๋ณธ๋ฌธ, ๋ช‡ ๊ฐ€์ง€ ์ƒ˜ํ”Œ ์š”์ฒญ์„ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.

์ค€๋น„๊ฐ€ ๋˜๋ฉด Gemini์šฉ Vertex AI API ๋น ๋ฅธ ์‹œ์ž‘์„ ์ฐธ์กฐํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด SDK ๋˜๋Š” REST API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Vertex AI Gemini API์— ์š”์ฒญ์„ ์ „์†กํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”.

์ง€์›๋˜๋Š” ๋ชจ๋ธ

๋ชจ๋ธ ๋ฒ„์ „
Gemini 2.0 Flash-Lite gemini-2.0-flash-lite-001
Gemini 2.0 Flash gemini-2.0-flash-001

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก

๊ตฌํ˜„ ์„ธ๋ถ€์ •๋ณด๋Š” ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์š”์ฒญ ๋ณธ๋ฌธ

{
  "cachedContent": string,
  "contents": [
    {
      "role": string,
      "parts": [
        {
          // Union field data can be only one of the following:
          "text": string,
          "inlineData": {
            "mimeType": string,
            "data": string
          },
          "fileData": {
            "mimeType": string,
            "fileUri": string
          },
          // End of list of possible types for union field data.

          "videoMetadata": {
            "startOffset": {
              "seconds": integer,
              "nanos": integer
            },
            "endOffset": {
              "seconds": integer,
              "nanos": integer
            }
          }
        }
      ]
    }
  ],
  "systemInstruction": {
    "role": string,
    "parts": [
      {
        "text": string
      }
    ]
  },
  "tools": [
    {
      "functionDeclarations": [
        {
          "name": string,
          "description": string,
          "parameters": {
            object (OpenAPI Object Schema)
          }
        }
      ]
    }
  ],
  "safetySettings": [
    {
      "category": enum (HarmCategory),
      "threshold": enum (HarmBlockThreshold)
    }
  ],
  "generationConfig": {
    "temperature": number,
    "topP": number,
    "topK": number,
    "candidateCount": integer,
    "maxOutputTokens": integer,
    "presencePenalty": float,
    "frequencyPenalty": float,
    "stopSequences": [
      string
    ],
    "responseMimeType": string,
    "responseSchema": schema,
    "seed": integer,
    "responseLogprobs": boolean,
    "logprobs": integer,
    "audioTimestamp": boolean
  },
  "labels": {
    string: string
  }
}

์š”์ฒญ ๋ณธ๋ฌธ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Parameters

cachedContent

์„ ํƒ์‚ฌํ•ญ: string

์˜ˆ์ธก์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ปจํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์บ์‹œ๋œ ์ฝ˜ํ…์ธ ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ํ˜•์‹: projects/{project}/locations/{location}/cachedContents/{cachedContent}

contents

ํ•„์ˆ˜: Content

๋ชจ๋ธ๊ณผ์˜ ํ˜„์žฌ ๋Œ€ํ™” ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

์‹ฑ๊ธ€ํ„ด ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ด๋Š” ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐํ„ด ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ด๋Š” ๋Œ€ํ™” ๊ธฐ๋ก๊ณผ ์ตœ๊ทผ ์š”์ฒญ์ด ํฌํ•จ๋œ ๋ฐ˜๋ณต ํ•„๋“œ์ž…๋‹ˆ๋‹ค.

systemInstruction

(์„ ํƒ์‚ฌํ•ญ) Content

gemini-2.0-flash ๋ฐ gemini-2.0-flash-lite์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋ชจ๋ธ์„ ์กฐ์ •ํ•˜๋Š” ์•ˆ๋‚ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด '๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‹ต๋ณ€ํ•˜์„ธ์š”' ๋˜๋Š” '์‘๋‹ต์— ๊ธฐ์ˆ  ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”' ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

text ๋ฌธ์ž์—ด์€ ํ† ํฐ ์ œํ•œ์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

systemInstruction์˜ role ํ•„๋“œ๋Š” ๋ฌด์‹œ๋˜๋ฉฐ ๋ชจ๋ธ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

tools

์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ๋ชจ๋ธ์˜ ์ง€์‹๊ณผ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ์ž‘์—… ๋˜๋Š” ์ž‘์—… ์ง‘ํ•ฉ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ฝ”๋“œ ์กฐ๊ฐ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

toolConfig

์„ ํƒ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

safetySettings

์„ ํƒ์‚ฌํ•ญ: SafetySetting

์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ˜ํ…์ธ ๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ์š”์ฒญ๋ณ„ ์„ค์ •์ž…๋‹ˆ๋‹ค.

GenerateContentResponse.candidates์— ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

generationConfig

์„ ํƒ์‚ฌํ•ญ: GenerationConfig

์ƒ์„ฑ ๊ตฌ์„ฑ ์„ค์ •์ž…๋‹ˆ๋‹ค.

labels

์„ ํƒ์‚ฌํ•ญ: string

ํ‚ค-๊ฐ’ ์Œ ํ˜•์‹์œผ๋กœ API ํ˜ธ์ถœ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

contents

๋ฉ”์‹œ์ง€์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ฝ˜ํ…์ธ ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ณธ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

์ด ํด๋ž˜์Šค๋Š” role ๋ฐ parts๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์†์„ฑ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. role ์†์„ฑ์€ ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐœ๋ณ„ ์‚ฌ์šฉ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  parts ์†์„ฑ์—๋Š” ์—ฌ๋Ÿฌ ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜๋ฉฐ ๊ฐ ์š”์†Œ๋Š” ๋ฉ”์‹œ์ง€ ๋‚ด ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Parameters

role

์„ ํƒ์‚ฌํ•ญ: string

๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ํ•ญ๋ชฉ์˜ ID์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ’์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • user: ์‹ค์ œ ์‚ฌ๋žŒ์ด ๋ฉ”์‹œ์ง€(์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ๋ฉ”์‹œ์ง€)๋ฅผ ๋ณด๋ƒˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • model: ๋ฉ”์‹œ์ง€๊ฐ€ ๋ชจ๋ธ์—์„œ ์ƒ์„ฑ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

model ๊ฐ’์€ ๋ฉ€ํ‹ฐํ„ด ๋Œ€ํ™” ์ค‘์— ๋ชจ๋ธ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋Œ€ํ™”์— ์‚ฝ์ž…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐํ„ด์ด ์•„๋‹Œ ๋Œ€ํ™”์˜ ๊ฒฝ์šฐ ์ด ํ•„๋“œ๋ฅผ ๋น„์›Œ ๋‘๊ฑฐ๋‚˜ ์„ค์ •ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

parts

Part

๋‹จ์ผ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ˆœ์„œ๊ฐ€ ์ง€์ •๋œ ๋ถ€๋ถ„์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ๋ถ€๋ถ„๋งˆ๋‹ค IANA MIME ์œ ํ˜•์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ๋Œ€ ํ† ํฐ ์ˆ˜ ๋˜๋Š” ์ตœ๋Œ€ ์ด๋ฏธ์ง€ ์ˆ˜์™€ ๊ฐ™์€ ์ž…๋ ฅ ํ•œ๋„๋Š” Google ๋ชจ๋ธ ํŽ˜์ด์ง€์˜ ๋ชจ๋ธ ์‚ฌ์–‘์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์š”์ฒญ์— ํฌํ•จ๋œ ํ† ํฐ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋ ค๋ฉด ํ† ํฐ ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

parts

๋ฉ€ํ‹ฐ ํŒŒํŠธ Content ๋ฉ”์‹œ์ง€์˜ ์ผ๋ถ€์ธ ๋ฏธ๋””์–ด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

Parameters

text

์„ ํƒ์‚ฌํ•ญ: string

ํ…์ŠคํŠธ ํ”„๋กฌํ”„ํŠธ ๋˜๋Š” ์ฝ”๋“œ ์Šค๋‹ˆํŽซ์ž…๋‹ˆ๋‹ค.

inlineData

์„ ํƒ์‚ฌํ•ญ: Blob

์›์‹œ ๋ฐ”์ดํŠธ์˜ ์ธ๋ผ์ธ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

gemini-2.0-flash-lite ๋ฐ gemini-2.0-flash์˜ ๊ฒฝ์šฐ inlineData๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๋Œ€ 3,000๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fileData

์„ ํƒ์‚ฌํ•ญ: fileData

ํŒŒ์ผ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

functionCall

์„ ํƒ์‚ฌํ•ญ: FunctionCall.

FunctionDeclaration.name ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด๊ณผ ๋ชจ๋ธ์—์„œ ์˜ˆ์ธกํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋œ ๊ตฌ์กฐํ™”๋œ JSON ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

functionResponse

์„ ํƒ์‚ฌํ•ญ: FunctionResponse.

FunctionDeclaration.name ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด๊ณผ ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ์ถœ๋ ฅ์ด ํฌํ•จ๋œ ๊ตฌ์กฐํ™”๋œ JSON ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋œ FunctionCall์˜ ๊ฒฐ๊ณผ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ์— ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

videoMetadata

์„ ํƒ์‚ฌํ•ญ: VideoMetadata

๋™์˜์ƒ ์ž…๋ ฅ์˜ ๊ฒฝ์šฐ ๊ธฐ๊ฐ„ ํ˜•์‹์˜ ๋™์˜์ƒ ์‹œ์ž‘ ๋ฐ ๋ ์˜คํ”„์…‹์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1:00๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” 10์ดˆ ํด๋ฆฝ์„ ์ง€์ •ํ•˜๋ ค๋ฉด "startOffset": { "seconds": 60 } ๋ฐ "endOffset": { "seconds": 70 }์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋™์˜์ƒ ๋ฐ์ดํ„ฐ๊ฐ€ inlineData ๋˜๋Š” fileData์— ํ‘œ์‹œ๋˜๋Š” ๋™์•ˆ์—๋งŒ ์ง€์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

blob

์ฝ˜ํ…์ธ  blob. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์›์‹œ ๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ ํ…์ŠคํŠธ๋กœ ๋ณด๋‚ด์„ธ์š”.

Parameters

mimeType

string

data ๋˜๋Š” fileUri ํ•„๋“œ์— ์ง€์ •๋œ ํŒŒ์ผ์˜ ๋ฏธ๋””์–ด ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์—ฌ MIME ์œ ํ˜• ํŽผ์น˜๊ธฐ

  • application/pdf
  • audio/mpeg
  • audio/mp3
  • audio/wav
  • image/png
  • image/jpeg
  • image/webp
  • text/plain
  • video/mov
  • video/mpeg
  • video/mp4
  • video/mpg
  • video/avi
  • video/wmv
  • video/mpegps
  • video/flv

gemini-2.0-flash-lite ๋ฐ gemini-2.0-flash์˜ ๊ฒฝ์šฐ ์˜ค๋””์˜ค ํŒŒ์ผ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 8.4์‹œ๊ฐ„์ด๊ณ  ๋™์˜์ƒ ํŒŒ์ผ์˜ ์ตœ๋Œ€ ๊ธธ์ด(์˜ค๋””์˜ค ์ œ์™ธ)๋Š” 1์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Gemini ์˜ค๋””์˜ค ๋ฐ ๋™์˜์ƒ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ…์ŠคํŠธ ํŒŒ์ผ์€ UTF-8๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ํŒŒ์ผ ์ฝ˜ํ…์ธ ๋Š” ํ† ํฐ ์ œํ•œ์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ํ•ด์ƒ๋„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

data

bytes

ํ”„๋กฌํ”„ํŠธ์—์„œ ์ธ๋ผ์ธ์„ ํฌํ•จํ•  ์ด๋ฏธ์ง€, PDF, ๋˜๋Š” ๋™์˜์ƒ์˜ base64 ์ธ์ฝ”๋”ฉ์ž…๋‹ˆ๋‹ค. ๋ฏธ๋””์–ด๋ฅผ ์ธ๋ผ์ธ์œผ๋กœ ํฌํ•จํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ์˜ ๋ฏธ๋””์–ด ์œ ํ˜•(mimeType)๋„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํฌ๊ธฐ ์ œํ•œ: 20MB

FileData

URI ๋˜๋Š” ์›น URL ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

Parameters

mimeType

string

๋ฐ์ดํ„ฐ์˜ IANA MIME ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

fileUri

string

ํ”„๋กฌํ”„ํŠธ์— ํฌํ•จํ•  ํŒŒ์ผ์˜ URI ๋˜๋Š” URL์ž…๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Cloud Storage ๋ฒ„ํ‚ท URI: ๊ฐ์ฒด๋Š” ๊ณต๊ฐœ์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋™์ผํ•œ Google Cloud ํ”„๋กœ์ ํŠธ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. gemini-2.0-flash ๋ฐ gemini-2.0-flash-lite์˜ ๊ฒฝ์šฐ ํฌ๊ธฐ ์ œํ•œ์€ 2GB์ž…๋‹ˆ๋‹ค.
  • HTTP URL: ํŒŒ์ผ URL์€ ๊ณต๊ฐœ์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ๋‹น ๋™์˜์ƒ ํŒŒ์ผ ํ•˜๋‚˜, ์˜ค๋””์˜ค ํŒŒ์ผ ํ•˜๋‚˜, ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ตœ๋Œ€ 10๊ฐœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋””์˜ค ํŒŒ์ผ, ๋™์˜์ƒ ํŒŒ์ผ, ๋ฌธ์„œ๋Š” 15MB๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • YouTube ๋™์˜์ƒ URL: YouTube ๋™์˜์ƒ์€ Google Cloud ์ฝ˜์†”์— ๋กœ๊ทธ์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ๊ณ„์ •์ด ์†Œ์œ ํ•œ ๊ฒƒ์ด๊ฑฐ๋‚˜ ๊ณต๊ฐœ๋œ ๋™์˜์ƒ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ๋‹น ํ•˜๋‚˜์˜ YouTube ๋™์˜์ƒ URL๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

fileURI๋ฅผ ์ง€์ •ํ•  ๋•Œ๋Š” ํŒŒ์ผ์˜ ๋ฏธ๋””์–ด ์œ ํ˜•(mimeType)๋„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. VPC ์„œ๋น„์Šค ์ œ์–ด๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ๊ฒฝ์šฐ fileURI์˜ ๋ฏธ๋””์–ด ํŒŒ์ผ URL์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

functionCall

functionDeclaration.name์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ๋ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ•ด๋‹น ๊ฐ’์ด ํฌํ•จ๋œ ๊ตฌ์กฐํ™”๋œ JSON ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ชจ๋ธ์—์„œ ๋ฐ˜ํ™˜๋œ ์˜ˆ์ธก๋œ functionCall์ž…๋‹ˆ๋‹ค.

Parameters

name

string

ํ˜ธ์ถœํ•˜๋ ค๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

args

Struct

JSON ๊ฐ์ฒด ํ˜•์‹์˜ ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜ ์„ธ๋ถ€์ •๋ณด๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

functionResponse

FunctionDeclaration.name์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ FunctionCall์˜ ๊ฒฐ๊ณผ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ์ถœ๋ ฅ์ด ํฌํ•จ๋œ ์ •ํ˜• JSON ๊ฐ์ฒด๋„ ํฌํ•จ๋˜๋ฉฐ ์ด๋ฅผ ๋ชจ๋ธ์˜ ์ปจํ…์ŠคํŠธ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ชจ๋ธ ์˜ˆ์ธก์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์„ฑ๋œ FunctionCall์˜ ๊ฒฐ๊ณผ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Parameters

name

string

ํ˜ธ์ถœํ•˜๋ ค๋Š” ํ•จ์ˆ˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

response

Struct

JSON ๊ฐ์ฒด ํ˜•์‹์˜ ํ•จ์ˆ˜ ์‘๋‹ต์ž…๋‹ˆ๋‹ค.

videoMetadata

์ž…๋ ฅ ๋™์˜์ƒ ์ฝ˜ํ…์ธ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

Parameters

startOffset

์„ ํƒ์‚ฌํ•ญ: google.protobuf.Duration

๋™์˜์ƒ์˜ ์‹œ์ž‘ ์˜คํ”„์…‹์ž…๋‹ˆ๋‹ค.

endOffset

์„ ํƒ์‚ฌํ•ญ: google.protobuf.Duration

๋™์˜์ƒ์˜ ์ข…๋ฃŒ ์˜คํ”„์…‹์ž…๋‹ˆ๋‹ค.

safetySetting

์•ˆ์ „ ์„ค์ •์ž…๋‹ˆ๋‹ค.

Parameters

category

์„ ํƒ์‚ฌํ•ญ: HarmCategory

๊ธฐ์ค€์ ์„ ๊ตฌ์„ฑํ•  ์•ˆ์ „ ์นดํ…Œ๊ณ ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์—ฌ ์•ˆ์ „ ์นดํ…Œ๊ณ ๋ฆฌ ํŽผ์น˜๊ธฐ

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
  • HARM_CATEGORY_HATE_SPEECH
  • HARM_CATEGORY_HARASSMENT
  • HARM_CATEGORY_DANGEROUS_CONTENT

threshold

์„ ํƒ์‚ฌํ•ญ: HarmBlockThreshold

ํ™•๋ฅ ์— ๋”ฐ๋ผ ์ง€์ •๋œ ์•ˆ์ „ ์นดํ…Œ๊ณ ๋ฆฌ์— ์†ํ•  ์ˆ˜ ์žˆ๋Š” ์‘๋‹ต ์ฐจ๋‹จ์˜ ๊ธฐ์ค€์ ์ž…๋‹ˆ๋‹ค.

  • OFF
  • BLOCK_NONE
  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

method

์„ ํƒ์‚ฌํ•ญ: HarmBlockMethod

ํ™•๋ฅ  ๋˜๋Š” ์‹ฌ๊ฐ๋„ ์ ์ˆ˜์— ๊ธฐ์ค€์ ์ด ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ์ค€์ ์ด ํ™•๋ฅ  ์ ์ˆ˜์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

harmCategory

์ฝ˜ํ…์ธ ๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ์œ ํ•ด ์นดํ…Œ๊ณ ๋ฆฌ์ž…๋‹ˆ๋‹ค.

Parameters

HARM_CATEGORY_UNSPECIFIED

ํ”ผํ•ด ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

HARM_CATEGORY_HATE_SPEECH

ํ”ผํ•ด ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์ฆ์˜ค์‹ฌ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค.

HARM_CATEGORY_DANGEROUS_CONTENT

ํ”ผํ•ด ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์œ„ํ—˜ํ•œ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

HARM_CATEGORY_HARASSMENT

ํ”ผํ•ด ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ๊ดด๋กญํž˜์ž…๋‹ˆ๋‹ค.

HARM_CATEGORY_SEXUALLY_EXPLICIT

ํ”ผํ•ด ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ์Œ๋ž€๋ฌผ์ž…๋‹ˆ๋‹ค.

harmBlockThreshold

์‘๋‹ต์„ ์ฐจ๋‹จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ™•๋ฅ  ์ž„๊ณ—๊ฐ’ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.

Parameters

HARM_BLOCK_THRESHOLD_UNSPECIFIED

์ง€์ •๋˜์ง€ ์•Š์€ ํ”ผํ•ด ์ฐจ๋‹จ ๊ธฐ์ค€์ ์ž…๋‹ˆ๋‹ค.

BLOCK_LOW_AND_ABOVE

๋‚ฎ์€ ๊ธฐ์ค€์  ์ด์ƒ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ๋” ์ฐจ๋‹จ).

BLOCK_MEDIUM_AND_ABOVE

์ค‘๊ฐ„ ๊ธฐ์ค€์  ์ด์ƒ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

BLOCK_ONLY_HIGH

๋†’์€ ๊ธฐ์ค€์ ๋งŒ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค(์ฆ‰, ๋œ ์ฐจ๋‹จ).

BLOCK_NONE

์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

OFF

๋ชจ๋“  ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ง€๋œ ๊ฒฝ์šฐ ์•ˆ์ „์„ ์‚ฌ์šฉ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

harmBlockMethod

ํ™•๋ฅ ๊ณผ ์‹ฌ๊ฐ๋„์˜ ์กฐํ•ฉ์— ๋”ฐ๋ผ ์‘๋‹ต์„ ์ฐจ๋‹จํ•˜๋Š” ํ™•๋ฅ  ๊ธฐ์ค€์ ์ž…๋‹ˆ๋‹ค.

Parameters

HARM_BLOCK_METHOD_UNSPECIFIED

ํ”ผํ•ด ์ฐจ๋‹จ ๋ฉ”์„œ๋“œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

SEVERITY

ํ”ผํ•ด ์ฐจ๋‹จ ๋ฉ”์„œ๋“œ์—์„œ ํ™•๋ฅ  ์ ์ˆ˜์™€ ์‹ฌ๊ฐ๋„ ์ ์ˆ˜๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

PROBABILITY

ํ”ผํ•ด ์ฐจ๋‹จ ๋ฉ”์„œ๋“œ์—์„œ ํ™•๋ฅ  ์ ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

generationConfig

ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์„ฑ ์„ค์ •์ž…๋‹ˆ๋‹ค.

Parameters

temperature

์„ ํƒ์‚ฌํ•ญ: float

๊ฐ•๋„(temperature)๋Š” ์‘๋‹ต ์ƒ์„ฑ ์ค‘ ์ƒ˜ํ”Œ๋ง์— ์‚ฌ์šฉ๋˜๋ฉฐ topP ๋ฐ topK๊ฐ€ ์ ์šฉ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜จ๋„๋Š” ํ† ํฐ ์„ ํƒ์˜ ๋ฌด์ž‘์œ„์„ฑ ์ˆ˜์ค€์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๋‚ฎ์€ ์˜จ๋„๋Š” ๋œ ๊ฐœ๋ฐฉ์ ์ธ ๋˜๋Š” ๋œ ์ฐฝ์˜์ ์ธ ๋Œ€๋‹ต์ด ํ•„์š”ํ•œ ํ”„๋กฌํ”„ํŠธ์— ์ ํ•ฉํ•œ ๋ฐ˜๋ฉด, ๋†’์€ ์˜จ๋„๋Š” ๋” ์ฐฝ์˜์ ์ธ ๋Œ€๋‹ต์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜จ๋„๊ฐ€ 0์ด๋ฉด ํ™•๋ฅ ์ด ๊ฐ€์žฅ ๋†’์€ ํ† ํฐ์ด ํ•ญ์ƒ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํŠน์ • ํ”„๋กฌํ”„ํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์€ ๋Œ€๋ถ€๋ถ„ ํ™•์ •์ ์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ์•ฝ๊ฐ„์˜ ๋ณ€ํ˜•์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ด๊ฑฐ๋‚˜, ๋„ˆ๋ฌด ์งง์€ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋ชจ๋ธ์ด ๋Œ€์ฒด ์‘๋‹ต์„ ์ œ๊ณตํ•  ๊ฒฝ์šฐ์—๋Š” ์˜จ๋„(temperature)๋ฅผ ๋†’์—ฌ๋ณด์„ธ์š”.

  • gemini-2.0-flash-lite ๋ฒ”์œ„: 0.0 - 2.0(๊ธฐ๋ณธ๊ฐ’: 1.0)
  • gemini-2.0-flash ๋ฒ”์œ„: 0.0 - 2.0(๊ธฐ๋ณธ๊ฐ’: 1.0)

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

topP

์„ ํƒ์‚ฌํ•ญ: float

์ง€์ •๋œ ๊ฒฝ์šฐ Nucleus ์ƒ˜ํ”Œ๋ง์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Top-P๋Š” ๋ชจ๋ธ์ด ์ถœ๋ ฅ์šฉ ํ† ํฐ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ํ† ํฐ์€ ํ™•๋ฅ ์˜ ํ•ฉ์ด Top-P ๊ฐ’๊ณผ ๊ฐ™์•„์งˆ ๋•Œ๊นŒ์ง€ ํ™•๋ฅ ์ด ๊ฐ€์žฅ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ(Top-K ์ฐธ์กฐ) ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฒƒ๊นŒ์ง€ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ† ํฐ A, B, C์˜ ํ™•๋ฅ ์ด 0.3, 0.2, 0.1์ด๊ณ  Top-P ๊ฐ’์ด 0.5๋ฉด ๋ชจ๋ธ์ด ๊ฐ•๋„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‹ค์Œ ํ† ํฐ์œผ๋กœ A ๋˜๋Š” B๋ฅผ ์„ ํƒํ•˜๊ณ  C๋Š” ํ›„๋ณด์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

์ž„์˜์„ฑ์ด ๋‚ฎ์€ ์‘๋‹ต์„ ์œ„ํ•ด์„œ๋Š” ๋‚ฎ์€ ๊ฐ’์„ ์ง€์ •ํ•˜๊ณ  ์ž„์˜์„ฑ์ด ๋†’์€ ์‘๋‹ต์„ ์œ„ํ•ด์„œ๋Š” ๋†’์€ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฒ”์œ„: 0.0 - 1.0
  • gemini-2.0-flash-lite ๊ธฐ๋ณธ๊ฐ’: 0.95
  • gemini-2.0-flash ๊ธฐ๋ณธ๊ฐ’: 0.95

candidateCount

์„ ํƒ์‚ฌํ•ญ: int

๋ฐ˜ํ™˜ํ•  ์‘๋‹ต ๋ณ€ํ˜•์˜ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ฐ ์š”์ฒญ์— ๋Œ€ํ•ด ๋ชจ๋“  ํ›„๋ณด์˜ ์ถœ๋ ฅ ํ† ํฐ์ด ์ฒญ๊ตฌ๋˜์ง€๋งŒ ์ž…๋ ฅ ํ† ํฐ์€ ํ•œ ๋ฒˆ๋งŒ ์ฒญ๊ตฌ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํ›„๋ณด ์ง€์ •์€ generateContent์—์„œ ์ž‘๋™ํ•˜๋Š” ํ”„๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค(streamGenerateContent๋Š” ์ง€์›๋˜์ง€ ์•Š์Œ). ์ง€์›๋˜๋Š” ๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • gemini-2.0-flash-lite: 1-8, ๊ธฐ๋ณธ๊ฐ’: 1
  • gemini-2.0-flash: 1-8, ๊ธฐ๋ณธ๊ฐ’: 1

maxOutputTokens

์„ ํƒ์‚ฌํ•ญ: int

์‘๋‹ต์—์„œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ํ† ํฐ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค. ํ† ํฐ์€ ์•ฝ 4์ž(์˜๋ฌธ ๊ธฐ์ค€)์ž…๋‹ˆ๋‹ค. ํ† ํฐ 100๊ฐœ๋Š” ๋‹จ์–ด ์•ฝ 60~80๊ฐœ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์‘๋‹ต์ด ์งง์„์ˆ˜๋ก ๋‚ฎ์€ ๊ฐ’์„ ์ง€์ •ํ•˜๊ณ  ์ž ์žฌ์ ์œผ๋กœ ์‘๋‹ต์ด ๊ธธ๋ฉด ๋†’์€ ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

stopSequences

์„ ํƒ์‚ฌํ•ญ: List[string]

๋ฌธ์ž์—ด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์‘๋‹ต์—์„œ ๋ฐœ๊ฒฌ๋˜๋ฉด ๋ชจ๋ธ์— ํ…์ŠคํŠธ ์ƒ์„ฑ์„ ์ค‘์ง€ํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ๋ฌธ์ž์—ด ๋ชฉ๋ก์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์ด ์‘๋‹ต์— ์—ฌ๋Ÿฌ ๋ฒˆ ํ‘œ์‹œ๋˜๋ฉด ์ฒ˜์Œ ๋ฐœ๊ฒฌ๋œ ์œ„์น˜์—์„œ ์‘๋‹ต์ด ์ž˜๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด stopSequences๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜์„ ๋•Œ ๋‹ค์Œ์ด ๋ฐ˜ํ™˜๋˜๋ฉด

public static string reverse(string myString)

stopSequences๊ฐ€ ["Str", "reverse"]๋กœ ์„ค์ •๋œ ์‘๋‹ต์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

public static string

๋ชฉ๋ก์˜ ์ตœ๋Œ€ ํ•ญ๋ชฉ ์ˆ˜๋Š” 5๊ฐœ์ž…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

presencePenalty

์„ ํƒ์‚ฌํ•ญ: float

์–‘์ˆ˜ ํŽ˜๋„ํ‹ฐ์ž…๋‹ˆ๋‹ค.

์–‘์ˆ˜ ๊ฐ’์€ ์ƒ์„ฑ๋œ ํ…์ŠคํŠธ์— ์ด๋ฏธ ํ‘œ์‹œ๋œ ํ† ํฐ์— ํŽ˜๋„ํ‹ฐ๋ฅผ ์ ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ฝ˜ํ…์ธ ๊ฐ€ ์ƒ์„ฑ๋  ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

presencePenalty์˜ ์ตœ๋Œ“๊ฐ’์€ 2.0 ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค. ์ตœ์†Ÿ๊ฐ’์€ -2.0์ž…๋‹ˆ๋‹ค.

gemini-2.0-flash-lite-001 ๋ฐ gemini-2.0-flash-001์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

frequencyPenalty

์„ ํƒ์‚ฌํ•ญ: float

์–‘์ˆ˜ ๊ฐ’์€ ์ƒ์„ฑ๋œ ํ…์ŠคํŠธ์— ๋ฐ˜๋ณต์ ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ํ† ํฐ์— ํŽ˜๋„ํ‹ฐ๋ฅผ ์ ์šฉํ•˜์—ฌ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ฐ˜๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ž…๋‹ˆ๋‹ค.

frequencyPenalty์˜ ์ตœ๋Œ“๊ฐ’์€ 2.0 ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค. ์ตœ์†Ÿ๊ฐ’์€ -2.0์ž…๋‹ˆ๋‹ค.

gemini-2.0-flash-lite-001 ๋ฐ gemini-2.0-flash-001์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

responseMimeType

์„ ํƒ์‚ฌํ•ญ: string (enum)

๋‹ค์Œ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • gemini-2.0-flash-lite-001
  • gemini-2.0-flash-001

์ƒ์„ฑ๋œ ํ›„๋ณด ํ…์ŠคํŠธ์˜ ์ถœ๋ ฅ ์‘๋‹ต MIME ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” MIME ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • application/json: ํ›„๋ณด์˜ JSON ์‘๋‹ต์ž…๋‹ˆ๋‹ค.
  • text/plain(๊ธฐ๋ณธ๊ฐ’): ์ผ๋ฐ˜ ํ…์ŠคํŠธ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค.
  • text/x.enum: ๋ถ„๋ฅ˜ ํƒœ์Šคํฌ์˜ ๊ฒฝ์šฐ ์‘๋‹ต ์Šคํ‚ค๋งˆ์— ์ •์˜๋œ ๋Œ€๋กœ ์—ด๊ฑฐํ˜• ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์˜๋„ํ•˜์ง€ ์•Š์€ ๋™์ž‘์ด ๋ฐฉ์ง€๋˜๋„๋ก ์ ์ ˆํ•œ ์‘๋‹ต ์œ ํ˜•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด JSON ํ˜•์‹์˜ ์‘๋‹ต์ด ํ•„์š”ํ•˜๋ฉด text/plain์ด ์•„๋‹Œ application/json์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

responseSchema

์„ ํƒ์‚ฌํ•ญ: ์Šคํ‚ค๋งˆ

ํ›„๋ณด ํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ ์Šคํ‚ค๋งˆ๊ฐ€ ์ด์–ด์„œ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ƒ์„ฑ๋œ ์ถœ๋ ฅ ์ œ์–ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด responseMimeType ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • gemini-2.0-flash-lite-001
  • gemini-2.0-flash-001

seed

์„ ํƒ์‚ฌํ•ญ: int

์‹œ๋“œ๊ฐ€ ํŠน์ • ๊ฐ’์œผ๋กœ ๊ณ ์ •๋˜๋ฉด ๋ชจ๋ธ์€ ๋ฐ˜๋ณต๋œ ์š”์ฒญ์— ๊ฐ™์€ ์‘๋‹ต์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ์ •๋ก ์  ์ถœ๋ ฅ์€ ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์˜จ๋„์™€ ๊ฐ™์€ ๋ชจ๋ธ ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๊ฐ™์€ ์‹œ๋“œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์‘๋‹ต์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด์ž‘์œ„ ์‹œ๋“œ ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • gemini-2.0-flash-lite-001
  • gemini-2.0-flash-001

์ด ๊ธฐ๋Šฅ์€ ํ”„๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

responseLogprobs

์„ ํƒ์‚ฌํ•ญ: boolean

true์ธ ๊ฒฝ์šฐ ๊ฐ ๋‹จ๊ณ„์—์„œ ๋ชจ๋ธ์ด ์„ ํƒํ•œ ํ† ํฐ์˜ ๋กœ๊ทธ ํ™•๋ฅ ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” false๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. responseLogprobs๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์š”์ฒญ์˜ ์ผ์ผ ํ•œ๋„๋Š” 1์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • gemini-2.0-flash-lite-001
  • gemini-2.0-flash-001

์ด ๊ธฐ๋Šฅ์€ ํ”„๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

logprobs

์„ ํƒ์‚ฌํ•ญ: int

๊ฐ ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ์ƒ์œ„ ํ›„๋ณด ํ† ํฐ์˜ ๋กœ๊ทธ ํ™•๋ฅ ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์—์„œ ์„ ํƒํ•œ ํ† ํฐ์€ ๊ฐ ๋‹จ๊ณ„์˜ ์ƒ์œ„ ํ›„๋ณด ํ† ํฐ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1~5 ๋ฒ”์œ„์˜ ์ •์ˆ˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•  ํ›„๋ณด ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด responseLogprobs๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. logprobs๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์š”์ฒญ์˜ ์ผ์ผ ํ•œ๋„๋Š” 1์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ํ”„๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

audioTimestamp

์„ ํƒ์‚ฌํ•ญ: boolean

๋‹ค์Œ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • gemini-2.0-flash-lite-001
  • gemini-2.0-flash-001

์˜ค๋””์˜ค ์ „์šฉ ํŒŒ์ผ์˜ ํƒ€์ž„์Šคํƒฌํ”„ ์ดํ•ด๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ํ”„๋ฆฌ๋ทฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์‘๋‹ต ๋ณธ๋ฌธ

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": string
          }
        ]
      },
      "finishReason": enum (FinishReason),
      "safetyRatings": [
        {
          "category": enum (HarmCategory),
          "probability": enum (HarmProbability),
          "blocked": boolean
        }
      ],
      "citationMetadata": {
        "citations": [
          {
            "startIndex": integer,
            "endIndex": integer,
            "uri": string,
            "title": string,
            "license": string,
            "publicationDate": {
              "year": integer,
              "month": integer,
              "day": integer
            }
          }
        ]
      },
      "avgLogprobs": double,
      "logprobsResult": {
        "topCandidates": [
          {
            "candidates": [
              {
                "token": string,
                "logProbability": float
              }
            ]
          }
        ],
        "chosenCandidates": [
          {
            "token": string,
            "logProbability": float
          }
        ]
      }
    }
  ],
  "usageMetadata": {
    "promptTokenCount": integer,
    "candidatesTokenCount": integer,
    "totalTokenCount": integer
  },
  "modelVersion": string
}
์‘๋‹ต ์š”์†Œ ์„ค๋ช…
modelVersion ์ƒ์„ฑ์— ์‚ฌ์šฉ๋œ ๋ชจ๋ธ ๋ฐ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด gemini-1.5-flash-002์ž…๋‹ˆ๋‹ค.
text ์ƒ์„ฑ๋œ ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
finishReason ๋ชจ๋ธ ํ† ํฐ ์ƒ์„ฑ์ด ์ค‘์ง€๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋น„์–ด ์žˆ์œผ๋ฉด ๋ชจ๋ธ์ด ํ† ํฐ ์ƒ์„ฑ์„ ์ค‘๋‹จํ•˜์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‘๋‹ต์€ ์ปจํ…์ŠคํŠธ๋ฅผ ์œ„ํ•ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ธ์˜ ํ† ํฐ ์ƒ์„ฑ ์ค‘์ง€ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • FINISH_REASON_STOP: ๋ชจ๋ธ์˜ ์ž์—ฐ ์ค‘๋‹จ ์ง€์  ๋˜๋Š” ์ค‘์ง€ ์‹œํ€€์Šค๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • FINISH_REASON_MAX_TOKENS: ์š”์ฒญ์— ์ง€์ •๋œ ์ตœ๋Œ€ ํ† ํฐ ์ˆ˜์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • FINISH_REASON_SAFETY: ์•ˆ์ „์ƒ์˜ ์ด์œ ๋กœ ์‘๋‹ต์ด ์‹ ๊ณ ๋˜์–ด ํ† ํฐ ์ƒ์„ฑ์ด ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ  ํ•„ํ„ฐ๊ฐ€ ์ถœ๋ ฅ์„ ์ฐจ๋‹จํ•˜๋Š” ๊ฒฝ์šฐ Candidate.content์ด(๊ฐ€) ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • FINISH_REASON_RECITATION: ์‘๋‹ต์ด ์Šน์ธ๋˜์ง€ ์•Š์€ ์ธ์šฉ์œผ๋กœ ์‹ ๊ณ ๋˜์–ด ํ† ํฐ ์ƒ์„ฑ์ด ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • FINISH_REASON_BLOCKLIST: ์‘๋‹ต์— ์ฐจ๋‹จ๋œ ์šฉ์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ† ํฐ ์ƒ์„ฑ์ด ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • FINISH_REASON_PROHIBITED_CONTENT: ์•„๋™ ์„ฑ์  ํ•™๋Œ€ ์ฝ˜ํ…์ธ (CSAM)์™€ ๊ฐ™์€ ๊ธˆ์ง€๋œ ์ฝ˜ํ…์ธ ๋กœ ์ธํ•ด ์‘๋‹ต์ด ์‹ ๊ณ ๋˜์–ด ํ† ํฐ ์ƒ์„ฑ์ด ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • FINISH_REASON_SPII: ๋ฏผ๊ฐํ•œ ๊ฐœ์ธ ์‹๋ณ„ ์ •๋ณด(SPII)๋กœ ์ธํ•ด ์‘๋‹ต์ด ์‹ ๊ณ ๋˜์–ด ํ† ํฐ ์ƒ์„ฑ์ด ์ค‘์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • FINISH_REASON_MALFORMED_FUNCTION_CALL: ์ž˜๋ชป๋œ ํ˜•์‹์˜ ํŒŒ์‹ฑํ•  ์ˆ˜ ์—†๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์ธํ•ด ํ›„๋ณด๊ฐ€ ์ฐจ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • FINISH_REASON_OTHER: ํ† ํฐ ์ƒ์„ฑ์ด ์ค‘์ง€๋œ ๊ทธ ์™ธ ๋ชจ๋“  ์ด์œ 
  • FINISH_REASON_UNSPECIFIED: ์ข…๋ฃŒ ์ด์œ ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
category ๊ธฐ์ค€์ ์„ ๊ตฌ์„ฑํ•  ์•ˆ์ „ ์นดํ…Œ๊ณ ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์—ฌ ์•ˆ์ „ ์นดํ…Œ๊ณ ๋ฆฌ ํŽผ์น˜๊ธฐ

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
  • HARM_CATEGORY_HATE_SPEECH
  • HARM_CATEGORY_HARASSMENT
  • HARM_CATEGORY_DANGEROUS_CONTENT
probability ์œ ํ•ด ์ฝ˜ํ…์ธ ์ผ ํ™•๋ฅ  ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.
  • HARM_PROBABILITY_UNSPECIFIED
  • NEGLIGIBLE
  • LOW
  • MEDIUM
  • HIGH
blocked ๋ชจ๋ธ์˜ ์ž…๋ ฅ์ด๋‚˜ ์ถœ๋ ฅ์ด ์ฐจ๋‹จ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์•ˆ์ „ ์†์„ฑ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ถˆ๋ฆฌ์–ธ ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.
startIndex content์—์„œ ์ธ์šฉ์ด ์‹œ์ž‘๋˜๋Š” ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.
endIndex content์—์„œ ์ธ์šฉ์ด ๋๋‚˜๋Š” ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.
url ์ธ์šฉ ์ถœ์ฒ˜์˜ URL์ž…๋‹ˆ๋‹ค. URL ์†Œ์Šค์˜ ์˜ˆ์‹œ์—๋Š” ๋‰ด์Šค ์›น์‚ฌ์ดํŠธ ๋˜๋Š” GitHub ์ €์žฅ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
title ์ธ์šฉ ์ถœ์ฒ˜์˜ ์ œ๋ชฉ์ž…๋‹ˆ๋‹ค. ์†Œ์Šค ์ œ๋ชฉ์˜ ์˜ˆ์‹œ์—๋Š” ๋‰ด์Šค ๊ธฐ์‚ฌ ๋˜๋Š” ๋„์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
license ์ธ์šฉ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ผ์ด์„ ์Šค์ž…๋‹ˆ๋‹ค.
publicationDate ์ธ์šฉ์ด ๊ฒŒ์‹œ๋œ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. ์œ ํšจํ•œ ํ˜•์‹์€ YYYY, YYYY-MM, YYYY-MM-DD์ž…๋‹ˆ๋‹ค.
avgLogprobs ํ›„๋ณด์˜ ํ‰๊ท  ๋กœ๊ทธ ํ™•๋ฅ ์ž…๋‹ˆ๋‹ค.
logprobsResult ๊ฐ ๋‹จ๊ณ„์—์„œ ์ƒ์œ„ ํ›„๋ณด ํ† ํฐ(topCandidates)๊ณผ ์‹ค์ œ๋กœ ์„ ํƒ๋œ ํ† ํฐ(chosenCandidates)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
token ์ƒ์„ฑํ˜• AI ๋ชจ๋ธ์€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ํ† ํฐ(๋ฌธ์ž, ๋‹จ์–ด ๋˜๋Š” ๊ตฌ๋ฌธ)์œผ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค.
logProbability ํŠน์ • ํ† ํฐ์— ๋Œ€ํ•œ ๋ชจ๋ธ ์‹ ๋ขฐ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋กœ๊ทธ ํ™•๋ฅ  ๊ฐ’์ž…๋‹ˆ๋‹ค.
promptTokenCount ์š”์ฒญ์˜ ํ† ํฐ ์ˆ˜์ž…๋‹ˆ๋‹ค.
candidatesTokenCount ์‘๋‹ต์˜ ํ† ํฐ ์ˆ˜์ž…๋‹ˆ๋‹ค.
totalTokenCount ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ํ† ํฐ ์ˆ˜์ž…๋‹ˆ๋‹ค.

์˜ˆ

๋น„์ŠคํŠธ๋ฆฌ๋ฐ ํ…์ŠคํŠธ ์‘๋‹ต

ํ…์ŠคํŠธ ์ž…๋ ฅ์—์„œ ๋น„์ŠคํŠธ๋ฆฌ๋ฐ ๋ชจ๋ธ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Gen AI SDK for Python

from google import genai
from google.genai.types import HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))
response = client.models.generate_content(
    model="gemini-2.0-flash-001",
    contents="How does AI work?",
)
print(response.text)
# Example response:
# Okay, let's break down how AI works. It's a broad field, so I'll focus on the ...
#
# Here's a simplified overview:
# ...

Python(OpenAI)

OpenAI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Inference API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ OpenAI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Vertex AI ๋ชจ๋ธ ํ˜ธ์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

from google.auth import default
import google.auth.transport.requests

import openai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-2.0-flash-001",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

print(response)

๋น„์ŠคํŠธ๋ฆฌ๋ฐ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์‘๋‹ต

ํ…์ŠคํŠธ์™€ ์ด๋ฏธ์ง€ ๊ฐ™์€ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ž…๋ ฅ์œผ๋กœ๋ถ€ํ„ฐ ๋น„์ŠคํŠธ๋ฆฌ๋ฐ ๋ชจ๋ธ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Gen AI SDK for Python

from google import genai
from google.genai.types import HttpOptions, Part

client = genai.Client(http_options=HttpOptions(api_version="v1"))
response = client.models.generate_content(
    model="gemini-2.0-flash-001",
    contents=[
        "What is shown in this image?",
        Part.from_uri(
            file_uri="gs://cloud-samples-data/generative-ai/image/scones.jpg",
            mime_type="image/jpeg",
        ),
    ],
)
print(response.text)
# Example response:
# The image shows a flat lay of blueberry scones arranged on parchment paper. There are ...

Python(OpenAI)

OpenAI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Inference API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ OpenAI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Vertex AI ๋ชจ๋ธ ํ˜ธ์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.


from google.auth import default
import google.auth.transport.requests

import openai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-2.0-flash-001",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Describe the following image:"},
                {
                    "type": "image_url",
                    "image_url": "gs://cloud-samples-data/generative-ai/image/scones.jpg",
                },
            ],
        }
    ],
)

print(response)

์ŠคํŠธ๋ฆฌ๋ฐ ํ…์ŠคํŠธ ์‘๋‹ต

ํ…์ŠคํŠธ ์ž…๋ ฅ์—์„œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ชจ๋ธ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Gen AI SDK for Python

from google import genai
from google.genai.types import HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))
response_text = ""
for chunk in client.models.generate_content_stream(
    model="gemini-2.0-flash-001",
    contents="Why is the sky blue?",
):
    print(chunk.text, end="")
    response_text += chunk.text
# Example response:
# The
#  sky appears blue due to a phenomenon called **Rayleigh scattering**. Here's
#  a breakdown of why:
# ...

Python(OpenAI)

OpenAI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Inference API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ OpenAI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Vertex AI ๋ชจ๋ธ ํ˜ธ์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

from google.auth import default
import google.auth.transport.requests

import openai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-2.0-flash-001",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
    stream=True,
)
for chunk in response:
    print(chunk)

์ŠคํŠธ๋ฆฌ๋ฐ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์‘๋‹ต

ํ…์ŠคํŠธ ๋ฐ ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ž…๋ ฅ์—์„œ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ชจ๋ธ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Python(OpenAI)

OpenAI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Inference API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ OpenAI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Vertex AI ๋ชจ๋ธ ํ˜ธ์ถœ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

from google.auth import default
import google.auth.transport.requests

import openai

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
credentials.refresh(google.auth.transport.requests.Request())

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-2.0-flash-001",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Describe the following image:"},
                {
                    "type": "image_url",
                    "image_url": "gs://cloud-samples-data/generative-ai/image/scones.jpg",
                },
            ],
        }
    ],
    stream=True,
)
for chunk in response:
    print(chunk)

๋ชจ๋ธ ๋ฒ„์ „

์ž๋™ ์—…๋ฐ์ดํŠธ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ›„ํ–‰ ๋ฒ„์ „ ๋ฒˆํ˜ธ ์—†์ด ๋ชจ๋ธ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: gemini-2.0-flash-001 ๋Œ€์‹  gemini-2.0-flash).

์ž์„ธํ•œ ๋‚ด์šฉ์€ Gemini ๋ชจ๋ธ ๋ฒ„์ „ ๋ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„