Generating content

Gemini API는 이미지, 오디오, 코드, 도구 등을 사용한 콘텐츠 생성을 지원합니다. 각 기능에 관한 자세한 내용은 계속 읽어보고 작업 중심 샘플 코드를 확인하거나 종합 가이드를 참고하세요.

메서드: models.generateContent

입력 GenerateContentRequest가 주어지면 모델 대답을 생성합니다. 자세한 사용 정보는 텍스트 생성 가이드를 참고하세요. 조정된 모델을 포함하여 모델마다 입력 기능이 다릅니다. 자세한 내용은 모델 가이드 및 조정 가이드를 참고하세요.

엔드포인트

게시물 https://generativelanguage.googleapis.com/v1beta/{model=models/*}:generateContent

경로 매개변수

model string

필수 항목입니다. 완성을 생성하는 데 사용할 Model의 이름입니다.

형식은 models/{model}입니다. models/{model} 형식이 사용됩니다.

요청 본문

요청 본문에는 다음과 같은 구조의 데이터가 포함됩니다.

필드
contents[] object (Content)

필수 항목입니다. 모델과의 현재 대화 콘텐츠입니다.

싱글턴 쿼리의 경우 이는 단일 인스턴스입니다. 채팅과 같은 멀티턴 쿼리의 경우 이는 대화 기록과 최근 요청이 포함된 반복되는 입력란입니다.

tools[] object (Tool)

선택사항입니다. Model가 다음 대답을 생성하는 데 사용할 수 있는 Tools 목록입니다.

Tool은 시스템이 Model의 지식과 범위를 벗어나 외부 시스템과 상호작용하여 작업 또는 작업 집합을 수행할 수 있도록 하는 코드 조각입니다. 지원되는 Tool는 Function 및 codeExecution입니다. 자세한 내용은 함수 호출 및 코드 실행 가이드를 참고하세요.

toolConfig object (ToolConfig)

선택사항입니다. 요청에 지정된 모든 Tool에 대한 도구 구성입니다. 사용 예시는 함수 호출 가이드를 참고하세요.

safetySettings[] object (SafetySetting)

선택사항입니다. 안전하지 않은 콘텐츠를 차단하는 고유한 SafetySetting 인스턴스 목록입니다.

이는 GenerateContentRequest.contents 및 GenerateContentResponse.candidates에 적용됩니다. SafetyCategory 유형마다 설정이 두 개 이상 있으면 안 됩니다. API는 이러한 설정으로 지정된 기준점을 충족하지 않는 콘텐츠와 대답을 차단합니다. 이 목록은 safetySettings에 지정된 각 SafetyCategory의 기본 설정을 재정의합니다. 목록에 제공된 특정 SafetyCategory에 대한 SafetySetting가 없는 경우 API는 해당 카테고리의 기본 안전 설정을 사용합니다. HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT, HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_CIVIC_INTEGRITY, HARM_CATEGORY_JAILBREAK 유해 카테고리가 지원됩니다. 사용 가능한 안전 설정에 관한 자세한 내용은 가이드를 참고하세요. 또한 안전 가이드를 참고하여 AI 애플리케이션에 안전 고려사항을 통합하는 방법을 알아보세요.

continuationToken string (bytes format)

선택사항입니다. finishReason가 CONTINUATION로 설정되어 중지된 이전 models.generateContent 또는 models.streamGenerateContent 응답에서 생성을 재개하는 데 사용되는 불투명 연속 토큰입니다. contents는 필수이며 요청에 연속 토큰이 제공될 때 초기 요청의 프롬프트와 대화 기록을 동일하게 복제해야 합니다.

base64 인코딩 문자열입니다.

labels map (key: string, value: string)

선택사항입니다. 요청에 대한 사용자 정의 메타데이터가 있는 라벨입니다.

선택사항입니다. 라벨은 표준 통합 Cloud 라벨 요구사항을 따라야 합니다. - 라벨 키는 문자로 시작해야 합니다. - 라벨 키와 값은 63자 (유니코드 코드 포인트) 이하여야 하며 소문자, 숫자, 밑줄, 대시만 포함할 수 있습니다. - 국제 문자는 허용됩니다.

사용: - 애그리게이터의 안전 식별자: safety_identifier 키를 사용합니다 (예: {"safety_identifier": "user_session_123"}).

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

systemInstruction object (Content)

선택사항입니다. 개발자가 설정한 시스템 요청 사항 현재는 텍스트만 지원됩니다.

generationConfig object (GenerationConfig)

선택사항입니다. 모델 생성 및 출력의 구성 옵션입니다.

cachedContent string

선택사항입니다. 예측을 제공하기 위한 컨텍스트로 사용하기 위해 캐시된 콘텐츠의 이름입니다. 형식: cachedContents/{cachedContent}

serviceTier enum (ServiceTier)

선택사항입니다. 요청의 서비스 등급입니다.

store boolean

선택사항입니다. 지정된 요청의 로깅 동작을 구성합니다. 설정된 경우 프로젝트 수준 로깅 구성보다 우선 적용됩니다.

요청 예시

텍스트

Python

from google import genai

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents="Write a story about a magic backpack.",
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});

const response = await ai.models.generateContent({
  model: 'gemini-3.8-flash',
  contents: 'Write a story about a magic backpack.',
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
contents := []*genai.Content{
	genai.NewContentFromText("Write a story about a magic backpack.", genai.RoleUser),
}
response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[{"text": "Write a story about a magic backpack."}]
        }]
       }' 2> /dev/null

자바

Client client = new Client();

GenerateContentResponse response =
    client.models.generateContent(
        "gemini-3.8-flash", "Write a story about a magic backpack.", null);

System.out.println(response.text());

이미지

Python

from google import genai
import PIL.Image

client = genai.Client()
organ = PIL.Image.open(media / "organ.jpg")
response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=["Tell me about this instrument", organ],
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});

const organ = await ai.files.upload({
  file: path.join(media, 'organ.jpg'),
});

const response = await ai.models.generateContent({
  model: 'gemini-3.8-flash',
  contents: [
    createUserContent([
      'Tell me about this instrument',
      createPartFromUri(organ.uri, organ.mimeType)
    ]),
  ],
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "organ.jpg"),
	&genai.UploadFileConfig{
		MIMEType: "image/jpeg",
	},
)
if err != nil {
	log.Fatal(err)
}
parts := []*genai.Part{
	genai.NewPartFromText("Tell me about this instrument"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}
contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

# Use a temporary file to hold the base64 encoded image data
TEMP_B64=$(mktemp)
trap 'rm -f "$TEMP_B64"' EXIT
base64 $B64FLAGS $IMG_PATH > "$TEMP_B64"

# Use a temporary file to hold the JSON payload
TEMP_JSON=$(mktemp)
trap 'rm -f "$TEMP_JSON"' EXIT

cat > "$TEMP_JSON" << EOF
{
  "contents": [{
    "parts":[
      {"text": "Tell me about this instrument"},
      {
        "inline_data": {
          "mime_type":"image/jpeg",
          "data": "$(cat "$TEMP_B64")"
        }
      }
    ]
  }]
}
EOF

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d "@$TEMP_JSON" 2> /dev/null

자바

Client client = new Client();

String path = media_path + "organ.jpg";
byte[] imageData = Files.readAllBytes(Paths.get(path));

Content content =
    Content.fromParts(
        Part.fromText("Tell me about this instrument."),
        Part.fromBytes(imageData, "image/jpeg"));

GenerateContentResponse response =
    client.models.generateContent("gemini-3.8-flash", content, null);

System.out.println(response.text());

오디오

Python

from google import genai

client = genai.Client()
sample_audio = client.files.upload(file=media / "sample.mp3")
response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=["Give me a summary of this audio file.", sample_audio],
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});

const audio = await ai.files.upload({
  file: path.join(media, 'sample.mp3'),
});

const response = await ai.models.generateContent({
  model: 'gemini-3.8-flash',
  contents: [
    createUserContent([
      'Give me a summary of this audio file.',
      createPartFromUri(audio.uri, audio.mimeType),
    ]),
  ],
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "sample.mp3"),
	&genai.UploadFileConfig{
		MIMEType: "audio/mpeg",
	},
)
if err != nil {
	log.Fatal(err)
}

parts := []*genai.Part{
	genai.NewPartFromText("Give me a summary of this audio file."),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

# Use File API to upload audio data to API request.
MIME_TYPE=$(file -b --mime-type "${AUDIO_PATH}")
NUM_BYTES=$(wc -c < "${AUDIO_PATH}")
DISPLAY_NAME=AUDIO

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${AUDIO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Please describe this file."},
          {"file_data":{"mime_type": "audio/mpeg", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

동영상

Python

from google import genai
import time

client = genai.Client()
# Video clip (CC BY 3.0) from https://peach.blender.org/download/
myfile = client.files.upload(file=media / "Big_Buck_Bunny.mp4")
print(f"{myfile=}")

# Poll until the video file is completely processed (state becomes ACTIVE).
while not myfile.state or myfile.state.name != "ACTIVE":
  print("Processing video...")
  print("File state:", myfile.state)
  time.sleep(5)
  myfile = client.files.get(name=myfile.name)

response = client.models.generate_content(
    model="gemini-3.8-flash", contents=[myfile, "Describe this video clip"]
)
print(f"{response.text=}")

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});

let video = await ai.files.upload({
  file: path.join(media, 'Big_Buck_Bunny.mp4'),
});

// Poll until the video file is completely processed (state becomes ACTIVE).
while (!video.state || video.state.toString() !== 'ACTIVE') {
  console.log('Processing video...');
  console.log('File state: ', video.state);
  await sleep(5000);
  video = await ai.files.get({name: video.name});
}

const response = await ai.models.generateContent({
  model: 'gemini-3.8-flash',
  contents: [
    createUserContent([
      'Describe this video clip',
      createPartFromUri(video.uri, video.mimeType),
    ]),
  ],
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "Big_Buck_Bunny.mp4"),
	&genai.UploadFileConfig{
		MIMEType: "video/mp4",
	},
)
if err != nil {
	log.Fatal(err)
}

// Poll until the video file is completely processed (state becomes ACTIVE).
for file.State == genai.FileStateUnspecified || file.State != genai.FileStateActive {
	fmt.Println("Processing video...")
	fmt.Println("File state:", file.State)
	time.Sleep(5 * time.Second)

	file, err = client.Files.Get(ctx, file.Name, nil)
	if err != nil {
		log.Fatal(err)
	}
}

parts := []*genai.Part{
	genai.NewPartFromText("Describe this video clip"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

# Use File API to upload audio data to API request.
MIME_TYPE=$(file -b --mime-type "${VIDEO_PATH}")
NUM_BYTES=$(wc -c < "${VIDEO_PATH}")
DISPLAY_NAME=VIDEO

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D "${tmp_header_file}" \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${VIDEO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

state=$(jq ".file.state" file_info.json)
echo state=$state

name=$(jq ".file.name" file_info.json)
echo name=$name

while [[ "($state)" = *"PROCESSING"* ]];
do
  echo "Processing video..."
  sleep 5
  # Get the file of interest to check state
  curl https://generativelanguage.googleapis.com/v1beta/files/$name > file_info.json
  state=$(jq ".file.state" file_info.json)
done

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Transcribe the audio from this video, giving timestamps for salient events in the video. Also provide visual descriptions."},
          {"file_data":{"mime_type": "video/mp4", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

PDF

Python

from google import genai

client = genai.Client()
sample_pdf = client.files.upload(file=media / "test.pdf")
response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=["Give me a summary of this document:", sample_pdf],
)
print(f"{response.text=}")

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "test.pdf"),
	&genai.UploadFileConfig{
		MIMEType: "application/pdf",
	},
)
if err != nil {
	log.Fatal(err)
}

parts := []*genai.Part{
	genai.NewPartFromText("Give me a summary of this document:"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, nil)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

MIME_TYPE=$(file -b --mime-type "${PDF_PATH}")
NUM_BYTES=$(wc -c < "${PDF_PATH}")
DISPLAY_NAME=TEXT


echo $MIME_TYPE
tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${PDF_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Can you add a few more lines to this poem?"},
          {"file_data":{"mime_type": "application/pdf", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

jq ".candidates[].content.parts[].text" response.json

채팅

Python

from google import genai
from google.genai import types

client = genai.Client()
# Pass initial history using the "history" argument
chat = client.chats.create(
    model="gemini-3.8-flash",
    history=[
        types.Content(role="user", parts=[types.Part(text="Hello")]),
        types.Content(
            role="model",
            parts=[
                types.Part(
                    text="Great to meet you. What would you like to know?"
                )
            ],
        ),
    ],
)
response = chat.send_message(message="I have 2 dogs in my house.")
print(response.text)
response = chat.send_message(message="How many paws are in my house?")
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});
const chat = ai.chats.create({
  model: 'gemini-3.8-flash',
  history: [
    {
      role: 'user',
      parts: [{text: 'Hello'}],
    },
    {
      role: 'model',
      parts: [{text: 'Great to meet you. What would you like to know?'}],
    },
  ],
});

const response1 = await chat.sendMessage({
  message: 'I have 2 dogs in my house.',
});
console.log('Chat response 1:', response1.text);

const response2 = await chat.sendMessage({
  message: 'How many paws are in my house?',
});
console.log('Chat response 2:', response2.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

// Pass initial history using the History field.
history := []*genai.Content{
	genai.NewContentFromText("Hello", genai.RoleUser),
	genai.NewContentFromText("Great to meet you. What would you like to know?", genai.RoleModel),
}

chat, err := client.Chats.Create(ctx, "gemini-3.8-flash", nil, history)
if err != nil {
	log.Fatal(err)
}

firstResp, err := chat.SendMessage(ctx, genai.Part{Text: "I have 2 dogs in my house."})
if err != nil {
	log.Fatal(err)
}
fmt.Println(firstResp.Text())

secondResp, err := chat.SendMessage(ctx, genai.Part{Text: "How many paws are in my house?"})
if err != nil {
	log.Fatal(err)
}
fmt.Println(secondResp.Text())

Shell

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Hello"}]},
        {"role": "model",
         "parts":[{
           "text": "Great to meet you. What would you like to know?"}]},
        {"role":"user",
         "parts":[{
           "text": "I have two dogs in my house. How many paws are in my house?"}]},
      ]
    }' 2> /dev/null | grep "text"

자바

Client client = new Client();

Content userContent = Content.fromParts(Part.fromText("Hello"));
Content modelContent =
    Content.builder()
        .role("model")
        .parts(
            Collections.singletonList(
                Part.fromText("Great to meet you. What would you like to know?")))
        .build();

Chat chat =
    client.chats.create(
        "gemini-3.8-flash",
        GenerateContentConfig.builder()
            .systemInstruction(userContent)
            .systemInstruction(modelContent)
            .build());

GenerateContentResponse response1 = chat.sendMessage("I have 2 dogs in my house.");
System.out.println(response1.text());

GenerateContentResponse response2 = chat.sendMessage("How many paws are in my house?");
System.out.println(response2.text());

캐시

Python

from google import genai
from google.genai import types

client = genai.Client()
document = client.files.upload(file=media / "a11.txt")
model_name = "gemini-3.8-flash"

cache = client.caches.create(
    model=model_name,
    config=types.CreateCachedContentConfig(
        contents=[document],
        system_instruction="You are an expert analyzing transcripts.",
    ),
)
print(cache)

response = client.models.generate_content(
    model=model_name,
    contents="Please summarize this transcript",
    config=types.GenerateContentConfig(cached_content=cache.name),
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});
const filePath = path.join(media, 'a11.txt');
const document = await ai.files.upload({
  file: filePath,
  config: {mimeType: 'text/plain'},
});
console.log('Uploaded file name:', document.name);
const modelName = 'gemini-3.8-flash';

const contents = [
  createUserContent(createPartFromUri(document.uri, document.mimeType)),
];

const cache = await ai.caches.create({
  model: modelName,
  config: {
    contents: contents,
    systemInstruction: 'You are an expert analyzing transcripts.',
  },
});
console.log('Cache created:', cache);

const response = await ai.models.generateContent({
  model: modelName,
  contents: 'Please summarize this transcript',
  config: {cachedContent: cache.name},
});
console.log('Response text:', response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

modelName := "gemini-3.8-flash"
document, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "a11.txt"),
	&genai.UploadFileConfig{
		MIMEType: "text/plain",
	},
)
if err != nil {
	log.Fatal(err)
}
parts := []*genai.Part{
	genai.NewPartFromURI(document.URI, document.MIMEType),
}
contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}
cache, err := client.Caches.Create(ctx, modelName, &genai.CreateCachedContentConfig{
	Contents: contents,
	SystemInstruction: genai.NewContentFromText(
		"You are an expert analyzing transcripts.", genai.RoleUser,
	),
})
if err != nil {
	log.Fatal(err)
}
fmt.Println("Cache created:")
fmt.Println(cache)

// Use the cache for generating content.
response, err := client.Models.GenerateContent(
	ctx,
	modelName,
	genai.Text("Please summarize this transcript"),
	&genai.GenerateContentConfig{
		CachedContent: cache.Name,
	},
)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

튜닝된 모델

Python

# With Gemini 2 we're launching a new SDK. See the following doc for details.
# https://ai.google.dev/gemini-api/docs/migrate

JSON 모드

Python

from google import genai
from google.genai import types
from typing_extensions import TypedDict

class Recipe(TypedDict):
  recipe_name: str
  ingredients: list[str]

client = genai.Client()
result = client.models.generate_content(
    model="gemini-3.8-flash",
    contents="List a few popular cookie recipes.",
    config=types.GenerateContentConfig(
        response_mime_type="application/json", response_schema=list[Recipe]
    ),
)
print(result)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});
const response = await ai.models.generateContent({
  model: 'gemini-3.8-flash',
  contents: 'List a few popular cookie recipes.',
  config: {
    responseMimeType: 'application/json',
    responseSchema: {
      type: 'array',
      items: {
        type: 'object',
        properties: {
          recipeName: {type: 'string'},
          ingredients: {type: 'array', items: {type: 'string'}},
        },
        required: ['recipeName', 'ingredients'],
      },
    },
  },
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

schema := &genai.Schema{
	Type: genai.TypeArray,
	Items: &genai.Schema{
		Type: genai.TypeObject,
		Properties: map[string]*genai.Schema{
			"recipe_name": {Type: genai.TypeString},
			"ingredients": {
				Type:  genai.TypeArray,
				Items: &genai.Schema{Type: genai.TypeString},
			},
		},
		Required: []string{"recipe_name"},
	},
}

config := &genai.GenerateContentConfig{
	ResponseMIMEType: "application/json",
	ResponseSchema:   schema,
}

response, err := client.Models.GenerateContent(
	ctx,
	"gemini-3.8-flash",
	genai.Text("List a few popular cookie recipes."),
	config,
)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "contents": [{
      "parts":[
        {"text": "List 5 popular cookie recipes"}
        ]
    }],
    "generationConfig": {
        "response_mime_type": "application/json",
        "response_schema": {
          "type": "ARRAY",
          "items": {
            "type": "OBJECT",
            "properties": {
              "recipe_name": {"type":"STRING"},
            }
          }
        }
    }
}' 2> /dev/null | head

자바

Client client = new Client();

Schema recipeSchema =
    Schema.builder()
        .type(Array.class.getSimpleName())
        .items(
            Schema.builder()
                .type(Object.class.getSimpleName())
                .properties(
                    Map.of(
                        "recipe_name",
                        Schema.builder().type(String.class.getSimpleName()).build(),
                        "ingredients",
                        Schema.builder()
                            .type(Array.class.getSimpleName())
                            .items(Schema.builder().type(String.class.getSimpleName()).build())
                            .build()))
                .required(List.of("recipe_name", "ingredients"))
                .build())
        .build();

GenerateContentConfig config =
    GenerateContentConfig.builder()
        .responseMimeType("application/json")
        .responseSchema(recipeSchema)
        .build();

GenerateContentResponse response =
    client.models.generateContent(
        "gemini-3.8-flash", "List a few popular cookie recipes.", config);

System.out.println(response.text());

코드 실행

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=(
        "Write and execute code that calculates the sum of the first 50"
        " prime numbers. Ensure that only the executable code and its"
        " resulting output are generated."
    ),
)
# Each part may contain text, executable code, or an execution result.
for part in response.candidates[0].content.parts:
  print(part, "\n")

print("-" * 80)
# The .text accessor concatenates the parts into a markdown-formatted text.
print("\n", response.text)

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

response, err := client.Models.GenerateContent(
	ctx,
	"gemini-3.8-flash",
	genai.Text(
		`Write and execute code that calculates the sum of the first 50 prime numbers.
		 Ensure that only the executable code and its resulting output are generated.`,
	),
	&genai.GenerateContentConfig{},
)
if err != nil {
	log.Fatal(err)
}

// Print the response.
printResponse(response)

fmt.Println("--------------------------------------------------------------------------------")
fmt.Println(response.Text())

자바

Client client = new Client();

String prompt =
    """
    Write and execute code that calculates the sum of the first 50 prime numbers.
    Ensure that only the executable code and its resulting output are generated.
    """;

GenerateContentResponse response =
    client.models.generateContent("gemini-3.8-flash", prompt, null);

for (Part part : response.candidates().get().getFirst().content().get().parts().get()) {
  System.out.println(part + "\n");
}

System.out.println("-".repeat(80));
System.out.println(response.text());

함수 호출

Python

from google import genai
from google.genai import types

client = genai.Client()

def add(a: float, b: float) -> float:
  """returns a + b."""
  return a + b

def subtract(a: float, b: float) -> float:
  """returns a - b."""
  return a - b

def multiply(a: float, b: float) -> float:
  """returns a * b."""
  return a * b

def divide(a: float, b: float) -> float:
  """returns a / b."""
  return a / b

# Create a chat session; function calling (via tools) is enabled in the config.
chat = client.chats.create(
    model="gemini-3.8-flash",
    config=types.GenerateContentConfig(
        tools=[add, subtract, multiply, divide]
    ),
)
response = chat.send_message(
    message=(
        "I have 57 cats, each owns 44 mittens, how many mittens is that in"
        " total?"
    )
)
print(response.text)

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
modelName := "gemini-3.8-flash"

