Generating content

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

메서드: models.generateContent

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

엔드포인트

post 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의 지식과 범위를 벗어나 외부 시스템과 상호작용하여 작업 또는 작업 집합을 수행할 수 있도록 하는 코드 조각입니다. 지원되는 ToolFunctioncodeExecution입니다. 자세한 내용은 함수 호출코드 실행 가이드를 참고하세요.

toolConfig object (ToolConfig)

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

safetySettings[] object (SafetySetting)

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

이는 GenerateContentRequest.contentsGenerateContentResponse.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 애플리케이션에 안전 고려사항을 통합하는 방법도 알아보세요.

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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-flash" });
  const chatResponse = await chat.sendMessage({
    message: "The final result is " + resultValue,
  });
  console.log(chatResponse.text);
  return chatResponse;
}

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.7-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.7-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.7-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.7-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.7-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.7-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.7-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);
  return response;
}

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.7-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.7-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.7-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.7-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.7-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.7-flash",
                "Good morning! How are you?",
                config);

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

응답 본문

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

메서드: models.streamGenerateContent

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

엔드포인트

post 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의 지식과 범위를 벗어나 외부 시스템과 상호작용하여 작업 또는 작업 집합을 수행할 수 있도록 하는 코드 조각입니다. 지원되는 ToolFunctioncodeExecution입니다. 자세한 내용은 함수 호출코드 실행 가이드를 참고하세요.

toolConfig object (ToolConfig)

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

safetySettings[] object (SafetySetting)

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

이는 GenerateContentRequest.contentsGenerateContentResponse.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 애플리케이션에 안전 고려사항을 통합하는 방법도 알아보세요.

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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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.7-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의 프롬프트와 finishReasonsafetyRatings의 각 후보에 대해 보고됩니다. API는 다음을 수행합니다. - 요청된 후보자를 모두 반환하거나 하나도 반환하지 않습니다. - 프롬프트에 문제가 있는 경우에만 후보자를 전혀 반환하지 않습니다 (promptFeedback 확인). - finishReasonsafetyRatings에서 각 후보자에 대한 의견을 보고합니다.

필드
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)

프롬프트의 안전 등급입니다. 카테고리당 등급은 최대 1개입니다.

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 컨텍스트 가져오기 도구와 관련된 메타데이터입니다.

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)
  },
  "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 에스컬레이션 규칙에 의해 요청이 필터링되었습니다.

GroundingAttribution

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

필드
sourceId object (AttributionSourceId)

출력 전용입니다. 이 기여에 기여한 소스의 식별자입니다.

content object (Content)

이 저작자 표시를 구성하는 그라운딩 소스 콘텐츠입니다.

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

AttributionSourceId

이 기여에 기여한 소스의 식별자입니다.

필드
source Union type
source는 다음 중 하나여야 합니다.
groundingPassage object (GroundingPassageId)

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

semanticRetrieverChunk object (SemanticRetrieverChunk)

Semantic Retriever를 통해 가져온 Chunk의 식별자입니다.