// Create the function declarations for arithmetic operations.
addDeclaration := createArithmeticToolDeclaration("addNumbers", "Return the result of adding two numbers.")
subtractDeclaration := createArithmeticToolDeclaration("subtractNumbers", "Return the result of subtracting the second number from the first.")
multiplyDeclaration := createArithmeticToolDeclaration("multiplyNumbers", "Return the product of two numbers.")
divideDeclaration := createArithmeticToolDeclaration("divideNumbers", "Return the quotient of dividing the first number by the second.")

// Group the function declarations as a tool.
tools := []*genai.Tool{
	{
		FunctionDeclarations: []*genai.FunctionDeclaration{
			addDeclaration,
			subtractDeclaration,
			multiplyDeclaration,
			divideDeclaration,
		},
	},
}

// Create the content prompt.
contents := []*genai.Content{
	genai.NewContentFromText(
		"I have 57 cats, each owns 44 mittens, how many mittens is that in total?", genai.RoleUser,
	),
}

// Set up the generate content configuration with function calling enabled.
config := &genai.GenerateContentConfig{
	Tools: tools,
	ToolConfig: &genai.ToolConfig{
		FunctionCallingConfig: &genai.FunctionCallingConfig{
			// The mode equivalent to FunctionCallingConfigMode.ANY in JS.
			Mode: genai.FunctionCallingConfigModeAny,
		},
	},
}

genContentResp, err := client.Models.GenerateContent(ctx, modelName, contents, config)
if err != nil {
	log.Fatal(err)
}

// Assume the response includes a list of function calls.
if len(genContentResp.FunctionCalls()) == 0 {
	log.Println("No function call returned from the AI.")
	return nil
}
functionCall := genContentResp.FunctionCalls()[0]
log.Printf("Function call: %+v\n", functionCall)

// Marshal the Args map into JSON bytes.
argsMap, err := json.Marshal(functionCall.Args)
if err != nil {
	log.Fatal(err)
}

// Unmarshal the JSON bytes into the ArithmeticArgs struct.
var args ArithmeticArgs
if err := json.Unmarshal(argsMap, &args); err != nil {
	log.Fatal(err)
}

// Map the function name to the actual arithmetic function.
var result float64
switch functionCall.Name {
case "addNumbers":
	result = add(args.FirstParam, args.SecondParam)
case "subtractNumbers":
	result = subtract(args.FirstParam, args.SecondParam)
case "multiplyNumbers":
	result = multiply(args.FirstParam, args.SecondParam)
case "divideNumbers":
	result = divide(args.FirstParam, args.SecondParam)
default:
	return fmt.Errorf("unimplemented function: %s", functionCall.Name)
}
log.Printf("Function result: %v\n", result)

// Prepare the final result message as content.
resultContents := []*genai.Content{
	genai.NewContentFromText("The final result is "+fmt.Sprintf("%v", result), genai.RoleUser),
}

// Use GenerateContent to send the final result.
finalResponse, err := client.Models.GenerateContent(ctx, modelName, resultContents, &genai.GenerateContentConfig{})
if err != nil {
	log.Fatal(err)
}

printResponse(finalResponse)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});

/**
 * The add function returns the sum of two numbers.
 * @param {number} a
 * @param {number} b
 * @returns {number}
 */
function add(a, b) {
  return a + b;
}

/**
 * The subtract function returns the difference (a - b).
 * @param {number} a
 * @param {number} b
 * @returns {number}
 */
function subtract(a, b) {
  return a - b;
}

/**
 * The multiply function returns the product of two numbers.
 * @param {number} a
 * @param {number} b
 * @returns {number}
 */
function multiply(a, b) {
  return a * b;
}

/**
 * The divide function returns the quotient of a divided by b.
 * @param {number} a
 * @param {number} b
 * @returns {number}
 */
function divide(a, b) {
  return a / b;
}

const addDeclaration = {
  name: 'addNumbers',
  parameters: {
    type: 'object',
    description: 'Return the result of adding two numbers.',
    properties: {
      firstParam: {
        type: 'number',
        description:
            'The first parameter which can be an integer or a floating point number.',
      },
      secondParam: {
        type: 'number',
        description:
            'The second parameter which can be an integer or a floating point number.',
      },
    },
    required: ['firstParam', 'secondParam'],
  },
};

const subtractDeclaration = {
  name: 'subtractNumbers',
  parameters: {
    type: 'object',
    description:
        'Return the result of subtracting the second number from the first.',
    properties: {
      firstParam: {
        type: 'number',
        description: 'The first parameter.',
      },
      secondParam: {
        type: 'number',
        description: 'The second parameter.',
      },
    },
    required: ['firstParam', 'secondParam'],
  },
};

const multiplyDeclaration = {
  name: 'multiplyNumbers',
  parameters: {
    type: 'object',
    description: 'Return the product of two numbers.',
    properties: {
      firstParam: {
        type: 'number',
        description: 'The first parameter.',
      },
      secondParam: {
        type: 'number',
        description: 'The second parameter.',
      },
    },
    required: ['firstParam', 'secondParam'],
  },
};

const divideDeclaration = {
  name: 'divideNumbers',
  parameters: {
    type: 'object',
    description:
        'Return the quotient of dividing the first number by the second.',
    properties: {
      firstParam: {
        type: 'number',
        description: 'The first parameter.',
      },
      secondParam: {
        type: 'number',
        description: 'The second parameter.',
      },
    },
    required: ['firstParam', 'secondParam'],
  },
};

// Step 1: Call generateContent with function calling enabled.
const generateContentResponse = await ai.models.generateContent({
  model: 'gemini-3.8-flash',
  contents:
      'I have 57 cats, each owns 44 mittens, how many mittens is that in total?',
  config: {
    toolConfig: {
      functionCallingConfig: {
        mode: FunctionCallingConfigMode.ANY,
      },
    },
    tools: [
      {
        functionDeclarations: [
          addDeclaration,
          subtractDeclaration,
          multiplyDeclaration,
          divideDeclaration,
        ],
      },
    ],
  },
});

// Step 2: Extract the function call.(
// Assuming the response contains a 'functionCalls' array.
const functionCall = generateContentResponse.functionCalls &&
    generateContentResponse.functionCalls[0];
console.log(functionCall);

// Parse the arguments.
const args = functionCall.args;
// Expected args format: { firstParam: number, secondParam: number }

// Step 3: Invoke the actual function based on the function name.
const functionMapping = {
  addNumbers: add,
  subtractNumbers: subtract,
  multiplyNumbers: multiply,
  divideNumbers: divide,
};
const func = functionMapping[functionCall.name];
if (!func) {
  console.error('Unimplemented error:', functionCall.name);
  return generateContentResponse;
}
const resultValue = func(args.firstParam, args.secondParam);
console.log('Function result:', resultValue);

// Step 4: Use the chat API to send the result as the final answer.
const chat = ai.chats.create({model: 'gemini-3.8-flash'});
const chatResponse = await chat.sendMessage({
  message: 'The final result is ' + resultValue,
});
console.log(chatResponse.text);

Shell


cat > tools.json << EOF
{
  "function_declarations": [
    {
      "name": "enable_lights",
      "description": "Turn on the lighting system."
    },
    {
      "name": "set_light_color",
      "description": "Set the light color. Lights must be enabled for this to work.",
      "parameters": {
        "type": "object",
        "properties": {
          "rgb_hex": {
            "type": "string",
            "description": "The light color as a 6-digit hex string, e.g. ff0000 for red."
          }
        },
        "required": [
          "rgb_hex"
        ]
      }
    },
    {
      "name": "stop_lights",
      "description": "Turn off the lighting system."
    }
  ]
} 
EOF

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
  -H 'Content-Type: application/json' \
  -d @<(echo '
  {
    "system_instruction": {
      "parts": {
        "text": "You are a helpful lighting system bot. You can turn lights on and off, and you can set the color. Do not perform any other tasks."
      }
    },
    "tools": ['$(cat tools.json)'],

    "tool_config": {
      "function_calling_config": {"mode": "auto"}
    },

    "contents": {
      "role": "user",
      "parts": {
        "text": "Turn on the lights please."
      }
    }
  }
') 2>/dev/null |sed -n '/"content"/,/"finishReason"/p'

자바

Client client = new Client();

FunctionDeclaration addFunction =
    FunctionDeclaration.builder()
        .name("addNumbers")
        .parameters(
            Schema.builder()
                .type("object")
                .properties(
                    Map.of(
                        "firstParam",
                            Schema.builder().type("number").description("First number").build(),
                        "secondParam",
                            Schema.builder()
                                .type("number")
                                .description("Second number")
                                .build()))
                .required(Arrays.asList("firstParam", "secondParam"))
                .build())
        .build();

FunctionDeclaration subtractFunction =
    FunctionDeclaration.builder()
        .name("subtractNumbers")
        .parameters(
            Schema.builder()
                .type("object")
                .properties(
                    Map.of(
                        "firstParam",
                            Schema.builder().type("number").description("First number").build(),
                        "secondParam",
                            Schema.builder()
                                .type("number")
                                .description("Second number")
                                .build()))
                .required(Arrays.asList("firstParam", "secondParam"))
                .build())
        .build();

FunctionDeclaration multiplyFunction =
    FunctionDeclaration.builder()
        .name("multiplyNumbers")
        .parameters(
            Schema.builder()
                .type("object")
                .properties(
                    Map.of(
                        "firstParam",
                            Schema.builder().type("number").description("First number").build(),
                        "secondParam",
                            Schema.builder()
                                .type("number")
                                .description("Second number")
                                .build()))
                .required(Arrays.asList("firstParam", "secondParam"))
                .build())
        .build();

FunctionDeclaration divideFunction =
    FunctionDeclaration.builder()
        .name("divideNumbers")
        .parameters(
            Schema.builder()
                .type("object")
                .properties(
                    Map.of(
                        "firstParam",
                            Schema.builder().type("number").description("First number").build(),
                        "secondParam",
                            Schema.builder()
                                .type("number")
                                .description("Second number")
                                .build()))
                .required(Arrays.asList("firstParam", "secondParam"))
                .build())
        .build();

GenerateContentConfig config =
    GenerateContentConfig.builder()
        .toolConfig(
            ToolConfig.builder()
                .functionCallingConfig(FunctionCallingConfig.builder().mode("ANY").build())
                .build())
        .tools(
            Collections.singletonList(
                Tool.builder()
                    .functionDeclarations(
                        Arrays.asList(
                            addFunction, subtractFunction, divideFunction, multiplyFunction))
                    .build()))
        .build();

GenerateContentResponse response =
    client.models.generateContent(
        "gemini-3.8-flash",
        "I have 57 cats, each owns 44 mittens, how many mittens is that in total?",
        config);

if (response.functionCalls() == null || response.functionCalls().isEmpty()) {
  System.err.println("No function call received");
  return null;
}

var functionCall = response.functionCalls().getFirst();
String functionName = functionCall.name().get();
var arguments = functionCall.args();

Map<String, BiFunction<Double, Double, Double>> functionMapping = new HashMap<>();
functionMapping.put("addNumbers", (a, b) -> a + b);
functionMapping.put("subtractNumbers", (a, b) -> a - b);
functionMapping.put("multiplyNumbers", (a, b) -> a * b);
functionMapping.put("divideNumbers", (a, b) -> b != 0 ? a / b : Double.NaN);

BiFunction<Double, Double, Double> function = functionMapping.get(functionName);

Number firstParam = (Number) arguments.get().get("firstParam");
Number secondParam = (Number) arguments.get().get("secondParam");
Double result = function.apply(firstParam.doubleValue(), secondParam.doubleValue());

System.out.println(result);

생성 구성

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents="Tell me a story about a magic backpack.",
    config=types.GenerateContentConfig(
        candidate_count=1,
        stop_sequences=["x"],
        max_output_tokens=20,
        temperature=1.0,
    ),
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});

const response = await ai.models.generateContent({
  model: 'gemini-3.8-flash',
  contents: 'Tell me a story about a magic backpack.',
  config: {
    candidateCount: 1,
    stopSequences: ['x'],
    maxOutputTokens: 20,
    temperature: 1.0,
  },
});

console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

// Create local variables for parameters.
candidateCount := int32(1)
maxOutputTokens := int32(20)
temperature := float32(1.0)

response, err := client.Models.GenerateContent(
	ctx,
	"gemini-3.8-flash",
	genai.Text("Tell me a story about a magic backpack."),
	&genai.GenerateContentConfig{
		CandidateCount:  candidateCount,
		StopSequences:   []string{"x"},
		MaxOutputTokens: maxOutputTokens,
		Temperature:     &temperature,
	},
)
if err != nil {
	log.Fatal(err)
}

printResponse(response)

Shell

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
        "contents": [{
            "parts":[
                {"text": "Explain how AI works"}
            ]
        }],
        "generationConfig": {
            "stopSequences": [
                "Title"
            ],
            "temperature": 1.0,
            "maxOutputTokens": 800,
            "topP": 0.8,
            "topK": 10
        }
    }'  2> /dev/null | grep "text"

자바

Client client = new Client();

GenerateContentConfig config =
    GenerateContentConfig.builder()
        .candidateCount(1)
        .stopSequences(List.of("x"))
        .maxOutputTokens(20)
        .temperature(1.0F)
        .build();

GenerateContentResponse response =
    client.models.generateContent(
        "gemini-3.8-flash", "Tell me a story about a magic backpack.", config);

System.out.println(response.text());

안전 설정

Python

from google import genai
from google.genai import types

client = genai.Client()
unsafe_prompt = (
    "I support Martians Soccer Club and I think Jupiterians Football Club"
    " sucks! Write a ironic phrase about them including expletives."
)
response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=unsafe_prompt,
    config=types.GenerateContentConfig(
        safety_settings=[
            types.SafetySetting(
                category="HARM_CATEGORY_HATE_SPEECH",
                threshold="BLOCK_MEDIUM_AND_ABOVE",
            ),
            types.SafetySetting(
                category="HARM_CATEGORY_HARASSMENT",
                threshold="BLOCK_ONLY_HIGH",
            ),
        ]
    ),
)
try:
  print(response.text)
except Exception:
  print("No information generated by the model.")

print(response.candidates[0].safety_ratings)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});
const unsafePrompt =
    'I support Martians Soccer Club and I think Jupiterians Football Club sucks! Write a ironic phrase about them including expletives.';

const response = await ai.models.generateContent({
  model: 'gemini-3.8-flash',
  contents: unsafePrompt,
  config: {
    safetySettings: [
      {
        category: 'HARM_CATEGORY_HATE_SPEECH',
        threshold: 'BLOCK_MEDIUM_AND_ABOVE',
      },
      {
        category: 'HARM_CATEGORY_HARASSMENT',
        threshold: 'BLOCK_ONLY_HIGH',
      },
    ],
  },
});

try {
  console.log('Generated text:', response.text);
} catch (error) {
  console.log('No information generated by the model.');
}
console.log('Safety ratings:', response.candidates[0].safetyRatings);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

unsafePrompt := "I support Martians Soccer Club and I think Jupiterians Football Club sucks! " +
	"Write a ironic phrase about them including expletives."

config := &genai.GenerateContentConfig{
	SafetySettings: []*genai.SafetySetting{
		{
			Category:  "HARM_CATEGORY_HATE_SPEECH",
			Threshold: "BLOCK_MEDIUM_AND_ABOVE",
		},
		{
			Category:  "HARM_CATEGORY_HARASSMENT",
			Threshold: "BLOCK_ONLY_HIGH",
		},
	},
}
contents := []*genai.Content{
	genai.NewContentFromText(unsafePrompt, genai.RoleUser),
}
response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, config)
if err != nil {
	log.Fatal(err)
}

// Print the generated text.
text := response.Text()
fmt.Println("Generated text:", text)

// Print the and safety ratings from the first candidate.
if len(response.Candidates) > 0 {
	fmt.Println("Finish reason:", response.Candidates[0].FinishReason)
	safetyRatings, err := json.MarshalIndent(response.Candidates[0].SafetyRatings, "", "  ")
	if err != nil {
		return err
	}
	fmt.Println("Safety ratings:", string(safetyRatings))
} else {
	fmt.Println("No candidate returned.")
}

Shell

echo '{
    "safetySettings": [
        {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_ONLY_HIGH"},
        {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}
    ],
    "contents": [{
        "parts":[{
            "text": "'I support Martians Soccer Club and I think Jupiterians Football Club sucks! Write a ironic phrase about them.'"}]}]}' > request.json

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d @request.json 2> /dev/null

자바

Client client = new Client();

String unsafePrompt =
    """
     I support Martians Soccer Club and I think Jupiterians Football Club sucks!
     Write a ironic phrase about them including expletives.
    """;

GenerateContentConfig config =
    GenerateContentConfig.builder()
        .safetySettings(
            Arrays.asList(
                SafetySetting.builder()
                    .category("HARM_CATEGORY_HATE_SPEECH")
                    .threshold("BLOCK_MEDIUM_AND_ABOVE")
                    .build(),
                SafetySetting.builder()
                    .category("HARM_CATEGORY_HARASSMENT")
                    .threshold("BLOCK_ONLY_HIGH")
                    .build()))
        .build();

GenerateContentResponse response =
    client.models.generateContent("gemini-3.8-flash", unsafePrompt, config);

try {
  System.out.println(response.text());
} catch (Exception e) {
  System.out.println("No information generated by the model");
}

System.out.println(response.candidates().get().getFirst().safetyRatings());

시스템 요청 사항

Python

from google import genai
from google.genai import types

client = genai.Client()
response = client.models.generate_content(
    model="gemini-3.8-flash",
    contents="Good morning! How are you?",
    config=types.GenerateContentConfig(
        system_instruction="You are a cat. Your name is Neko."
    ),
)
print(response.text)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});
const response = await ai.models.generateContent({
  model: 'gemini-3.8-flash',
  contents: 'Good morning! How are you?',
  config: {
    systemInstruction: 'You are a cat. Your name is Neko.',
  },
});
console.log(response.text);

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

// Construct the user message contents.
contents := []*genai.Content{
	genai.NewContentFromText("Good morning! How are you?", genai.RoleUser),
}

// Set the system instruction as a *genai.Content.
config := &genai.GenerateContentConfig{
	SystemInstruction: genai.NewContentFromText("You are a cat. Your name is Neko.", genai.RoleUser),
}

response, err := client.Models.GenerateContent(ctx, "gemini-3.8-flash", contents, config)
if err != nil {
	log.Fatal(err)
}
printResponse(response)

Shell

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{ "system_instruction": {
    "parts":
      { "text": "You are a cat. Your name is Neko."}},
    "contents": {
      "parts": {
        "text": "Hello there"}}}'

자바

Client client = new Client();

Part textPart = Part.builder().text("You are a cat. Your name is Neko.").build();

Content content = Content.builder().role("system").parts(ImmutableList.of(textPart)).build();

GenerateContentConfig config =
    GenerateContentConfig.builder().systemInstruction(content).build();

GenerateContentResponse response =
    client.models.generateContent("gemini-3.8-flash", "Good morning! How are you?", config);

System.out.println(response.text());

응답 본문

성공한 경우 응답 본문에 GenerateContentResponse의 인스턴스가 포함됩니다.

메서드: models.streamGenerateContent

입력 GenerateContentRequest가 주어지면 모델에서 스트리밍된 대답을 생성합니다.

엔드포인트

게시물 https://generativelanguage.googleapis.com/v1beta/{model=models/*}:streamGenerateContent

경로 매개변수

model string

필수 항목입니다. 완성을 생성하는 데 사용할 Model의 이름입니다.

형식은 models/{model}입니다. models/{model} 형식이 사용됩니다.

요청 본문

요청 본문에는 다음과 같은 구조의 데이터가 포함됩니다.

필드
contents[] object (Content)

필수 항목입니다. 모델과의 현재 대화 콘텐츠입니다.

싱글턴 쿼리의 경우 이는 단일 인스턴스입니다. 채팅과 같은 멀티턴 쿼리의 경우 이는 대화 기록과 최근 요청이 포함된 반복되는 입력란입니다.

tools[] object (Tool)

선택사항입니다. Model가 다음 대답을 생성하는 데 사용할 수 있는 Tools 목록입니다.

Tool은 시스템이 Model의 지식과 범위를 벗어나 외부 시스템과 상호작용하여 작업 또는 작업 집합을 수행할 수 있도록 하는 코드 조각입니다. 지원되는 Tool는 Function 및 codeExecution입니다. 자세한 내용은 함수 호출 및 코드 실행 가이드를 참고하세요.

toolConfig object (ToolConfig)

선택사항입니다. 요청에 지정된 모든 Tool에 대한 도구 구성입니다. 사용 예시는 함수 호출 가이드를 참고하세요.

safetySettings[] object (SafetySetting)

선택사항입니다. 안전하지 않은 콘텐츠를 차단하는 고유한 SafetySetting 인스턴스 목록입니다.

이는 GenerateContentRequest.contents 및 GenerateContentResponse.candidates에 적용됩니다. SafetyCategory 유형마다 설정이 두 개 이상 있으면 안 됩니다. API는 이러한 설정으로 지정된 기준점을 충족하지 않는 콘텐츠와 대답을 차단합니다. 이 목록은 safetySettings에 지정된 각 SafetyCategory의 기본 설정을 재정의합니다. 목록에 제공된 특정 SafetyCategory에 대한 SafetySetting가 없는 경우 API는 해당 카테고리의 기본 안전 설정을 사용합니다. HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT, HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_CIVIC_INTEGRITY, HARM_CATEGORY_JAILBREAK 유해 카테고리가 지원됩니다. 사용 가능한 안전 설정에 관한 자세한 내용은 가이드를 참고하세요. 또한 안전 가이드를 참고하여 AI 애플리케이션에 안전 고려사항을 통합하는 방법을 알아보세요.

continuationToken string (bytes format)

선택사항입니다. finishReason가 CONTINUATION로 설정되어 중지된 이전 models.generateContent 또는 models.streamGenerateContent 응답에서 생성을 재개하는 데 사용되는 불투명 연속 토큰입니다. contents는 필수이며 요청에 연속 토큰이 제공될 때 초기 요청의 프롬프트와 대화 기록을 동일하게 복제해야 합니다.

base64 인코딩 문자열입니다.

labels map (key: string, value: string)

선택사항입니다. 요청에 대한 사용자 정의 메타데이터가 있는 라벨입니다.

선택사항입니다. 라벨은 표준 통합 Cloud 라벨 요구사항을 따라야 합니다. - 라벨 키는 문자로 시작해야 합니다. - 라벨 키와 값은 63자 (유니코드 코드 포인트) 이하여야 하며 소문자, 숫자, 밑줄, 대시만 포함할 수 있습니다. - 국제 문자는 허용됩니다.

사용: - 애그리게이터의 안전 식별자: safety_identifier 키를 사용합니다 (예: {"safety_identifier": "user_session_123"}).

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

systemInstruction object (Content)

선택사항입니다. 개발자가 설정한 시스템 요청 사항 현재는 텍스트만 지원됩니다.

generationConfig object (GenerationConfig)

선택사항입니다. 모델 생성 및 출력의 구성 옵션입니다.

cachedContent string

선택사항입니다. 예측을 제공하기 위한 컨텍스트로 사용하기 위해 캐시된 콘텐츠의 이름입니다. 형식: cachedContents/{cachedContent}

serviceTier enum (ServiceTier)

선택사항입니다. 요청의 서비스 등급입니다.

store boolean

선택사항입니다. 지정된 요청의 로깅 동작을 구성합니다. 설정된 경우 프로젝트 수준 로깅 구성보다 우선 적용됩니다.

요청 예시

텍스트

Python

from google import genai

client = genai.Client()
response = client.models.generate_content_stream(
    model="gemini-3.8-flash",
    contents="Write a story about a magic backpack.",
)
for chunk in response:
  print(chunk.text)
  print("_" * 80)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});

const response = await ai.models.generateContentStream({
  model: 'gemini-3.8-flash',
  contents: 'Write a story about a magic backpack.',
});
let text = '';
for await (const chunk of response) {
  console.log(chunk.text);
  text += chunk.text;
}

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
contents := []*genai.Content{
	genai.NewContentFromText("Write a story about a magic backpack.", genai.RoleUser),
}
for response, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(response.Candidates[0].Content.Parts[0].Text)
}

Shell

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=${GEMINI_API_KEY}" \
        -H 'Content-Type: application/json' \
        --no-buffer \
        -d '{ "contents":[{"parts":[{"text": "Write a story about a magic backpack."}]}]}'

자바

Client client = new Client();

ResponseStream<GenerateContentResponse> responseStream =
    client.models.generateContentStream(
        "gemini-3.8-flash", "Write a story about a magic backpack.", null);

StringBuilder response = new StringBuilder();
for (GenerateContentResponse res : responseStream) {
  System.out.print(res.text());
  response.append(res.text());
}

responseStream.close();

이미지

Python

from google import genai
import PIL.Image

client = genai.Client()
organ = PIL.Image.open(media / "organ.jpg")
response = client.models.generate_content_stream(
    model="gemini-3.8-flash",
    contents=["Tell me about this instrument", organ],
)
for chunk in response:
  print(chunk.text)
  print("_" * 80)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});

const organ = await ai.files.upload({
  file: path.join(media, 'organ.jpg'),
});

const response = await ai.models.generateContentStream({
  model: 'gemini-3.8-flash',
  contents: [
    createUserContent([
      'Tell me about this instrument',
      createPartFromUri(organ.uri, organ.mimeType)
    ]),
  ],
});
let text = '';
for await (const chunk of response) {
  console.log(chunk.text);
  text += chunk.text;
}

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}
file, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "organ.jpg"),
	&genai.UploadFileConfig{
		MIMEType: "image/jpeg",
	},
)
if err != nil {
	log.Fatal(err)
}
parts := []*genai.Part{
	genai.NewPartFromText("Tell me about this instrument"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}
contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}
for response, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(response.Candidates[0].Content.Parts[0].Text)
}

Shell

cat > "$TEMP_JSON" << EOF
{
  "contents": [{
    "parts":[
      {"text": "Tell me about this instrument"},
      {
        "inline_data": {
          "mime_type":"image/jpeg",
          "data": "$(cat "$TEMP_B64")"
        }
      }
    ]
  }]
}
EOF

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d "@$TEMP_JSON" 2> /dev/null

자바

Client client = new Client();

String path = media_path + "organ.jpg";
byte[] imageData = Files.readAllBytes(Paths.get(path));

Content content =
    Content.fromParts(
        Part.fromText("Tell me about this instrument."),
        Part.fromBytes(imageData, "image/jpeg"));

ResponseStream<GenerateContentResponse> responseStream =
    client.models.generateContentStream("gemini-3.8-flash", content, null);

StringBuilder response = new StringBuilder();
for (GenerateContentResponse res : responseStream) {
  System.out.print(res.text());
  response.append(res.text());
}

responseStream.close();

오디오

Python

from google import genai

client = genai.Client()
sample_audio = client.files.upload(file=media / "sample.mp3")
response = client.models.generate_content_stream(
    model="gemini-3.8-flash",
    contents=["Give me a summary of this audio file.", sample_audio],
)
for chunk in response:
  print(chunk.text)
  print("_" * 80)

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "sample.mp3"),
	&genai.UploadFileConfig{
		MIMEType: "audio/mpeg",
	},
)
if err != nil {
	log.Fatal(err)
}

parts := []*genai.Part{
	genai.NewPartFromText("Give me a summary of this audio file."),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

for result, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(result.Candidates[0].Content.Parts[0].Text)
}

Shell

# Use File API to upload audio data to API request.
MIME_TYPE=$(file -b --mime-type "${AUDIO_PATH}")
NUM_BYTES=$(wc -c < "${AUDIO_PATH}")
DISPLAY_NAME=AUDIO

tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${AUDIO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Please describe this file."},
          {"file_data":{"mime_type": "audio/mpeg", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

동영상

Python

from google import genai
import time

client = genai.Client()
# Video clip (CC BY 3.0) from https://peach.blender.org/download/
myfile = client.files.upload(file=media / "Big_Buck_Bunny.mp4")
print(f"{myfile=}")

# Poll until the video file is completely processed (state becomes ACTIVE).
while not myfile.state or myfile.state.name != "ACTIVE":
  print("Processing video...")
  print("File state:", myfile.state)
  time.sleep(5)
  myfile = client.files.get(name=myfile.name)

response = client.models.generate_content_stream(
    model="gemini-3.8-flash", contents=[myfile, "Describe this video clip"]
)
for chunk in response:
  print(chunk.text)
  print("_" * 80)

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});

let video = await ai.files.upload({
  file: path.join(media, 'Big_Buck_Bunny.mp4'),
});

// Poll until the video file is completely processed (state becomes ACTIVE).
while (!video.state || video.state.toString() !== 'ACTIVE') {
  console.log('Processing video...');
  console.log('File state: ', video.state);
  await sleep(5000);
  video = await ai.files.get({name: video.name});
}

const response = await ai.models.generateContentStream({
  model: 'gemini-3.8-flash',
  contents: [
    createUserContent([
      'Describe this video clip',
      createPartFromUri(video.uri, video.mimeType),
    ]),
  ],
});
let text = '';
for await (const chunk of response) {
  console.log(chunk.text);
  text += chunk.text;
}

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "Big_Buck_Bunny.mp4"),
	&genai.UploadFileConfig{
		MIMEType: "video/mp4",
	},
)
if err != nil {
	log.Fatal(err)
}

// Poll until the video file is completely processed (state becomes ACTIVE).
for file.State == genai.FileStateUnspecified || file.State != genai.FileStateActive {
	fmt.Println("Processing video...")
	fmt.Println("File state:", file.State)
	time.Sleep(5 * time.Second)

	file, err = client.Files.Get(ctx, file.Name, nil)
	if err != nil {
		log.Fatal(err)
	}
}

parts := []*genai.Part{
	genai.NewPartFromText("Describe this video clip"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

for result, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(result.Candidates[0].Content.Parts[0].Text)
}

Shell

# Use File API to upload audio data to API request.
MIME_TYPE=$(file -b --mime-type "${VIDEO_PATH}")
NUM_BYTES=$(wc -c < "${VIDEO_PATH}")
DISPLAY_NAME=VIDEO_PATH

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${VIDEO_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

state=$(jq ".file.state" file_info.json)
echo state=$state

while [[ "($state)" = *"PROCESSING"* ]];
do
  echo "Processing video..."
  sleep 5
  # Get the file of interest to check state
  curl https://generativelanguage.googleapis.com/v1beta/files/$name > file_info.json
  state=$(jq ".file.state" file_info.json)
done

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Please describe this file."},
          {"file_data":{"mime_type": "video/mp4", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

PDF

Python

from google import genai

client = genai.Client()
sample_pdf = client.files.upload(file=media / "test.pdf")
response = client.models.generate_content_stream(
    model="gemini-3.8-flash",
    contents=["Give me a summary of this document:", sample_pdf],
)

for chunk in response:
  print(chunk.text)
  print("_" * 80)

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

file, err := client.Files.UploadFromPath(
	ctx,
	filepath.Join(getMedia(), "test.pdf"),
	&genai.UploadFileConfig{
		MIMEType: "application/pdf",
	},
)
if err != nil {
	log.Fatal(err)
}

parts := []*genai.Part{
	genai.NewPartFromText("Give me a summary of this document:"),
	genai.NewPartFromURI(file.URI, file.MIMEType),
}

contents := []*genai.Content{
	genai.NewContentFromParts(parts, genai.RoleUser),
}

for result, err := range client.Models.GenerateContentStream(
	ctx,
	"gemini-3.8-flash",
	contents,
	nil,
) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Print(result.Candidates[0].Content.Parts[0].Text)
}

Shell

MIME_TYPE=$(file -b --mime-type "${PDF_PATH}")
NUM_BYTES=$(wc -c < "${PDF_PATH}")
DISPLAY_NAME=TEXT


echo $MIME_TYPE
tmp_header_file=upload-header.tmp

# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "${BASE_URL}/upload/v1beta/files?key=${GEMINI_API_KEY}" \
  -D upload-header.tmp \
  -H "X-Goog-Upload-Protocol: resumable" \
  -H "X-Goog-Upload-Command: start" \
  -H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
  -H "Content-Type: application/json" \
  -d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null

upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"

# Upload the actual bytes.
curl "${upload_url}" \
  -H "Content-Length: ${NUM_BYTES}" \
  -H "X-Goog-Upload-Offset: 0" \
  -H "X-Goog-Upload-Command: upload, finalize" \
  --data-binary "@${PDF_PATH}" 2> /dev/null > file_info.json

file_uri=$(jq ".file.uri" file_info.json)
echo file_uri=$file_uri

# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [{
        "parts":[
          {"text": "Can you add a few more lines to this poem?"},
          {"file_data":{"mime_type": "application/pdf", "file_uri": '$file_uri'}}]
        }]
       }' 2> /dev/null > response.json

cat response.json
echo

채팅

Python

from google import genai
from google.genai import types

client = genai.Client()
chat = client.chats.create(
    model="gemini-3.8-flash",
    history=[
        types.Content(role="user", parts=[types.Part(text="Hello")]),
        types.Content(
            role="model",
            parts=[
                types.Part(
                    text="Great to meet you. What would you like to know?"
                )
            ],
        ),
    ],
)
response = chat.send_message_stream(message="I have 2 dogs in my house.")
for chunk in response:
  print(chunk.text)
  print("_" * 80)
response = chat.send_message_stream(
    message="How many paws are in my house?"
)
for chunk in response:
  print(chunk.text)
  print("_" * 80)

print(chat.get_history())

Node.js

// Make sure to include the following import:
// import {GoogleGenAI} from '@google/genai';
const ai = new GoogleGenAI({apiKey: process.env.GEMINI_API_KEY});
const chat = ai.chats.create({
  model: 'gemini-3.8-flash',
  history: [
    {
      role: 'user',
      parts: [{text: 'Hello'}],
    },
    {
      role: 'model',
      parts: [{text: 'Great to meet you. What would you like to know?'}],
    },
  ],
});

console.log('Streaming response for first message:');
const stream1 = await chat.sendMessageStream({
  message: 'I have 2 dogs in my house.',
});
for await (const chunk of stream1) {
  console.log(chunk.text);
  console.log('_'.repeat(80));
}

console.log('Streaming response for second message:');
const stream2 = await chat.sendMessageStream({
  message: 'How many paws are in my house?',
});
for await (const chunk of stream2) {
  console.log(chunk.text);
  console.log('_'.repeat(80));
}

console.log(chat.getHistory());

Go

ctx := context.Background()
client, err := genai.NewClient(ctx, &genai.ClientConfig{
	APIKey:  os.Getenv("GEMINI_API_KEY"),
	Backend: genai.BackendGeminiAPI,
})
if err != nil {
	log.Fatal(err)
}

history := []*genai.Content{
	genai.NewContentFromText("Hello", genai.RoleUser),
	genai.NewContentFromText("Great to meet you. What would you like to know?", genai.RoleModel),
}
chat, err := client.Chats.Create(ctx, "gemini-3.8-flash", nil, history)
if err != nil {
	log.Fatal(err)
}

for chunk, err := range chat.SendMessageStream(ctx, genai.Part{Text: "I have 2 dogs in my house."}) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(chunk.Text())
	fmt.Println(strings.Repeat("_", 64))
}

for chunk, err := range chat.SendMessageStream(ctx, genai.Part{Text: "How many paws are in my house?"}) {
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(chunk.Text())
	fmt.Println(strings.Repeat("_", 64))
}

fmt.Println(chat.History(false))

Shell

curl https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:streamGenerateContent?alt=sse&key=$GEMINI_API_KEY \
    -H 'Content-Type: application/json' \
    -X POST \
    -d '{
      "contents": [
        {"role":"user",
         "parts":[{
           "text": "Hello"}]},
        {"role": "model",
         "parts":[{
           "text": "Great to meet you. What would you like to know?"}]},
        {"role":"user",
         "parts":[{
           "text": "I have two dogs in my house. How many paws are in my house?"}]},
      ]
    }' 2> /dev/null | grep "text"

응답 본문

성공하면 응답 본문에 GenerateContentResponse 인스턴스 스트림이 포함됩니다.

GenerateContentResponse

여러 후보 응답을 지원하는 모델의 응답입니다.

안전 등급 및 콘텐츠 필터링은 GenerateContentResponse.prompt_feedback의 프롬프트와 finishReason 및 safetyRatings의 각 후보에 대해 보고됩니다. API는 다음을 수행합니다. - 요청된 모든 후보를 반환하거나 아무것도 반환하지 않습니다. - 프롬프트에 문제가 있는 경우에만 후보를 전혀 반환하지 않습니다 (promptFeedback 확인). - finishReason 및 safetyRatings에서 각 후보에 대한 의견을 보고합니다.

필드
candidates[] object (Candidate)

모델의 후보 응답입니다.

promptFeedback object (PromptFeedback)

콘텐츠 필터와 관련된 프롬프트의 의견을 반환합니다.

usageMetadata object (UsageMetadata)

출력 전용입니다. 생성 요청의 토큰 사용량에 대한 메타데이터입니다.

modelVersion string

출력 전용입니다. 대답을 생성하는 데 사용된 모델 버전입니다.

responseId string

출력 전용입니다. responseId는 각 응답을 식별하는 데 사용됩니다.

modelStatus object (ModelStatus)

출력 전용입니다. 이 모델의 현재 모델 상태입니다.

JSON 표현
{
  "candidates": [
    {
      object (Candidate)
    }
  ],
  "promptFeedback": {
    object (PromptFeedback)
  },
  "usageMetadata": {
    object (UsageMetadata)
  },
  "modelVersion": string,
  "responseId": string,
  "modelStatus": {
    object (ModelStatus)
  }
}

PromptFeedback

GenerateContentRequest.content에 지정된 프롬프트의 의견 메타데이터 집합입니다.

필드
blockReason enum (BlockReason)

선택사항입니다. 설정된 경우 프롬프트가 차단되고 후보가 반환되지 않습니다. 프롬프트를 변경합니다.

safetyRatings[] object (SafetyRating)

프롬프트의 안전성 등급입니다. 카테고리당 최대 하나의 평점이 있습니다.

JSON 표현
{
  "blockReason": enum (BlockReason),
  "safetyRatings": [
    {
      object (SafetyRating)
    }
  ]
}

BlockReason

프롬프트가 차단된 이유를 지정합니다.

열거형
BLOCK_REASON_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
SAFETY 안전상의 이유로 프롬프트가 차단되었습니다. safetyRatings를 검사하여 어떤 안전 카테고리에서 차단되었는지 확인합니다.
OTHER 알 수 없는 이유로 프롬프트가 차단되었습니다.
BLOCKLIST 용어 차단 목록에 포함된 용어로 인해 프롬프트가 차단되었습니다.
PROHIBITED_CONTENT 금지된 콘텐츠로 인해 프롬프트가 차단되었습니다.
IMAGE_SAFETY 안전하지 않은 이미지 생성 콘텐츠로 인해 대답 후보가 차단되었습니다.

UsageMetadata

생성 요청의 토큰 사용량에 대한 메타데이터입니다.

필드
promptTokenCount integer

프롬프트의 토큰 수입니다. cachedContent가 설정된 경우에도 이는 총 유효 프롬프트 크기입니다. 즉, 캐시된 콘텐츠의 토큰 수가 포함됩니다.

cachedContentTokenCount integer

프롬프트의 캐시된 부분 (캐시된 콘텐츠)에 있는 토큰 수

candidatesTokenCount integer

생성된 모든 대답 후보의 총 토큰 수입니다.

toolUsePromptTokenCount integer

출력 전용입니다. 도구 사용 프롬프트에 있는 토큰 수입니다.

thoughtsTokenCount integer

출력 전용입니다. 사고 모델의 사고 토큰 수입니다.

totalTokenCount integer

생성 요청의 총 토큰 수 (프롬프트 + 도구 사용 프롬프트 + 생각 + 대답 후보)입니다.

promptTokensDetails[] object (ModalityTokenCount)

출력 전용입니다. 요청 입력에서 처리된 형식 목록입니다.

cacheTokensDetails[] object (ModalityTokenCount)

출력 전용입니다. 요청 입력에 있는 캐시된 콘텐츠의 형식 목록입니다.

candidatesTokensDetails[] object (ModalityTokenCount)

출력 전용입니다. 응답에 반환된 형식 목록입니다.

toolUsePromptTokensDetails[] object (ModalityTokenCount)

출력 전용입니다. 도구 사용 요청 입력에 대해 처리된 형식 목록입니다.

serviceTier enum (ServiceTier)

출력 전용입니다. 요청의 서비스 등급입니다.

JSON 표현
{
  "promptTokenCount": integer,
  "cachedContentTokenCount": integer,
  "candidatesTokenCount": integer,
  "toolUsePromptTokenCount": integer,
  "thoughtsTokenCount": integer,
  "totalTokenCount": integer,
  "promptTokensDetails": [
    {
      object (ModalityTokenCount)
    }
  ],
  "cacheTokensDetails": [
    {
      object (ModalityTokenCount)
    }
  ],
  "candidatesTokensDetails": [
    {
      object (ModalityTokenCount)
    }
  ],
  "toolUsePromptTokensDetails": [
    {
      object (ModalityTokenCount)
    }
  ],
  "serviceTier": enum (ServiceTier)
}

ModelStatus

기본 모델의 상태입니다. 기본 모델의 단계와 사용 중단 시간(해당하는 경우)을 나타내는 데 사용됩니다.

필드
modelStage enum (ModelStage)

기본 모델의 단계입니다.

retirementTime string (Timestamp format)

모델이 사용 중지되는 시간입니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

message string

모델 상태를 설명하는 메시지입니다.

JSON 표현
{
  "modelStage": enum (ModelStage),
  "retirementTime": string,
  "message": string
}

ModelStage

기본 모델의 단계를 정의합니다.

열거형
MODEL_STAGE_UNSPECIFIED 지정되지 않은 모델 단계입니다.
UNSTABLE_EXPERIMENTAL

기본 모델은 많은 조정을 거칩니다.

EXPERIMENTAL 이 단계의 모델은 실험용으로만 사용됩니다.
PREVIEW 이 단계의 모델은 실험 모델보다 더 성숙한 모델입니다.
STABLE 이 단계의 모델은 안정적이며 프로덕션에 사용할 준비가 된 것으로 간주됩니다.
LEGACY 모델이 이 단계에 있다면 가까운 시일 내에 지원 중단될 예정이라는 의미입니다. 기존 고객만 이 모델을 사용할 수 있습니다.
DEPRECATED

이 단계의 모델은 지원 중단됩니다. 이러한 모델은 사용할 수 없습니다.

RETIRED 이 단계의 모델은 사용 중지됩니다. 이러한 모델은 사용할 수 없습니다.

후보자

모델에서 생성된 대답 후보입니다.

필드
content object (Content)

출력 전용입니다. 모델에서 반환된 생성된 콘텐츠입니다.

finishReason enum (FinishReason)

선택사항입니다. 출력 전용입니다. 모델 토큰 생성이 중지된 이유입니다.

비어 있으면 모델이 토큰 생성을 중단하지 않은 것입니다.

safetyRatings[] object (SafetyRating)

응답 후보의 안전에 대한 평점 목록입니다.

카테고리당 최대 1개의 평점이 있습니다.

citationMetadata object (CitationMetadata)

출력 전용입니다. 모델 생성 후보의 인용 정보입니다.

이 필드는 content에 포함된 모든 텍스트의 인용 정보로 채워질 수 있습니다. 이는 기본 LLM의 학습 데이터에 있는 저작권 보호 자료에서 '인용'된 구절입니다.

tokenCount integer

출력 전용입니다. 이 후보의 토큰 수입니다.

groundingAttributions[] object (GroundingAttribution)

출력 전용입니다. 그라운딩된 답변에 기여한 소스의 출처 정보입니다.

이 필드는 GenerateAnswer 호출에 채워집니다.

groundingMetadata object (GroundingMetadata)

출력 전용입니다. 후보의 그라운딩 메타데이터입니다.

이 필드는 GenerateContent 호출에 채워집니다.

avgLogprobs number

출력 전용입니다. 후보의 평균 로그 확률 점수입니다.

logprobsResult object (LogprobsResult)

출력 전용입니다. 대답 토큰 및 상위 토큰의 로그 우도 점수

urlContextMetadata object (UrlContextMetadata)

출력 전용입니다. URL 컨텍스트 검색 도구와 관련된 메타데이터입니다.

continuationToken string (bytes format)