JSON 표현
{

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

GroundingPassageId

GroundingPassage 내의 파트 식별자입니다.

필드
passageId string

출력 전용입니다. GenerateAnswerRequestGroundingPassage.id와 일치하는 문단의 ID입니다.

partIndex integer

출력 전용입니다. GenerateAnswerRequestGroundingPassage.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
청크 유형입니다. chunk_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
메타데이터 값입니다. 문자열, 문자열 목록 또는 숫자일 수 있습니다. value는 다음 중 하나여야 합니다.
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

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

placeAnswerSources object (PlaceAnswerSources)

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

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

PlaceAnswerSources

Google 지도의 특정 장소 기능에 관한 답변을 제공하는 소스 모음입니다. 각 PlaceAnswerSources 메시지는 Google 지도의 특정 장소에 해당합니다. Google 지도 도구는 이러한 소스를 사용하여 장소의 기능에 관한 질문에 답변했습니다 (예: 'Foo Bar에 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 - ID 또는 보호 속성을 대상으로 하는 부정적이거나 유해한 댓글
HARM_CATEGORY_TOXICITY PaLM - 무례하거나 모욕적이거나 욕설이 있는 콘텐츠
HARM_CATEGORY_VIOLENCE PaLM - 개인 또는 그룹에 대한 폭력을 묘사하는 시나리오 또는 유혈 콘텐츠에 대한 일반적인 설명을 묘사합니다.
HARM_CATEGORY_SEXUAL PaLM - 성적 행위 또는 기타 외설적인 콘텐츠에 대한 언급이 포함되어 있습니다.
HARM_CATEGORY_MEDICAL PaLM - 확인되지 않은 의학적 조언을 제공합니다.
HARM_CATEGORY_DANGEROUS PaLM - 유해한 행위를 조장, 촉진 또는 장려하는 위험한 콘텐츠
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 무시할 수 있는 콘텐츠는 허용됩니다.
BLOCK_MEDIUM_AND_ABOVE 무시할 수 있는 수준 및 낮은 수준의 콘텐츠는 허용됩니다.
BLOCK_ONLY_HIGH 위험 수준이 NEGLIGIBLE, LOW, MEDIUM인 콘텐츠는 허용됩니다.
BLOCK_NONE 모든 콘텐츠가 허용됩니다.
OFF 안전 필터를 사용 중지합니다.

ServiceTier

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

열거형
unspecified 기본 서비스 등급(표준)
standard 표준 서비스 등급입니다.
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를 콘텐츠 표현으로 사용하는 에이전트는 추가 정보를 추적해야 할 수 있습니다. 예를 들어 파트가 시작된 파일/소스의 이름이거나 여러 파트 스트림을 멀티플렉싱하는 방법일 수 있습니다.

mediaResolution object (MediaResolution)

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

mediaProcessing enum (MediaProcessing)

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

data Union type
data는 다음 중 하나여야 합니다.
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
데이터의 추가 전처리를 제어합니다. metadata는 다음 중 하나여야 합니다.
videoMetadata object (VideoMetadata)

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

JSON 표현
{
  "thought": boolean,
  "thoughtSignature": string,
  "partMetadata": {
    object
  },
  "mediaResolution": {
    object (MediaResolution)
  },
  "mediaProcessing": enum (MediaProcessing),

  // 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 인코딩 문자열입니다.

JSON 표현
{
  "mimeType": string,
  "data": 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' 키가 있어 오류 세부정보를 모델에 반환할 수 있습니다.

멀티미디어는 값이 멀티미디어를 보유한 FunctionResponsePartinlineData.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를 반환할 수 있습니다. 이 경우에도 모델 생성이 트리거될 수 있습니다. 생성을 트리거하지 않고 함수 호출을 완료하려면 schedulingSILENT로 추가로 설정하세요.

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
함수 응답 부분의 데이터입니다. data는 다음 중 하나여야 합니다.
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입니다.

JSON 표현
{
  "mimeType": string,
  "fileUri": 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 numpy 및 simpy를 사용할 수 있는 Python >= 3.10 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에 의해 시작된 도구 호출의 결과가 포함되어 있습니다. 클라이언트는 이 ToolResponseContent 메시지 내의 후속 턴에서 해당 ToolCall와 함께 API에 다시 전달해야 합니다.

필드
id string

선택사항입니다. 이 응답이 속한 도구 호출의 식별자입니다.

toolType enum (ToolType)

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

response object (Struct format)

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

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

VideoMetadata

지원 중단됨: 대신 GenerateContentRequest.processing_options을 사용하세요. 메타데이터는 입력 동영상 콘텐츠를 설명합니다.

필드
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
미디어 해상도 수준입니다. value는 다음 중 하나여야 합니다.
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 기본값입니다. 모델별 처리 사용 (3.5 Pro+ -> AGENTIC, 이전 모델 -> STATIC)
STATIC 고정 프레임 속도 프레임 추출 모든 프레임이 컨텍스트에 배치됩니다.
AGENTIC 모델 기반 동적 탐색 대부분의 사용 사례에 권장됩니다.

환경

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

필드
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
환경의 네트워크 구성입니다. network는 다음 중 하나여야 합니다.
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의 최소 길이인 스키마 필드

maxLength string (int64 format)

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

pattern string

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

example value (Value format)

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

anyOf[] object (Schema)

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

propertyOrdering[] string

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

default value (Value format)

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

items object (Schema)

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

minimum number

선택사항입니다. SCHEMA FIELDS FOR TYPE INTEGER and 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
}

유형

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

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

도구

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

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

다음 ID: 17

필드
functionDeclarations[] object (FunctionDeclaration)

선택사항입니다. 함수 호출에 사용할 수 있는 모델에 제공되는 FunctionDeclarations 목록입니다.

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

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

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

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

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 기본값은 브라우저입니다.
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

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

metadataFilter string

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

topK integer

선택사항입니다. 가져올 시맨틱 검색 청크의 수입니다.

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

McpServer

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

필드
name string

MCPServer의 이름입니다.

transport Union type
MCPServer에 연결하는 데 사용할 전송입니다. transport는 다음 중 하나여야 합니다.
streamableHttpTransport object (StreamableHttpTransport)

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

JSON 표현
{
  "name": string,

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

StreamableHttpTransport

HTTP 요청과 응답을 스트리밍할 수 있는 전송입니다. 다음 ID: 6

필드
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가 없으면 유효한 BidiGenerateContentSetup 메시지가 Live API 연결에서 가져옵니다.

fieldMask가 비어 있고 bidiGenerateContentSetup있으면 이 요청에서 유효한 BidiGenerateContentSetup 메시지가 bidiGenerateContentSetup에서 완전히 가져옵니다. Live API 연결의 설정 메시지가 무시됩니다.

fieldMask가 비어 있지 않으면 bidiGenerateContentSetup의 해당 필드가 Live API 연결의 설정 메시지 필드를 덮어씁니다.

정규화된 필드 이름의 쉼표로 구분된 목록입니다. 예: "user.displayName,photo"

config Union type
결과 토큰의 메서드별 구성입니다. config는 다음 중 하나여야 합니다.
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)

선택사항입니다. 클라이언트와 서버 간의 기록 교환을 구성합니다.

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)
  }
}

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 텍스트 생성 가이드를 참고하세요.

_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 속성도 설정할 수 있습니다.

순환 참조는 제한된 수준으로 펼쳐지므로 필수가 아닌 속성 내에서만 사용할 수 있습니다. (Nullable 속성으로는 충분하지 않습니다.) $ref이 하위 스키마에 설정된 경우 $로 시작하는 속성을 제외한 다른 속성은 설정할 수 없습니다.

responseJsonSchema value (Value format)

선택사항입니다. 내부 세부정보입니다. 이 필드 대신 responseJsonSchema를 사용하세요.

responseModalities[] enum (Modality)

선택사항입니다. 요청된 대답의 모달리티입니다. 모델이 반환할 수 있고 대답에서 예상해야 하는 모달리티 집합을 나타냅니다. 이는 대답의 모달리티와 정확히 일치합니다.

모델은 지원되는 여러 모달리티 조합을 가질 수 있습니다. 요청된 모달리티가 지원되는 조합과 일치하지 않으면 오류가 반환됩니다.

빈 목록은 텍스트만 요청하는 것과 같습니다.

candidateCount integer

선택사항입니다. 반환할 생성된 응답 수입니다. 설정하지 않으면 기본값은 1입니다. 이 기능은 이전 세대 모델 (Gemini 1.0 제품군)에서는 작동하지 않습니다.

maxOutputTokens integer

선택사항입니다. 대답 후보에 포함할 최대 토큰 수입니다.

참고: 기본값은 모델에 따라 다릅니다. getModel 함수에서 반환된 ModelModel.output_token_limit 속성을 참고하세요.

temperature number

선택사항입니다. 출력의 무작위성을 제어합니다.

참고: 기본값은 모델에 따라 다릅니다. getModel 함수에서 반환된 ModelModel.temperature 속성을 참고하세요.

값의 범위는 [0.0, 2.0]입니다.

topP number

선택사항입니다. 샘플링 시 고려할 토큰의 최대 누적 확률입니다.

모델은 결합된 Top-k 및 Top-p (핵) 샘플링을 사용합니다.

토큰은 할당된 확률에 따라 정렬되므로 가능성이 가장 높은 토큰만 고려됩니다. Top-k 샘플링은 고려할 최대 토큰 수를 직접 제한하는 반면, 핵 샘플링은 누적 확률을 기반으로 토큰 수를 제한합니다.

참고: 기본값은 Model에 따라 다르며 getModel 함수에서 반환된 Model.top_p 속성으로 지정됩니다. topK 속성이 비어 있으면 모델이 상위 k 샘플링을 적용하지 않으며 요청에서 topK 설정을 허용하지 않음을 나타냅니다.

topK integer

선택사항입니다. 샘플링 시 고려할 최대 토큰 수입니다.

Gemini 모델은 Top-p (핵) 샘플링 또는 Top-k와 핵 샘플링의 조합을 사용합니다. Top-k 샘플링은 topK가장 가능성이 높은 토큰의 집합을 고려합니다. 핵 샘플링으로 실행되는 모델은 topK 설정을 허용하지 않습니다.

참고: 기본값은 Model에 따라 다르며 getModel 함수에서 반환된 Model.top_p 속성으로 지정됩니다. topK 속성이 비어 있으면 모델이 상위 k 샘플링을 적용하지 않으며 요청에서 topK 설정을 허용하지 않음을 나타냅니다.

seed integer

선택사항입니다. 디코딩에 사용된 시드입니다. 설정하지 않으면 요청에서 무작위로 생성된 시드를 사용합니다.

presencePenalty number

선택사항입니다. 토큰이 이미 대답에 표시된 경우 다음 토큰의 logprobs에 적용되는 존재 페널티입니다.

이 페널티는 이진 온/오프이며 토큰이 사용된 횟수 (첫 번째 이후)와는 관련이 없습니다. 사용할 때마다 증가하는 페널티에는 frequencyPenalty를 사용합니다.

긍정적 페널티는 이미 대답에 사용된 토큰의 사용을 방지하여 어휘를 늘립니다.

부정적 페널티는 대답에 이미 사용된 토큰의 사용을 장려하여 어휘를 줄입니다.

frequencyPenalty number

선택사항입니다. 다음 토큰의 로그 확률에 적용되는 빈도 페널티로, 지금까지 대답에서 각 토큰이 표시된 횟수를 곱합니다.

긍정적 페널티는 이미 사용된 토큰의 사용을 억제하며, 토큰이 사용된 횟수에 비례합니다. 토큰이 많이 사용될수록 모델이 해당 토큰을 다시 사용하기가 더 어려워져 응답의 어휘가 늘어납니다.

주의: 음수 페널티는 토큰이 사용된 횟수에 비례하여 토큰을 재사용하도록 모델을 유도합니다. 작은 음수 값은 대답의 어휘를 줄입니다. 음수 값이 클수록 모델이 maxOutputTokens 한도에 도달할 때까지 일반적인 토큰을 반복하게 됩니다.

responseLogprobs boolean

선택사항입니다. true인 경우 응답에 logprobs 결과를 내보냅니다.

logprobs integer

선택사항입니다. responseLogprobs=True인 경우에만 유효합니다. 이렇게 하면 선택된 후보를 포함하여 Candidate.logprobs_result의 각 디코딩 단계에서 반환할 상위 로그 확률 수가 설정됩니다. 숫자는 [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
사용할 스피커의 구성입니다. voice_config는 다음 중 하나여야 합니다.
prebuiltVoiceConfig object (PrebuiltVoiceConfig)

사용할 사전 빌드된 음성의 구성입니다.

JSON 표현
{

  // voice_config
  "prebuiltVoiceConfig": {
    object (PrebuiltVoiceConfig)
  }
  // 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

선택사항입니다. 화자 분할을 구성합니다.

language_config Union type
지원 중단됨: 대신 최상위 language_codes을 사용하세요. language_config은 다음 중 하나여야 합니다.
languageAuto
(deprecated)
object (LanguageAuto)

선택사항입니다. 모델이 언어를 자동으로 감지합니다.

languageHints
(deprecated)
object (LanguageHints)

선택사항입니다. 오디오의 언어를 하나 이상 지정합니다.

JSON 표현
{
  "languageCodes": [
    string
  ],
  "adaptationPhrases": [
    string
  ],
  "customVocabulary": [
    string
  ],
  "wordTimestamp": boolean,
  "diarization": boolean,

  // language_config
  "languageAuto": {
    object (LanguageAuto)
  },
  "languageHints": {
    object (LanguageHints)
  }
  // Union type
}

LanguageAuto

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

오디오의 언어가 자동으로 감지되어야 함을 나타냅니다.

LanguageHints

오디오에 있을 수 있는 언어에 관한 힌트를 모델에 제공합니다.

필드
languageCodes[]
(deprecated)
string

필수 항목입니다. BCP-47 언어 코드입니다.

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

RealtimeInputConfig

BidiGenerateContent에서 실시간 입력 동작을 구성합니다.

필드
automaticActivityDetection object (AutomaticActivityDetection)

선택사항입니다. 설정하지 않으면 자동 활동 감지가 기본적으로 사용 설정됩니다. 자동 음성 감지가 사용 중지된 경우 클라이언트는 활동 신호를 전송해야 합니다.

activityHandling enum (ActivityHandling)

(선택사항) 활동이 미치는 영향을 정의합니다.

turnCoverage enum (TurnCoverage)

(선택사항) 사용자 턴에 포함된 입력을 정의합니다.

JSON 표현
{
  "automaticActivityDetection": {
    object (AutomaticActivityDetection)
  },
  "activityHandling": enum (ActivityHandling),
  "turnCoverage": enum (TurnCoverage)
}

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
사용된 컨텍스트 윈도우 압축 메커니즘입니다. compression_mechanism는 다음 중 하나여야 합니다.
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를 전송한 후 서버는 turnCompletetrue가 될 때까지 기다리며 처음에는 clientContent 메시지를 처리합니다. 이 초기 기록은 모델 호출을 트리거하지 않으며 역할이 MODEL로 끝날 수 있습니다. turnCompletetrue이면 클라이언트는 realtimeInput를 통해 실시간 대화를 시작할 수 있습니다.

JSON 표현
{
  "initialHistoryInClientContent": boolean
}

메서드: auth_tokens.create

BidiGenerateContent 세션의 동작을 제한하는 데 사용할 수 있는 토큰을 만듭니다.

엔드포인트

post 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가 없으면 유효한 BidiGenerateContentSetup 메시지가 Live API 연결에서 가져옵니다.

fieldMask가 비어 있고 bidiGenerateContentSetup있으면 이 요청에서 유효한 BidiGenerateContentSetup 메시지가 bidiGenerateContentSetup에서 완전히 가져옵니다. Live API 연결의 설정 메시지가 무시됩니다.

fieldMask가 비어 있지 않으면 bidiGenerateContentSetup의 해당 필드가 Live API 연결의 설정 메시지 필드를 덮어씁니다.

정규화된 필드 이름의 쉼표로 구분된 목록입니다. 예: "user.displayName,photo"

config Union type
결과 토큰의 메서드별 구성입니다. config는 다음 중 하나여야 합니다.
bidiGenerateContentSetup object (BidiGenerateContentSetup)

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. BidiGenerateContent 관련 구성입니다.

uses integer

선택사항입니다. 입력 전용입니다. 변경할 수 없습니다. 토큰을 사용할 수 있는 횟수입니다. 이 값이 0이면 제한이 적용되지 않습니다. Live API 세션을 재개하는 것은 사용으로 간주되지 않습니다. 지정하지 않으면 기본값은 1입니다.

응답 본문

성공한 경우 응답 본문에 새로 생성된 AuthToken의 인스턴스가 포함됩니다.