finishReason가 CONTINUATION일 때 반환되는 선택적 불투명 연속 토큰입니다. 클라이언트는 이 토큰을 후속 GenerateContentRequest에 전달하여 생성을 계속할 수 있습니다.

base64 인코딩 문자열입니다.

index integer

출력 전용입니다. 응답 후보 목록에 있는 후보의 색인입니다.

finishMessage string

선택사항입니다. 출력 전용입니다. 모델 토큰 생성이 중지된 이유를 자세히 설명합니다. 이는 finishReason가 설정된 경우에만 채워집니다.

JSON 표현
{
  "content": {
    object (Content)
  },
  "finishReason": enum (FinishReason),
  "safetyRatings": [
    {
      object (SafetyRating)
    }
  ],
  "citationMetadata": {
    object (CitationMetadata)
  },
  "tokenCount": integer,
  "groundingAttributions": [
    {
      object (GroundingAttribution)
    }
  ],
  "groundingMetadata": {
    object (GroundingMetadata)
  },
  "avgLogprobs": number,
  "logprobsResult": {
    object (LogprobsResult)
  },
  "urlContextMetadata": {
    object (UrlContextMetadata)
  },
  "continuationToken": string,
  "index": integer,
  "finishMessage": string
}

FinishReason

모델 토큰 생성이 중지된 이유를 정의합니다.

열거형
FINISH_REASON_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
STOP 모델의 자연 중단 지점 또는 중지 시퀀스가 제공됨.
MAX_TOKENS 요청에 지정된 최대 토큰 수에 도달했습니다.
SAFETY 안전상의 이유로 대답 후보 콘텐츠가 신고되었습니다.
RECITATION 응답 후보 콘텐츠가 인용 사유로 신고되었습니다.
LANGUAGE 대답 후보 콘텐츠가 지원되지 않는 언어를 사용한 것으로 신고되었습니다.
OTHER 알 수 없는 이유입니다.
BLOCKLIST 콘텐츠에 금지된 용어가 포함되어 있으므로 토큰 생성이 중지되었습니다.
PROHIBITED_CONTENT 금지된 콘텐츠가 포함되었을 수 있어 토큰 생성이 중지되었습니다.
SPII 콘텐츠에 민감한 개인 식별 정보 (SPII)가 포함될 수 있으므로 토큰 생성이 중지되었습니다.
MALFORMED_FUNCTION_CALL 모델에서 생성된 함수 호출이 잘못되었습니다.
IMAGE_SAFETY 생성된 이미지에 안전 정책 위반이 포함되어 있어 토큰 생성이 중지되었습니다.
IMAGE_PROHIBITED_CONTENT 생성된 이미지에 다른 금지된 콘텐츠가 포함되어 있어 이미지 생성이 중지되었습니다.
IMAGE_OTHER 기타 문제로 인해 이미지 생성이 중지되었습니다.
NO_IMAGE 모델에서 이미지를 생성할 것으로 예상되었지만 이미지가 생성되지 않았습니다.
IMAGE_RECITATION 인용으로 인해 이미지 생성이 중지되었습니다.
UNEXPECTED_TOOL_CALL 모델이 도구 호출을 생성했지만 요청에서 사용 설정된 도구가 없습니다.
TOO_MANY_TOOL_CALLS 모델이 너무 많은 도구를 연속으로 호출하여 시스템이 실행을 종료했습니다.
MISSING_THOUGHT_SIGNATURE 요청에 생각 서명이 하나 이상 누락되었습니다.
MALFORMED_RESPONSE 잘못된 형식의 응답으로 인해 완료되었습니다.
ESCALATION 에스컬레이션 규칙에 의해 요청이 필터링되었습니다.
PUP_LIMITED_DISABLED 금지된 사용 정책 (PUP) 위반으로 인해 사용자 계정이 제한되거나 사용 중지되어 토큰 생성이 중지되었음을 나타냅니다.
CONTINUATION 대답이 요청당 토큰 한도에 도달하여 토큰 생성이 중지되었지만 생성이 아직 완료되지 않았습니다. 반환된 continuationToken를 사용하여 후속 요청을 통해 모델 대답을 계속할 수 있습니다. maxOutputTokens는 연속 홉에 걸쳐 누적되며 단조 증가하거나 생략되어야 합니다.

GroundingAttribution

답변에 기여한 소스의 출처 표시입니다.

필드
sourceId object (AttributionSourceId)

출력 전용입니다. 이 기여 분석에 기여하는 소스의 식별자입니다.

content object (Content)

이 출처를 구성하는 그라운딩 소스 콘텐츠입니다.

JSON 표현
{
  "sourceId": {
    object (AttributionSourceId)
  },
  "content": {
    object (Content)
  }
}

AttributionSourceId

이 기여 분석에 기여하는 소스의 식별자입니다.

필드
source Union type
다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
groundingPassage object (GroundingPassageId)

인라인 구절의 식별자입니다.

semanticRetrieverChunk object (SemanticRetrieverChunk)

시맨틱 검색기를 통해 가져온 Chunk의 식별자입니다.

상호 배타적인 필드의 끝입니다.
JSON 표현
{

  // source
  "groundingPassage": {
    object (GroundingPassageId)
  },
  "semanticRetrieverChunk": {
    object (SemanticRetrieverChunk)
  }
  // Union type
}

GroundingPassageId

GroundingPassage 내의 부분 식별자입니다.

필드
passageId string

출력 전용입니다. GenerateAnswerRequest의 GroundingPassage.id과 일치하는 구절의 ID입니다.

partIndex integer

출력 전용입니다. GenerateAnswerRequest의 GroundingPassage.content 내에 있는 부분의 색인입니다.

JSON 표현
{
  "passageId": string,
  "partIndex": integer
}

SemanticRetrieverChunk

SemanticRetrieverConfig를 사용하여 GenerateAnswerRequest에 지정된 시맨틱 검색기를 통해 검색된 Chunk의 식별자입니다.

필드
source string

출력 전용입니다. 요청의 SemanticRetrieverConfig.source와 일치하는 소스의 이름입니다. 예: corpora/123 또는 corpora/123/documents/abc

chunk string

출력 전용입니다. 저작자 표시 텍스트가 포함된 Chunk의 이름입니다. 예를 들면 corpora/123/documents/abc/chunks/xyz입니다.

JSON 표현
{
  "source": string,
  "chunk": string
}

GroundingMetadata

그라운딩이 사용 설정된 경우 클라이언트에 반환되는 메타데이터입니다.

필드
groundingChunks[] object (GroundingChunk)

지정된 그라운딩 소스에서 가져온 지원 참조 목록입니다. 스트리밍할 때 이전 응답의 그라운딩 메타데이터에 포함되지 않은 그라운딩 청크만 포함됩니다.

groundingSupports[] object (GroundingSupport)

그라운딩 지원 목록입니다.

webSearchQueries[] string

후속 웹 검색을 위한 웹 검색어입니다.

imageSearchQueries[] string

그라운딩에 사용되는 이미지 검색어입니다.

searchEntryPoint object (SearchEntryPoint)

선택사항입니다. 후속 웹 검색을 위한 Google 검색 항목입니다.

retrievalMetadata object (RetrievalMetadata)

그라운딩 흐름의 검색과 관련된 메타데이터입니다.

googleMapsWidgetContextToken string

선택사항입니다. 문맥 데이터를 렌더링하기 위해 PlacesContextElement 위젯과 함께 사용할 수 있는 Google 지도 위젯 컨텍스트 토큰의 리소스 이름입니다. Google 지도 기반 그라운딩이 사용 설정된 경우에만 채워집니다.

JSON 표현
{
  "groundingChunks": [
    {
      object (GroundingChunk)
    }
  ],
  "groundingSupports": [
    {
      object (GroundingSupport)
    }
  ],
  "webSearchQueries": [
    string
  ],
  "imageSearchQueries": [
    string
  ],
  "searchEntryPoint": {
    object (SearchEntryPoint)
  },
  "retrievalMetadata": {
    object (RetrievalMetadata)
  },
  "googleMapsWidgetContextToken": string
}

SearchEntryPoint

Google 검색 진입점입니다.

필드
renderedContent string

선택사항입니다. 웹페이지나 앱 웹뷰에 삽입할 수 있는 웹 콘텐츠 스니펫입니다.

sdkBlob string (bytes format)

선택사항입니다. <검색어, 검색 URL> 튜플의 배열을 나타내는 Base64로 인코딩된 JSON입니다.

base64 인코딩 문자열입니다.

JSON 표현
{
  "renderedContent": string,
  "sdkBlob": string
}

GroundingChunk

GroundingChunk은 모델의 대답을 그라운딩하는 뒷받침하는 증거의 세그먼트를 나타냅니다. 웹의 청크, 파일에서 검색된 컨텍스트 또는 Google 지도 정보일 수 있습니다.

필드
chunk_type Union type
청크 유형입니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
web object (Web)

웹의 그라운딩 청크입니다.

image object (Image)

선택사항입니다. 이미지 검색의 그라운딩 청크입니다.

retrievedContext object (RetrievedContext)

선택사항입니다. 파일 검색 도구에서 검색한 컨텍스트의 그라운딩 청크입니다.

maps object (Maps)

선택사항입니다. Google 지도의 그라운딩 청크입니다.

상호 배타적인 필드의 끝입니다.
JSON 표현
{

  // chunk_type
  "web": {
    object (Web)
  },
  "image": {
    object (Image)
  },
  "retrievedContext": {
    object (RetrievedContext)
  },
  "maps": {
    object (Maps)
  }
  // Union type
}

웹

웹에서 가져온 청크

필드
uri string

출력 전용입니다. 청크의 URI 참조입니다.

title string

출력 전용입니다. 청크 제목입니다.

JSON 표현
{
  "uri": string,
  "title": string
}

이미지

이미지 검색의 청크입니다.

필드
sourceUri string

기여 분석을 위한 웹페이지 URI입니다.

imageUri string

이미지 확장 소재 URL입니다.

title string

이미지가 포함된 웹페이지의 제목입니다.

domain string

이미지가 있는 웹페이지의 루트 도메인입니다(예: 'example.com').

JSON 표현
{
  "sourceUri": string,
  "imageUri": string,
  "title": string,
  "domain": string
}

RetrievedContext

파일 검색 도구에서 검색한 컨텍스트의 청크입니다.

필드
customMetadata[] object (CustomMetadata)

선택사항입니다. 검색된 컨텍스트에 대한 사용자 제공 메타데이터입니다.

uri string

선택사항입니다. 시맨틱 검색 문서의 URI 참조입니다.

title string

선택사항입니다. 문서 제목입니다.

text string

선택사항입니다. 청크의 텍스트입니다.

fileSearchStore string

선택사항입니다. 문서가 포함된 FileSearchStore의 이름입니다. 예를 들면 fileSearchStores/123입니다.

pageNumber integer

선택사항입니다. 검색된 컨텍스트의 페이지 번호입니다(해당하는 경우).

mediaId string

선택사항입니다. 멀티모달 파일 검색 결과의 미디어 blob 리소스 이름입니다. 형식: fileSearchStores/{file_search_store_id}/media/{blobId}

JSON 표현
{
  "customMetadata": [
    {
      object (CustomMetadata)
    }
  ],
  "uri": string,
  "title": string,
  "text": string,
  "fileSearchStore": string,
  "pageNumber": integer,
  "mediaId": string
}

CustomMetadata

GroundingFact에 대해 사용자가 제공한 메타데이터입니다.

필드
key string

메타데이터의 키입니다.

value Union type
메타데이터 값입니다. 문자열, 문자열 목록 또는 숫자일 수 있습니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
stringValue string

선택사항입니다. 메타데이터의 문자열 값입니다.

stringListValue object (StringList)

선택사항입니다. 메타데이터의 문자열 값 목록입니다.

numericValue number

선택사항입니다. 메타데이터의 숫자 값입니다. 이 값의 예상 범위는 사용되는 특정 key에 따라 다릅니다.

상호 배타적인 필드의 끝입니다.
JSON 표현
{
  "key": string,

  // value
  "stringValue": string,
  "stringListValue": {
    object (StringList)
  },
  "numericValue": number
  // Union type
}

StringList

문자열 값 목록입니다.

필드
values[] string

목록의 문자열 값입니다.

JSON 표현
{
  "values": [
    string
  ]
}

지도

Google 지도의 그라운딩 청크입니다. 지도 청크는 단일 장소에 해당합니다.

필드
uri string

장소의 URI 참조입니다.

title string

장소의 제목입니다.

text string

장소 답변의 텍스트 설명입니다.

placeId string

places/{placeId} 형식의 장소 ID입니다. 사용자는 이 ID를 사용하여 해당 장소를 조회할 수 있습니다.

placeAnswerSources object (PlaceAnswerSources)

Google 지도에서 특정 장소의 특징에 관한 답변을 제공하는 소스입니다.

JSON 표현
{
  "uri": string,
  "title": string,
  "text": string,
  "placeId": string,
  "placeAnswerSources": {
    object (PlaceAnswerSources)
  }
}

PlaceAnswerSources

Google 지도에서 특정 장소의 특징에 관한 답변을 제공하는 소스 모음입니다. 각 PlaceAnswerSources 메시지는 Google 지도의 특정 장소에 해당합니다. Google 지도 도구는 이러한 소스를 사용하여 장소의 특징에 관한 질문 (예: 'Bar Foo에 Wi-Fi가 있나요?' 또는 'Foo Bar는 휠체어로 이용 가능한가요?')에 답변했습니다. 현재는 리뷰 스니펫만 소스로 지원됩니다.

필드
reviewSnippets[] object (ReviewSnippet)

Google 지도에서 특정 장소의 특징에 관한 답변을 생성하는 데 사용되는 리뷰의 스니펫입니다.

JSON 표현
{
  "reviewSnippets": [
    {
      object (ReviewSnippet)
    }
  ]
}

ReviewSnippet

Google 지도에서 특정 장소의 기능에 관한 질문에 답변하는 사용자 리뷰의 스니펫을 캡슐화합니다.

필드
reviewId string

리뷰 스니펫의 ID입니다.

googleMapsUri string

Google 지도의 사용자 리뷰에 해당하는 링크입니다.

title string

리뷰 제목입니다.

JSON 표현
{
  "reviewId": string,
  "googleMapsUri": string,
  "title": string
}

GroundingSupport

그라운딩 지원입니다.

필드
groundingChunkIndices[] integer

선택사항입니다. 클레임과 연결된 인용을 지정하는 색인 목록 (response.candidate.grounding_metadata의 'grounding_chunk'에 있음)입니다. 예를 들어 [1,3,4] 는 grounding_chunk[1], grounding_chunk[3], grounding_chunk[4] 가 주장에 기여한 검색된 콘텐츠임을 의미합니다. 응답이 스트리밍인 경우 groundingChunkIndices는 모든 응답의 색인을 참조합니다. 모든 응답에서 그라운딩 청크를 누적하는 것은 클라이언트의 책임입니다 (동일한 순서 유지).

confidenceScores[] number

선택사항입니다. 지원 참조의 신뢰도 점수입니다. 범위는 0~1입니다. 1은 가장 자신감이 높음을 의미합니다. 이 목록은 groundingChunkIndices와 크기가 같아야 합니다.

renderedParts[] integer

출력 전용입니다. 후보 콘텐츠의 parts 필드에 대한 색인입니다. 이러한 색인은 이 지원 소스와 연결된 렌더링된 부분을 지정합니다.

segment object (Segment)

이 지원이 속한 콘텐츠의 세그먼트입니다.

JSON 표현
{
  "groundingChunkIndices": [
    integer
  ],
  "confidenceScores": [
    number
  ],
  "renderedParts": [
    integer
  ],
  "segment": {
    object (Segment)
  }
}

세그먼트

콘텐츠의 세그먼트입니다.

필드
partIndex integer

상위 Content 객체 내 Part 객체의 색인입니다.

startIndex integer

지정된 부분의 시작 색인(바이트 단위)입니다. 부분의 시작부터의 오프셋(포함)으로, 0부터 시작합니다.

endIndex integer

지정된 부분의 끝 색인(바이트 단위)입니다. 부분의 시작 부분에서 오프셋(제외, 0부터 시작)입니다.

text string

응답의 세그먼트에 해당하는 텍스트입니다.

JSON 표현
{
  "partIndex": integer,
  "startIndex": integer,
  "endIndex": integer,
  "text": string
}

RetrievalMetadata

그라운딩 흐름의 검색과 관련된 메타데이터입니다.

필드
googleSearchDynamicRetrievalScore number

선택사항입니다. Google 검색의 정보가 프롬프트에 답변하는 데 도움이 될 가능성을 나타내는 점수입니다. 점수 범위는 [0, 1]이며, 0은 가능성이 가장 낮고 1은 가능성이 가장 높습니다. 이 점수는 Google 검색 그라운딩 및 동적 검색이 사용 설정된 경우에만 채워집니다. 이 점수는 임곗값과 비교되어 Google 검색을 트리거할지 여부를 결정합니다.

JSON 표현
{
  "googleSearchDynamicRetrievalScore": number
}

LogprobsResult

Logprobs 결과

필드
topCandidates[] object (TopCandidates)

길이 = 총 디코딩 단계 수

chosenCandidates[] object (Candidate)

길이 = 총 디코딩 단계 수 선택한 후보는 topCandidates에 있을 수도 있고 없을 수도 있습니다.

logProbabilitySum number

모든 토큰의 로그 확률 합계입니다.

JSON 표현
{
  "topCandidates": [
    {
      object (TopCandidates)
    }
  ],
  "chosenCandidates": [
    {
      object (Candidate)
    }
  ],
  "logProbabilitySum": number
}

TopCandidates

각 디코딩 단계에서 로그 확률이 가장 높은 후보입니다.

필드
candidates[] object (Candidate)

로그 확률을 기준으로 내림차순으로 정렬됩니다.

JSON 표현
{
  "candidates": [
    {
      object (Candidate)
    }
  ]
}

후보자

logprobs 토큰 및 점수의 후보입니다.

필드
token string

후보의 토큰 문자열 값입니다.

tokenId integer

후보의 토큰 ID 값입니다.

logProbability number

후보의 로그 확률입니다.

JSON 표현
{
  "token": string,
  "tokenId": integer,
  "logProbability": number
}

UrlContextMetadata

URL 컨텍스트 검색 도구와 관련된 메타데이터입니다.

필드
urlMetadata[] object (UrlMetadata)

URL 컨텍스트 목록입니다.

JSON 표현
{
  "urlMetadata": [
    {
      object (UrlMetadata)
    }
  ]
}

UrlMetadata

단일 URL 검색의 컨텍스트입니다.

필드
retrievedUrl string

도구에서 가져온 URL입니다.

urlRetrievalStatus enum (UrlRetrievalStatus)

URL 검색 상태입니다.

JSON 표현
{
  "retrievedUrl": string,
  "urlRetrievalStatus": enum (UrlRetrievalStatus)
}

UrlRetrievalStatus

URL 검색 상태입니다.

열거형
URL_RETRIEVAL_STATUS_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
URL_RETRIEVAL_STATUS_SUCCESS URL 검색이 완료되었습니다.
URL_RETRIEVAL_STATUS_ERROR 오류로 인해 URL을 가져오지 못했습니다.
URL_RETRIEVAL_STATUS_PAYWALL 콘텐츠가 페이월 뒤에 있어 URL을 가져올 수 없습니다.
URL_RETRIEVAL_STATUS_UNSAFE 콘텐츠가 안전하지 않으므로 URL을 가져올 수 없습니다.

CitationMetadata

콘텐츠의 소스 저작자 표시 모음입니다.

필드
citationSources[] object (CitationSource)

특정 대답의 출처 인용

JSON 표현
{
  "citationSources": [
    {
      object (CitationSource)
    }
  ]
}

CitationSource

특정 대답의 일부에 대한 소스 인용입니다.

필드
startIndex integer

선택사항입니다. 이 소스에 기여한 응답 세그먼트의 시작입니다.

색인은 바이트로 측정된 세그먼트의 시작을 나타냅니다.

endIndex integer

선택사항입니다. 기여도가 부여된 세그먼트의 끝(해당 값 제외)입니다.

uri string

선택사항입니다. 텍스트 일부의 소스로 기여도가 부여된 URI입니다.

license string

선택사항입니다. 세그먼트의 소스로 기여도가 부여된 GitHub 프로젝트의 라이선스입니다.

코드 인용에는 라이선스 정보가 필요합니다.

JSON 표현
{
  "startIndex": integer,
  "endIndex": integer,
  "uri": string,
  "license": string
}

HarmCategory

등급의 카테고리입니다.

이러한 카테고리에는 개발자가 조정할 수 있는 다양한 종류의 피해가 포함됩니다.

열거형
HARM_CATEGORY_UNSPECIFIED 카테고리가 지정되지 않았습니다.
HARM_CATEGORY_DEROGATORY

PaLM - 정체성 또는 보호 대상 속성을 겨냥하는 부정적이거나 유해한 댓글 지원 중단됨: PaLM 전용 카테고리이며 Gemini 모델에서 지원되지 않습니다.

HARM_CATEGORY_TOXICITY

PaLM - 무례하거나 모욕적이거나 욕설이 있는 콘텐츠 지원 중단됨: PaLM 전용 카테고리이며 Gemini 모델에서 지원되지 않습니다.

HARM_CATEGORY_VIOLENCE

PaLM - 개인 또는 그룹에 대한 폭력을 묘사하는 시나리오 또는 유혈 콘텐츠에 대한 일반적인 설명을 묘사 지원 중단됨: PaLM 전용 카테고리이며 Gemini 모델에서 지원되지 않습니다.

HARM_CATEGORY_SEXUAL

PaLM - 성행위 또는 기타 외설적인 콘텐츠에 대한 언급이 포함되어 있습니다. 지원 중단됨: PaLM 전용 카테고리이며 Gemini 모델에서 지원되지 않습니다.

HARM_CATEGORY_MEDICAL

PaLM - 검증되지 않은 의료 조언을 홍보합니다. 지원 중단됨: PaLM 전용 카테고리이며 Gemini 모델에서 지원되지 않습니다.

HARM_CATEGORY_DANGEROUS

PaLM - 유해한 행위를 조장, 촉진 또는 장려하는 위험한 콘텐츠 지원 중단됨: PaLM 전용 카테고리이며 Gemini 모델에서 지원되지 않습니다.

HARM_CATEGORY_HARASSMENT Gemini - 괴롭힘 콘텐츠
HARM_CATEGORY_HATE_SPEECH Gemini - 증오심 표현 및 콘텐츠
HARM_CATEGORY_SEXUALLY_EXPLICIT Gemini - 음란물
HARM_CATEGORY_DANGEROUS_CONTENT Gemini - 위험한 콘텐츠
HARM_CATEGORY_CIVIC_INTEGRITY

Gemini - 공익을 해치는 데 사용될 수 있는 콘텐츠 지원 중단됨: 대신 enableEnhancedCivicAnswers를 사용하세요.

HARM_CATEGORY_JAILBREAK Gemini - 모델의 안전 가이드라인을 우회하거나 전복하려는 프롬프트 (탈옥 시도)

ModalityTokenCount

단일 형식의 토큰 계산 정보를 나타냅니다.

필드
modality enum (Modality)

이 토큰 수와 연결된 형식입니다.

tokenCount integer

토큰 수입니다.

JSON 표현
{
  "modality": enum (Modality),
  "tokenCount": integer
}

형식

콘텐츠 부분 형식

열거형
MODALITY_UNSPECIFIED 지정되지 않은 양식입니다.
TEXT 일반 텍스트
IMAGE 이미지입니다.
VIDEO 동영상입니다.
AUDIO 오디오
DOCUMENT 문서(예: PDF)

SafetyRating

콘텐츠의 안전 등급입니다.

안전 평점에는 콘텐츠의 피해 카테고리와 해당 카테고리의 피해 확률 수준이 포함됩니다. 콘텐츠는 여러 피해 카테고리에 걸쳐 안전을 위해 분류되며 피해 분류의 확률이 여기에 포함됩니다.

필드
category enum (HarmCategory)

필수 항목입니다. 이 등급의 카테고리입니다.

probability enum (HarmProbability)

필수 항목입니다. 이 콘텐츠의 유해성 확률입니다.

blocked boolean

이 등급으로 인해 콘텐츠가 차단되었나요?

JSON 표현
{
  "category": enum (HarmCategory),
  "probability": enum (HarmProbability),
  "blocked": boolean
}

HarmProbability

콘텐츠가 유해할 확률입니다.

분류 시스템은 콘텐츠가 안전하지 않을 가능성을 제공합니다. 이는 콘텐츠의 유해 심각도를 나타내지 않습니다.

열거형
HARM_PROBABILITY_UNSPECIFIED 확률이 지정되지 않았습니다.
NEGLIGIBLE 콘텐츠는 안전하지 않을 가능성이 무시할 만합니다.
LOW 콘텐츠는 안전하지 않을 가능성이 낮습니다.
MEDIUM 콘텐츠는 안전하지 않을 가능성이 중간 정도입니다.
HIGH 콘텐츠는 안전하지 않을 가능성이 매우 높습니다.

SafetySetting

안전 차단 동작에 영향을 미치는 안전 설정입니다.

카테고리의 안전 설정을 전달하면 콘텐츠가 차단될 허용 확률이 변경됩니다.

필드
category enum (HarmCategory)

필수 항목입니다. 이 설정의 카테고리입니다.

threshold enum (HarmBlockThreshold)

필수 항목입니다. 피해가 차단되는 확률 기준점을 제어합니다.

JSON 표현
{
  "category": enum (HarmCategory),
  "threshold": enum (HarmBlockThreshold)
}

HarmBlockThreshold

지정된 유해 확률 이상에서 차단합니다.

열거형
HARM_BLOCK_THRESHOLD_UNSPECIFIED 기준점이 지정되지 않았습니다.
BLOCK_LOW_AND_ABOVE NEGLIGIBLE 콘텐츠는 허용됩니다.
BLOCK_MEDIUM_AND_ABOVE NEGLIGIBLE 및 LOW가 포함된 콘텐츠는 허용됩니다.
BLOCK_ONLY_HIGH NEGLIGIBLE, LOW, MEDIUM인 콘텐츠는 허용됩니다.
BLOCK_NONE 모든 콘텐츠가 허용됩니다.
OFF 안전 필터를 사용 중지합니다.

ServiceTier

요청의 서비스 등급입니다.

열거형
unspecified 기본 서비스 등급(표준)입니다.
standard 표준 서비스 등급입니다.
flex Flex 서비스 등급
priority 우선순위 서비스 등급

콘텐츠

메시지의 여러 부분으로 구성된 콘텐츠를 포함하는 구조화된 데이터의 기본 유형입니다.

Content에는 Content의 생성자를 지정하는 role 필드와 메시지 차례의 콘텐츠가 포함된 멀티파트 데이터가 포함된 parts 필드가 포함됩니다.

필드
parts[] object (Part)

단일 메시지를 구성하는 순서가 지정된 Parts입니다. 부분마다 MIME 유형이 다를 수 있습니다.

role string

선택사항입니다. 콘텐츠 제작자입니다. 'user' 또는 'model'이어야 합니다.

멀티턴 대화에 설정하는 것이 유용하며, 그렇지 않으면 비워 두거나 설정하지 않을 수 있습니다.

JSON 표현
{
  "parts": [
    {
      object (Part)
    }
  ],
  "role": string
}

부품

멀티 파트 Content 메시지의 일부인 미디어를 포함하는 데이터 유형입니다.

Part는 연결된 데이터 유형이 있는 데이터로 구성됩니다. Part에는 Part.data에서 허용되는 유형 중 하나만 포함될 수 있습니다.

inlineData 필드가 원시 바이트로 채워진 경우 Part에는 미디어의 유형과 하위 유형을 식별하는 고정된 IANA MIME 유형이 있어야 합니다.

필드
thought boolean

선택사항입니다. 모델에서 파트가 생성되었는지 여부를 나타냅니다.

thoughtSignature string (bytes format)

선택사항입니다. 후속 요청에서 재사용할 수 있는 생각의 불투명 서명입니다.

base64 인코딩 문자열입니다.

partMetadata object (Struct format)

부분과 연결된 커스텀 메타데이터입니다. genai.Part를 콘텐츠 표현으로 사용하는 에이전트는 추가 정보를 추적해야 할 수 있습니다. 예를 들어 Part가 시작되는 파일/소스의 이름이거나 여러 Part 스트림을 다중화하는 방법일 수 있습니다.

mediaResolution object (MediaResolution)

선택사항입니다. 입력 미디어의 미디어 해상도입니다.

mediaProcessing enum (MediaProcessing)

선택사항입니다. 모델이 이해를 위해 이 부분의 미디어를 처리하는 방법입니다. 동영상 부분 (inlineData 또는 동영상 MIME이 있는 fileData)에만 의미가 있습니다. 동영상이 아닌 부분은 이 필드를 무시합니다.

audioTranscription object (AudioTranscription)

선택사항입니다. 오디오 (입력 또는 출력) 스크립트 작성 이 부분에 오디오 데이터가 포함된 경우에만 설정됩니다.

speechMetadata object (SpeechMetadata)

선택사항입니다. 화자 ID 또는 발화 스타일을 지정하는 등 텍스트가 발화되거나 합성되는 방식을 맞춤설정하기 위해 텍스트 부분에 적용되는 메타데이터입니다.

data Union type
다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
text string

인라인 텍스트입니다.

inlineData object (Blob)

인라인 미디어 바이트입니다.

functionCall object (FunctionCall)

인수 및 해당 값과 함께 FunctionDeclaration.name을 나타내는 문자열을 포함하는 모델에서 반환된 예측된 FunctionCall입니다.

functionResponse object (FunctionResponse)

FunctionDeclaration.name을 나타내는 문자열과 함수의 출력이 포함된 구조화된 JSON 객체가 포함된 FunctionCall의 결과 출력이 모델의 컨텍스트로 사용됩니다.

fileData object (FileData)

URI 기반 데이터.

executableCode object (ExecutableCode)

실행 목적으로 모델에서 생성된 코드입니다.

codeExecutionResult object (CodeExecutionResult)

ExecutableCode 실행 결과입니다.

toolCall object (ToolCall)

서버 측 도구 호출 이 필드는 모델이 서버에서 실행해야 하는 도구 호출을 예측할 때 채워집니다. 클라이언트는 이 메시지를 API에 다시 에코해야 합니다.

toolResponse object (ToolResponse)

서버 측 ToolCall 실행의 출력입니다. 이 필드는 클라이언트가 해당 ToolCall를 실행한 결과로 채워집니다.

상호 배타적인 필드의 끝입니다.
metadata Union type
데이터의 추가 사전 처리를 제어합니다. inline_data 또는 file_data가 있는 경우 이를 설정하여 부분별 정적 미디어 사전 처리를 구성합니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
videoMetadata object (VideoMetadata)

선택사항입니다. 동영상 메타데이터입니다. 메타데이터는 동영상 데이터가 inlineData 또는 fileData에 표시되는 동안에만 지정되어야 합니다.

상호 배타적인 필드의 끝입니다.
JSON 표현
{
  "thought": boolean,
  "thoughtSignature": string,
  "partMetadata": {
    object
  },
  "mediaResolution": {
    object (MediaResolution)
  },
  "mediaProcessing": enum (MediaProcessing),
  "audioTranscription": {
    object (AudioTranscription)
  },
  "speechMetadata": {
    object (SpeechMetadata)
  },

  // data
  "text": string,
  "inlineData": {
    object (Blob)
  },
  "functionCall": {
    object (FunctionCall)
  },
  "functionResponse": {
    object (FunctionResponse)
  },
  "fileData": {
    object (FileData)
  },
  "executableCode": {
    object (ExecutableCode)
  },
  "codeExecutionResult": {
    object (CodeExecutionResult)
  },
  "toolCall": {
    object (ToolCall)
  },
  "toolResponse": {
    object (ToolResponse)
  }
  // Union type

  // metadata
  "videoMetadata": {
    object (VideoMetadata)
  }
  // Union type
}

blob

원시 미디어 바이트입니다.

텍스트를 원시 바이트로 전송해서는 안 됩니다. 'text' 필드를 사용하세요.

필드
mimeType string

소스 데이터의 IANA 표준 MIME 유형입니다. 지원되는 유형의 예: - 이미지: image/png, image/jpeg, image/jpg, image/webp, image/heic, image/heif, image/gif, image/avif - 오디오: audio/*, video/audio/s16le, video/audio/wav - 동영상: video/* - 텍스트: text/plain, text/html, text/css, text/javascript, text/x-typescript, text/csv, text/markdown, text/x-python, text/xml, text/rtf, video/text/timestamp - 애플리케이션: application/x-javascript, application/x-typescript, application/x-python-code, application/json, application/x-ipynb+json, application/rtf, application/pdf 추가 컨텍스트는 지원되는 파일 형식을 참고하세요. //

data string (bytes format)

미디어 형식의 원시 바이트입니다.

base64 인코딩 문자열입니다.

displayName string

선택사항입니다. 모델에서 이 blob을 참조하는 데 사용되는 이름을 지정합니다 (예: 'my_blob.png'). verbalizationMode가 REFERENCE_ONLY로 설정된 경우 blob 참조 식별자로 사용됩니다.

JSON 표현
{
  "mimeType": string,
  "data": string,
  "displayName": string
}

FunctionCall

인수 및 해당 값과 함께 FunctionDeclaration.name을 나타내는 문자열을 포함하는 모델에서 반환된 예측된 FunctionCall입니다.

필드
id string

선택사항입니다. 함수 호출의 고유 식별자입니다. 채워진 경우 클라이언트가 functionCall를 실행하고 일치하는 id를 가진 응답을 반환합니다.

name string

필수 항목입니다. 호출하려는 함수의 이름입니다. a~z, A~Z, 0~9이거나 밑줄과 대시를 포함해야 합니다(최대 128자 길이).

args object (Struct format)

선택사항입니다. JSON 객체 형식의 함수 파라미터와 값입니다.

JSON 표현
{
  "id": string,
  "name": string,
  "args": {
    object
  }
}

FunctionResponse

FunctionDeclaration.name을 나타내는 문자열과 함수의 출력이 포함된 구조화된 JSON 객체가 포함된 FunctionCall의 결과 출력이 모델의 컨텍스트로 사용됩니다. 여기에는 모델 예측을 기반으로 한 FunctionCall의 결과가 포함되어야 합니다.

필드
id string

선택사항입니다. 이 응답이 적용되는 함수 호출의 식별자입니다. 해당 함수 호출 id과 일치하도록 클라이언트가 채웁니다.

name string

필수 항목입니다. 호출하려는 함수의 이름입니다. a~z, A~Z, 0~9이거나 밑줄과 대시를 포함해야 합니다(최대 128자 길이).

response object (Struct format)

필수 항목입니다. JSON 객체 형식의 함수 응답입니다. 호출자는 함수의 문법에 맞는 키를 사용하여 함수 출력을 반환할 수 있습니다(예: 'output', 'result' 등). 특히 함수 호출이 실행되지 않은 경우 응답에 'error' 키가 포함되어 모델에 오류 세부정보를 반환할 수 있습니다.

멀티미디어를 포함하는 FunctionResponsePart의 inlineData.display_name가 값인 단일 '$ref' 키가 포함된 하위 객체를 사용하여 멀티미디어를 포함할 수 있습니다. https://ai.google.dev/gemini-api/docs/function-calling#multimodal을 참고하세요.

parts[] object (FunctionResponsePart)

선택사항입니다. 함수 응답을 구성하는 정렬된 Parts입니다. 부분마다 IANA MIME 유형이 다를 수 있습니다.

willContinue boolean

선택사항입니다. 함수 호출이 계속되고 더 많은 응답이 반환되어 함수 호출이 생성기로 전환됨을 나타냅니다. NON_BLOCKING 함수 호출에만 적용되며, 그렇지 않으면 무시됩니다. false로 설정하면 향후 응답이 고려되지 않습니다. 함수 호출이 완료되었음을 알리기 위해 willContinue=False와 함께 빈 response를 반환할 수 있습니다. 이 경우에도 모델 생성이 트리거될 수 있습니다. 생성을 트리거하지 않고 함수 호출을 완료하려면 scheduling를 SILENT로 추가로 설정합니다.

scheduling enum (Scheduling)

선택사항입니다. 대화에서 응답을 예약하는 방법을 지정합니다. NON_BLOCKING 함수 호출에만 적용되며, 그렇지 않은 경우에는 무시됩니다. 기본값은 WHEN_IDLE입니다.

JSON 표현
{
  "id": string,
  "name": string,
  "response": {
    object
  },
  "parts": [
    {
      object (FunctionResponsePart)
    }
  ],
  "willContinue": boolean,
  "scheduling": enum (Scheduling)
}

FunctionResponsePart

FunctionResponse 메시지의 일부인 미디어를 포함하는 데이터 유형입니다.

FunctionResponsePart는 연결된 데이터 유형이 있는 데이터로 구성됩니다. FunctionResponsePart에는 FunctionResponsePart.data에서 허용되는 유형 중 하나만 포함될 수 있습니다.

inlineData 필드가 원시 바이트로 채워진 경우 FunctionResponsePart에는 미디어의 유형과 하위 유형을 식별하는 고정된 IANA MIME 유형이 있어야 합니다.

필드
data Union type
함수 응답 부분의 데이터입니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
inlineData object (FunctionResponseBlob)

인라인 미디어 바이트입니다.

상호 배타적인 필드의 끝입니다.
JSON 표현
{

  // data
  "inlineData": {
    object (FunctionResponseBlob)
  }
  // Union type
}

FunctionResponseBlob

함수 응답의 원시 미디어 바이트입니다.

텍스트는 원시 바이트로 전송되어서는 안 되며 'FunctionResponse.response' 필드를 사용해야 합니다.

필드
mimeType string

소스 데이터의 IANA 표준 MIME 유형입니다. 예: - image/png - image/jpeg 지원되지 않는 MIME 유형이 제공되면 오류가 반환됩니다. 지원되는 형식의 전체 목록은 지원되는 파일 형식을 참고하세요.

data string (bytes format)

미디어 형식의 원시 바이트입니다.

base64 인코딩 문자열입니다.

JSON 표현
{
  "mimeType": string,
  "data": string
}

예약

대화에서 응답을 예약하는 방법을 지정합니다.

열거형
SCHEDULING_UNSPECIFIED 이 값은 사용되지 않습니다.
SILENT 대화 컨텍스트에 결과만 추가하고 생성을 중단하거나 트리거하지 마세요.
WHEN_IDLE 대화 컨텍스트에 결과를 추가하고 진행 중인 생성을 중단하지 않고 출력을 생성하라는 메시지를 표시합니다.
INTERRUPT 대화 컨텍스트에 결과를 추가하고, 진행 중인 생성을 중단하고, 출력을 생성하라는 프롬프트를 표시합니다.

FileData

URI 기반 데이터.

필드
mimeType string

선택사항입니다. 소스 데이터의 IANA 표준 MIME 유형입니다.

fileUri string

필수 항목입니다. URI입니다.

displayName string

선택사항입니다. 모델에 이 파일을 참조하는 데 사용되는 이름을 지정합니다 (예: 'my_file.pdf'). verbalizationMode가 REFERENCE_ONLY로 설정된 경우 파일 참조 식별자로 사용됩니다.

JSON 표현
{
  "mimeType": string,
  "fileUri": string,
  "displayName": string
}

ExecutableCode

실행 목적으로 모델에서 생성된 코드이며 결과가 모델에 반환됩니다.

CodeExecution 도구를 사용할 때만 생성되며, 이 경우 코드가 자동으로 실행되고 해당 CodeExecutionResult도 생성됩니다.

필드
id string

선택사항입니다. ExecutableCode 부분의 고유 식별자입니다. 서버는 일치하는 id가 있는 CodeExecutionResult를 반환합니다.

language enum (Language)

필수 항목입니다. code의 프로그래밍 언어입니다.

code string

필수 항목입니다. 실행할 코드입니다.

JSON 표현
{
  "id": string,
  "language": enum (Language),
  "code": string
}

언어

생성된 코드에 지원되는 프로그래밍 언어입니다.

열거형
LANGUAGE_UNSPECIFIED 지정되지 않은 언어입니다. 이 값을 사용하면 안 됩니다.
PYTHON thought Python >= 3.10(numpy 및 simpy 사용 가능) Python이 기본 언어입니다.

CodeExecutionResult

ExecutableCode 실행 결과입니다.

CodeExecution 도구를 사용하는 경우에만 생성됩니다.

필드
id string

선택사항입니다. 이 결과가 적용되는 ExecutableCode 부분의 식별자입니다. 해당 ExecutableCode에 ID가 있는 경우에만 채워집니다.

outcome enum (Outcome)

필수 항목입니다. 코드 실행의 결과입니다.

output string

선택사항. 코드 실행이 성공하면 stdout이 포함되고 그렇지 않으면 stderr 또는 기타 설명이 포함됩니다.

JSON 표현
{
  "id": string,
  "outcome": enum (Outcome),
  "output": string
}

결과

가능한 코드 실행 결과의 열거형입니다.

열거형
OUTCOME_UNSPECIFIED 미지정 상태입니다. 이 값을 사용하면 안 됩니다.
OUTCOME_OK 코드 실행이 완료되었습니다. output에는 stdout이 포함됩니다(있는 경우).
OUTCOME_FAILED 코드 실행에 실패했습니다. output에는 stderr 및 stdout(있는 경우)이 포함됩니다.
OUTCOME_DEADLINE_EXCEEDED 코드 실행 시간이 너무 오래돼서 취소되었습니다. output가 부분적으로 표시되거나 표시되지 않을 수 있습니다.

ToolCall

모델에서 반환된 예측 서버 측 ToolCall입니다. 이 메시지에는 모델이 호출하려는 도구에 대한 정보가 포함되어 있습니다. 클라이언트는 이 ToolCall을 실행하지 않습니다. 대신 클라이언트는 Content 메시지 내의 후속 차례에서 이 ToolCall를 해당 ToolResponse와 함께 API에 다시 전달해야 합니다.

필드
id string

선택사항입니다. 도구 호출의 고유 식별자입니다. 서버는 일치하는 id와 함께 도구 응답을 반환합니다.

toolName string

선택사항입니다. 호출된 도구의 이름입니다.

toolType enum (ToolType)

필수 항목입니다. 호출된 도구의 유형입니다.

args object (Struct format)

선택사항입니다. 도구 호출 인수입니다. 예: {"arg1" : "value1", "arg2" : "value2" , …}

JSON 표현
{
  "id": string,
  "toolName": string,
  "toolType": enum (ToolType),
  "args": {
    object
  }
}

ToolType

함수 호출의 도구 유형입니다.

열거형
TOOL_TYPE_UNSPECIFIED 지정되지 않은 도구 유형입니다.
GOOGLE_SEARCH_WEB Google 검색 도구, Tool.google_search.search_types.web_search에 매핑됩니다.
GOOGLE_SEARCH_IMAGE 이미지 검색 도구로, Tool.google_search.search_types.image_search에 매핑됩니다.
URL_CONTEXT URL 컨텍스트 도구, Tool.url_context에 매핑됩니다.
GOOGLE_MAPS Google 지도 도구, Tool.google_maps에 매핑됩니다.

ToolResponse

서버 측 ToolCall 실행의 출력입니다. 이 메시지에는 모델의 ToolCall에 의해 시작된 도구 호출의 결과가 포함됩니다. 클라이언트는 이 ToolResponse를 Content 메시지 내의 후속 차례에서 해당 ToolCall와 함께 API에 다시 전달해야 합니다.

필드
id string

선택사항입니다. 이 응답이 적용되는 도구 호출의 식별자입니다.

toolType enum (ToolType)

필수 항목입니다. 호출된 도구의 유형으로, 해당 ToolCall의 toolType와 일치합니다.

response object (Struct format)

선택사항입니다. 도구 응답입니다.

JSON 표현
{
  "id": string,
  "toolType": enum (ToolType),
  "response": {
    object
  }
}

VideoMetadata

메타데이터는 입력 동영상 콘텐츠를 설명합니다. inlineData 또는 fileData에 동영상이 포함된 경우 Part.video_metadata 또는 FunctionResponsePart.video_metadata에서 이를 설정하여 정적 동영상 전처리 (예: 시간 클리핑, 프레임 속도, 최대 프레임 수, 추출된 콘텐츠 레이어)를 구성합니다.

필드
startOffset string (Duration format)

선택사항입니다. 동영상의 시작 오프셋입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

endOffset string (Duration format)

선택사항입니다. 동영상의 종료 오프셋입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

fps number

선택사항입니다. 모델로 전송되는 동영상의 프레임 속도입니다. 지정하지 않으면 기본값은 1.0입니다. fps 범위는 (0.0, 24.0]입니다.

JSON 표현
{
  "startOffset": string,
  "endOffset": string,
  "fps": number
}

MediaResolution

토큰화의 미디어 해상도입니다.

필드
value Union type
미디어 해상도 수준입니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
level enum (Level)

지정된 미디어에 사용되는 토큰화 품질입니다. 에서 Gemini API 지원을 요청하세요.

상호 배타적인 필드의 끝입니다.
JSON 표현
{

  // value
  "level": enum (Level)
  // Union type
}

수준

미디어 해상도 수준입니다.

열거형
MEDIA_RESOLUTION_UNSPECIFIED 미디어 해상도가 설정되지 않았습니다.
MEDIA_RESOLUTION_LOW 미디어 해상도가 낮음으로 설정되었습니다.
MEDIA_RESOLUTION_MEDIUM 미디어 해상도가 중간으로 설정되었습니다.
MEDIA_RESOLUTION_HIGH 미디어 해상도가 높음으로 설정되었습니다.
MEDIA_RESOLUTION_ULTRA_HIGH 미디어 해상도가 초고화질로 설정되었습니다.

MediaProcessing

모델이 이해를 위해 입력 미디어를 처리하는 방식입니다.

열거형
MEDIA_PROCESSING_UNSPECIFIED 기본값은 모델별 처리입니다.
STATIC 고정 속도 프레임 추출 모든 프레임이 컨텍스트에 배치됩니다.
AGENTIC 모델 기반 동적 탐색 대부분의 사용 사례에 권장됩니다.

AudioTranscription

오디오 부분의 스크립트 작성입니다. 여러 화자가 있는 오디오의 경우 각 화자 세그먼트는 speakerLabel을 전달하는 자체 AudioTranscription이 있는 별도의 Part입니다.

필드
text string

필수 항목입니다. 이 오디오 세그먼트의 스크립트 텍스트입니다.

speakerLabel string

선택사항입니다. 이 오디오 세그먼트의 발화자를 식별하는 라벨입니다 (예: 'spk_1', 'spk_2'). 분할이 설정된 경우에 표시됩니다.

words[] object (WordInfo)

선택사항입니다. 자세한 단어 수준 스크립트 및 타이밍 세부정보 wordTimestamp가 설정된 경우에 표시됩니다.

JSON 표현
{
  "text": string,
  "speakerLabel": string,
  "words": [
    {
      object (WordInfo)
    }
  ]
}

WordInfo

인식된 단어 하나에 대한 정보입니다.

필드
word string

필수 항목입니다. 단어의 스크립트입니다.

startOffset string (Duration format)

선택사항입니다. 오디오 시작을 기준으로 한 단어의 시작 오프셋 시간입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

endOffset string (Duration format)

선택사항입니다. 오디오 시작을 기준으로 한 단어의 종료 오프셋 시간입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

JSON 표현
{
  "word": string,
  "startOffset": string,
  "endOffset": string
}

SpeechMetadata

text 부분의 음성 메타데이터입니다.

필드
speaker string

선택사항입니다. 다중 화자 합성을 위한 화자 이름입니다(선택사항).

style string

선택사항입니다. 음성 합성을 위한 스타일 요청 사항입니다(선택사항).

JSON 표현
{
  "speaker": string,
  "style": string
}

환경

에이전트의 실행 환경입니다.

필드
id string

필수 항목입니다. 출력 전용입니다. 환경의 ID입니다.

sources[] object (Source)

환경에 마운트할 소스입니다.

created string

출력 전용입니다. 환경이 생성된 시간이며 ISO 8601 형식 (YYYY-MM-DDThh:mm:ssZ)으로 표시됩니다.

updated string

출력 전용입니다. 환경이 마지막으로 업데이트된 시간입니다 (ISO 8601 형식, YYYY-MM-DDThh:mm:ssZ).

lastAccessed string

출력 전용입니다. 환경에 마지막으로 액세스한 시간입니다 (ISO 8601 형식, YYYY-MM-DDThh:mm:ssZ).

status enum (Status)

출력 전용입니다. 환경 컨테이너의 상태입니다.

fileCount string (int64 format)

출력 전용입니다. 환경의 파일 수입니다(출력 전용).

sizeBytes string (int64 format)

출력 전용입니다. 환경 파일의 총 크기(바이트)입니다(출력 전용).

network Union type
환경의 네트워크 구성입니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
networkAllowlist object (EnvironmentNetworkEgressAllowlist)

특정 도메인만 허용합니다.

networkMode enum (NetworkMode)

네트워크 이그레스 모드입니다.

상호 배타적인 필드의 끝입니다.
JSON 표현
{
  "id": string,
  "sources": [
    {
      object (Source)
    }
  ],
  "created": string,
  "updated": string,
  "lastAccessed": string,
  "status": enum (Status),
  "fileCount": string,
  "sizeBytes": string,

  // network
  "networkAllowlist": {
    object (EnvironmentNetworkEgressAllowlist)
  },
  "networkMode": enum (NetworkMode)
  // Union type
}

상태

환경의 상태입니다.

열거형
STATUS_UNSPECIFIED
ACTIVE
EXPIRED

NetworkMode

허용 목록에 없는 구성의 네트워크 이그레스 모드입니다.

열거형
NETWORK_MODE_UNSPECIFIED 기본값. 사용하지 않습니다.
DISABLED 모든 네트워크 이그레스가 차단됩니다.

스키마

Schema 객체를 사용하면 입력 및 출력 데이터 유형을 정의할 수 있습니다. 이러한 유형은 객체일 수도 있지만 기본 요소 및 배열일 수도 있습니다. OpenAPI 3.0 스키마 객체의 선택 하위 집합을 나타냅니다.

필드
type enum (Type)

필수 항목입니다. 데이터 유형입니다.

format string

선택사항입니다. 데이터 형식입니다. 모든 값이 허용되지만 대부분은 특별한 기능을 트리거하지 않습니다.

title string

선택사항입니다. 스키마의 제목입니다.

description string

선택사항입니다. 파라미터에 대한 간략한 설명입니다. 사용 예시가 포함될 수 있습니다. 파라미터 설명은 마크다운 형식으로 지정할 수 있습니다.

nullable boolean

선택사항입니다. null 값을 나타냅니다.

enum[] string

선택사항입니다. enum 형식의 Type.STRING 요소의 가능한 값입니다. 예를 들어 열거형 방향을 {type:STRING, format:enum, enum:["EAST", NORTH", "SOUTH", "WEST"]}(으)로 정의할 수 있습니다.

maxItems string (int64 format)

선택사항입니다. Type.ARRAY의 최대 요소 수입니다.

minItems string (int64 format)

선택사항입니다. Type.ARRAY의 최소 요소 수입니다.

properties map (key: string, value: object (Schema))

선택사항입니다. Type.OBJECT의 속성입니다.

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

required[] string

선택사항입니다. Type.OBJECT의 필수 속성입니다.

minProperties string (int64 format)

선택사항입니다. Type.OBJECT의 최소 속성 수입니다.

maxProperties string (int64 format)

선택사항입니다. Type.OBJECT의 최대 속성 수입니다.

minLength string (int64 format)

선택사항입니다. Type.STRING의 스키마 필드 Type.STRING의 최소 길이

maxLength string (int64 format)

선택사항입니다. Type.STRING의 최대 길이

pattern string

선택사항입니다. 문자열을 정규 표현식으로 제한하는 Type.STRING의 패턴입니다.

example value (Value format)

선택사항입니다. 객체의 예시입니다. 객체가 루트인 경우에만 채워집니다.

anyOf[] object (Schema)

선택사항입니다. 값은 목록의 하위 스키마 중 하나 이상에 대해 검증되어야 합니다.

propertyOrdering[] string

선택사항입니다. 속성의 순서입니다. OpenAPI 사양의 표준 필드가 아닙니다. 응답에서 속성의 순서를 결정하는 데 사용됩니다.

default value (Value format)

선택사항입니다. 필드의 기본값입니다. JSON 스키마에 따라 이 필드는 문서 생성기용이며 검증에 영향을 미치지 않습니다. 따라서 여기에 포함되고 무시되므로 default 필드가 있는 스키마를 전송하는 개발자에게 알 수 없는 필드 오류가 발생하지 않습니다.

items object (Schema)

선택사항입니다. Type.ARRAY 요소의 스키마입니다.

minimum number

선택사항입니다. INTEGER 및 NUMBER 유형의 스키마 필드 Type.INTEGER 및 Type.NUMBER의 최솟값

maximum number

선택사항입니다. Type.INTEGER 및 Type.NUMBER의 최댓값

JSON 표현
{
  "type": enum (Type),
  "format": string,
  "title": string,
  "description": string,
  "nullable": boolean,
  "enum": [
    string
  ],
  "maxItems": string,
  "minItems": string,
  "properties": {
    string: {
      object (Schema)
    },
    ...
  },
  "required": [
    string
  ],
  "minProperties": string,
  "maxProperties": string,
  "minLength": string,
  "maxLength": string,
  "pattern": string,
  "example": value,
  "anyOf": [
    {
      object (Schema)
    }
  ],
  "propertyOrdering": [
    string
  ],
  "default": value,
  "items": {
    object (Schema)
  },
  "minimum": number,
  "maximum": number
}

유형

유형에는 https://spec.openapis.org/oas/v3.0.3#data-types에 정의된 OpenAPI 데이터 유형 목록이 포함됩니다.

열거형
TYPE_UNSPECIFIED 지정되지 않았으며 사용해서는 안 됩니다.
STRING 문자열 유형입니다.
NUMBER 숫자 유형입니다.
INTEGER 정수 유형입니다.
BOOLEAN 불리언 유형입니다.
ARRAY 배열 유형입니다.
OBJECT 객체 유형입니다.
NULL Null 유형입니다.

도구

모델이 응답을 생성하는 데 사용할 수 있는 도구 세부정보입니다.

Tool은 시스템이 모델의 지식과 범위를 벗어나 외부 시스템과 상호작용하여 작업 또는 작업 집합을 수행할 수 있도록 하는 코드 조각입니다.

필드
functionDeclarations[] object (FunctionDeclaration)

선택사항입니다. 함수 호출에 사용할 수 있는 모델에 사용 가능한 FunctionDeclarations 목록입니다.

모델 또는 시스템은 함수를 실행하지 않습니다. 대신 정의된 함수가 실행을 위해 클라이언트 측에 인수가 있는 FunctionCall로 반환될 수 있습니다. 모델은 응답에서 FunctionCall를 채워 이러한 함수의 하위 집합을 호출할 수 있습니다. 다음 대화 차례에는 다음 모델 차례의 Content.role '함수' 생성 컨텍스트가 있는 FunctionResponse가 포함될 수 있습니다.

googleSearchRetrieval object (GoogleSearchRetrieval)

선택사항입니다. Google 검색을 기반으로 하는 검색 도구입니다.

codeExecution object (CodeExecution)

선택사항입니다. 모델이 생성의 일부로 코드를 실행할 수 있도록 합니다.

computerUse object (ComputerUse)

선택사항입니다. 모델이 컴퓨터와 직접 상호작용하도록 지원하는 도구입니다. 사용 설정하면 컴퓨터 사용 관련 함수 선언이 자동으로 채워집니다.

urlContext object (UrlContext)

선택사항입니다. URL 컨텍스트 검색을 지원하는 도구입니다.

mcpServers[] object (McpServer)

선택사항입니다. 연결할 MCP 서버입니다.

googleMaps object (GoogleMaps)

선택사항입니다. 사용자의 쿼리와 관련된 지리 공간 컨텍스트로 모델의 대답을 그라운딩할 수 있는 도구입니다.

JSON 표현
{
  "functionDeclarations": [
    {
      object (FunctionDeclaration)
    }
  ],
  "googleSearchRetrieval": {
    object (GoogleSearchRetrieval)
  },
  "codeExecution": {
    object (CodeExecution)
  },
  "googleSearch": {
    object (GoogleSearch)
  },
  "computerUse": {
    object (ComputerUse)
  },
  "urlContext": {
    object (UrlContext)
  },
  "fileSearch": {
    object (FileSearch)
  },
  "mcpServers": [
    {
      object (McpServer)
    }
  ],
  "googleMaps": {
    object (GoogleMaps)
  }
}

FunctionDeclaration

OpenAPI 3.03 사양에서 정의된 함수 선언의 구조화된 표현입니다. 이 선언에는 함수 이름과 매개변수가 포함됩니다. 이 FunctionDeclaration은 모델에서 Tool로 사용하고 클라이언트에서 실행할 수 있는 코드 블록을 나타냅니다.

필드
name string

필수 항목입니다. 함수 이름입니다. a~z, A~Z, 0~9이거나 밑줄, 콜론, 점, 대시를 포함할 수 있고 최대 128자 길이입니다.

description string

필수 항목입니다. 함수에 대한 간단한 설명입니다.

behavior enum (Behavior)

선택사항입니다. 함수 동작을 지정합니다. 현재 BidiGenerateContent 메서드에서만 지원됩니다.

parameters object (Schema)

선택사항입니다. 이 함수의 매개변수를 설명합니다. Open API 3.03 파라미터 객체 문자열 키(파라미터 이름)를 반영합니다. 파라미터 이름은 대소문자를 구분합니다. 스키마 값: 파라미터에 사용되는 유형을 정의하는 스키마입니다.

parametersJsonSchema value (Value format)

선택사항입니다. 함수의 파라미터를 JSON 스키마 형식으로 설명합니다. 스키마는 속성이 함수의 매개변수인 객체를 설명해야 합니다. 예를 들면 다음과 같습니다.

{
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "age": { "type": "integer" }
  },
  "additionalProperties": false,
  "required": ["name", "age"],
  "propertyOrdering": ["name", "age"]
}

이 필드는 parameters과 상호 배타적입니다.

response object (Schema)

선택사항입니다. 이 함수의 출력을 JSON 스키마 형식으로 설명합니다. Open API 3.03 응답 객체를 반영합니다. 스키마는 함수의 응답 값에 사용되는 유형을 정의합니다.

responseJsonSchema value (Value format)

선택사항입니다. 이 함수의 출력을 JSON 스키마 형식으로 설명합니다. 스키마에서 지정한 값은 함수의 응답 값입니다.

이 필드는 response과 상호 배타적입니다.

JSON 표현
{
  "name": string,
  "description": string,
  "behavior": enum (Behavior),
  "parameters": {
    object (Schema)
  },
  "parametersJsonSchema": value,
  "response": {
    object (Schema)
  },
  "responseJsonSchema": value
}

동작

함수 동작을 정의합니다. 기본값은 BLOCKING입니다.

열거형
UNSPECIFIED 이 값은 사용되지 않습니다.
BLOCKING 설정하면 시스템은 대화를 계속하기 전에 함수 응답을 받을 때까지 기다립니다.
NON_BLOCKING 설정하면 시스템이 함수 응답을 수신할 때까지 기다리지 않습니다. 대신 사용자와 모델 간의 대화를 유지하면서 함수 응답이 사용 가능해지는 대로 처리하려고 시도합니다.

GoogleSearchRetrieval

Google에서 제공하는 그라운딩을 위해 공개 웹 데이터를 검색하는 도구입니다.

필드
dynamicRetrievalConfig object (DynamicRetrievalConfig)

지정된 소스의 동적 검색 구성을 지정합니다.

JSON 표현
{
  "dynamicRetrievalConfig": {
    object (DynamicRetrievalConfig)
  }
}

DynamicRetrievalConfig

동적 검색을 맞춤설정하는 옵션을 설명합니다.

필드
mode enum (Mode)

동적 검색에 사용할 예측 도구의 모드입니다.

dynamicThreshold number

동적 검색에 사용할 기준입니다. 설정하지 않으면 시스템 기본값이 사용됩니다.

JSON 표현
{
  "mode": enum (Mode),
  "dynamicThreshold": number
}

모드

동적 검색에 사용할 예측기의 모드입니다.

열거형
MODE_UNSPECIFIED 항상 검색을 트리거합니다.
MODE_DYNAMIC 시스템에서 필요하다고 판단하는 경우에만 검색을 실행합니다.

CodeExecution

이 유형에는 필드가 없습니다.

모델에서 생성된 코드를 실행하고 결과를 모델에 자동으로 반환하는 도구입니다.

이 도구를 사용할 때만 생성되는 ExecutableCode 및 CodeExecutionResult도 참고하세요.

GoogleSearch

GoogleSearch 도구 유형입니다. 모델에서 Google 검색을 지원하는 도구입니다. Google에서 제공합니다.

필드
timeRangeFilter object (Interval)

선택사항입니다. 검색 결과를 특정 기간으로 필터링합니다. 고객이 시작 시간을 설정하는 경우 종료 시간도 설정해야 합니다 (반대의 경우도 마찬가지).

searchTypes object (SearchTypes)

선택사항입니다. 사용 설정할 검색 유형 집합입니다. 설정하지 않으면 웹 검색이 기본적으로 사용 설정됩니다.

JSON 표현
{
  "timeRangeFilter": {
    object (Interval)
  },
  "searchTypes": {
    object (SearchTypes)
  }
}

간격

타임스탬프 시작(포함) 및 타임스탬프 종료(제외)로 인코딩된 시간 간격을 나타냅니다.

시작은 종료보다 작거나 같아야 합니다. 시작이 종료와 같으면 간격이 비어 있습니다(시간과 일치하지 않음). 시작과 종료가 모두 지정되지 않은 경우 간격은 모든 시간과 일치합니다.

필드
startTime string (Timestamp format)

선택사항입니다. 간격의 시작(포함)입니다.

지정된 경우 이 간격과 일치하는 타임스탬프는 시작과 같거나 시작 이후여야 합니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

endTime string (Timestamp format)

선택사항입니다. 간격의 끝(제외)입니다.

지정된 경우 이 간격과 일치하는 타임스탬프는 종료 시간 이전이어야 합니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

JSON 표현
{
  "startTime": string,
  "endTime": string
}

SearchTypes

GoogleSearch 도구에서 사용 설정할 수 있는 다양한 유형의 검색입니다.

필드
JSON 표현
{
  "webSearch": {
    object (WebSearch)
  },
  "imageSearch": {
    object (ImageSearch)
  }
}

WebSearch

이 유형에는 필드가 없습니다.

그라운딩 및 관련 구성을 위한 표준 웹 검색입니다.

ImageSearch

이 유형에는 필드가 없습니다.

그라운딩 및 관련 구성에 대한 이미지 검색입니다.

ComputerUse

Computer Use 도구 유형입니다.

필드
environment enum (Environment)

필수 항목입니다. 운영 중인 환경입니다.

excludedPredefinedFunctions[] string

선택사항입니다. 기본적으로 사전 정의된 함수는 최종 모델 호출에 포함됩니다. 일부는 자동으로 포함되지 않도록 명시적으로 제외할 수 있습니다. 이는 다음 두 가지 목적으로 사용될 수 있습니다. 1. 더 제한된 / 다른 작업 공간 사용 2. 사전 정의된 함수의 정의 / 안내를 개선합니다.

enablePromptInjectionDetection boolean

선택사항입니다. 컴퓨터 사용 요청에 프롬프트 인젝션 감지 검사를 사용 설정할지 여부입니다.

disabledSafetyPolicies[] enum (SafetyPolicy)

선택사항입니다. 컴퓨터 사용에 대한 안전 정책을 사용 중지했습니다.

JSON 표현
{
  "environment": enum (Environment),
  "excludedPredefinedFunctions": [
    string
  ],
  "enablePromptInjectionDetection": boolean,
  "disabledSafetyPolicies": [
    enum (SafetyPolicy)
  ]
}

환경

웹브라우저와 같이 운영되는 환경을 나타냅니다.

열거형
ENVIRONMENT_UNSPECIFIED 기본값은 browser입니다.
ENVIRONMENT_BROWSER 웹브라우저에서 작동합니다.
ENVIRONMENT_MOBILE 모바일 환경에서 작동합니다.
ENVIRONMENT_DESKTOP 데스크톱 환경에서 작동합니다.

SafetyPolicy

컴퓨터 사용에 관한 사전 정의된 안전 정책입니다.

열거형
SAFETY_POLICY_UNSPECIFIED 지정되지 않은 안전 정책입니다.
FINANCIAL_TRANSACTIONS 금융 거래에 관한 안전 정책
SENSITIVE_DATA_MODIFICATION 민감한 정보 수정에 대한 안전 정책입니다.
COMMUNICATION_TOOL 커뮤니케이션 도구 (예: Gmail, Chat, Meet)의 안전 정책
ACCOUNT_CREATION 계정 생성에 관한 안전 정책
DATA_MODIFICATION 데이터 수정에 대한 안전 정책입니다.
LEGAL_TERMS_AND_AGREEMENTS 법률 용어 및 계약에 관한 안전 정책

UrlContext

이 유형에는 필드가 없습니다.

URL 컨텍스트 검색을 지원하는 도구입니다.

FileSearch

시맨틱 검색 코퍼스에서 지식을 검색하는 FileSearch 도구입니다. 파일은 ImportFile API를 사용하여 시맨틱 검색 코퍼스로 가져옵니다.

필드
fileSearchStoreNames[] string

필수 항목입니다. 검색할 fileSearchStores의 이름입니다. 예: fileSearchStores/my-file-search-store-123

metadataFilter string

선택사항입니다. 시맨틱 검색 문서 및 청크에 적용할 메타데이터 필터입니다.

topK integer

선택사항입니다. 검색할 시맨틱 검색 청크 수입니다.

JSON 표현
{
  "fileSearchStoreNames": [
    string
  ],
  "metadataFilter": string,
  "topK": integer
}

McpServer

MCPServer는 모델이 작업을 수행하기 위해 호출할 수 있는 서버입니다. MCP 프로토콜을 구현하는 서버입니다.

필드
name string

MCPServer의 이름입니다.

transport Union type
MCPServer에 연결하는 데 사용할 전송입니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
streamableHttpTransport object (StreamableHttpTransport)

HTTP 요청 및 응답을 스트리밍할 수 있는 전송입니다.

상호 배타적인 필드의 끝입니다.
JSON 표현
{
  "name": string,

  // transport
  "streamableHttpTransport": {
    object (StreamableHttpTransport)
  }
  // Union type
}

StreamableHttpTransport

HTTP 요청 및 응답을 스트리밍할 수 있는 전송입니다.

필드
url string

MCPServer 엔드포인트의 전체 URL입니다. 예: 'https://api.example.com/mcp'

headers map (key: string, value: string)

선택사항: 필요한 경우 인증 헤더, 제한 시간 등의 필드입니다.

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

timeout string (Duration format)

일반 작업의 HTTP 제한 시간입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

sseReadTimeout string (Duration format)

SSE 읽기 작업의 제한 시간입니다.

소수점 아래가 최대 9자리까지이고 's'로 끝나는 초 단위 기간입니다. 예를 들면 "3.5s"입니다.

terminateOnClose boolean

전송이 종료될 때 클라이언트 세션을 종료할지 여부입니다.

JSON 표현
{
  "url": string,
  "headers": {
    string: string,
    ...
  },
  "timeout": string,
  "sseReadTimeout": string,
  "terminateOnClose": boolean
}

GoogleMaps

사용자의 질문에 지리 공간 컨텍스트를 제공하는 GoogleMaps 도구입니다.

필드
enableWidget boolean

선택사항입니다. 응답의 GroundingMetadata에 위젯 컨텍스트 토큰을 반환할지 여부입니다. 개발자는 위젯 컨텍스트 토큰을 사용하여 모델이 대답에서 참조하는 장소와 관련된 지리정보 컨텍스트가 포함된 Google 지도 위젯을 렌더링할 수 있습니다.

JSON 표현
{
  "enableWidget": boolean
}

REST 리소스: auth_tokens

리소스: AuthToken

임시 인증 토큰을 생성하는 요청입니다.

필드
name string

출력 전용입니다. 식별자. 토큰 자체입니다.

expireTime string (Timestamp format)

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. 결과 토큰을 사용할 때 BidiGenerateContent 세션의 메시지가 거부되는 선택적 시간입니다. (이 시간이 지나면 Gemini가 세션을 미리 종료할 수 있습니다.)

설정하지 않으면 기본값은 30분 후입니다. 설정하는 경우 이 값은 미래의 20시간 미만이어야 합니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

newSessionExpireTime string (Timestamp format)

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. 이 요청으로 생성된 토큰을 사용하는 새 Live API 세션이 거부되는 시간입니다.

설정하지 않으면 기본값은 향후 60초입니다. 설정하는 경우 이 값은 미래의 20시간 미만이어야 합니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

fieldMask string (FieldMask format)

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. fieldMask가 비어 있고 bidiGenerateContentSetup가 없으면 Live API 연결에서 유효한 BidiGenerateContentSetup 메시지를 가져옵니다.

fieldMask가 비어 있고 bidiGenerateContentSetup가 있는 경우 유효한 BidiGenerateContentSetup 메시지는 이 요청의 bidiGenerateContentSetup에서 완전히 가져옵니다. Live API 연결의 설정 메시지가 무시됩니다.

fieldMask가 비어 있지 않으면 bidiGenerateContentSetup의 해당 필드가 Live API 연결의 설정 메시지 필드를 덮어씁니다.

정규화된 필드 이름의 쉼표로 구분된 목록입니다. 예: "user.displayName,photo"

config Union type
결과 토큰의 메서드별 구성입니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
bidiGenerateContentSetup object (BidiGenerateContentSetup)

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. BidiGenerateContent 관련 구성입니다.

상호 배타적인 필드의 끝입니다.
uses integer

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. 토큰을 사용할 수 있는 횟수입니다. 이 값이 0이면 한도가 적용되지 않습니다. Live API 세션을 재개하는 것은 사용으로 집계되지 않습니다. 지정하지 않으면 기본값은 1입니다.

JSON 표현
{
  "name": string,
  "expireTime": string,
  "newSessionExpireTime": string,
  "fieldMask": string,

  // config
  "bidiGenerateContentSetup": {
    object (BidiGenerateContentSetup)
  }
  // Union type
  "uses": integer
}

BidiGenerateContentSetup

첫 번째 (첫 번째에만) BidiGenerateContentClientMessage에서 전송할 메시지입니다. 스트리밍 RPC 기간 동안 적용되는 구성이 포함되어 있습니다.

클라이언트는 추가 메시지를 보내기 전에 BidiGenerateContentSetupComplete 메시지를 기다려야 합니다.

필드
model string

필수 항목입니다. 모델의 리소스 이름입니다. 이는 사용할 모델의 ID 역할을 합니다.

형식: models/{model}

generationConfig object (GenerationConfig)

선택사항입니다. 생성 구성

다음 필드는 지원되지 않습니다.

  • responseLogprobs
  • responseMimeType
  • logprobs
  • responseSchema
  • responseJsonSchema
  • stop_sequence
  • skipResponseCache
  • routing_config
  • audio_timestamp
systemInstruction object (Content)

선택사항입니다. 사용자가 모델의 시스템 지침을 제공했습니다.

참고: 부분에는 텍스트만 사용해야 하며 각 부분의 콘텐츠는 별도의 단락에 위치합니다.

tools[] object (Tool)

선택사항입니다. 모델이 다음 대답을 생성하는 데 사용할 수 있는 Tools 목록입니다.

Tool은 시스템이 모델의 지식과 범위를 벗어나 외부 시스템과 상호작용하여 작업 또는 작업 집합을 수행할 수 있도록 하는 코드 조각입니다.

realtimeInputConfig object (RealtimeInputConfig)

선택사항입니다. 실시간 입력 처리를 구성합니다.

sessionResumption object (SessionResumptionConfig)

선택사항입니다. 세션 재개 메커니즘을 구성합니다.

포함된 경우 서버는 SessionResumptionUpdate 메시지를 전송합니다.

contextWindowCompression object (ContextWindowCompressionConfig)

선택사항입니다. 컨텍스트 윈도우 압축 메커니즘을 구성합니다.

포함된 경우 서버는 구성된 길이를 초과하면 컨텍스트 크기를 자동으로 줄입니다.

inputAudioTranscription object (AudioTranscriptionConfig)

선택사항입니다. 설정하면 음성 입력의 스크립트 작성을 사용 설정합니다. 스크립트 작성은 구성된 경우 입력 오디오 언어와 일치합니다.

outputAudioTranscription object (AudioTranscriptionConfig)

선택사항입니다. 설정하면 모델의 오디오 출력 스크립트 작성을 사용 설정합니다. 스크립트 작성은 출력 오디오에 지정된 언어 코드와 일치합니다(구성된 경우).

historyConfig object (HistoryConfig)

선택사항입니다. 클라이언트와 서버 간의 기록 교환을 구성합니다.

labels map (key: string, value: string)

선택사항입니다. 요청에 대한 사용자 정의 메타데이터가 있는 라벨입니다.

선택사항입니다. 라벨은 표준 통합 Cloud 라벨 요구사항을 따라야 합니다. - 라벨 키는 문자로 시작해야 합니다. - 라벨 키와 값은 63자 (유니코드 코드 포인트) 이하여야 하며 소문자, 숫자, 밑줄, 대시만 포함할 수 있습니다. - 국제 문자는 허용됩니다.

사용: - 애그리게이터의 안전 식별자: safety_identifier 키를 사용합니다 (예: {"safety_identifier": "user_session_123"}).

"key": value 쌍 목록을 포함하는 객체입니다. 예: { "name": "wrench", "mass": "1.3kg", "count": "3" }

JSON 표현
{
  "model": string,
  "generationConfig": {
    object (GenerationConfig)
  },
  "systemInstruction": {
    object (Content)
  },
  "tools": [
    {
      object (Tool)
    }
  ],
  "realtimeInputConfig": {
    object (RealtimeInputConfig)
  },
  "sessionResumption": {
    object (SessionResumptionConfig)
  },
  "contextWindowCompression": {
    object (ContextWindowCompressionConfig)
  },
  "inputAudioTranscription": {
    object (AudioTranscriptionConfig)
  },
  "outputAudioTranscription": {
    object (AudioTranscriptionConfig)
  },
  "historyConfig": {
    object (HistoryConfig)
  },
  "labels": {
    string: string,
    ...
  }
}

GenerationConfig

모델 생성 및 출력의 구성 옵션입니다. 모든 모델에서 모든 파라미터를 구성할 수 있는 것은 아닙니다.

필드
stopSequences[] string

선택사항입니다. 출력 생성을 중지하는 문자 시퀀스 집합 (최대 5개)입니다. 지정된 경우 API는 stop_sequence가 처음 나타날 때 중지됩니다. 중지 시퀀스는 응답에 포함되지 않습니다.

responseMimeType string

선택사항입니다. 생성된 후보 텍스트의 MIME 유형입니다. 지원되는 MIME 유형은 다음과 같습니다. text/plain: (기본값) 텍스트 출력 application/json: 응답 후보의 JSON 응답입니다. text/x.enum: 응답 후보의 문자열 응답인 ENUM입니다. 지원되는 모든 텍스트 MIME 유형 목록은 문서를 참고하세요.

responseSchema
(deprecated)
object (Schema)

선택사항입니다. 생성된 후보 텍스트의 출력 스키마입니다. 스키마는 OpenAPI 스키마의 하위 집합이어야 하며 객체, 프리미티브 또는 배열일 수 있습니다.

설정된 경우 호환되는 responseMimeType도 설정해야 합니다. 호환되는 MIME 유형: application/json: JSON 응답의 스키마입니다. 자세한 내용은 JSON 텍스트 생성 가이드를 참고하세요.

지원 중단되었습니다. 대신 responseFormat를 사용하세요.

_responseJsonSchema
(deprecated)
value (Value format)

선택사항입니다. 생성된 대답의 출력 스키마입니다. JSON 스키마를 허용하는 responseSchema의 대안입니다.

설정된 경우 responseSchema를 생략해야 하지만 responseMimeType는 필수입니다.

전체 JSON 스키마가 전송될 수 있지만 일부 기능은 지원되지 않습니다. 구체적으로 다음 속성만 지원됩니다.

  • $id
  • $defs
  • $ref
  • $anchor
  • type
  • format
  • title
  • description
  • enum (문자열 및 숫자)
  • items
  • prefixItems
  • minItems
  • maxItems
  • minimum
  • maximum
  • anyOf
  • oneOf (anyOf와 동일하게 해석됨)
  • properties
  • additionalProperties
  • required

비표준 propertyOrdering 속성도 설정할 수 있습니다.

순환 참조는 제한된 범위로 펼쳐지므로 필수 속성이 아닌 속성 내에서만 사용할 수 있습니다. (null을 허용하는 속성으로는 충분하지 않습니다.) $ref가 하위 스키마에 설정된 경우 $로 시작하는 속성을 제외한 다른 속성은 설정할 수 없습니다.

지원 중단되었습니다. 대신 responseFormat를 사용하세요.

responseJsonSchema value (Value format)

선택사항입니다. 내부 세부정보입니다. 이 필드 대신 responseJsonSchema를 사용하세요.

responseModalities[] enum (Modality)

선택사항입니다. 요청된 대답 형식입니다. 모델이 반환할 수 있고 응답에서 예상되는 형식 집합을 나타냅니다. 이는 응답의 형식과 정확히 일치합니다.

모델은 지원되는 형식의 여러 조합을 가질 수 있습니다. 요청된 형식이 지원되는 조합과 일치하지 않으면 오류가 반환됩니다.

빈 목록은 텍스트만 요청하는 것과 같습니다.

candidateCount integer

선택사항입니다. 반환할 생성된 응답 수입니다. 설정하지 않으면 기본값은 1입니다. 이전 세대 모델 (Gemini 1.0 제품군)에서는 작동하지 않습니다.

maxOutputTokens integer

선택사항입니다. 응답 후보에 포함할 최대 토큰 수입니다.

참고: 기본값은 모델에 따라 다릅니다. getModel 함수에서 반환된 Model의 Model.output_token_limit 속성을 참고하세요.

temperature number

선택사항입니다. 출력의 무작위성을 제어합니다.

참고: 기본값은 모델에 따라 다릅니다. getModel 함수에서 반환된 Model의 Model.temperature 속성을 참고하세요.

값 범위는 [0.0, 2.0]입니다.

이 필드는 더 이상 지원되지 않으며 Gemini 3.6 Flash 이상 모델에서는 자동으로 무시됩니다.

topP number

선택사항입니다. 샘플링 시 고려할 토큰의 최대 누적 확률입니다.

모델은 Top-K 및 Top-P (핵) 샘플링을 조합하여 사용합니다.

토큰은 할당된 확률에 따라 정렬되므로 가장 가능성이 높은 토큰만 고려됩니다. Top-k 샘플링은 고려할 최대 토큰 수를 직접 제한하는 반면, 핵 샘플링은 누적 확률을 기반으로 토큰 수를 제한합니다.

참고: 기본값은 Model에 따라 다르며 getModel 함수에서 반환된 Model.top_p 속성으로 지정됩니다. topK 속성이 비어 있으면 모델이 top-k 샘플링을 적용하지 않고 요청에 topK 설정을 허용하지 않음을 나타냅니다.

이 필드는 더 이상 지원되지 않으며 Gemini 3.6 Flash 이상 모델에서는 자동으로 무시됩니다.

topK integer

선택사항입니다. 샘플링 시 고려할 최대 토큰 수입니다.

Gemini 모델은 Top-P (핵) 샘플링 또는 Top-K와 핵 샘플링의 조합을 사용합니다. Top-k 샘플링은 가장 가능성이 높은 토큰 topK개의 집합을 고려합니다. 핵 샘플링으로 실행되는 모델은 topK 설정을 허용하지 않습니다.

참고: 기본값은 Model에 따라 다르며 getModel 함수에서 반환된 Model.top_p 속성으로 지정됩니다. topK 속성이 비어 있으면 모델이 top-k 샘플링을 적용하지 않고 요청에 topK 설정을 허용하지 않음을 나타냅니다.

이 필드는 더 이상 지원되지 않으며 Gemini 3.6 Flash 이상 모델에서는 자동으로 무시됩니다.

seed integer

선택사항입니다. 디코딩에 사용되는 시드입니다. 설정하지 않으면 요청에서 무작위로 생성된 시드를 사용합니다.

presencePenalty number

선택사항입니다. 토큰이 이미 응답에 표시된 경우 다음 토큰의 logprobs에 적용되는 존재 페널티입니다.

이 페널티는 이진 온/오프이며 토큰이 사용된 횟수 (첫 번째 이후)에 따라 달라지지 않습니다. 사용할 때마다 증가하는 페널티에는 frequencyPenalty를 사용합니다.

양수 페널티는 응답에서 이미 사용된 토큰의 사용을 억제하여 어휘를 늘립니다.

음수 페널티는 응답에서 이미 사용된 토큰의 사용을 장려하여 어휘를 줄입니다.

frequencyPenalty number

선택사항입니다. 다음 토큰의 logprobs에 적용되는 빈도 페널티로, 지금까지 응답에서 각 토큰이 표시된 횟수를 곱합니다.

양수 페널티는 이미 사용된 토큰의 사용을 억제하며, 토큰이 사용된 횟수에 비례합니다. 토큰이 많이 사용될수록 모델이 해당 토큰을 다시 사용하기가 더 어려워져 응답의 어휘가 늘어납니다.

주의: 음수 페널티는 토큰이 사용된 횟수에 비례하여 모델이 토큰을 재사용하도록 유도합니다. 작은 음수 값은 대답의 어휘를 줄입니다. 음수 값이 클수록 모델은 maxOutputTokens 한도에 도달할 때까지 일반 토큰을 반복하기 시작합니다.

responseLogprobs boolean

선택사항입니다. true인 경우 응답에서 logprobs 결과를 내보냅니다.

logprobs integer

선택사항입니다. responseLogprobs=True인 경우에만 유효합니다. 이렇게 하면 Candidate.logprobs_result의 각 디코딩 단계에서 반환할 상위 logprobs 수(선택한 후보 포함)가 설정됩니다. 숫자는 [0, 20] 범위 내에 있어야 합니다.

enableEnhancedCivicAnswers boolean

선택사항입니다. 향상된 시민 관련 답변을 사용 설정합니다. 일부 모델에서는 이 기능을 사용하지 못할 수도 있습니다.

speechConfig object (SpeechConfig)

선택사항입니다. 음성 생성 구성입니다.

thinkingConfig object (ThinkingConfig)

선택사항입니다. 사고 기능의 구성입니다. 사고를 지원하지 않는 모델에 이 필드를 설정하면 오류가 반환됩니다.

imageConfig object (ImageConfig)

선택사항입니다. 이미지 생성 구성입니다. 이러한 구성 옵션을 지원하지 않는 모델에 이 필드를 설정하면 오류가 반환됩니다.

mediaResolution enum (MediaResolution)

선택사항입니다. 지정된 경우 지정된 미디어 해상도가 사용됩니다.

enableAffectiveDialog boolean

선택사항입니다. 사용 설정하면 모델이 감정을 감지하고 이에 따라 대답을 조정합니다.

responseFormat object (ResponseFormatConfig)

선택사항입니다. 대답 출력 형식의 구성입니다. 플랫 구조에서 형식 (텍스트, 오디오, 이미지)별로 출력 구성을 지정할 수 있습니다.

translationConfig object (TranslationConfig)

선택사항입니다. 번역 구성입니다.

audioTranscriptionConfig object (AudioTranscriptionConfig)

선택사항입니다. 오디오 스크립트 작성 (음성 인식) 구성입니다.

JSON 표현
{
  "stopSequences": [
    string
  ],
  "responseMimeType": string,
  "responseSchema": {
    object (Schema)
  },
  "_responseJsonSchema": value,
  "responseJsonSchema": value,
  "responseModalities": [
    enum (Modality)
  ],
  "candidateCount": integer,
  "maxOutputTokens": integer,
  "temperature": number,
  "topP": number,
  "topK": integer,
  "seed": integer,
  "presencePenalty": number,
  "frequencyPenalty": number,
  "responseLogprobs": boolean,
  "logprobs": integer,
  "enableEnhancedCivicAnswers": boolean,
  "speechConfig": {
    object (SpeechConfig)
  },
  "thinkingConfig": {
    object (ThinkingConfig)
  },
  "imageConfig": {
    object (ImageConfig)
  },
  "mediaResolution": enum (MediaResolution),
  "enableAffectiveDialog": boolean,
  "responseFormat": {
    object (ResponseFormatConfig)
  },
  "translationConfig": {
    object (TranslationConfig)
  },
  "audioTranscriptionConfig": {
    object (AudioTranscriptionConfig)
  }
}

형식

지원되는 대답 형식입니다.

열거형
MODALITY_UNSPECIFIED 기본값
TEXT 모델이 텍스트를 반환해야 함을 나타냅니다.
IMAGE 모델이 이미지를 반환해야 함을 나타냅니다.
AUDIO 모델이 오디오를 반환해야 함을 나타냅니다.

SpeechConfig

음성 생성 및 스크립트 작성 구성입니다.

필드
voiceConfig object (VoiceConfig)

단일 음성 출력의 경우 구성입니다.

multiSpeakerVoiceConfig object (MultiSpeakerVoiceConfig)

선택사항입니다. 다중 화자 설정의 구성입니다. voiceConfig 필드와 상호 배타적입니다.

languageCode string

선택사항입니다. 사용자가 앱에서 사용하도록 구성한 IETF BCP-47 언어 코드입니다. 음성 인식 및 합성에 사용됩니다.

유효한 값은 de-DE, en-AU, en-GB, en-IN, en-US, es-US, fr-FR, hi-IN, pt-BR, ar-XA, es-ES, fr-CA, id-ID, it-IT, ja-JP, tr-TR, vi-VN, bn-IN, gu-IN, kn-IN, ml-IN, mr-IN, ta-IN, te-IN, nl-NL, ko-KR, cmn-CN, pl-PL, ru-RU, th-TH입니다.

JSON 표현
{
  "voiceConfig": {
    object (VoiceConfig)
  },
  "multiSpeakerVoiceConfig": {
    object (MultiSpeakerVoiceConfig)
  },
  "languageCode": string
}

VoiceConfig

사용할 음성의 구성입니다.

필드
voice_config Union type
사용할 스피커의 구성입니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
prebuiltVoiceConfig object (PrebuiltVoiceConfig)

사용할 사전 빌드된 음성의 구성입니다.

voice string

선택사항입니다. 합성을 위한 발화자 식별자입니다. 지원되는 형식은 다음과 같습니다.

  • 사전 빌드된 음성의 화자 이름입니다 (예: Orus 또는 Kore).
  • 저장된 음성의 음성 ID (예: voice_xxx)
  • 음성 복제 키 (예: voicekey_xxx)
상호 배타적인 필드의 끝입니다.
JSON 표현
{

  // voice_config
  "prebuiltVoiceConfig": {
    object (PrebuiltVoiceConfig)
  },
  "voice": string
  // Union type
}

PrebuiltVoiceConfig

사용할 사전 빌드된 스피커의 구성입니다.

필드
voiceName string

선택사항입니다. 사용할 사전 설정 음성의 이름입니다.

JSON 표현
{
  "voiceName": string
}

MultiSpeakerVoiceConfig

다중 스피커 설정의 구성입니다.

필드
speakerVoiceConfigs[] object (SpeakerVoiceConfig)

필수 항목입니다. 사용 설정된 모든 발화자 음성입니다.

JSON 표현
{
  "speakerVoiceConfigs": [
    {
      object (SpeakerVoiceConfig)
    }
  ]
}

SpeakerVoiceConfig

다중 스피커 설정에서 단일 스피커의 구성입니다.

필드
speaker string

필수 항목입니다. 사용할 스피커의 이름입니다. 프롬프트와 동일해야 합니다.

voiceConfig object (VoiceConfig)

필수 항목입니다. 사용할 음성의 구성입니다.

JSON 표현
{
  "speaker": string,
  "voiceConfig": {
    object (VoiceConfig)
  }
}

ThinkingConfig

사고 기능의 구성입니다.

필드
includeThoughts boolean

대답에 사고를 포함할지 여부를 나타냅니다. true인 경우 사고는 사용 가능한 경우에만 반환됩니다.

thinkingBudget integer

모델이 생성해야 하는 사고 토큰 수입니다.

thinkingLevel enum (ThinkingLevel)

선택사항입니다. 모델이 대답을 생성하기 전에 내부 추론 프로세스의 최대 깊이를 제어합니다. 기본값은 모델에 따라 다릅니다. 자세한 내용은 사고 수준 가이드를 참고하세요. Gemini 3 이상 모델에 권장됩니다. 이전 모델과 함께 사용하면 오류가 발생합니다.

JSON 표현
{
  "includeThoughts": boolean,
  "thinkingBudget": integer,
  "thinkingLevel": enum (ThinkingLevel)
}

ThinkingLevel

사용자가 정수 예산 대신 enum을 사용하여 생각할 양을 지정할 수 있도록 허용합니다.

열거형
THINKING_LEVEL_UNSPECIFIED 기본값
MINIMAL 생각할 필요가 거의 없습니다.
LOW 낮은 사고 수준
MEDIUM 중간 수준의 사고
HIGH 높은 수준의 사고

ImageConfig

이미지 생성 기능의 구성입니다.

필드
aspectRatio string

선택사항입니다. 생성할 이미지의 가로세로 비율입니다. 지원되는 가로세로 비율: 1:1, 1:4, 4:1, 1:8, 8:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9

지정하지 않으면 모델은 제공된 참고 이미지를 기반으로 기본 가로세로 비율을 선택합니다.

imageSize string

선택사항입니다. 생성된 이미지의 크기를 지정합니다. 지원되는 값은 512, 1K, 2K, 4K입니다. 지정하지 않으면 모델에서 기본값 1K을 사용합니다.

JSON 표현
{
  "aspectRatio": string,
  "imageSize": string
}

MediaResolution

입력 미디어의 미디어 해상도입니다.

열거형
MEDIA_RESOLUTION_UNSPECIFIED 미디어 해상도가 설정되지 않았습니다.
MEDIA_RESOLUTION_LOW 미디어 해상도가 낮음 (토큰 64개)으로 설정됩니다.
MEDIA_RESOLUTION_MEDIUM 미디어 해상도가 중간 (토큰 256개)으로 설정됩니다.
MEDIA_RESOLUTION_HIGH 미디어 해상도가 높음으로 설정됨 (토큰 256개로 확대된 재구성)

ResponseFormatConfig

대답 출력 형식의 구성입니다. 이는 각 선택적 하위 필드가 특정 출력 형식을 구성하는 플랫 객체입니다.

필드
text object (TextResponseFormat)

선택사항입니다. 텍스트 출력 형식 구성입니다.

audio object (AudioResponseFormat)

선택사항입니다. 오디오 출력 형식 구성입니다.

image object (ImageResponseFormat)

선택사항입니다. 이미지 출력 형식 구성입니다.

JSON 표현
{
  "text": {
    object (TextResponseFormat)
  },
  "audio": {
    object (AudioResponseFormat)
  },
  "image": {
    object (ImageResponseFormat)
  }
}

TextResponseFormat

텍스트 출력 형식 구성입니다.

필드
mimeType enum (MimeType)

선택사항입니다. 텍스트 출력의 MIME 유형입니다.

schema value (Value format)

선택사항입니다. 출력이 준수해야 하는 JSON 스키마입니다. mimeType이 APPLICATION_JSON인 경우에만 적용됩니다.

JSON 표현
{
  "mimeType": enum (MimeType),
  "schema": value
}

MimeType

텍스트 출력에 지원되는 MIME 유형입니다.

열거형
MIME_TYPE_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
APPLICATION_JSON JSON 출력 형식입니다.
TEXT_PLAIN 일반 텍스트 출력 형식입니다.

AudioResponseFormat

오디오 출력 형식 구성입니다.

필드
mimeType enum (MimeType)

선택사항입니다. 오디오 출력의 MIME 유형입니다.

delivery enum (Delivery)

선택사항입니다. 오디오 출력의 전송 모드입니다.

sampleRate integer

선택사항입니다. 샘플링 레이트(Hz)입니다.

bitRate integer

선택사항입니다. 비트 전송률 (bps)입니다. 압축 형식 (MP3, Opus)에만 적용됩니다.

JSON 표현
{
  "mimeType": enum (MimeType),
  "delivery": enum (Delivery),
  "sampleRate": integer,
  "bitRate": integer
}

MimeType

오디오 출력에 지원되는 MIME 유형입니다.

열거형
MIME_TYPE_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
AUDIO_MP3 MP3 오디오 형식
AUDIO_OGG_OPUS OGG Opus 오디오 형식입니다.
AUDIO_L16 원시 PCM (L16) 오디오 형식입니다.
AUDIO_WAV WAV 오디오 형식
AUDIO_ALAW A-law 오디오 형식입니다.
AUDIO_MULAW Mu-law 오디오 형식입니다.

배달

오디오 출력의 전송 모드입니다.

열거형
DELIVERY_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
INLINE 오디오 데이터는 응답에 인라인으로 반환됩니다.
URI 오디오 데이터는 URI로 반환됩니다.

ImageResponseFormat

이미지 출력 형식 구성입니다.

필드
mimeType enum (MimeType)

선택사항입니다. 이미지 출력의 MIME 유형입니다.

delivery enum (Delivery)

선택사항입니다. 이미지 출력의 전송 모드입니다.

aspectRatio enum (AspectRatio)

선택사항입니다. 이미지 출력의 가로세로 비율입니다.

imageSize enum (ImageSize)

선택사항입니다. 이미지 출력의 크기입니다.

JSON 표현
{
  "mimeType": enum (MimeType),
  "delivery": enum (Delivery),
  "aspectRatio": enum (AspectRatio),
  "imageSize": enum (ImageSize)
}

MimeType

이미지 출력에 지원되는 MIME 유형입니다.

열거형
MIME_TYPE_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
IMAGE_JPEG JPEG 이미지 형식

배달

이미지 출력의 전송 모드입니다.

열거형
DELIVERY_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
INLINE 이미지 데이터는 응답에 인라인으로 반환됩니다.
URI 이미지 데이터는 URI로 반환됩니다.

AspectRatio

이미지 출력에 지원되는 가로세로 비율입니다.

열거형
ASPECT_RATIO_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
ASPECT_RATIO_ONE_BY_ONE 가로세로 비율 1:1
ASPECT_RATIO_TWO_BY_THREE 가로세로 비율 2:3
ASPECT_RATIO_THREE_BY_TWO 가로세로 비율 3:2
ASPECT_RATIO_THREE_BY_FOUR 가로세로 비율은 3:4입니다.
ASPECT_RATIO_FOUR_BY_THREE 4:3 가로세로 비율
ASPECT_RATIO_FOUR_BY_FIVE 가로세로 비율 4:5
ASPECT_RATIO_FIVE_BY_FOUR 가로세로 비율 5:4
ASPECT_RATIO_NINE_BY_SIXTEEN 가로세로 비율 9:16
ASPECT_RATIO_SIXTEEN_BY_NINE 가로세로 비율 16:9
ASPECT_RATIO_TWENTY_ONE_BY_NINE 가로세로 비율 21:9
ASPECT_RATIO_ONE_BY_EIGHT 가로세로 비율 1:8
ASPECT_RATIO_EIGHT_BY_ONE 가로세로 비율은 8:1입니다.
ASPECT_RATIO_ONE_BY_FOUR 가로세로 비율 1:4
ASPECT_RATIO_FOUR_BY_ONE 가로세로 비율은 4:1입니다.

ImageSize

이미지 출력에 지원되는 이미지 크기입니다.

열거형
IMAGE_SIZE_UNSPECIFIED 기본값 이 값은 사용되지 않습니다.
IMAGE_SIZE_FIVE_TWELVE 512px 이미지 크기
IMAGE_SIZE_ONE_K 1K 이미지 크기
IMAGE_SIZE_TWO_K 2K 이미지 크기
IMAGE_SIZE_FOUR_K 4K 이미지 크기

TranslationConfig

번역 기능의 구성입니다.

필드
targetLanguageCode string

필수 항목입니다. 번역의 도착어입니다. 지원되는 값은 BCP-47 언어 코드입니다 (예: 'en', 'es', 'fr').

echoTargetLanguage boolean

선택사항입니다. true인 경우 모델은 도착어가 사용될 때 오디오를 생성하며, 기본적으로 입력을 따라 합니다. false인 경우 도착어의 오디오가 생성되지 않습니다.

JSON 표현
{
  "targetLanguageCode": string,
  "echoTargetLanguage": boolean
}

AudioTranscriptionConfig

오디오 스크립트 작성 구성입니다.

필드
languageCodes[] string

선택사항입니다. 오디오에 있는 언어에 대한 힌트를 제공하는 BCP-47 언어 코드입니다. 생략하거나 비워두면 기본적으로 자동 언어 감지가 사용됩니다.

adaptationPhrases[]
(deprecated)
string

선택사항입니다. 음성 적응에 사용되는 구문 목록으로, ASR 모델이 이러한 특정 용어를 더 잘 인식하도록 편향을 적용합니다.

customVocabulary[] string

선택사항입니다. 음성 인식 모델이 특정 용어 (제품 이름, 고유 명사, 전문 용어)를 인식하도록 편향시키는 커스텀 어휘 구문 목록입니다.

wordTimestamp boolean

선택사항입니다. 단어 수준 타임스탬프 생성을 구성합니다.

diarization boolean

선택사항입니다. 화자 분할을 구성합니다.

mode enum (Mode)

선택사항입니다. 스크립트 작성 모드를 구성합니다. 지원되는 값은 VERBATIM, SMART입니다. 지정하지 않으면 기본적으로 VERBATIM 스크립트 작성입니다. SMART 모드에서 모델은 군더더기 표현 삭제 (추임새, 반복, 잘못된 시작 제거), 가벼운 문법 정리, 자동 서식 지정 (단락, 글머리기호, 번호 매기기 목록), 사소한 사용자 수정 (인라인 자체 수정)을 수행합니다. 타임스탬프 및 화자 분할은 SMART 모드와 호환되지 않습니다.

language_config Union type
지원 중단됨: 대신 최상위 language_codes를 사용하세요. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
languageAuto
(deprecated)
object (LanguageAuto)

선택사항입니다. 모델이 언어를 자동으로 감지합니다.

languageHints
(deprecated)
object (LanguageHints)

선택사항입니다. 오디오의 언어를 하나 이상 지정합니다.

상호 배타적인 필드의 끝입니다.
JSON 표현
{
  "languageCodes": [
    string
  ],
  "adaptationPhrases": [
    string
  ],
  "customVocabulary": [
    string
  ],
  "wordTimestamp": boolean,
  "diarization": boolean,
  "mode": enum (Mode),

  // language_config
  "languageAuto": {
    object (LanguageAuto)
  },
  "languageHints": {
    object (LanguageHints)
  }
  // Union type
}

LanguageAuto

이 유형에는 필드가 없습니다.

오디오 언어가 자동으로 감지되어야 함을 나타냅니다.

LanguageHints

오디오에 있을 수 있는 언어에 대한 힌트를 모델에 제공합니다.

필드
languageCodes[]
(deprecated)
string

필수 항목입니다. BCP-47 언어 코드입니다.

JSON 표현
{
  "languageCodes": [
    string
  ]
}

모드

스크립트 작성 모드입니다.

열거형
MODE_UNSPECIFIED 지정되지 않은 스크립트 작성 모드입니다.
VERBATIM 축자 스크립트 작성 모드입니다.
SMART 스마트 스크립트 작성 모드입니다.

RealtimeInputConfig

BidiGenerateContent에서 실시간 입력 동작을 구성합니다.

필드
automaticActivityDetection object (AutomaticActivityDetection)

선택사항입니다. 설정하지 않으면 자동 활동 감지가 기본적으로 사용 설정됩니다. 자동 음성 감지가 사용 중지된 경우 클라이언트는 활동 신호를 전송해야 합니다.

activityHandling enum (ActivityHandling)

(선택사항) 활동이 미치는 영향을 정의합니다.

turnCoverage enum (TurnCoverage)

(선택사항) 사용자 차례에 포함되는 입력을 정의합니다.

interimTranscriptTimestampEnabled boolean

선택사항입니다. 임시 스크립트 타임스탬프를 구성합니다.

JSON 표현
{
  "automaticActivityDetection": {
    object (AutomaticActivityDetection)
  },
  "activityHandling": enum (ActivityHandling),
  "turnCoverage": enum (TurnCoverage),
  "interimTranscriptTimestampEnabled": boolean
}

AutomaticActivityDetection

활동 자동 감지를 구성합니다.

필드
disabled boolean

선택사항입니다. 사용 설정된 경우 (기본값) 감지된 음성 및 텍스트 입력이 활동으로 간주됩니다. 사용 중지된 경우 클라이언트가 활동 신호를 전송해야 합니다.

startOfSpeechSensitivity enum (StartSensitivity)

선택사항입니다. 음성이 감지될 가능성을 결정합니다.

prefixPaddingMs integer

선택사항입니다. 음성 시작이 커밋되기 전 감지된 음성의 필수 지속 시간입니다. 이 값이 낮을수록 음성 시작 감도가 높아지고 더 짧은 음성을 인식할 수 있습니다. 하지만 이로 인해 거짓양성이 발생할 가능성도 높아집니다.

endOfSpeechSensitivity enum (EndSensitivity)

선택사항입니다. 감지된 음성이 종료될 가능성을 결정합니다.

silenceDurationMs integer

선택사항입니다. 음성 종료가 커밋되기 전 감지된 비음성 (예: 무음)의 필수 지속 시간입니다. 이 값이 클수록 사용자의 활동을 방해하지 않고 음성 간격을 더 길게 할 수 있지만 모델의 지연 시간이 늘어납니다.

JSON 표현
{
  "disabled": boolean,
  "startOfSpeechSensitivity": enum (StartSensitivity),
  "prefixPaddingMs": integer,
  "endOfSpeechSensitivity": enum (EndSensitivity),
  "silenceDurationMs": integer
}

StartSensitivity

음성 시작이 감지되는 방식을 결정합니다.

열거형
START_SENSITIVITY_UNSPECIFIED 기본값은 START_SENSITIVITY_HIGH입니다.
START_SENSITIVITY_HIGH 자동 감지 기능은 음성 시작을 더 많은 빈도로 감지합니다.
START_SENSITIVITY_LOW 자동 감지 기능은 음성 시작을 더 적은 빈도로 감지합니다.

EndSensitivity

음성 종료를 감지하는 방법을 결정합니다.

열거형
END_SENSITIVITY_UNSPECIFIED 기본값은 END_SENSITIVITY_HIGH입니다.
END_SENSITIVITY_HIGH 자동 감지 기능은 음성을 더 많은 빈도로 종료합니다.
END_SENSITIVITY_LOW 자동 감지 기능은 음성을 더 적은 빈도로 종료합니다.

ActivityHandling

사용자 활동을 처리하는 다양한 방법입니다.

열거형
ACTIVITY_HANDLING_UNSPECIFIED 지정되지 않은 경우 기본 동작은 START_OF_ACTIVITY_INTERRUPTS입니다.
START_OF_ACTIVITY_INTERRUPTS true인 경우 활동 시작이 모델의 응답을 중단시킵니다('끼어들기'라고도 함). 중단되는 순간 모델의 현재 응답이 잘립니다. 기본 동작으로 설정되어 있습니다.
NO_INTERRUPTION 모델의 응답이 중단되지 않습니다.

TurnCoverage

사용자 차례에 포함되는 입력에 관한 옵션입니다.

열거형
TURN_COVERAGE_UNSPECIFIED 지정하지 않으면 모델에 따라 기본 동작이 선택됩니다. 예를 들어 Gemini 2.5의 경우 기본값은 TURN_INCLUDES_ONLY_ACTIVITY이고 Gemini 3.1 이상에서는 TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO입니다.
TURN_INCLUDES_ONLY_ACTIVITY 마지막 턴 이후의 활동이 포함되며 비활성 상태 (예: 무음의 오디오 스트림)는 제외됩니다.
TURN_INCLUDES_ALL_INPUT 비활성 상태 (예: 무음의 오디오 스트림)를 포함하여 마지막 턴 이후의 모든 실시간 입력이 포함됩니다.
TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO 마지막 차례 이후의 오디오 활동과 모든 동영상이 포함됩니다. 자동 활동 감지에서 오디오 활동은 음성을 의미하며 무음은 제외됩니다.

SessionResumptionConfig

세션 재개 구성입니다.

이 메시지는 세션 구성에 BidiGenerateContentSetup.session_resumption로 포함됩니다. 구성된 경우 서버는 SessionResumptionUpdate 메시지를 전송합니다.

필드
handle string

이전 세션의 핸들입니다. 없으면 새 세션이 생성됩니다.

세션 핸들은 이전 연결의 SessionResumptionUpdate.token 값에서 가져옵니다.

JSON 표현
{
  "handle": string
}

ContextWindowCompressionConfig

컨텍스트 윈도우 압축을 사용 설정합니다. 이는 모델의 컨텍스트 윈도우가 지정된 길이를 초과하지 않도록 관리하는 메커니즘입니다.

필드
compression_mechanism Union type
사용된 컨텍스트 윈도우 압축 메커니즘입니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
slidingWindow object (SlidingWindow)

슬라이딩 윈도우 메커니즘

상호 배타적인 필드의 끝입니다.
triggerTokens string (int64 format)

컨텍스트 윈도우 압축을 트리거하는 데 필요한 토큰 수 (차례를 실행하기 전)입니다.

컨텍스트 윈도우가 짧을수록 모델 응답이 빨라질 수 있으므로 품질과 지연 시간의 균형을 맞추는 데 사용할 수 있습니다. 그러나 압축 작업은 일시적인 지연 시간 증가를 유발하므로 자주 트리거해서는 안 됩니다.

설정하지 않으면 기본값은 모델 컨텍스트 윈도우 한도의 80% 입니다. 이렇게 하면 다음 사용자 요청/모델 응답에 20% 가 남습니다.

JSON 표현
{

  // compression_mechanism
  "slidingWindow": {
    object (SlidingWindow)
  }
  // Union type
  "triggerTokens": string
}

SlidingWindow

SlidingWindow 메서드는 컨텍스트 윈도우의 시작 부분에 있는 콘텐츠를 삭제하여 작동합니다. 결과 컨텍스트는 항상 USER 역할 차례의 시작 부분에서 시작됩니다. 시스템 안내와 BidiGenerateContentSetup.prefix_turns는 항상 결과의 시작 부분에 유지됩니다.

필드
targetTokens string (int64 format)

유지할 토큰의 목표 수입니다. 기본값은 triggerTokens/2입니다.

컨텍스트 윈도우의 일부를 삭제하면 일시적으로 지연 시간이 증가하므로 빈번한 압축 작업을 방지하기 위해 이 값을 보정해야 합니다.

JSON 표현
{
  "targetTokens": string
}

HistoryConfig

기록 구성입니다.

이 메시지는 세션 구성에 BidiGenerateContentSetup.history_config로 포함됩니다. 기록 메시지 교환을 구성합니다.

필드
initialHistoryInClientContent boolean

선택사항입니다. true인 경우 setupComplete를 전송한 후 서버는 turnComplete가 true가 될 때까지 대기하고 먼저 clientContent 메시지를 처리합니다. 이 초기 기록은 모델 호출을 트리거하지 않으며 MODEL 역할로 끝날 수 있습니다. turnComplete가 true이면 클라이언트는 realtimeInput를 통해 실시간 대화를 시작할 수 있습니다.

JSON 표현
{
  "initialHistoryInClientContent": boolean
}

메서드: auth_tokens.create

BidiGenerateContent 세션의 동작을 제한하는 데 사용할 수 있는 토큰을 만듭니다.

엔드포인트

게시물 https://generativelanguage.googleapis.com/v1beta/auth_tokens

요청 본문

요청 본문에 AuthToken의 인스턴스가 포함됩니다.

필드
expireTime string (Timestamp format)

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. 결과 토큰을 사용할 때 BidiGenerateContent 세션의 메시지가 거부되는 선택적 시간입니다. (이 시간이 지나면 Gemini가 세션을 미리 종료할 수 있습니다.)

설정하지 않으면 기본값은 30분 후입니다. 설정하는 경우 이 값은 미래의 20시간 미만이어야 합니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

newSessionExpireTime string (Timestamp format)

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. 이 요청으로 생성된 토큰을 사용하는 새 Live API 세션이 거부되는 시간입니다.

설정하지 않으면 기본값은 향후 60초입니다. 설정하는 경우 이 값은 미래의 20시간 미만이어야 합니다.

생성된 출력은 항상 Z-정규화되고 소수점 이하 0, 3, 6 또는 9자리인 RFC 3339를 사용합니다. 'Z' 이외의 오프셋도 허용됩니다. 예를 들면 "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" 또는 "2014-10-02T15:01:23+05:30"입니다.

fieldMask string (FieldMask format)

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. fieldMask가 비어 있고 bidiGenerateContentSetup가 없으면 Live API 연결에서 유효한 BidiGenerateContentSetup 메시지를 가져옵니다.

fieldMask가 비어 있고 bidiGenerateContentSetup가 있는 경우 유효한 BidiGenerateContentSetup 메시지는 이 요청의 bidiGenerateContentSetup에서 완전히 가져옵니다. Live API 연결의 설정 메시지가 무시됩니다.

fieldMask가 비어 있지 않으면 bidiGenerateContentSetup의 해당 필드가 Live API 연결의 설정 메시지 필드를 덮어씁니다.

정규화된 필드 이름의 쉼표로 구분된 목록입니다. 예: "user.displayName,photo"

config Union type
결과 토큰의 메서드별 구성입니다. 다음은 상호 배타적인 필드 목록입니다. 응답에서 최대 하나의 필드가 설정됩니다.
bidiGenerateContentSetup object (BidiGenerateContentSetup)

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. BidiGenerateContent 관련 구성입니다.

상호 배타적인 필드의 끝입니다.
uses integer

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. 토큰을 사용할 수 있는 횟수입니다. 이 값이 0이면 한도가 적용되지 않습니다. Live API 세션을 재개하는 것은 사용으로 집계되지 않습니다. 지정하지 않으면 기본값은 1입니다.

응답 본문

성공한 경우 응답 본문에 새로 생성된 AuthToken의 인스턴스가 포함됩니다.