Generating content

Gemini API hỗ trợ tạo nội dung bằng hình ảnh, âm thanh, mã, công cụ và nhiều nội dung khác. Để biết thông tin chi tiết về từng tính năng này, hãy đọc tiếp và xem mã mẫu tập trung vào tác vụ hoặc đọc các hướng dẫn toàn diện.

Phương thức: models.generateContent

Tạo câu trả lời của mô hình dựa trên một GenerateContentRequest đầu vào. Hãy tham khảo hướng dẫn tạo văn bản để biết thông tin chi tiết về cách sử dụng. Khả năng nhập dữ liệu khác nhau giữa các mô hình, kể cả mô hình được điều chỉnh. Hãy tham khảo hướng dẫn về mô hìnhhướng dẫn điều chỉnh để biết thông tin chi tiết.

Điểm cuối

post https://generativelanguage.googleapis.com/v1beta/{model=models/*}:generateContent

Tham số đường dẫn

model string

Bắt buộc. Tên của Model dùng để tạo câu hoàn chỉnh.

Định dạng: models/{model}. Tên này có dạng models/{model}.

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu với cấu trúc sau:

Trường
contents[] object (Content)

Bắt buộc. Nội dung của cuộc trò chuyện hiện tại với mô hình.

Đối với các cụm từ tìm kiếm một lượt, đây là một phiên bản duy nhất. Đối với các truy vấn nhiều lượt như chat, đây là một trường lặp lại chứa nhật ký trò chuyện và yêu cầu mới nhất.

tools[] object (Tool)

Không bắt buộc. Danh sách ToolsModel có thể dùng để tạo câu trả lời tiếp theo.

Tool là một đoạn mã cho phép hệ thống tương tác với các hệ thống bên ngoài để thực hiện một hành động hoặc một nhóm hành động nằm ngoài kiến thức và phạm vi của Model. Các Tool được hỗ trợ là FunctioncodeExecution. Hãy tham khảo hướng dẫn về Gọi hàmThực thi mã để tìm hiểu thêm.

toolConfig object (ToolConfig)

Không bắt buộc. Cấu hình công cụ cho mọi Tool được chỉ định trong yêu cầu. Hãy tham khảo Hướng dẫn gọi hàm để xem ví dụ về cách sử dụng.

safetySettings[] object (SafetySetting)

Không bắt buộc. Danh sách các thực thể SafetySetting riêng biệt để chặn nội dung không an toàn.

Quy định này sẽ được thực thi trên GenerateContentRequest.contentsGenerateContentResponse.candidates. Không được có nhiều hơn một chế độ cài đặt cho mỗi loại SafetyCategory. API sẽ chặn mọi nội dung và phản hồi không đáp ứng các ngưỡng do các chế độ cài đặt này đặt ra. Danh sách này sẽ ghi đè chế độ cài đặt mặc định cho từng SafetyCategory được chỉ định trong safetySettings. Nếu không có SafetySetting cho một SafetyCategory nhất định được cung cấp trong danh sách, thì API sẽ sử dụng chế độ cài đặt an toàn mặc định cho danh mục đó. Các danh mục nội dung gây hại HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT, HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_CIVIC_INTEGRITY, HARM_CATEGORY_JAILBREAK đều được hỗ trợ. Hãy tham khảo hướng dẫn để biết thông tin chi tiết về các chế độ cài đặt an toàn hiện có. Bạn cũng có thể tham khảo Hướng dẫn về an toàn để tìm hiểu cách đưa các yếu tố cần cân nhắc về an toàn vào các ứng dụng AI của mình.

systemInstruction object (Content)

Không bắt buộc. Nhà phát triển đặt (các) chỉ dẫn hệ thống. Hiện tại, chỉ có văn bản.

generationConfig object (GenerationConfig)

Không bắt buộc. Các lựa chọn cấu hình để tạo mô hình và đầu ra.

cachedContent string

Không bắt buộc. Tên của nội dung được lưu vào bộ nhớ đệm để dùng làm bối cảnh phân phát thông tin dự đoán. Định dạng: cachedContents/{cachedContent}

serviceTier enum (ServiceTier)

Không bắt buộc. Cấp dịch vụ của yêu cầu.

store boolean

Không bắt buộc. Định cấu hình hành vi ghi nhật ký cho một yêu cầu nhất định. Nếu được đặt, thì chế độ này sẽ được ưu tiên hơn cấu hình ghi nhật ký ở cấp dự án.

Ví dụ về yêu cầu

Văn bản

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

Java

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());

Hình ảnh

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

Java

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());

Âm thanh

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

Video

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

Trò chuyện

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"

Java

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());

Bộ nhớ đệm

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)

Mô hình được tinh chỉnh

Python

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

Chế độ 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

Java

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());

Thực thi mã

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

Java

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());

Gọi hàm

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'

Java

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

Cấu hình tạo

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"

Java

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());

Chế độ cài đặt về an toàn

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

Java

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());

Hướng dẫn hệ thống

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"}}}'

Java

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());

Nội dung phản hồi

Nếu thành công, nội dung phản hồi sẽ chứa một thực thể của GenerateContentResponse.

Phương thức: models.streamGenerateContent

Tạo một phản hồi truyền trực tuyến từ mô hình dựa trên một GenerateContentRequest đầu vào.

Điểm cuối

post https://generativelanguage.googleapis.com/v1beta/{model=models/*}:streamGenerateContent

Tham số đường dẫn

model string

Bắt buộc. Tên của Model dùng để tạo câu hoàn chỉnh.

Định dạng: models/{model}. Tên này có dạng models/{model}.

Nội dung yêu cầu

Nội dung yêu cầu chứa dữ liệu với cấu trúc sau:

Trường
contents[] object (Content)

Bắt buộc. Nội dung của cuộc trò chuyện hiện tại với mô hình.

Đối với các cụm từ tìm kiếm một lượt, đây là một phiên bản duy nhất. Đối với các truy vấn nhiều lượt như chat, đây là một trường lặp lại chứa nhật ký trò chuyện và yêu cầu mới nhất.

tools[] object (Tool)

Không bắt buộc. Danh sách ToolsModel có thể dùng để tạo câu trả lời tiếp theo.

Tool là một đoạn mã cho phép hệ thống tương tác với các hệ thống bên ngoài để thực hiện một hành động hoặc một nhóm hành động nằm ngoài kiến thức và phạm vi của Model. Các Tool được hỗ trợ là FunctioncodeExecution. Hãy tham khảo hướng dẫn về Gọi hàmThực thi mã để tìm hiểu thêm.

toolConfig object (ToolConfig)

Không bắt buộc. Cấu hình công cụ cho mọi Tool được chỉ định trong yêu cầu. Hãy tham khảo Hướng dẫn gọi hàm để xem ví dụ về cách sử dụng.

safetySettings[] object (SafetySetting)

Không bắt buộc. Danh sách các thực thể SafetySetting riêng biệt để chặn nội dung không an toàn.

Quy định này sẽ được thực thi trên GenerateContentRequest.contentsGenerateContentResponse.candidates. Không được có nhiều hơn một chế độ cài đặt cho mỗi loại SafetyCategory. API sẽ chặn mọi nội dung và phản hồi không đáp ứng các ngưỡng do các chế độ cài đặt này đặt ra. Danh sách này sẽ ghi đè chế độ cài đặt mặc định cho từng SafetyCategory được chỉ định trong safetySettings. Nếu không có SafetySetting cho một SafetyCategory nhất định được cung cấp trong danh sách, thì API sẽ sử dụng chế độ cài đặt an toàn mặc định cho danh mục đó. Các danh mục nội dung gây hại HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT, HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_CIVIC_INTEGRITY, HARM_CATEGORY_JAILBREAK đều được hỗ trợ. Hãy tham khảo hướng dẫn để biết thông tin chi tiết về các chế độ cài đặt an toàn hiện có. Bạn cũng có thể tham khảo Hướng dẫn về an toàn để tìm hiểu cách đưa các yếu tố cần cân nhắc về an toàn vào các ứng dụng AI của mình.

systemInstruction object (Content)

Không bắt buộc. Nhà phát triển đặt (các) chỉ dẫn hệ thống. Hiện tại, chỉ có văn bản.

generationConfig object (GenerationConfig)

Không bắt buộc. Các lựa chọn cấu hình để tạo mô hình và đầu ra.

cachedContent string

Không bắt buộc. Tên của nội dung được lưu vào bộ nhớ đệm để dùng làm bối cảnh phân phát thông tin dự đoán. Định dạng: cachedContents/{cachedContent}

serviceTier enum (ServiceTier)

Không bắt buộc. Cấp dịch vụ của yêu cầu.

store boolean

Không bắt buộc. Định cấu hình hành vi ghi nhật ký cho một yêu cầu nhất định. Nếu được đặt, thì chế độ này sẽ được ưu tiên hơn cấu hình ghi nhật ký ở cấp dự án.

Ví dụ về yêu cầu

Văn bản

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."}]}]}'

Java

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();

Hình ảnh

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

Java

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();

Âm thanh

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

Video

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

Trò chuyện

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"

Nội dung phản hồi

Nếu thành công, nội dung phản hồi sẽ chứa một luồng các thực thể GenerateContentResponse.

GenerateContentResponse

Phản hồi từ mô hình hỗ trợ nhiều phản hồi đề xuất.

Chúng tôi báo cáo mức độ an toàn và chế độ lọc nội dung cho cả câu lệnh trong GenerateContentResponse.prompt_feedback và cho từng đề xuất trong finishReason cũng như trong safetyRatings. API này: – Trả về tất cả đề xuất được yêu cầu hoặc không trả về đề xuất nào – Chỉ trả về không đề xuất nào nếu có vấn đề với câu lệnh (hãy kiểm tra promptFeedback) – Báo cáo ý kiến phản hồi về từng đề xuất trong finishReasonsafetyRatings.

Trường
candidates[] object (Candidate)

Các câu trả lời đề xuất của mô hình.

promptFeedback object (PromptFeedback)

Trả về ý kiến phản hồi của câu lệnh liên quan đến bộ lọc nội dung.

usageMetadata object (UsageMetadata)

Chỉ có đầu ra. Siêu dữ liệu về mức sử dụng mã thông báo của các yêu cầu tạo.

modelVersion string

Chỉ có đầu ra. Phiên bản mô hình được dùng để tạo câu trả lời.

responseId string

Chỉ đầu ra. responseId dùng để xác định từng phản hồi.

modelStatus object (ModelStatus)

Chỉ có đầu ra. Trạng thái mô hình hiện tại của mô hình này.

Biểu diễn dưới dạng JSON
{
  "candidates": [
    {
      object (Candidate)
    }
  ],
  "promptFeedback": {
    object (PromptFeedback)
  },
  "usageMetadata": {
    object (UsageMetadata)
  },
  "modelVersion": string,
  "responseId": string,
  "modelStatus": {
    object (ModelStatus)
  }
}

PromptFeedback

Một tập hợp siêu dữ liệu phản hồi mà câu lệnh đã chỉ định trong GenerateContentRequest.content.

Trường
blockReason enum (BlockReason)

Không bắt buộc. Nếu được đặt, câu lệnh sẽ bị chặn và không có đề xuất nào được trả về. Diễn đạt lại câu lệnh.

safetyRatings[] object (SafetyRating)

Điểm xếp hạng về mức độ an toàn của câu lệnh. Mỗi danh mục chỉ có tối đa một mức phân loại.

Biểu diễn dưới dạng JSON
{
  "blockReason": enum (BlockReason),
  "safetyRatings": [
    {
      object (SafetyRating)
    }
  ]
}

BlockReason

Nêu rõ lý do khiến câu lệnh bị chặn.

Enum
BLOCK_REASON_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
SAFETY Câu lệnh đã bị chặn vì lý do an toàn. Kiểm tra safetyRatings để biết danh mục an toàn nào đã chặn quảng cáo đó.
OTHER Câu lệnh bị chặn vì lý do không xác định.
BLOCKLIST Câu lệnh bị chặn do có các từ trong danh sách chặn thuật ngữ.
PROHIBITED_CONTENT Câu lệnh bị chặn do có nội dung bị cấm.
IMAGE_SAFETY Ứng viên bị chặn do nội dung tạo hình ảnh không an toàn.

UsageMetadata

Siêu dữ liệu về mức sử dụng mã thông báo của yêu cầu tạo.

Trường
promptTokenCount integer

Số lượng mã thông báo trong câu lệnh. Khi cachedContent được đặt, đây vẫn là tổng kích thước hiệu quả của câu lệnh, tức là bao gồm cả số lượng mã thông báo trong nội dung được lưu vào bộ nhớ đệm.

cachedContentTokenCount integer

Số lượng mã thông báo trong phần được lưu vào bộ nhớ đệm của câu lệnh (nội dung được lưu vào bộ nhớ đệm)

candidatesTokenCount integer

Tổng số mã thông báo trong tất cả các đề xuất phản hồi được tạo.

toolUsePromptTokenCount integer

Chỉ có đầu ra. Số lượng mã thông báo có trong(các) câu lệnh sử dụng công cụ.

thoughtsTokenCount integer

Chỉ có đầu ra. Số lượng mã thông báo về suy nghĩ đối với mô hình tư duy.

totalTokenCount integer

Tổng số token cho yêu cầu tạo (câu lệnh + suy nghĩ + đề xuất phản hồi).

promptTokensDetails[] object (ModalityTokenCount)

Chỉ có đầu ra. Danh sách các phương thức đã được xử lý trong dữ liệu đầu vào của yêu cầu.

cacheTokensDetails[] object (ModalityTokenCount)

Chỉ có đầu ra. Danh sách các phương thức của nội dung được lưu vào bộ nhớ đệm trong dữ liệu đầu vào của yêu cầu.

candidatesTokensDetails[] object (ModalityTokenCount)

Chỉ có đầu ra. Danh sách các phương thức được trả về trong phản hồi.

toolUsePromptTokensDetails[] object (ModalityTokenCount)

Chỉ có đầu ra. Danh sách các phương thức đã được xử lý cho dữ liệu đầu vào của yêu cầu sử dụng công cụ.

serviceTier enum (ServiceTier)

Chỉ có đầu ra. Cấp dịch vụ của yêu cầu.

Biểu diễn dưới dạng 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

Trạng thái của mô hình cơ bản. Thông tin này được dùng để cho biết giai đoạn của mô hình cơ bản và thời gian ngừng hoạt động (nếu có).

Trường
modelStage enum (ModelStage)

Giai đoạn của mô hình cơ bản.

retirementTime string (Timestamp format)

Thời gian mô hình sẽ ngừng hoạt động.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

message string

Một thông báo giải thích trạng thái của mô hình.

Biểu diễn dưới dạng JSON
{
  "modelStage": enum (ModelStage),
  "retirementTime": string,
  "message": string
}

ModelStage

Xác định giai đoạn của mô hình cơ bản.

Enum
MODEL_STAGE_UNSPECIFIED Giai đoạn mô hình không xác định.
UNSTABLE_EXPERIMENTAL

Mô hình cơ bản phải trải qua nhiều quy trình điều chỉnh.

EXPERIMENTAL Các mô hình ở giai đoạn này chỉ nhằm mục đích thử nghiệm.
PREVIEW Các mô hình ở giai đoạn này hoàn thiện hơn so với các mô hình thử nghiệm.
STABLE Các mô hình ở giai đoạn này được coi là ổn định và sẵn sàng cho việc sử dụng trong môi trường phát hành chính thức.
LEGACY Nếu mô hình đang ở giai đoạn này, tức là mô hình này sắp bị ngừng cung cấp trong tương lai gần. Chỉ khách hàng hiện tại mới có thể sử dụng mô hình này.
DEPRECATED

Các mô hình ở giai đoạn này không được dùng nữa. Bạn không thể sử dụng các mô hình này.

RETIRED Các mô hình ở giai đoạn này sẽ ngừng hoạt động. Bạn không thể sử dụng các mô hình này.

Ứng viên

Một câu trả lời đề xuất do mô hình tạo ra.

Trường
content object (Content)

Chỉ có đầu ra. Nội dung được tạo do mô hình trả về.

finishReason enum (FinishReason)

Không bắt buộc. Chỉ có đầu ra. Lý do khiến mô hình ngừng tạo mã thông báo.

Nếu trống, tức là mô hình chưa dừng tạo mã thông báo.

safetyRatings[] object (SafetyRating)

Danh sách các điểm xếp hạng về mức độ an toàn của một câu trả lời đề xuất.

Mỗi danh mục chỉ có tối đa một điểm xếp hạng.

citationMetadata object (CitationMetadata)

Chỉ có đầu ra. Thông tin trích dẫn cho đề xuất do mô hình tạo.

Trường này có thể được điền thông tin đọc lại cho mọi văn bản có trong content. Đây là những đoạn văn được "trích dẫn" từ tài liệu có bản quyền trong dữ liệu huấn luyện của LLM cơ bản.

tokenCount integer

Chỉ có đầu ra. Số token cho đề xuất này.

groundingAttributions[] object (GroundingAttribution)

Chỉ có đầu ra. Thông tin ghi nhận quyền tác giả cho những nguồn đóng góp vào câu trả lời có căn cứ.

Trường này được điền sẵn cho các cuộc gọi GenerateAnswer.

groundingMetadata object (GroundingMetadata)

Chỉ có đầu ra. Siêu dữ liệu cơ sở cho đề xuất.

Trường này được điền sẵn cho các cuộc gọi GenerateContent.

avgLogprobs number

Chỉ có đầu ra. Điểm xác suất trung bình của ứng viên.

logprobsResult object (LogprobsResult)

Chỉ có đầu ra. Điểm số log-likelihood cho các mã thông báo phản hồi và mã thông báo hàng đầu

urlContextMetadata object (UrlContextMetadata)

Chỉ có đầu ra. Siêu dữ liệu liên quan đến công cụ truy xuất bối cảnh URL.

index integer

Chỉ có đầu ra. Chỉ mục của đề xuất trong danh sách đề xuất phản hồi.

finishMessage string

Không bắt buộc. Chỉ có đầu ra. Nêu chi tiết lý do khiến mô hình ngừng tạo mã thông báo. Tham số này chỉ được điền sẵn khi bạn đặt finishReason.

Biểu diễn dưới dạng 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

Xác định lý do khiến mô hình ngừng tạo mã thông báo.

Enum
FINISH_REASON_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
STOP Điểm dừng tự nhiên của mô hình hoặc chuỗi dừng được cung cấp.
MAX_TOKENS Đã đạt đến số lượng mã thông báo tối đa như được chỉ định trong yêu cầu.
SAFETY Nội dung đề xuất cho câu trả lời đã bị gắn cờ vì lý do an toàn.
RECITATION Nội dung đề xuất phản hồi đã bị gắn cờ vì lý do trích dẫn.
LANGUAGE Nội dung đề xuất phản hồi đã bị gắn cờ vì sử dụng ngôn ngữ không được hỗ trợ.
OTHER Lý do không xác định.
BLOCKLIST Quá trình tạo mã thông báo đã dừng lại vì nội dung chứa các cụm từ bị cấm.
PROHIBITED_CONTENT Ngừng tạo mã thông báo vì có thể chứa nội dung bị cấm.
SPII Quá trình tạo mã thông báo đã dừng vì nội dung có thể chứa Thông tin nhạy cảm có thể nhận dạng cá nhân (SPII).
MALFORMED_FUNCTION_CALL Lệnh gọi hàm do mô hình tạo ra không hợp lệ.
IMAGE_SAFETY Quá trình tạo mã thông báo đã dừng lại vì hình ảnh được tạo có chứa nội dung vi phạm an toàn.
IMAGE_PROHIBITED_CONTENT Đã dừng quá trình tạo hình ảnh vì hình ảnh được tạo có nội dung bị cấm khác.
IMAGE_OTHER Quá trình tạo hình ảnh đã dừng do một vấn đề khác.
NO_IMAGE Mô hình dự kiến sẽ tạo hình ảnh, nhưng không có hình ảnh nào được tạo.
IMAGE_RECITATION Đã dừng tạo hình ảnh do có lời đọc.
UNEXPECTED_TOOL_CALL Mô hình đã tạo một lệnh gọi công cụ nhưng không có công cụ nào được bật trong yêu cầu.
TOO_MANY_TOOL_CALLS Mô hình đã gọi quá nhiều công cụ liên tiếp, do đó hệ thống đã thoát khỏi quá trình thực thi.
MISSING_THOUGHT_SIGNATURE Yêu cầu thiếu ít nhất một chữ ký suy nghĩ.
MALFORMED_RESPONSE Đã hoàn tất do phản hồi không đúng định dạng.
ESCALATION Yêu cầu bị lọc theo một quy tắc chuyển yêu cầu lên cấp.

GroundingAttribution

Thông tin ghi nhận quyền tác giả cho một nguồn đã đóng góp vào câu trả lời.

Trường
sourceId object (AttributionSourceId)

Chỉ có đầu ra. Giá trị nhận dạng của nguồn đóng góp vào mô hình phân bổ này.

content object (Content)

Nội dung nguồn cơ bản tạo nên thông tin ghi nhận quyền tác giả này.

Biểu diễn dưới dạng JSON
{
  "sourceId": {
    object (AttributionSourceId)
  },
  "content": {
    object (Content)
  }
}

AttributionSourceId

Giá trị nhận dạng của nguồn đóng góp vào mô hình phân bổ này.

Trường
source Union type
source chỉ có thể là một trong những trạng thái sau:
groundingPassage object (GroundingPassageId)

Giá trị nhận dạng của một đoạn văn bản nội tuyến.

semanticRetrieverChunk object (SemanticRetrieverChunk)

Giá trị nhận dạng cho một Chunk được tìm nạp thông qua Semantic Retriever.

Biểu diễn dưới dạng JSON
{

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

GroundingPassageId

Giá trị nhận dạng của một bộ phận trong GroundingPassage.

Trường
passageId string

Chỉ có đầu ra. Mã nhận dạng của đoạn văn khớp với GroundingPassage.id của GenerateAnswerRequest.

partIndex integer

Chỉ có đầu ra. Chỉ mục của phần trong GroundingPassage.content của GenerateAnswerRequest.

Biểu diễn dưới dạng JSON
{
  "passageId": string,
  "partIndex": integer
}

SemanticRetrieverChunk

Giá trị nhận dạng cho Chunk được truy xuất thông qua Semantic Retriever (Công cụ truy xuất ngữ nghĩa) được chỉ định trong GenerateAnswerRequest bằng cách sử dụng SemanticRetrieverConfig.

Trường
source string

Chỉ có đầu ra. Tên của nguồn khớp với SemanticRetrieverConfig.source của yêu cầu. Ví dụ: corpora/123 hoặc corpora/123/documents/abc

chunk string

Chỉ có đầu ra. Tên của Chunk chứa văn bản được ghi nhận quyền tác giả. Ví dụ: corpora/123/documents/abc/chunks/xyz

Biểu diễn dưới dạng JSON
{
  "source": string,
  "chunk": string
}

GroundingMetadata

Siêu dữ liệu được trả về cho ứng dụng khi tính năng căn cứ được bật.

Trường
groundingChunks[] object (GroundingChunk)

Danh sách các thông tin tham khảo hỗ trợ được truy xuất từ nguồn cơ sở được chỉ định. Khi phát trực tuyến, thông tin này chỉ chứa các đoạn cơ sở chưa được đưa vào siêu dữ liệu cơ sở của các phản hồi trước đó.

groundingSupports[] object (GroundingSupport)

Danh sách các thông tin hỗ trợ cơ sở.

webSearchQueries[] string

Cụm từ tìm kiếm trên web cho lượt tìm kiếm tiếp theo trên web.

imageSearchQueries[] string

Cụm từ tìm kiếm hình ảnh được dùng để làm cơ sở.

searchEntryPoint object (SearchEntryPoint)

Không bắt buộc. Mục nhập tìm kiếm trên Google cho các cụm từ tìm kiếm tiếp theo trên web.

retrievalMetadata object (RetrievalMetadata)

Siêu dữ liệu liên quan đến việc truy xuất trong quy trình cơ sở.

googleMapsWidgetContextToken string

Không bắt buộc. Tên tài nguyên của token ngữ cảnh tiện ích Google Maps có thể dùng với tiện ích PlacesContextElement để hiển thị dữ liệu theo bối cảnh. Chỉ được điền sẵn trong trường hợp bạn bật tính năng neo bám vào Google Maps.

Biểu diễn dưới dạng JSON
{
  "groundingChunks": [
    {
      object (GroundingChunk)
    }
  ],
  "groundingSupports": [
    {
      object (GroundingSupport)
    }
  ],
  "webSearchQueries": [
    string
  ],
  "imageSearchQueries": [
    string
  ],
  "searchEntryPoint": {
    object (SearchEntryPoint)
  },
  "retrievalMetadata": {
    object (RetrievalMetadata)
  },
  "googleMapsWidgetContextToken": string
}

SearchEntryPoint

Điểm truy cập Google Tìm kiếm.

Trường
renderedContent string

Không bắt buộc. Đoạn nội dung web có thể được nhúng vào một trang web hoặc webview của ứng dụng.

sdkBlob string (bytes format)

Không bắt buộc. JSON được mã hoá Base64 đại diện cho mảng của bộ <cụm từ tìm kiếm, URL tìm kiếm>.

Một chuỗi được mã hoá base64.

Biểu diễn dưới dạng JSON
{
  "renderedContent": string,
  "sdkBlob": string
}

GroundingChunk

GroundingChunk đại diện cho một đoạn bằng chứng hỗ trợ giúp mô hình đưa ra câu trả lời. Đó có thể là một đoạn thông tin trên web, một ngữ cảnh được truy xuất từ một tệp hoặc thông tin trên Google Maps.

Trường
chunk_type Union type
Loại phân đoạn. chunk_type chỉ có thể là một trong những trạng thái sau:
web object (Web)

Đoạn thông tin cơ sở từ web.

image object (Image)

Không bắt buộc. Đoạn văn bản cơ sở từ tính năng tìm kiếm hình ảnh.

retrievedContext object (RetrievedContext)

Không bắt buộc. Đoạn cơ sở từ ngữ cảnh do công cụ tìm kiếm tệp truy xuất.

maps object (Maps)

Không bắt buộc. Đoạn neo bám từ Google Maps.

Biểu diễn dưới dạng JSON
{

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

Web

Đoạn nội dung trên web.

Trường
uri string

Chỉ có đầu ra. Tham chiếu URI của đoạn.

title string

Chỉ có đầu ra. Tiêu đề của đoạn.

Biểu diễn dưới dạng JSON
{
  "uri": string,
  "title": string
}

Hình ảnh

Đoạn trích từ kết quả tìm kiếm hình ảnh.

Trường
sourceUri string

URI trang web để phân bổ.

imageUri string

URL của thành phần hình ảnh.

title string

Tiêu đề của trang web có chứa hình ảnh.

domain string

Tên miền gốc của trang web có chứa hình ảnh, ví dụ: "example.com".

Biểu diễn dưới dạng JSON
{
  "sourceUri": string,
  "imageUri": string,
  "title": string,
  "domain": string
}

RetrievedContext

Đoạn trích từ ngữ cảnh do công cụ tìm kiếm tệp truy xuất.

Trường
customMetadata[] object (CustomMetadata)

Không bắt buộc. Siêu dữ liệu do người dùng cung cấp về ngữ cảnh đã truy xuất.

uri string

Không bắt buộc. URI tham chiếu của tài liệu truy xuất ngữ nghĩa.

title string

Không bắt buộc. Tiêu đề của tài liệu.

text string

Không bắt buộc. Văn bản của đoạn.

fileSearchStore string

Không bắt buộc. Tên của FileSearchStore chứa tài liệu. Ví dụ: fileSearchStores/123

pageNumber integer

Không bắt buộc. Số trang của ngữ cảnh được truy xuất (nếu có).

mediaId string

Không bắt buộc. Tên tài nguyên blob đa phương tiện cho kết quả tìm kiếm tệp đa phương thức. Định dạng: fileSearchStores/{file_search_store_id}/media/{blobId}

Biểu diễn dưới dạng JSON
{
  "customMetadata": [
    {
      object (CustomMetadata)
    }
  ],
  "uri": string,
  "title": string,
  "text": string,
  "fileSearchStore": string,
  "pageNumber": integer,
  "mediaId": string
}

CustomMetadata

Siêu dữ liệu do người dùng cung cấp về GroundingFact.

Trường
key string

Khoá của siêu dữ liệu.

value Union type
Giá trị của siêu dữ liệu. Có thể là một chuỗi, danh sách chuỗi hoặc số. value chỉ có thể là một trong những trạng thái sau:
stringValue string

Không bắt buộc. Giá trị chuỗi của siêu dữ liệu.

stringListValue object (StringList)

Không bắt buộc. Danh sách các giá trị chuỗi cho siêu dữ liệu.

numericValue number

Không bắt buộc. Giá trị bằng số của siêu dữ liệu. Phạm vi dự kiến cho giá trị này phụ thuộc vào key cụ thể được dùng.

Biểu diễn dưới dạng JSON
{
  "key": string,

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

StringList

Danh sách các giá trị chuỗi.

Trường
values[] string

Các giá trị chuỗi của danh sách.

Biểu diễn dưới dạng JSON
{
  "values": [
    string
  ]
}

Maps

Một đoạn neo bám từ Google Maps. Một đoạn Maps tương ứng với một địa điểm duy nhất.

Trường
uri string

URI tham chiếu của địa điểm.

title string

Tiêu đề của địa điểm.

text string

Nội dung mô tả bằng văn bản về câu trả lời cho địa điểm.

placeId string

Mã nhận dạng của địa điểm, ở định dạng places/{placeId}. Người dùng có thể sử dụng mã nhận dạng này để tra cứu địa điểm đó.

placeAnswerSources object (PlaceAnswerSources)

Những nguồn cung cấp câu trả lời về các đặc điểm của một địa điểm cụ thể trong Google Maps.

Biểu diễn dưới dạng JSON
{
  "uri": string,
  "title": string,
  "text": string,
  "placeId": string,
  "placeAnswerSources": {
    object (PlaceAnswerSources)
  }
}

PlaceAnswerSources

Tập hợp các nguồn cung cấp câu trả lời về các đặc điểm của một địa điểm cụ thể trong Google Maps. Mỗi thông báo PlaceAnswerSources tương ứng với một địa điểm cụ thể trên Google Maps. Công cụ Google Maps đã sử dụng những nguồn này để trả lời các câu hỏi về các đặc điểm của địa điểm (ví dụ: "Bar Foo có Wi-Fi không" hoặc "Foo Bar có lối đi cho xe lăn không?"). Hiện tại, chúng tôi chỉ hỗ trợ đoạn trích đánh giá làm nguồn.

Trường
reviewSnippets[] object (ReviewSnippet)

Đoạn trích trong các bài đánh giá được dùng để tạo câu trả lời về các đặc điểm của một địa điểm cụ thể trên Google Maps.

Biểu diễn dưới dạng JSON
{
  "reviewSnippets": [
    {
      object (ReviewSnippet)
    }
  ]
}

ReviewSnippet

Đóng gói một đoạn trích của bài đánh giá người dùng để trả lời một câu hỏi về các tính năng của một địa điểm cụ thể trong Google Maps.

Trường
reviewId string

Mã của đoạn trích thông tin đánh giá.

googleMapsUri string

Đường liên kết tương ứng với bài đánh giá của người dùng trên Google Maps.

title string

Tiêu đề của bài đánh giá.

Biểu diễn dưới dạng JSON
{
  "reviewId": string,
  "googleMapsUri": string,
  "title": string
}

GroundingSupport

Hỗ trợ cơ sở.

Trường
groundingChunkIndices[] integer

Không bắt buộc. Danh sách các chỉ mục (trong "grounding_chunk" trong response.candidate.grounding_metadata) chỉ định các trích dẫn liên kết với câu khẳng định. Ví dụ: [1,3,4] có nghĩa là grounding_chunk[1], grounding_chunk[3], grounding_chunk[4] là nội dung được truy xuất và được cho là thuộc về câu tuyên bố. Nếu phản hồi đang được truyền trực tuyến, thì groundingChunkIndices sẽ đề cập đến các chỉ mục trên tất cả phản hồi. Khách hàng có trách nhiệm tích luỹ các khối cơ sở từ tất cả các phản hồi (trong khi vẫn duy trì cùng một thứ tự).

confidenceScores[] number

Không bắt buộc. Điểm tin cậy của các tài liệu tham khảo hỗ trợ. Dao động từ 0 đến 1. 1 là mức độ tự tin cao nhất. Danh sách này phải có cùng kích thước với groundingChunkIndices.

renderedParts[] integer

Chỉ có đầu ra. Chỉ mục vào trường parts của nội dung đề xuất. Các chỉ mục này chỉ định những phần được kết xuất nào được liên kết với nguồn hỗ trợ này.

segment object (Segment)

Phân đoạn nội dung mà thông tin hỗ trợ này thuộc về.

Biểu diễn dưới dạng JSON
{
  "groundingChunkIndices": [
    integer
  ],
  "confidenceScores": [
    number
  ],
  "renderedParts": [
    integer
  ],
  "segment": {
    object (Segment)
  }
}

Phân đoạn

Phân đoạn nội dung.

Trường
partIndex integer

Chỉ mục của đối tượng Part trong đối tượng Content mẹ.

startIndex integer

Chỉ mục bắt đầu trong Phần đã cho, được đo bằng byte. Độ lệch so với điểm bắt đầu của Phần, bao gồm cả điểm này, bắt đầu từ 0.

endIndex integer

Chỉ mục kết thúc trong Phần đã cho, được đo bằng byte. Độ lệch so với điểm bắt đầu của Phần, không bao gồm, bắt đầu từ 0.

text string

Văn bản tương ứng với đoạn trong câu trả lời.

Biểu diễn dưới dạng JSON
{
  "partIndex": integer,
  "startIndex": integer,
  "endIndex": integer,
  "text": string
}

RetrievalMetadata

Siêu dữ liệu liên quan đến việc truy xuất trong quy trình cơ sở.

Trường
googleSearchDynamicRetrievalScore number

Không bắt buộc. Điểm số cho biết khả năng thông tin từ Google Tìm kiếm có thể giúp trả lời câu lệnh. Điểm số nằm trong khoảng [0, 1], trong đó 0 là ít có khả năng nhất và 1 là có khả năng nhất. Điểm số này chỉ được điền sẵn khi bạn bật tính năng tìm kiếm cơ sở và truy xuất động trên Google. Giá trị này sẽ được so sánh với ngưỡng để xác định xem có kích hoạt tính năng tìm kiếm trên Google hay không.

Biểu diễn dưới dạng JSON
{
  "googleSearchDynamicRetrievalScore": number
}

LogprobsResult

Kết quả Logprobs

Trường
topCandidates[] object (TopCandidates)

Độ dài = tổng số bước giải mã.

chosenCandidates[] object (Candidate)

Độ dài = tổng số bước giải mã. Các đề xuất được chọn có thể nằm hoặc không nằm trong topCandidates.

logProbabilitySum number

Tổng xác suất log cho tất cả các mã thông báo.

Biểu diễn dưới dạng JSON
{
  "topCandidates": [
    {
      object (TopCandidates)
    }
  ],
  "chosenCandidates": [
    {
      object (Candidate)
    }
  ],
  "logProbabilitySum": number
}

TopCandidates

Các ứng viên có xác suất nhật ký cao nhất ở mỗi bước giải mã.

Trường
candidates[] object (Candidate)

Sắp xếp theo xác suất nhật ký theo thứ tự giảm dần.

Biểu diễn dưới dạng JSON
{
  "candidates": [
    {
      object (Candidate)
    }
  ]
}

Ứng viên

Đề xuất cho mã thông báo logprobs và điểm số.

Trường
token string

Giá trị chuỗi mã thông báo của ứng viên.

tokenId integer

Giá trị mã nhận dạng mã thông báo của ứng viên.

logProbability number

Xác suất nhật ký của đề xuất.

Biểu diễn dưới dạng JSON
{
  "token": string,
  "tokenId": integer,
  "logProbability": number
}

UrlContextMetadata

Siêu dữ liệu liên quan đến công cụ truy xuất bối cảnh URL.

Trường
urlMetadata[] object (UrlMetadata)

Danh sách ngữ cảnh URL.

Biểu diễn dưới dạng JSON
{
  "urlMetadata": [
    {
      object (UrlMetadata)
    }
  ]
}

UrlMetadata

Bối cảnh của việc truy xuất một URL duy nhất.

Trường
retrievedUrl string

URL do công cụ truy xuất.

urlRetrievalStatus enum (UrlRetrievalStatus)

Trạng thái truy xuất URL.

Biểu diễn dưới dạng JSON
{
  "retrievedUrl": string,
  "urlRetrievalStatus": enum (UrlRetrievalStatus)
}

UrlRetrievalStatus

Trạng thái truy xuất URL.

Enum
URL_RETRIEVAL_STATUS_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
URL_RETRIEVAL_STATUS_SUCCESS Truy xuất URL thành công.
URL_RETRIEVAL_STATUS_ERROR Không truy xuất được URL do lỗi.
URL_RETRIEVAL_STATUS_PAYWALL Không truy xuất được URL vì nội dung bị tường phí chặn.
URL_RETRIEVAL_STATUS_UNSAFE Không truy xuất được URL vì nội dung không an toàn.

CitationMetadata

Tập hợp các thông tin ghi nhận nguồn cho một nội dung.

Trường
citationSources[] object (CitationSource)

Thông tin trích dẫn nguồn cho một câu trả lời cụ thể.

Biểu diễn dưới dạng JSON
{
  "citationSources": [
    {
      object (CitationSource)
    }
  ]
}

CitationSource

Thông tin trích dẫn về một nguồn cho một phần của câu trả lời cụ thể.

Trường
startIndex integer

Không bắt buộc. Điểm bắt đầu của đoạn phản hồi được phân bổ cho nguồn này.

Chỉ mục cho biết điểm bắt đầu của đoạn, được đo bằng byte.

endIndex integer

Không bắt buộc. Kết thúc phân đoạn được phân bổ, không bao gồm.

uri string

Không bắt buộc. URI được coi là nguồn của một phần văn bản.

license string

Không bắt buộc. Giấy phép cho dự án trên GitHub được ghi nhận là nguồn của phân đoạn.

Bạn phải có thông tin về giấy phép đối với các trích dẫn mã.

Biểu diễn dưới dạng JSON
{
  "startIndex": integer,
  "endIndex": integer,
  "uri": string,
  "license": string
}

HarmCategory

Danh mục của điểm phân loại.

Các danh mục này bao gồm nhiều loại hành vi gây hại mà nhà phát triển có thể muốn điều chỉnh.

Enum
HARM_CATEGORY_UNSPECIFIED Danh mục chưa được chỉ định.
HARM_CATEGORY_DEROGATORY PaLM – Bình luận tiêu cực hoặc gây hại nhắm đến danh tính và/hoặc thuộc tính được bảo vệ.
HARM_CATEGORY_TOXICITY PaLM – Nội dung thô lỗ, bất kính hoặc thô tục.
HARM_CATEGORY_VIOLENCE PaLM – Mô tả các tình huống mô tả hành vi bạo lực đối với một cá nhân hoặc nhóm người, hoặc mô tả chung về nội dung ghê rợn.
HARM_CATEGORY_SEXUAL PaLM – Chứa nội dung đề cập đến hành vi tình dục hoặc nội dung khiêu dâm khác.
HARM_CATEGORY_MEDICAL PaLM – Quảng bá thông tin tư vấn y tế chưa được kiểm chứng.
HARM_CATEGORY_DANGEROUS PaLM – Nội dung nguy hiểm cổ xuý, tạo điều kiện hoặc khuyến khích việc thực hiện hành động gây hại.
HARM_CATEGORY_HARASSMENT Gemini – Nội dung quấy rối.
HARM_CATEGORY_HATE_SPEECH Gemini – Lời nói và nội dung hận thù.
HARM_CATEGORY_SEXUALLY_EXPLICIT Gemini – Nội dung khiêu dâm.
HARM_CATEGORY_DANGEROUS_CONTENT Gemini – Nội dung nguy hiểm.
HARM_CATEGORY_CIVIC_INTEGRITY

Gemini – Nội dung có thể được dùng để gây hại cho sự liêm chính trong hoạt động công dân. KHÔNG DÙNG NỮA: hãy sử dụng enableEnhancedCivicAnswers.

HARM_CATEGORY_JAILBREAK Gemini – Câu lệnh tìm cách né tránh hoặc lách các nguyên tắc an toàn của mô hình (cố gắng vượt qua các hạn chế).

ModalityTokenCount

Biểu thị thông tin về số lượng mã thông báo cho một phương thức duy nhất.

Trường
modality enum (Modality)

Phương thức liên kết với số token này.

tokenCount integer

Số lượng mã thông báo.

Biểu diễn dưới dạng JSON
{
  "modality": enum (Modality),
  "tokenCount": integer
}

Phương thức

Phương thức Nội dung một phần

Enum
MODALITY_UNSPECIFIED Phương thức chưa xác định.
TEXT Văn bản thuần tuý.
IMAGE Hình ảnh.
VIDEO Video.
AUDIO Âm thanh.
DOCUMENT Tài liệu, ví dụ: PDF.

SafetyRating

Mức độ an toàn của một nội dung.

Mức độ an toàn chứa danh mục gây hại và mức độ xác suất gây hại trong danh mục đó cho một nội dung. Nội dung được phân loại để đảm bảo an toàn theo một số danh mục gây hại và xác suất phân loại mức độ gây hại được đưa vào đây.

Trường
category enum (HarmCategory)

Bắt buộc. Danh mục cho điểm xếp hạng này.

probability enum (HarmProbability)

Bắt buộc. Khả năng gây hại của nội dung này.

blocked boolean

Nội dung này có bị chặn do mức phân loại này không?

Biểu diễn dưới dạng JSON
{
  "category": enum (HarmCategory),
  "probability": enum (HarmProbability),
  "blocked": boolean
}

HarmProbability

Xác suất một nội dung gây hại.

Hệ thống phân loại đưa ra xác suất nội dung là không an toàn. Điều này không cho biết mức độ nghiêm trọng của tác hại đối với một nội dung.

Enum
HARM_PROBABILITY_UNSPECIFIED Không xác định được xác suất.
NEGLIGIBLE Nội dung có khả năng không an toàn rất thấp.
LOW Nội dung có ít khả năng không an toàn.
MEDIUM Nội dung có khả năng không an toàn ở mức trung bình.
HIGH Nội dung có khả năng cao là không an toàn.

SafetySetting

Chế độ cài đặt an toàn, ảnh hưởng đến hành vi chặn nội dung không an toàn.

Việc truyền một chế độ cài đặt an toàn cho một danh mục sẽ thay đổi xác suất được phép để chặn nội dung.

Trường
category enum (HarmCategory)

Bắt buộc. Danh mục cho chế độ cài đặt này.

threshold enum (HarmBlockThreshold)

Bắt buộc. Kiểm soát ngưỡng xác suất mà tại đó nội dung gây hại sẽ bị chặn.

Biểu diễn dưới dạng JSON
{
  "category": enum (HarmCategory),
  "threshold": enum (HarmBlockThreshold)
}

HarmBlockThreshold

Chặn ở mức xác suất gây hại đã chỉ định trở lên.

Enum
HARM_BLOCK_THRESHOLD_UNSPECIFIED Ngưỡng chưa được chỉ định.
BLOCK_LOW_AND_ABOVE Chúng tôi sẽ cho phép nội dung có mức độ VI PHẠM KHÔNG ĐÁNG KỂ.
BLOCK_MEDIUM_AND_ABOVE Chúng tôi sẽ cho phép nội dung có mức độ NEGLIGIBLE (KHÔNG ĐÁNG KỂ) và LOW (THẤP).
BLOCK_ONLY_HIGH Chúng tôi sẽ cho phép nội dung có mức độ NEGLIGIBLE (KHÔNG ĐÁNG KỂ), LOW (THẤP) và MEDIUM (TRUNG BÌNH).
BLOCK_NONE Tất cả nội dung sẽ được cho phép.
OFF Tắt bộ lọc an toàn.

ServiceTier

Cấp dịch vụ của yêu cầu.

Enum
unspecified Cấp dịch vụ mặc định là cấp tiêu chuẩn.
standard Cấp dịch vụ tiêu chuẩn.
flex Cấp dịch vụ Flex.
priority Cấp dịch vụ ưu tiên.

Nội dung

Kiểu dữ liệu có cấu trúc cơ bản chứa nội dung nhiều phần của một thông báo.

Content bao gồm một trường role chỉ định nhà sản xuất của Content và một trường parts chứa dữ liệu gồm nhiều phần chứa nội dung của lượt tin nhắn.

Trường
parts[] object (Part)

Đã đặt hàng Parts tạo thành một thông báo duy nhất. Các phần có thể có nhiều loại MIME.

role string

Không bắt buộc. Nhà sản xuất nội dung. Phải là "user" hoặc "model".

Hữu ích khi thiết lập cho các cuộc trò chuyện nhiều lượt, nếu không, bạn có thể để trống hoặc không đặt.

Biểu diễn dưới dạng JSON
{
  "parts": [
    {
      object (Part)
    }
  ],
  "role": string
}

Phần

Một kiểu dữ liệu chứa nội dung nghe nhìn là một phần của thông báo Content nhiều phần.

Part bao gồm dữ liệu có kiểu dữ liệu được liên kết. Part chỉ có thể chứa một trong các loại được chấp nhận trong Part.data.

Part phải có một loại MIME IANA cố định xác định loại và loại phụ của nội dung nghe nhìn nếu trường inlineData chứa các byte thô.

Trường
thought boolean

Không bắt buộc. Cho biết liệu phần này có được mô hình suy nghĩ hay không.

thoughtSignature string (bytes format)

Không bắt buộc. Một chữ ký mờ cho suy nghĩ để có thể dùng lại trong các yêu cầu tiếp theo.

Một chuỗi được mã hoá base64.

partMetadata object (Struct format)

Siêu dữ liệu tuỳ chỉnh được liên kết với Phần. Những tác nhân sử dụng genai.Part làm nội dung biểu thị có thể cần theo dõi thông tin bổ sung. Ví dụ: đó có thể là tên của một tệp/nguồn mà Phần bắt nguồn từ đó hoặc là cách để ghép nhiều luồng Phần.

mediaResolution object (MediaResolution)

Không bắt buộc. Độ phân giải nội dung nghe nhìn cho nội dung nghe nhìn đầu vào.

mediaProcessing enum (MediaProcessing)

Không bắt buộc. Cách mô hình xử lý nội dung nghe nhìn của phần này để hiểu. Chỉ có ý nghĩa đối với các phần video (inlineData hoặc fileData có mime video). Các phần không phải video sẽ bỏ qua trường này.

data Union type
data chỉ có thể là một trong những trạng thái sau:
text string

Văn bản nội dòng.

inlineData object (Blob)

Số byte của nội dung nghe nhìn cùng dòng.

functionCall object (FunctionCall)

Một FunctionCall được dự đoán do mô hình trả về, chứa một chuỗi đại diện cho FunctionDeclaration.name cùng với các đối số và giá trị của chúng.

functionResponse object (FunctionResponse)

Đầu ra kết quả của một FunctionCall chứa một chuỗi đại diện cho FunctionDeclaration.name và một đối tượng JSON có cấu trúc chứa mọi đầu ra từ hàm được dùng làm ngữ cảnh cho mô hình.

fileData object (FileData)

Dữ liệu dựa trên URI.

executableCode object (ExecutableCode)

Mã do mô hình tạo ra và được dùng để thực thi.

codeExecutionResult object (CodeExecutionResult)

Kết quả của việc thực thi ExecutableCode.

toolCall object (ToolCall)

Lệnh gọi công cụ phía máy chủ. Trường này được điền khi mô hình dự đoán một lệnh gọi công cụ cần được thực thi trên máy chủ. Ứng dụng dự kiến sẽ phản hồi thông báo này cho API.

toolResponse object (ToolResponse)

Đầu ra từ quá trình thực thi ToolCall phía máy chủ. Trường này do ứng dụng điền sẵn bằng kết quả thực thi ToolCall tương ứng.

metadata Union type
Kiểm soát quá trình xử lý trước dữ liệu bổ sung. metadata chỉ có thể là một trong những trạng thái sau:
videoMetadata object (VideoMetadata)

Không bắt buộc. Siêu dữ liệu của video. Bạn chỉ nên chỉ định siêu dữ liệu trong khi dữ liệu video được trình bày trong inlineData hoặc fileData.

Biểu diễn dưới dạng 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

Số byte thô của nội dung nghe nhìn.

Bạn không nên gửi văn bản dưới dạng byte thô, hãy sử dụng trường "text".

Trường
mimeType string

Loại MIME tiêu chuẩn IANA của dữ liệu nguồn. Ví dụ về các loại được hỗ trợ: – Hình ảnh: image/png, image/jpeg, image/jpg, image/webp, image/heic, image/heif, image/gif, image/avif – Âm thanh: audio/*, video/audio/s16le, video/audio/wav – Video: video/* – Văn bản: 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 – Ứng dụng: application/x-javascript, application/x-typescript, application/x-python-code, application/json, application/x-ipynb+json, application/rtf, application/pdf Để biết thêm thông tin, hãy xem phần Các định dạng tệp được hỗ trợ. //

data string (bytes format)

Byte thô cho các định dạng nội dung nghe nhìn.

Một chuỗi được mã hoá base64.

Biểu diễn dưới dạng JSON
{
  "mimeType": string,
  "data": string
}

FunctionCall

Một FunctionCall được dự đoán do mô hình trả về, chứa một chuỗi đại diện cho FunctionDeclaration.name cùng với các đối số và giá trị của chúng.

Trường
id string

Không bắt buộc. Giá trị nhận dạng duy nhất của lệnh gọi hàm. Nếu được điền sẵn, ứng dụng sẽ thực thi functionCall và trả về phản hồi có id phù hợp.

name string

Bắt buộc. Tên của hàm cần gọi. Phải là a-z, A-Z, 0-9 hoặc chứa dấu gạch dưới và dấu gạch ngang, với độ dài tối đa là 128.

args object (Struct format)

Không bắt buộc. Các tham số và giá trị hàm ở định dạng đối tượng JSON.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "name": string,
  "args": {
    object
  }
}

FunctionResponse

Kết quả đầu ra từ một FunctionCall chứa một chuỗi đại diện cho FunctionDeclaration.name và một đối tượng JSON có cấu trúc chứa mọi đầu ra từ hàm được dùng làm ngữ cảnh cho mô hình. Thao tác này phải chứa kết quả của FunctionCall được thực hiện dựa trên dự đoán của mô hình.

Trường
id string

Không bắt buộc. Giá trị nhận dạng của lệnh gọi hàm mà phản hồi này dành cho. Do ứng dụng điền sẵn để khớp với lệnh gọi hàm id tương ứng.

name string

Bắt buộc. Tên của hàm cần gọi. Phải là a-z, A-Z, 0-9 hoặc chứa dấu gạch dưới và dấu gạch ngang, với độ dài tối đa là 128.

response object (Struct format)

Bắt buộc. Phản hồi của hàm ở định dạng đối tượng JSON. Người gọi có thể sử dụng bất kỳ khoá nào mà họ chọn phù hợp với cú pháp của hàm để trả về đầu ra của hàm, chẳng hạn như "output", "result", v.v. Cụ thể, nếu lệnh gọi hàm không thực thi được, thì phản hồi có thể có khoá "error" để trả về thông tin chi tiết về lỗi cho mô hình.

Bạn có thể thêm nội dung đa phương tiện bằng cách sử dụng một đối tượng phụ chứa một khoá "$ref" duy nhất có giá trị là inlineData.display_name của một FunctionResponsePart chứa nội dung đa phương tiện. Hãy xem tại https://ai.google.dev/gemini-api/docs/function-calling#multimodal.

parts[] object (FunctionResponsePart)

Không bắt buộc. Parts được sắp xếp tạo thành một phản hồi của hàm. Các phần có thể có nhiều loại MIME của IANA.

willContinue boolean

Không bắt buộc. Báo hiệu rằng lệnh gọi hàm tiếp tục và nhiều phản hồi sẽ được trả về, biến lệnh gọi hàm thành một trình tạo. Chỉ áp dụng cho các lệnh gọi hàm NON_BLOCKING, nếu không thì sẽ bị bỏ qua. Nếu bạn đặt thành false, các câu trả lời trong tương lai sẽ không được xem xét. Bạn có thể trả về response trống bằng willContinue=False để báo hiệu rằng lệnh gọi hàm đã hoàn tất. Điều này vẫn có thể kích hoạt quá trình tạo mô hình. Để tránh kích hoạt quá trình tạo và hoàn tất lệnh gọi hàm, hãy đặt thêm scheduling thành SILENT.

scheduling enum (Scheduling)

Không bắt buộc. Chỉ định cách lên lịch phản hồi trong cuộc trò chuyện. Chỉ áp dụng cho các lệnh gọi hàm NON_BLOCKING, nếu không, lệnh gọi này sẽ bị bỏ qua. Giá trị mặc định là WHEN_IDLE.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "name": string,
  "response": {
    object
  },
  "parts": [
    {
      object (FunctionResponsePart)
    }
  ],
  "willContinue": boolean,
  "scheduling": enum (Scheduling)
}

FunctionResponsePart

Một kiểu dữ liệu chứa nội dung nghe nhìn là một phần của thông báo FunctionResponse.

FunctionResponsePart bao gồm dữ liệu có kiểu dữ liệu được liên kết. FunctionResponsePart chỉ có thể chứa một trong các loại được chấp nhận trong FunctionResponsePart.data.

FunctionResponsePart phải có một loại MIME IANA cố định để xác định loại và loại phụ của nội dung nghe nhìn nếu trường inlineData được điền bằng các byte thô.

Trường
data Union type
Dữ liệu của phần phản hồi hàm. data chỉ có thể là một trong những trạng thái sau:
inlineData object (FunctionResponseBlob)

Số byte của nội dung nghe nhìn cùng dòng.

Biểu diễn dưới dạng JSON
{

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

FunctionResponseBlob

Các byte thô của nội dung nghe nhìn cho phản hồi của hàm.

Không được gửi văn bản dưới dạng byte thô, hãy sử dụng trường "FunctionResponse.response".

Trường
mimeType string

Loại MIME tiêu chuẩn IANA của dữ liệu nguồn. Ví dụ: - image/png - image/jpeg Nếu bạn cung cấp một loại MIME không được hỗ trợ, thì sẽ có lỗi trả về. Để biết danh sách đầy đủ các loại được hỗ trợ, hãy xem bài viết Các định dạng tệp được hỗ trợ.

data string (bytes format)

Byte thô cho các định dạng nội dung nghe nhìn.

Một chuỗi được mã hoá base64.

Biểu diễn dưới dạng JSON
{
  "mimeType": string,
  "data": string
}

Lập lịch

Nêu rõ cách lên lịch cho câu trả lời trong cuộc trò chuyện.

Enum
SCHEDULING_UNSPECIFIED Giá trị này không được dùng.
SILENT Chỉ thêm kết quả vào bối cảnh cuộc trò chuyện, không làm gián đoạn hoặc kích hoạt quá trình tạo.
WHEN_IDLE Thêm kết quả vào ngữ cảnh cuộc trò chuyện và đưa ra câu lệnh để tạo đầu ra mà không làm gián đoạn quá trình tạo đang diễn ra.
INTERRUPT Thêm kết quả vào ngữ cảnh cuộc trò chuyện, gián đoạn quá trình tạo đang diễn ra và nhắc tạo đầu ra.

FileData

Dữ liệu dựa trên URI.

Trường
mimeType string

Không bắt buộc. Loại MIME tiêu chuẩn IANA của dữ liệu nguồn.

fileUri string

Bắt buộc. URI.

Biểu diễn dưới dạng JSON
{
  "mimeType": string,
  "fileUri": string
}

ExecutableCode

Mã do mô hình tạo ra nhằm mục đích thực thi và kết quả được trả về cho mô hình.

Chỉ được tạo khi sử dụng công cụ CodeExecution, trong đó mã sẽ tự động được thực thi và CodeExecutionResult tương ứng cũng sẽ được tạo.

Trường
id string

Không bắt buộc. Giá trị nhận dạng duy nhất của phần ExecutableCode. Máy chủ trả về CodeExecutionResultid trùng khớp.

language enum (Language)

Bắt buộc. Ngôn ngữ lập trình của code.

code string

Bắt buộc. Mã cần thực thi.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "language": enum (Language),
  "code": string
}

Ngôn ngữ

Ngôn ngữ lập trình được hỗ trợ cho mã được tạo.

Enum
LANGUAGE_UNSPECIFIED Ngôn ngữ không xác định. Bạn không nên sử dụng giá trị này.
PYTHON Python >= 3.10, có sẵn numpy và simpy. Python là ngôn ngữ mặc định.

CodeExecutionResult

Kết quả của việc thực thi ExecutableCode.

Chỉ được tạo khi bạn dùng công cụ CodeExecution.

Trường
id string

Không bắt buộc. Giá trị nhận dạng của phần ExecutableCode mà kết quả này dành cho. Chỉ được điền sẵn nếu ExecutableCode tương ứng có một mã nhận dạng.

outcome enum (Outcome)

Bắt buộc. Kết quả của quá trình thực thi mã.

output string

Không bắt buộc. Chứa stdout khi quá trình thực thi mã thành công, stderr hoặc nội dung mô tả khác nếu không.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "outcome": enum (Outcome),
  "output": string
}

Kết quả

Liệt kê các kết quả có thể xảy ra khi thực thi mã.

Enum
OUTCOME_UNSPECIFIED Trạng thái không xác định. Bạn không nên sử dụng giá trị này.
OUTCOME_OK Đã thực thi mã thành công. output chứa stdout (nếu có).
OUTCOME_FAILED Không thực thi được mã. output chứa stderr và stdout (nếu có).
OUTCOME_DEADLINE_EXCEEDED Việc thực thi mã diễn ra quá lâu và đã bị huỷ. Có thể có hoặc không có output một phần.

ToolCall

Một ToolCall phía máy chủ được dự đoán do mô hình trả về. Thông báo này chứa thông tin về một công cụ mà mô hình muốn gọi. Ứng dụng KHÔNG được phép thực thi ToolCall này. Thay vào đó, ứng dụng khách nên truyền ToolCall này trở lại API trong lượt tiếp theo trong thông báo Content, cùng với ToolResponse tương ứng.

Trường
id string

Không bắt buộc. Giá trị nhận dạng duy nhất của lệnh gọi công cụ. Máy chủ trả về phản hồi của công cụ kèm theo id phù hợp.

toolName string

Không bắt buộc. Tên của công cụ đã được gọi.

toolType enum (ToolType)

Bắt buộc. Loại công cụ được gọi.

args object (Struct format)

Không bắt buộc. Đối số gọi công cụ. Ví dụ: {"arg1" : "value1", "arg2" : "value2" , ...}

Biểu diễn dưới dạng JSON
{
  "id": string,
  "toolName": string,
  "toolType": enum (ToolType),
  "args": {
    object
  }
}

ToolType

Loại công cụ trong lệnh gọi hàm.

Enum
TOOL_TYPE_UNSPECIFIED Loại công cụ chưa được chỉ định.
GOOGLE_SEARCH_WEB Công cụ tìm kiếm của Google, maps thành Tool.google_search.search_types.web_search.
GOOGLE_SEARCH_IMAGE Công cụ tìm kiếm hình ảnh, ánh xạ đến Tool.google_search.search_types.image_search.
URL_CONTEXT Công cụ theo bối cảnh URL, liên kết đến Tool.url_context.
GOOGLE_MAPS Công cụ Google Maps, maps thành Tool.google_maps.

ToolResponse

Đầu ra từ quá trình thực thi ToolCall phía máy chủ. Thông báo này chứa kết quả của một lệnh gọi công cụ do ToolCall khởi tạo từ mô hình. Ứng dụng khách sẽ truyền ToolResponse này trở lại API trong lượt tiếp theo trong thông báo Content, cùng với ToolCall tương ứng.

Trường
id string

Không bắt buộc. Giá trị nhận dạng của lệnh gọi công cụ mà phản hồi này dành cho.

toolType enum (ToolType)

Bắt buộc. Loại công cụ đã được gọi, khớp với toolType trong ToolCall tương ứng.

response object (Struct format)

Không bắt buộc. Câu trả lời của công cụ.

Biểu diễn dưới dạng JSON
{
  "id": string,
  "toolType": enum (ToolType),
  "response": {
    object
  }
}

VideoMetadata

Không dùng nữa: Thay vào đó, hãy sử dụng GenerateContentRequest.processing_options. Siêu dữ liệu mô tả nội dung video đầu vào.

Trường
startOffset string (Duration format)

Không bắt buộc. Độ lệch bắt đầu của video.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân và kết thúc bằng "s". Ví dụ: "3.5s".

endOffset string (Duration format)

Không bắt buộc. Độ lệch cuối của video.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân và kết thúc bằng "s". Ví dụ: "3.5s".

fps number

Không bắt buộc. Tốc độ khung hình của video được gửi đến mô hình. Nếu bạn không chỉ định, giá trị mặc định sẽ là 1.0. Phạm vi fps là (0.0, 24.0].

Biểu diễn dưới dạng JSON
{
  "startOffset": string,
  "endOffset": string,
  "fps": number
}

MediaResolution

Độ phân giải của nội dung nghe nhìn để mã hoá.

Trường
value Union type
Cấp độ phân giải của nội dung nghe nhìn. value chỉ có thể là một trong những trạng thái sau:
level enum (Level)

Chất lượng mã hoá được dùng cho một nội dung nghe nhìn nhất định. để được hỗ trợ về Gemini API .

Biểu diễn dưới dạng JSON
{

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

Cấp độ

Cấp độ phân giải của nội dung nghe nhìn.

Enum
MEDIA_RESOLUTION_UNSPECIFIED Chưa đặt độ phân giải cho nội dung nghe nhìn.
MEDIA_RESOLUTION_LOW Độ phân giải của nội dung nghe nhìn được đặt ở mức thấp.
MEDIA_RESOLUTION_MEDIUM Độ phân giải của nội dung nghe nhìn được đặt thành trung bình.
MEDIA_RESOLUTION_HIGH Độ phân giải của nội dung nghe nhìn được đặt thành cao.
MEDIA_RESOLUTION_ULTRA_HIGH Độ phân giải của nội dung nghe nhìn được đặt ở mức siêu cao.

MediaProcessing

Cách mô hình xử lý nội dung nghe nhìn đầu vào để hiểu.

Enum
MEDIA_PROCESSING_UNSPECIFIED Mặc định. Sử dụng quy trình xử lý dành riêng cho từng mô hình (3.5 Pro+ -> AGENTIC, các mô hình cũ hơn -> STATIC).
STATIC Trích xuất khung hình với tốc độ cố định. Tất cả các khung hình đều được đặt trong bối cảnh.
AGENTIC Điều hướng động dựa trên mô hình. Bạn nên dùng chế độ này cho hầu hết các trường hợp sử dụng.

Môi trường

Môi trường thực thi cho một tác nhân.

Trường
id string

Bắt buộc. Chỉ có đầu ra. Mã nhận dạng của môi trường.

sources[] object (Source)

Các nguồn sẽ được gắn vào môi trường.

created string

Chỉ có đầu ra. Thời gian tạo môi trường ở định dạng ISO 8601 (YYYY-MM-DDThh:mm:ssZ).

updated string

Chỉ có đầu ra. Thời gian cập nhật môi trường lần gần đây nhất ở định dạng ISO 8601 (YYYY-MM-DDThh:mm:ssZ).

lastAccessed string

Chỉ có đầu ra. Thời gian truy cập lần gần đây nhất vào môi trường ở định dạng ISO 8601 (YYYY-MM-DDThh:mm:ssZ).

status enum (Status)

Chỉ có đầu ra. Trạng thái của vùng chứa môi trường.

fileCount string (int64 format)

Chỉ có đầu ra. Số lượng tệp trong môi trường, chỉ có đầu ra.

sizeBytes string (int64 format)

Chỉ có đầu ra. Tổng kích thước của các tệp môi trường tính bằng byte, chỉ có đầu ra.

network Union type
Cấu hình mạng cho môi trường. network chỉ có thể là một trong những trạng thái sau:
networkAllowlist object (EnvironmentNetworkEgressAllowlist)

Chỉ cho phép các miền cụ thể.

networkMode enum (NetworkMode)

Chế độ truyền dữ liệu ra khỏi mạng.

Biểu diễn dưới dạng 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
}

Trạng thái

Trạng thái của môi trường.

Enum
STATUS_UNSPECIFIED
ACTIVE
EXPIRED

NetworkMode

Chế độ truyền dữ liệu ra mạng cho các cấu hình không có trong danh sách cho phép.

Enum
NETWORK_MODE_UNSPECIFIED Giá trị mặc định. Không dùng đến.
DISABLED Tất cả lưu lượng truy cập ra khỏi mạng đều bị chặn.

Lược đồ

Đối tượng Schema cho phép xác định các loại dữ liệu đầu vào và đầu ra. Các loại này có thể là đối tượng, nhưng cũng có thể là các kiểu dữ liệu nguyên thuỷ và mảng. Đại diện cho một tập hợp con được chọn của đối tượng giản đồ OpenAPI 3.0.

Trường
type enum (Type)

Bắt buộc. Loại dữ liệu.

format string

Không bắt buộc. Định dạng của dữ liệu. Bạn có thể dùng bất kỳ giá trị nào, nhưng hầu hết các giá trị đều không kích hoạt chức năng đặc biệt nào.

title string

Không bắt buộc. Tiêu đề của giản đồ.

description string

Không bắt buộc. Nội dung mô tả ngắn gọn về tham số. Phần này có thể chứa ví dụ về cách sử dụng. Bạn có thể định dạng nội dung mô tả tham số dưới dạng Markdown.

nullable boolean

Không bắt buộc. Cho biết liệu giá trị có thể rỗng hay không.

enum[] string

Không bắt buộc. Các giá trị có thể có của phần tử Type.STRING có định dạng enum. Ví dụ: chúng ta có thể xác định một Enum Direction như sau: {type:STRING, format:enum, enum:["EAST", NORTH", "SOUTH", "WEST"]}

maxItems string (int64 format)

Không bắt buộc. Số lượng phần tử tối đa cho Type.ARRAY.

minItems string (int64 format)

Không bắt buộc. Số lượng phần tử tối thiểu cho Type.ARRAY.

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

Không bắt buộc. Thuộc tính của Type.OBJECT.

Một đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

required[] string

Không bắt buộc. Thuộc tính bắt buộc của Type.OBJECT.

minProperties string (int64 format)

Không bắt buộc. Số lượng tối thiểu của các thuộc tính cho Type.OBJECT.

maxProperties string (int64 format)

Không bắt buộc. Số lượng thuộc tính tối đa cho Type.OBJECT.

minLength string (int64 format)

Không bắt buộc. CÁC TRƯỜNG GIẢN ĐỒ CHO LOẠI CHUỖI Độ dài tối thiểu của Type.STRING

maxLength string (int64 format)

Không bắt buộc. Độ dài tối đa của Type.STRING

pattern string

Không bắt buộc. Mẫu của Type.STRING để hạn chế một chuỗi thành biểu thức chính quy.

example value (Value format)

Không bắt buộc. Ví dụ về đối tượng. Chỉ được điền sẵn khi đối tượng là gốc.

anyOf[] object (Schema)

Không bắt buộc. Giá trị phải được xác thực dựa trên bất kỳ (một hoặc nhiều) lược đồ con nào trong danh sách.

propertyOrdering[] string

Không bắt buộc. Thứ tự của các thuộc tính. Không phải là một trường tiêu chuẩn trong thông số kỹ thuật API mở. Dùng để xác định thứ tự của các thuộc tính trong phản hồi.

default value (Value format)

Không bắt buộc. Giá trị mặc định của trường. Theo JSON Schema, trường này dành cho các trình tạo tài liệu và không ảnh hưởng đến quá trình xác thực. Do đó, trường này được đưa vào đây và bị bỏ qua để những nhà phát triển gửi giản đồ có trường default không gặp phải lỗi trường không xác định.

items object (Schema)

Không bắt buộc. Giản đồ của các phần tử thuộc Type.ARRAY.

minimum number

Không bắt buộc. CÁC TRƯỜNG LƯỢC ĐỒ CHO LOẠI SỐ NGUYÊN và SỐ Giá trị tối thiểu của Loại.SỐ NGUYÊN và Loại.SỐ

maximum number

Không bắt buộc. Giá trị tối đa của Type.INTEGER và Type.NUMBER

Biểu diễn dưới dạng 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
}

Loại

Loại chứa danh sách các kiểu dữ liệu OpenAPI theo định nghĩa của https://spec.openapis.org/oas/v3.0.3#data-types

Enum
TYPE_UNSPECIFIED Không được chỉ định, không nên sử dụng.
STRING Loại chuỗi.
NUMBER Loại số.
INTEGER Loại số nguyên.
BOOLEAN Loại boolean.
ARRAY Loại mảng.
OBJECT Loại đối tượng.
NULL Loại giá trị rỗng.

Công cụ

Thông tin chi tiết về công cụ mà mô hình có thể dùng để tạo câu trả lời.

Tool là một đoạn mã cho phép hệ thống tương tác với các hệ thống bên ngoài để thực hiện một hành động hoặc một nhóm hành động nằm ngoài kiến thức và phạm vi của mô hình.

Mã nhận dạng tiếp theo: 17

Trường
functionDeclarations[] object (FunctionDeclaration)

Không bắt buộc. Danh sách FunctionDeclarations có sẵn cho mô hình có thể dùng để gọi hàm.

Mô hình hoặc hệ thống không thực hiện chức năng này. Thay vào đó, hàm đã xác định có thể được trả về dưới dạng FunctionCall với các đối số cho phía máy khách để thực thi. Mô hình có thể quyết định gọi một nhóm nhỏ các hàm này bằng cách điền sẵn FunctionCall trong phản hồi. Lượt trò chuyện tiếp theo có thể chứa một FunctionResponse với ngữ cảnh tạo "hàm" Content.role cho lượt tiếp theo của mô hình.

googleSearchRetrieval object (GoogleSearchRetrieval)

Không bắt buộc. Công cụ truy xuất do Google Tìm kiếm cung cấp.

codeExecution object (CodeExecution)

Không bắt buộc. Cho phép mô hình thực thi mã trong quá trình tạo.

computerUse object (ComputerUse)

Không bắt buộc. Công cụ hỗ trợ mô hình tương tác trực tiếp với máy tính. Nếu được bật, tính năng này sẽ tự động điền các Khai báo hàm cụ thể về việc sử dụng máy tính.

urlContext object (UrlContext)

Không bắt buộc. Công cụ hỗ trợ truy xuất bối cảnh URL.

mcpServers[] object (McpServer)

Không bắt buộc. Các máy chủ MCP cần kết nối.

googleMaps object (GoogleMaps)

Không bắt buộc. Công cụ cho phép căn cứ câu trả lời của mô hình vào ngữ cảnh không gian địa lý liên quan đến cụm từ tìm kiếm của người dùng.

Biểu diễn dưới dạng 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

Biểu diễn có cấu trúc của một khai báo hàm theo định nghĩa của quy cách OpenAPI 3.03. Tên hàm và các tham số có trong khai báo này. FunctionDeclaration này là một bản trình bày của một khối mã có thể được mô hình dùng làm Tool và được ứng dụng thực thi.

Trường
name string

Bắt buộc. Tên của hàm. Phải là a-z, A-Z, 0-9 hoặc chứa dấu gạch dưới, dấu hai chấm, dấu chấm và dấu gạch ngang, với độ dài tối đa là 128.

description string

Bắt buộc. Nội dung mô tả ngắn gọn về chức năng.

behavior enum (Behavior)

Không bắt buộc. Chỉ định hàm Behavior. Hiện chỉ được phương thức BidiGenerateContent hỗ trợ.

parameters object (Schema)

Không bắt buộc. Mô tả các tham số cho hàm này. Phản ánh Khoá chuỗi Đối tượng tham số Open API 3.03: tên của tham số. Tên tham số có phân biệt chữ hoa chữ thường. Giá trị giản đồ: Giản đồ xác định loại được dùng cho tham số.

parametersJsonSchema value (Value format)

Không bắt buộc. Mô tả các tham số cho hàm ở định dạng Giản đồ JSON. Lược đồ phải mô tả một đối tượng trong đó các thuộc tính là tham số cho hàm. Ví dụ:

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

Trường này mang tính loại trừ lẫn nhau với parameters.

response object (Schema)

Không bắt buộc. Mô tả đầu ra của hàm này ở định dạng JSON Schema. Phản ánh Đối tượng phản hồi Open API 3.03. Lược đồ xác định loại được dùng cho giá trị phản hồi của hàm.

responseJsonSchema value (Value format)

Không bắt buộc. Mô tả đầu ra của hàm này ở định dạng JSON Schema. Giá trị do giản đồ chỉ định là giá trị phản hồi của hàm.

Trường này mang tính loại trừ lẫn nhau với response.

Biểu diễn dưới dạng JSON
{
  "name": string,
  "description": string,
  "behavior": enum (Behavior),
  "parameters": {
    object (Schema)
  },
  "parametersJsonSchema": value,
  "response": {
    object (Schema)
  },
  "responseJsonSchema": value
}

Hành vi

Xác định hành vi của hàm. Giá trị mặc định là BLOCKING.

Enum
UNSPECIFIED Giá trị này không được dùng.
BLOCKING Nếu được đặt, hệ thống sẽ đợi nhận được phản hồi của hàm trước khi tiếp tục cuộc trò chuyện.
NON_BLOCKING Nếu được đặt, hệ thống sẽ không đợi nhận được phản hồi của hàm. Thay vào đó, nó sẽ cố gắng xử lý các phản hồi của hàm khi chúng có sẵn, đồng thời duy trì cuộc trò chuyện giữa người dùng và mô hình.

GoogleSearchRetrieval

Công cụ do Google cung cấp để truy xuất dữ liệu công khai trên web nhằm đưa ra thông tin cơ sở.

Trường
dynamicRetrievalConfig object (DynamicRetrievalConfig)

Chỉ định cấu hình truy xuất linh động cho nguồn đã cho.

Biểu diễn dưới dạng JSON
{
  "dynamicRetrievalConfig": {
    object (DynamicRetrievalConfig)
  }
}

DynamicRetrievalConfig

Mô tả các lựa chọn để tuỳ chỉnh việc truy xuất động.

Trường
mode enum (Mode)

Chế độ của trình dự đoán sẽ được dùng trong quá trình truy xuất linh động.

dynamicThreshold number

Ngưỡng được dùng trong quá trình truy xuất động. Nếu bạn không đặt, hệ thống sẽ sử dụng giá trị mặc định.

Biểu diễn dưới dạng JSON
{
  "mode": enum (Mode),
  "dynamicThreshold": number
}

Chế độ

Chế độ của trình dự đoán sẽ được dùng trong quá trình truy xuất linh động.

Enum
MODE_UNSPECIFIED Luôn kích hoạt quá trình truy xuất.
MODE_DYNAMIC Chỉ chạy quy trình truy xuất khi hệ thống quyết định rằng quy trình này là cần thiết.

CodeExecution

Loại này không có trường nào.

Công cụ thực thi mã do mô hình tạo và tự động trả về kết quả cho mô hình.

Xem thêm ExecutableCodeCodeExecutionResult. Các chỉ số này chỉ được tạo khi bạn sử dụng công cụ này.

GoogleSearch

Loại công cụ Google Tìm kiếm. Công cụ hỗ trợ Google Tìm kiếm trong Model. Do Google cung cấp.

Trường
timeRangeFilter object (Interval)

Không bắt buộc. Lọc kết quả tìm kiếm theo một khoảng thời gian cụ thể. Nếu đặt thời gian bắt đầu, khách hàng phải đặt thời gian kết thúc (và ngược lại).

searchTypes object (SearchTypes)

Không bắt buộc. Tập hợp các loại tìm kiếm cần bật. Nếu bạn không đặt chính sách này, thì tính năng tìm kiếm trên web sẽ được bật theo mặc định.

Biểu diễn dưới dạng JSON
{
  "timeRangeFilter": {
    object (Interval)
  },
  "searchTypes": {
    object (SearchTypes)
  }
}

Khoảng thời gian

Biểu thị một khoảng thời gian, được mã hoá dưới dạng thời gian bắt đầu (bao gồm) của một Dấu thời gian và thời gian kết thúc (không bao gồm) của Dấu thời gian.

Giá trị bắt đầu phải nhỏ hơn hoặc bằng giá trị kết thúc. Khi thời gian bắt đầu bằng thời gian kết thúc, khoảng thời gian sẽ trống (không khớp với thời gian nào). Khi cả thời gian bắt đầu và kết thúc đều không được chỉ định, khoảng thời gian sẽ khớp với mọi thời điểm.

Trường
startTime string (Timestamp format)

Không bắt buộc. Điểm bắt đầu của khoảng thời gian (bao gồm cả điểm này).

Nếu được chỉ định, Dấu thời gian khớp với khoảng thời gian này phải có cùng hoặc sau thời gian bắt đầu.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

endTime string (Timestamp format)

Không bắt buộc. Điểm kết thúc của khoảng thời gian (không bao gồm).

Nếu được chỉ định, Dấu thời gian khớp với khoảng thời gian này sẽ phải nằm trước thời gian kết thúc.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

Biểu diễn dưới dạng JSON
{
  "startTime": string,
  "endTime": string
}

SearchTypes

Các loại tìm kiếm có thể được bật trên công cụ Google Tìm kiếm.

Trường
Biểu diễn dưới dạng JSON
{
  "webSearch": {
    object (WebSearch)
  },
  "imageSearch": {
    object (ImageSearch)
  }
}

WebSearch

Loại này không có trường nào.

Tìm kiếm thông tin trên web theo cách thông thường để làm cơ sở và các cấu hình liên quan.

ImageSearch

Loại này không có trường nào.

Tìm kiếm hình ảnh để thiết lập cơ sở và các cấu hình liên quan.

ComputerUse

Loại công cụ Sử dụng máy tính.

Trường
environment enum (Environment)

Bắt buộc. Môi trường đang hoạt động.

excludedPredefinedFunctions[] string

Không bắt buộc. Theo mặc định, các hàm được xác định trước sẽ được đưa vào lệnh gọi mô hình cuối cùng. Bạn có thể loại trừ một số đối tượng một cách rõ ràng để không được tự động thêm. Việc này có thể phục vụ 2 mục đích: 1. Sử dụng không gian hành động bị hạn chế hơn / khác. 2. Cải thiện định nghĩa / hướng dẫn của các hàm được xác định trước.

enablePromptInjectionDetection boolean

Không bắt buộc. Có bật chế độ kiểm tra phát hiện tiêm câu lệnh (prompt injection) trên yêu cầu sử dụng máy tính hay không.

disabledSafetyPolicies[] enum (SafetyPolicy)

Không bắt buộc. Tắt các chính sách an toàn khi sử dụng máy tính.

Biểu diễn dưới dạng JSON
{
  "environment": enum (Environment),
  "excludedPredefinedFunctions": [
    string
  ],
  "enablePromptInjectionDetection": boolean,
  "disabledSafetyPolicies": [
    enum (SafetyPolicy)
  ]
}

Môi trường

Biểu thị môi trường đang hoạt động, chẳng hạn như trình duyệt web.

Enum
ENVIRONMENT_UNSPECIFIED Giá trị mặc định là trình duyệt.
ENVIRONMENT_BROWSER Hoạt động trong trình duyệt web.
ENVIRONMENT_MOBILE Hoạt động trong môi trường di động.
ENVIRONMENT_DESKTOP Hoạt động trong môi trường máy tính.

SafetyPolicy

Các chính sách an toàn được xác định trước để sử dụng máy tính.

Enum
SAFETY_POLICY_UNSPECIFIED Chưa chỉ định chính sách an toàn.
FINANCIAL_TRANSACTIONS Chính sách an toàn cho giao dịch tài chính.
SENSITIVE_DATA_MODIFICATION Chính sách an toàn đối với việc sửa đổi dữ liệu nhạy cảm.
COMMUNICATION_TOOL Chính sách an toàn cho các công cụ giao tiếp (ví dụ: Gmail, Chat, Meet).
ACCOUNT_CREATION Chính sách an toàn đối với việc tạo tài khoản.
DATA_MODIFICATION Chính sách an toàn đối với việc sửa đổi dữ liệu.
LEGAL_TERMS_AND_AGREEMENTS Chính sách an toàn đối với các điều khoản pháp lý và thoả thuận.

UrlContext

Loại này không có trường nào.

Công cụ hỗ trợ truy xuất bối cảnh URL.

FileSearch

Công cụ FileSearch truy xuất kiến thức từ các kho ngữ liệu Truy xuất ngữ nghĩa. Các tệp được nhập vào các kho ngữ liệu của tính năng Truy xuất ngữ nghĩa bằng cách sử dụng ImportFile API.

Trường
fileSearchStoreNames[] string

Bắt buộc. Tên của fileSearchStores cần truy xuất. Ví dụ: fileSearchStores/my-file-search-store-123

metadataFilter string

Không bắt buộc. Bộ lọc siêu dữ liệu để áp dụng cho các tài liệu và đoạn văn bản truy xuất ngữ nghĩa.

topK integer

Không bắt buộc. Số lượng đoạn truy xuất ngữ nghĩa cần truy xuất.

Biểu diễn dưới dạng JSON
{
  "fileSearchStoreNames": [
    string
  ],
  "metadataFilter": string,
  "topK": integer
}

McpServer

MCPServer là một máy chủ mà mô hình có thể gọi để thực hiện các hành động. Đây là một máy chủ triển khai giao thức MCP. Mã nhận dạng tiếp theo: 6

Trường
name string

Tên của MCPServer.

transport Union type
Phương thức truyền tải dùng để kết nối với MCPServer. transport chỉ có thể là một trong những trạng thái sau:
streamableHttpTransport object (StreamableHttpTransport)

Một phương thức truyền tải có thể truyền trực tuyến các yêu cầu và phản hồi HTTP.

Biểu diễn dưới dạng JSON
{
  "name": string,

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

StreamableHttpTransport

Một phương thức truyền tải có thể truyền trực tuyến các yêu cầu và phản hồi HTTP. Mã nhận dạng tiếp theo: 6

Trường
url string

URL đầy đủ cho điểm cuối MCPServer. Ví dụ: "https://api.example.com/mcp"

headers map (key: string, value: string)

Không bắt buộc: Các trường cho tiêu đề xác thực, thời gian chờ, v.v. (nếu cần).

Một đối tượng chứa danh sách các cặp "key": value. Ví dụ: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

timeout string (Duration format)

Thời gian chờ HTTP cho các hoạt động thông thường.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân và kết thúc bằng "s". Ví dụ: "3.5s".

sseReadTimeout string (Duration format)

Thời gian chờ cho các thao tác đọc SSE.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân và kết thúc bằng "s". Ví dụ: "3.5s".

terminateOnClose boolean

Xác định xem có đóng phiên ứng dụng khi quá trình truyền dữ liệu đóng hay không.

Biểu diễn dưới dạng JSON
{
  "url": string,
  "headers": {
    string: string,
    ...
  },
  "timeout": string,
  "sseReadTimeout": string,
  "terminateOnClose": boolean
}

GoogleMaps

Công cụ Google Maps cung cấp ngữ cảnh không gian địa lý cho cụm từ tìm kiếm của người dùng.

Trường
enableWidget boolean

Không bắt buộc. Có trả về mã thông báo ngữ cảnh tiện ích trong GroundingMetadata của phản hồi hay không. Nhà phát triển có thể sử dụng token ngữ cảnh tiện ích để hiển thị một tiện ích Google Maps có bối cảnh không gian địa lý liên quan đến những địa điểm mà mô hình tham chiếu trong câu trả lời.

Biểu diễn dưới dạng JSON
{
  "enableWidget": boolean
}

Tài nguyên REST: auth_tokens

Tài nguyên: AuthToken

Yêu cầu tạo mã thông báo xác thực tạm thời.

Trường
name string

Chỉ có đầu ra. Giá trị nhận dạng. Chính mã thông báo.

expireTime string (Timestamp format)

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Thời gian không bắt buộc sau đó, khi sử dụng mã thông báo kết quả, các thông báo trong phiên BidiGenerateContent sẽ bị từ chối. (Gemini có thể chủ động đóng phiên sau thời gian này.)

Nếu bạn không đặt chính sách này, thì chính sách này sẽ mặc định là 30 phút sau. Nếu được đặt, giá trị này phải nhỏ hơn 20 giờ trong tương lai.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

newSessionExpireTime string (Timestamp format)

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Thời gian sau đó các phiên Live API mới sử dụng mã thông báo có được từ yêu cầu này sẽ bị từ chối.

Nếu bạn không đặt, thì sau này giá trị này sẽ mặc định là 60 giây. Nếu được đặt, giá trị này phải nhỏ hơn 20 giờ trong tương lai.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

fieldMask string (FieldMask format)

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Nếu fieldMask trống và không có bidiGenerateContentSetup, thì thông báo BidiGenerateContentSetup có hiệu lực sẽ được lấy từ mối kết nối Live API.

Nếu fieldMask trống và có bidiGenerateContentSetup , thì thông báo BidiGenerateContentSetup có hiệu lực sẽ được lấy hoàn toàn từ bidiGenerateContentSetup trong yêu cầu này. Thông báo thiết lập từ kết nối Live API sẽ bị bỏ qua.

Nếu fieldMask không trống, thì các trường tương ứng trong bidiGenerateContentSetup sẽ ghi đè các trường trong thông báo thiết lập trong kết nối Live API.

Đây là danh sách tên đủ điều kiện của các trường được phân tách bằng dấu phẩy. Ví dụ: "user.displayName,photo"

config Union type
Cấu hình dành riêng cho phương thức của mã thông báo nhận được. config chỉ có thể là một trong những trạng thái sau:
bidiGenerateContentSetup object (BidiGenerateContentSetup)

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Cấu hình dành riêng cho BidiGenerateContent.

uses integer

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Số lần có thể sử dụng mã thông báo. Nếu giá trị này bằng 0 thì không có giới hạn nào được áp dụng. Việc tiếp tục một phiên Live API không được tính là một lượt sử dụng. Nếu bạn không chỉ định, giá trị mặc định là 1.

Biểu diễn dưới dạng JSON
{
  "name": string,
  "expireTime": string,
  "newSessionExpireTime": string,
  "fieldMask": string,

  // config
  "bidiGenerateContentSetup": {
    object (BidiGenerateContentSetup)
  }
  // Union type
  "uses": integer
}

BidiGenerateContentSetup

Tin nhắn sẽ được gửi trong BidiGenerateContentClientMessage đầu tiên (và chỉ trong đầu tiên). Chứa cấu hình sẽ áp dụng trong suốt thời gian của RPC truyền phát trực tiếp.

Ứng dụng nên đợi thông báo BidiGenerateContentSetupComplete trước khi gửi thêm thông báo.

Trường
model string

Bắt buộc. Tên tài nguyên của mô hình. Đây là mã nhận dạng để Mô hình sử dụng.

Định dạng models/{model}

generationConfig object (GenerationConfig)

Không bắt buộc. Cấu hình tạo.

Các trường sau không được hỗ trợ:

  • responseLogprobs
  • responseMimeType
  • logprobs
  • responseSchema
  • responseJsonSchema
  • stop_sequence
  • skipResponseCache
  • routing_config
  • audio_timestamp
systemInstruction object (Content)

Không bắt buộc. Hướng dẫn hệ thống do người dùng cung cấp cho mô hình.

Lưu ý: Bạn chỉ nên sử dụng văn bản trong các phần và nội dung trong mỗi phần sẽ nằm trong một đoạn văn riêng.

tools[] object (Tool)

Không bắt buộc. Một danh sách Tools mà mô hình có thể dùng để tạo câu trả lời tiếp theo.

Tool là một đoạn mã cho phép hệ thống tương tác với các hệ thống bên ngoài để thực hiện một hành động hoặc một nhóm hành động nằm ngoài kiến thức và phạm vi của mô hình.

realtimeInputConfig object (RealtimeInputConfig)

Không bắt buộc. Định cấu hình cách xử lý dữ liệu đầu vào theo thời gian thực.

sessionResumption object (SessionResumptionConfig)

Không bắt buộc. Định cấu hình cơ chế tiếp tục phiên.

Nếu có, máy chủ sẽ gửi thông báo SessionResumptionUpdate.

contextWindowCompression object (ContextWindowCompressionConfig)

Không bắt buộc. Định cấu hình cơ chế nén cửa sổ ngữ cảnh.

Nếu được đưa vào, máy chủ sẽ tự động giảm kích thước của ngữ cảnh khi kích thước này vượt quá độ dài đã định cấu hình.

inputAudioTranscription object (AudioTranscriptionConfig)

Không bắt buộc. Nếu được đặt, chế độ này sẽ bật tính năng chép lời nội dung nhập bằng giọng nói. Bản chép lời sẽ khớp với ngôn ngữ âm thanh đầu vào (nếu được định cấu hình).

outputAudioTranscription object (AudioTranscriptionConfig)

Không bắt buộc. Nếu được đặt, sẽ bật tính năng chép lời đầu ra âm thanh của mô hình. Bản chép lời sẽ khớp với mã ngôn ngữ được chỉ định cho âm thanh đầu ra (nếu được định cấu hình).

historyConfig object (HistoryConfig)

Không bắt buộc. Định cấu hình việc trao đổi nhật ký giữa ứng dụng và máy chủ.

Biểu diễn dưới dạng 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

Các lựa chọn cấu hình để tạo mô hình và đầu ra. Không phải mô hình nào cũng có thể định cấu hình mọi thông số.

Trường
stopSequences[] string

Không bắt buộc. Tập hợp các chuỗi ký tự (tối đa 5) sẽ dừng quá trình tạo đầu ra. Nếu được chỉ định, API sẽ dừng ở lần xuất hiện đầu tiên của stop_sequence. Chuỗi dừng sẽ không được đưa vào câu trả lời.

responseMimeType string

Không bắt buộc. Loại MIME của văn bản đề xuất được tạo. Các loại MIME được hỗ trợ là: text/plain: (mặc định) Đầu ra văn bản. application/json: Phản hồi JSON trong các đề xuất phản hồi. text/x.enum: ENUM dưới dạng phản hồi chuỗi trong các đề xuất phản hồi. Hãy tham khảo tài liệu để biết danh sách tất cả các loại MIME văn bản được hỗ trợ.

responseSchema
(deprecated)
object (Schema)

Không bắt buộc. Giản đồ đầu ra của văn bản đề xuất được tạo. Giản đồ phải là một tập hợp con của giản đồ OpenAPI và có thể là các đối tượng, nguyên hàm hoặc mảng.

Nếu bạn đặt chế độ này, thì bạn cũng phải đặt một responseMimeType tương thích. Các loại MIME tương thích: application/json: Giản đồ cho phản hồi JSON. Hãy tham khảo hướng dẫn tạo văn bản JSON để biết thêm thông tin chi tiết.

_responseJsonSchema
(deprecated)
value (Value format)

Không bắt buộc. Lược đồ đầu ra của câu trả lời được tạo. Đây là một lựa chọn thay thế cho responseSchema, chấp nhận Giản đồ JSON.

Nếu được đặt, bạn phải bỏ qua responseSchema, nhưng phải có responseMimeType.

Mặc dù bạn có thể gửi toàn bộ giản đồ JSON, nhưng không phải tính năng nào cũng được hỗ trợ. Cụ thể, chỉ những thuộc tính sau được hỗ trợ:

  • $id
  • $defs
  • $ref
  • $anchor
  • type
  • format
  • title
  • description
  • enum (đối với chuỗi và số)
  • items
  • prefixItems
  • minItems
  • maxItems
  • minimum
  • maximum
  • anyOf
  • oneOf (được diễn giải giống như anyOf)
  • properties
  • additionalProperties
  • required

Bạn cũng có thể đặt thuộc tính propertyOrdering không chuẩn.

Các tham chiếu theo chu kỳ được mở ra ở một mức độ giới hạn và do đó, chỉ có thể được sử dụng trong các thuộc tính không bắt buộc. (Các thuộc tính có thể rỗng là không đủ.) Nếu bạn đặt $ref trên một lược đồ con, thì không thể đặt bất kỳ thuộc tính nào khác, ngoại trừ những thuộc tính bắt đầu bằng $.

responseJsonSchema value (Value format)

Không bắt buộc. Một chi tiết nội bộ. Hãy sử dụng responseJsonSchema thay vì trường này.

responseModalities[] enum (Modality)

Không bắt buộc. Các phương thức phản hồi được yêu cầu. Biểu thị tập hợp các phương thức mà mô hình có thể trả về và dự kiến sẽ có trong phản hồi. Đây là một kết quả khớp chính xác với các phương thức phản hồi.

Một mô hình có thể có nhiều tổ hợp phương thức được hỗ trợ. Nếu các phương thức được yêu cầu không khớp với bất kỳ tổ hợp nào được hỗ trợ, thì hệ thống sẽ trả về lỗi.

Danh sách trống tương đương với việc chỉ yêu cầu văn bản.

candidateCount integer

Không bắt buộc. Số lượng câu trả lời được tạo cần trả về. Nếu bạn không đặt, giá trị này sẽ mặc định là 1. Xin lưu ý rằng tính năng này không hoạt động đối với các mô hình thế hệ trước (dòng Gemini 1.0)

maxOutputTokens integer

Không bắt buộc. Số lượng mã thông báo tối đa cần đưa vào một đề xuất phản hồi.

Lưu ý: Giá trị mặc định tuỳ theo mô hình, hãy xem thuộc tính Model.output_token_limit của Model được trả về từ hàm getModel.

temperature number

Không bắt buộc. Kiểm soát tính ngẫu nhiên của đầu ra.

Lưu ý: Giá trị mặc định tuỳ theo mô hình, hãy xem thuộc tính Model.temperature của Model được trả về từ hàm getModel.

Giá trị có thể nằm trong khoảng [0.0, 2.0].

topP number

Không bắt buộc. Xác suất tích luỹ tối đa của các mã thông báo cần xem xét khi lấy mẫu.

Mô hình này sử dụng phương pháp lấy mẫu kết hợp Top-k và Top-p (hạt nhân).

Các mã thông báo được sắp xếp dựa trên xác suất được chỉ định để chỉ những mã thông báo có khả năng cao nhất mới được xem xét. Phương pháp lấy mẫu k hàng đầu trực tiếp giới hạn số lượng mã thông báo tối đa cần xem xét, trong khi phương pháp lấy mẫu theo hạt nhân giới hạn số lượng mã thông báo dựa trên xác suất tích luỹ.

Lưu ý: Giá trị mặc định thay đổi theo Model và được chỉ định bằng thuộc tính Model.top_p do hàm getModel trả về. Thuộc tính topK trống cho biết mô hình không áp dụng phương pháp lấy mẫu k hàng đầu và không cho phép đặt topK trên các yêu cầu.

topK integer

Không bắt buộc. Số lượng mã thông báo tối đa cần xem xét khi lấy mẫu.

Các mô hình Gemini sử dụng phương pháp lấy mẫu Top-p (hạt nhân) hoặc kết hợp phương pháp lấy mẫu Top-k và hạt nhân. Phương pháp lấy mẫu k hàng đầu xem xét tập hợp topK mã thông báo có khả năng xảy ra nhất. Các mô hình chạy bằng phương pháp lấy mẫu hạt nhân không cho phép thiết lập topK.

Lưu ý: Giá trị mặc định thay đổi theo Model và được chỉ định bằng thuộc tính Model.top_p do hàm getModel trả về. Thuộc tính topK trống cho biết mô hình không áp dụng phương pháp lấy mẫu k hàng đầu và không cho phép đặt topK trên các yêu cầu.

seed integer

Không bắt buộc. Giá trị ban đầu dùng trong quá trình giải mã. Nếu bạn không đặt, yêu cầu sẽ sử dụng một giá trị ban đầu được tạo ngẫu nhiên.

presencePenalty number

Không bắt buộc. Hình phạt về sự hiện diện được áp dụng cho logprobs của mã thông báo tiếp theo nếu mã thông báo đó đã xuất hiện trong câu trả lời.

Mức phạt này là mức phạt nhị phân (bật/tắt) và không phụ thuộc vào số lần sử dụng mã thông báo (sau lần đầu tiên). Sử dụng frequencyPenalty cho một khoản tiền phạt tăng lên theo mỗi lần sử dụng.

Mức phạt dương sẽ ngăn chặn việc sử dụng những mã thông báo đã được dùng trong câu trả lời, từ đó tăng vốn từ vựng.

Mức phạt âm sẽ khuyến khích việc sử dụng các mã thông báo đã được dùng trong câu trả lời, giảm từ vựng.

frequencyPenalty number

Không bắt buộc. Mức phạt tần suất được áp dụng cho logprobs của mã thông báo tiếp theo, nhân với số lần mỗi mã thông báo đã xuất hiện trong phản hồi cho đến nay.

Mức phạt dương sẽ ngăn chặn việc sử dụng các mã thông báo đã được sử dụng, tỷ lệ thuận với số lần mã thông báo đã được sử dụng: Mã thông báo càng được sử dụng nhiều, thì mô hình càng khó sử dụng lại mã thông báo đó, từ đó làm tăng vốn từ vựng của các câu trả lời.

Thận trọng: Mức phạt tiêu cực sẽ khuyến khích mô hình sử dụng lại mã thông báo tương ứng với số lần mã thông báo đã được sử dụng. Các giá trị âm nhỏ sẽ làm giảm từ vựng của câu trả lời. Các giá trị âm lớn hơn sẽ khiến mô hình bắt đầu lặp lại một mã thông báo phổ biến cho đến khi đạt đến giới hạn maxOutputTokens.

responseLogprobs boolean

Không bắt buộc. Nếu đúng, hãy xuất kết quả logprobs trong phản hồi.

logprobs integer

Không bắt buộc. Chỉ hợp lệ nếu responseLogprobs=True. Tham số này đặt số lượng logprob hàng đầu (bao gồm cả đề xuất đã chọn) cần trả về ở mỗi bước giải mã trong Candidate.logprobs_result. Số này phải nằm trong khoảng [0, 20].

enableEnhancedCivicAnswers boolean

Không bắt buộc. Bật câu trả lời nâng cao về thông tin công dân. Tính năng này có thể không hoạt động trên một số mẫu.

speechConfig object (SpeechConfig)

Không bắt buộc. Cấu hình tạo lời nói.

thinkingConfig object (ThinkingConfig)

Không bắt buộc. Cấu hình cho các tính năng suy nghĩ. Hệ thống sẽ trả về lỗi nếu bạn đặt trường này cho những mô hình không hỗ trợ tính năng suy nghĩ.

imageConfig object (ImageConfig)

Không bắt buộc. Cấu hình để tạo hình ảnh. Hệ thống sẽ trả về lỗi nếu bạn đặt trường này cho những mô hình không hỗ trợ các lựa chọn cấu hình này.

mediaResolution enum (MediaResolution)

Không bắt buộc. Nếu được chỉ định, độ phân giải của nội dung nghe nhìn được chỉ định sẽ được dùng.

enableAffectiveDialog boolean

Không bắt buộc. Nếu được bật, mô hình sẽ phát hiện cảm xúc và điều chỉnh các câu trả lời cho phù hợp.

responseFormat object (ResponseFormatConfig)

Không bắt buộc. Cấu hình cho định dạng đầu ra của phản hồi. Cho phép chỉ định cấu hình đầu ra cho mỗi phương thức (văn bản, âm thanh, hình ảnh) trong một cấu trúc phẳng.

translationConfig object (TranslationConfig)

Không bắt buộc. Cấu hình để dịch.

audioTranscriptionConfig object (AudioTranscriptionConfig)

Không bắt buộc. Cấu hình cho bản chép lời (nhận dạng lời nói).

Biểu diễn dưới dạng 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)
  }
}

Phương thức

Các phương thức được hỗ trợ của câu trả lời.

Enum
MODALITY_UNSPECIFIED Giá trị mặc định.
TEXT Cho biết mô hình sẽ trả về văn bản.
IMAGE Cho biết mô hình sẽ trả về hình ảnh.
AUDIO Cho biết mô hình sẽ trả về âm thanh.

SpeechConfig

Cấu hình để tạo và chép lời.

Trường
voiceConfig object (VoiceConfig)

Cấu hình trong trường hợp đầu ra một giọng nói.

multiSpeakerVoiceConfig object (MultiSpeakerVoiceConfig)

Không bắt buộc. Cấu hình cho chế độ thiết lập nhiều loa. Trường này loại trừ lẫn nhau với trường voiceConfig.

languageCode string

Không bắt buộc. Mã ngôn ngữ BCP-47 của IETF mà người dùng đã định cấu hình để ứng dụng sử dụng. Được dùng để nhận dạng và tổng hợp lời nói.

Các giá trị hợp lệ là: 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-RUth-TH.

Biểu diễn dưới dạng JSON
{
  "voiceConfig": {
    object (VoiceConfig)
  },
  "multiSpeakerVoiceConfig": {
    object (MultiSpeakerVoiceConfig)
  },
  "languageCode": string
}

VoiceConfig

Cấu hình cho giọng nói sẽ sử dụng.

Trường
voice_config Union type
Cấu hình mà loa sẽ sử dụng. voice_config chỉ có thể là một trong những trạng thái sau:
prebuiltVoiceConfig object (PrebuiltVoiceConfig)

Cấu hình cho giọng nói được tạo sẵn để sử dụng.

Biểu diễn dưới dạng JSON
{

  // voice_config
  "prebuiltVoiceConfig": {
    object (PrebuiltVoiceConfig)
  }
  // Union type
}

PrebuiltVoiceConfig

Cấu hình mà loa dựng sẵn sẽ sử dụng.

Trường
voiceName string

Tên của giọng nói đặt sẵn cần sử dụng.

Biểu diễn dưới dạng JSON
{
  "voiceName": string
}

MultiSpeakerVoiceConfig

Cấu hình cho chế độ thiết lập nhiều loa.

Trường
speakerVoiceConfigs[] object (SpeakerVoiceConfig)

Bắt buộc. Tất cả giọng nói của người nói đã bật.

Biểu diễn dưới dạng JSON
{
  "speakerVoiceConfigs": [
    {
      object (SpeakerVoiceConfig)
    }
  ]
}

SpeakerVoiceConfig

Cấu hình cho một loa trong chế độ thiết lập nhiều loa.

Trường
speaker string

Bắt buộc. Tên của loa cần sử dụng. Phải giống như trong câu lệnh.

voiceConfig object (VoiceConfig)

Bắt buộc. Cấu hình cho giọng nói sẽ sử dụng.

Biểu diễn dưới dạng JSON
{
  "speaker": string,
  "voiceConfig": {
    object (VoiceConfig)
  }
}

ThinkingConfig

Cấu hình cho các tính năng suy nghĩ.

Trường
includeThoughts boolean

Cho biết có nên đưa suy nghĩ vào câu trả lời hay không. Nếu là true, thì suy nghĩ chỉ được trả về khi có sẵn.

thinkingBudget integer

Số lượng mã thông báo suy nghĩ mà mô hình sẽ tạo.

thinkingLevel enum (ThinkingLevel)

Không bắt buộc. Kiểm soát độ sâu tối đa của quy trình suy luận nội bộ của mô hình trước khi mô hình tạo ra phản hồi. Giá trị mặc định phụ thuộc vào mô hình. Hãy tham khảo Hướng dẫn về các cấp độ tư duy để biết thêm thông tin chi tiết. Dành cho các mô hình Gemini 3 trở lên. Việc sử dụng với các mô hình cũ hơn sẽ dẫn đến lỗi.

Biểu diễn dưới dạng JSON
{
  "includeThoughts": boolean,
  "thinkingBudget": integer,
  "thinkingLevel": enum (ThinkingLevel)
}

ThinkingLevel

Cho phép người dùng chỉ định mức cần nghĩ bằng cách sử dụng enum thay vì ngân sách số nguyên.

Enum
THINKING_LEVEL_UNSPECIFIED Giá trị mặc định.
MINIMAL Không cần suy nghĩ nhiều.
LOW Cấp độ tư duy thấp.
MEDIUM Cấp độ tư duy trung bình.
HIGH Cấp độ tư duy cao.

ImageConfig

Cấu hình cho các tính năng tạo hình ảnh.

Trường
aspectRatio string

Không bắt buộc. Tỷ lệ khung hình của hình ảnh cần tạo. Tỷ lệ khung hình được hỗ trợ: 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 hoặc 21:9.

Nếu bạn không chỉ định, mô hình sẽ chọn tỷ lệ khung hình mặc định dựa trên mọi hình ảnh tham khảo được cung cấp.

imageSize string

Không bắt buộc. Chỉ định kích thước của hình ảnh được tạo. Các giá trị được hỗ trợ là 512, 1K, 2K, 4K. Nếu bạn không chỉ định, mô hình sẽ sử dụng giá trị mặc định 1K.

Biểu diễn dưới dạng JSON
{
  "aspectRatio": string,
  "imageSize": string
}

MediaResolution

Độ phân giải nội dung nghe nhìn cho nội dung nghe nhìn đầu vào.

Enum
MEDIA_RESOLUTION_UNSPECIFIED Chưa đặt độ phân giải cho nội dung nghe nhìn.
MEDIA_RESOLUTION_LOW Độ phân giải của nội dung nghe nhìn được đặt ở mức thấp (64 mã thông báo).
MEDIA_RESOLUTION_MEDIUM Độ phân giải của nội dung nghe nhìn được đặt ở mức trung bình (256 mã thông báo).
MEDIA_RESOLUTION_HIGH Độ phân giải của nội dung nghe nhìn được đặt ở mức cao (tái khung hình thu phóng bằng 256 mã thông báo).

ResponseFormatConfig

Cấu hình cho định dạng đầu ra của phản hồi. Đây là một đối tượng cố định, trong đó mỗi cấu hình trường phụ không bắt buộc sẽ định cấu hình một phương thức đầu ra cụ thể.

Trường
text object (TextResponseFormat)

Không bắt buộc. Cấu hình định dạng đầu ra văn bản.

audio object (AudioResponseFormat)

Không bắt buộc. Cấu hình định dạng đầu ra âm thanh.

image object (ImageResponseFormat)

Không bắt buộc. Cấu hình định dạng đầu ra của hình ảnh.

Biểu diễn dưới dạng JSON
{
  "text": {
    object (TextResponseFormat)
  },
  "audio": {
    object (AudioResponseFormat)
  },
  "image": {
    object (ImageResponseFormat)
  }
}

TextResponseFormat

Cấu hình cho định dạng đầu ra văn bản.

Trường
mimeType enum (MimeType)

Không bắt buộc. Loại MIME của đầu ra văn bản.

schema value (Value format)

Không bắt buộc. Giản đồ JSON mà đầu ra phải tuân thủ. Chỉ áp dụng khi mimeType là APPLICATION_JSON.

Biểu diễn dưới dạng JSON
{
  "mimeType": enum (MimeType),
  "schema": value
}

MimeType

Các loại MIME được hỗ trợ cho đầu ra văn bản.

Enum
MIME_TYPE_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
APPLICATION_JSON Định dạng đầu ra JSON.
TEXT_PLAIN Định dạng đầu ra văn bản thuần tuý.

AudioResponseFormat

Cấu hình cho định dạng đầu ra âm thanh.

Trường
mimeType enum (MimeType)

Không bắt buộc. Loại MIME của đầu ra âm thanh.

delivery enum (Delivery)

Không bắt buộc. Chế độ phân phối cho đầu ra âm thanh.

sampleRate integer

Không bắt buộc. Tốc độ lấy mẫu tính bằng Hz.

bitRate integer

Không bắt buộc. Tốc độ bit tính bằng bit mỗi giây (bps). Chỉ áp dụng cho các định dạng nén (MP3, Opus).

Biểu diễn dưới dạng JSON
{
  "mimeType": enum (MimeType),
  "delivery": enum (Delivery),
  "sampleRate": integer,
  "bitRate": integer
}

MimeType

Các loại MIME được hỗ trợ cho đầu ra âm thanh.

Enum
MIME_TYPE_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
AUDIO_MP3 Định dạng âm thanh MP3.
AUDIO_OGG_OPUS Định dạng âm thanh OGG Opus.
AUDIO_L16 Định dạng âm thanh PCM thô (L16).
AUDIO_WAV Định dạng âm thanh WAV.
AUDIO_ALAW Định dạng âm thanh A-law.
AUDIO_MULAW Định dạng âm thanh Mu-law.

Giao hàng

Chế độ phân phối cho đầu ra âm thanh.

Enum
DELIVERY_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
INLINE Dữ liệu âm thanh được trả về nội tuyến trong phản hồi.
URI Dữ liệu âm thanh được trả về dưới dạng một URI.

ImageResponseFormat

Cấu hình cho định dạng đầu ra của hình ảnh.

Trường
mimeType enum (MimeType)

Không bắt buộc. Loại MIME của đầu ra hình ảnh.

delivery enum (Delivery)

Không bắt buộc. Chế độ phân phối cho đầu ra hình ảnh.

aspectRatio enum (AspectRatio)

Không bắt buộc. Tỷ lệ khung hình cho đầu ra hình ảnh.

imageSize enum (ImageSize)

Không bắt buộc. Kích thước của đầu ra hình ảnh.

Biểu diễn dưới dạng JSON
{
  "mimeType": enum (MimeType),
  "delivery": enum (Delivery),
  "aspectRatio": enum (AspectRatio),
  "imageSize": enum (ImageSize)
}

MimeType

Các loại MIME được hỗ trợ cho đầu ra hình ảnh.

Enum
MIME_TYPE_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
IMAGE_JPEG Định dạng hình ảnh JPEG.

Giao hàng

Chế độ phân phối cho đầu ra hình ảnh.

Enum
DELIVERY_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
INLINE Dữ liệu hình ảnh được trả về cùng dòng trong phản hồi.
URI Dữ liệu hình ảnh được trả về dưới dạng URI.

AspectRatio

Tỷ lệ khung hình được hỗ trợ cho đầu ra hình ảnh.

Enum
ASPECT_RATIO_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
ASPECT_RATIO_ONE_BY_ONE Tỷ lệ khung hình 1:1.
ASPECT_RATIO_TWO_BY_THREE Tỷ lệ khung hình 2:3.
ASPECT_RATIO_THREE_BY_TWO Tỷ lệ khung hình 3:2.
ASPECT_RATIO_THREE_BY_FOUR Tỷ lệ khung hình 3:4.
ASPECT_RATIO_FOUR_BY_THREE Tỷ lệ khung hình 4:3.
ASPECT_RATIO_FOUR_BY_FIVE Tỷ lệ khung hình 4:5.
ASPECT_RATIO_FIVE_BY_FOUR Tỷ lệ khung hình 5:4.
ASPECT_RATIO_NINE_BY_SIXTEEN Tỷ lệ khung hình 9:16.
ASPECT_RATIO_SIXTEEN_BY_NINE Tỷ lệ khung hình 16:9.
ASPECT_RATIO_TWENTY_ONE_BY_NINE Tỷ lệ khung hình 21:9.
ASPECT_RATIO_ONE_BY_EIGHT Tỷ lệ khung hình 1:8.
ASPECT_RATIO_EIGHT_BY_ONE Tỷ lệ khung hình 8:1.
ASPECT_RATIO_ONE_BY_FOUR Tỷ lệ khung hình 1:4.
ASPECT_RATIO_FOUR_BY_ONE Tỷ lệ khung hình 4:1.

ImageSize

Kích thước hình ảnh được hỗ trợ cho đầu ra hình ảnh.

Enum
IMAGE_SIZE_UNSPECIFIED Giá trị mặc định. Giá trị này không được dùng.
IMAGE_SIZE_FIVE_TWELVE Kích thước hình ảnh 512px.
IMAGE_SIZE_ONE_K Kích thước hình ảnh là 1K.
IMAGE_SIZE_TWO_K Kích thước hình ảnh 2K.
IMAGE_SIZE_FOUR_K Kích thước hình ảnh 4K.

TranslationConfig

Cấu hình cho các tính năng dịch.

Trường
targetLanguageCode string

Bắt buộc. Ngôn ngữ đích của bản dịch. Giá trị được hỗ trợ là mã ngôn ngữ BCP-47 (ví dụ: "en", "es", "fr").

echoTargetLanguage boolean

Không bắt buộc. Nếu đúng, mô hình sẽ tạo âm thanh khi ngôn ngữ đích được nói, về cơ bản, mô hình sẽ bắt chước nội dung đầu vào. Nếu là false, chúng tôi sẽ không tạo âm thanh cho ngôn ngữ mục tiêu.

Biểu diễn dưới dạng JSON
{
  "targetLanguageCode": string,
  "echoTargetLanguage": boolean
}

AudioTranscriptionConfig

Cấu hình bản chép lời.

Trường
languageCodes[] string

Không bắt buộc. Mã ngôn ngữ BCP-47 cung cấp gợi ý về các ngôn ngữ có trong âm thanh. Nếu bạn bỏ qua hoặc để trống, hệ thống sẽ mặc định sử dụng tính năng tự động phát hiện ngôn ngữ.

adaptationPhrases[]
(deprecated)
string

Không bắt buộc. Danh sách các cụm từ được dùng để điều chỉnh lời nói, giúp mô hình ASR cải thiện khả năng nhận dạng các cụm từ cụ thể này.

customVocabulary[] string

Không bắt buộc. Danh sách các cụm từ từ vựng tuỳ chỉnh để điều chỉnh mô hình nhận dạng lời nói nhằm nhận dạng các thuật ngữ cụ thể (tên sản phẩm, danh từ riêng, thuật ngữ chuyên ngành).

wordTimestamp boolean

Không bắt buộc. Định cấu hình việc tạo dấu thời gian ở cấp từ.

diarization boolean

Không bắt buộc. Định cấu hình tính năng phân tách người nói.

language_config Union type
Không dùng nữa: Thay vào đó, hãy sử dụng language_codes cấp cao nhất. language_config chỉ có thể là một trong những trạng thái sau:
languageAuto
(deprecated)
object (LanguageAuto)

Không bắt buộc. Mô hình này sẽ tự động phát hiện ngôn ngữ.

languageHints
(deprecated)
object (LanguageHints)

Không bắt buộc. Chỉ định một hoặc nhiều ngôn ngữ trong âm thanh.

Biểu diễn dưới dạng JSON
{
  "languageCodes": [
    string
  ],
  "adaptationPhrases": [
    string
  ],
  "customVocabulary": [
    string
  ],
  "wordTimestamp": boolean,
  "diarization": boolean,

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

LanguageAuto

Loại này không có trường nào.

Cho biết ngôn ngữ của âm thanh sẽ được tự động phát hiện.

LanguageHints

Cung cấp gợi ý cho mô hình về những ngôn ngữ có thể có trong âm thanh.

Trường
languageCodes[]
(deprecated)
string

Bắt buộc. Mã ngôn ngữ BCP-47.

Biểu diễn dưới dạng JSON
{
  "languageCodes": [
    string
  ]
}

RealtimeInputConfig

Định cấu hình hành vi nhập liệu theo thời gian thực trong BidiGenerateContent.

Trường
automaticActivityDetection object (AutomaticActivityDetection)

Không bắt buộc. Nếu bạn không đặt, thì tính năng tự động phát hiện hoạt động sẽ được bật theo mặc định. Nếu tính năng tự động phát hiện giọng nói bị tắt, thì ứng dụng phải gửi tín hiệu hoạt động.

activityHandling enum (ActivityHandling)

Không bắt buộc. Xác định hiệu ứng của hoạt động.

turnCoverage enum (TurnCoverage)

Không bắt buộc. Xác định dữ liệu đầu vào nào được đưa vào lượt của người dùng.

Biểu diễn dưới dạng JSON
{
  "automaticActivityDetection": {
    object (AutomaticActivityDetection)
  },
  "activityHandling": enum (ActivityHandling),
  "turnCoverage": enum (TurnCoverage)
}

AutomaticActivityDetection

Định cấu hình tính năng tự động phát hiện hoạt động.

Trường
disabled boolean

Không bắt buộc. Nếu được bật (mặc định), thì giọng nói và văn bản đã phát hiện được tính là hoạt động. Nếu bị vô hiệu hoá, ứng dụng phải gửi tín hiệu hoạt động.

startOfSpeechSensitivity enum (StartSensitivity)

Không bắt buộc. Xác định khả năng phát hiện lời nói.

prefixPaddingMs integer

Không bắt buộc. Thời lượng bắt buộc của lời nói được phát hiện trước khi bắt đầu lời nói được cam kết. Giá trị này càng thấp thì tính năng phát hiện bắt đầu lời nói càng nhạy và lời nói ngắn hơn có thể được nhận dạng. Tuy nhiên, điều này cũng làm tăng xác suất có kết quả dương tính giả.

endOfSpeechSensitivity enum (EndSensitivity)

Không bắt buộc. Xác định khả năng lời nói được phát hiện đã kết thúc.

silenceDurationMs integer

Không bắt buộc. Thời lượng bắt buộc của đoạn không phải lời nói được phát hiện (ví dụ: khoảng lặng) trước khi kết thúc lời nói. Giá trị này càng lớn thì khoảng trống trong lời nói càng dài mà không làm gián đoạn hoạt động của người dùng, nhưng điều này sẽ làm tăng độ trễ của mô hình.

Biểu diễn dưới dạng JSON
{
  "disabled": boolean,
  "startOfSpeechSensitivity": enum (StartSensitivity),
  "prefixPaddingMs": integer,
  "endOfSpeechSensitivity": enum (EndSensitivity),
  "silenceDurationMs": integer
}

StartSensitivity

Xác định cách phát hiện điểm bắt đầu của lời nói.

Enum
START_SENSITIVITY_UNSPECIFIED Giá trị mặc định là START_SENSITIVITY_HIGH.
START_SENSITIVITY_HIGH Tính năng tự động phát hiện sẽ phát hiện điểm bắt đầu của lời nói thường xuyên hơn.
START_SENSITIVITY_LOW Tính năng phát hiện tự động sẽ ít phát hiện được điểm bắt đầu của lời nói hơn.

EndSensitivity

Xác định cách phát hiện phần cuối của lời nói.

Enum
END_SENSITIVITY_UNSPECIFIED Giá trị mặc định là END_SENSITIVITY_HIGH.
END_SENSITIVITY_HIGH Tính năng tự động phát hiện thường kết thúc lời nói.
END_SENSITIVITY_LOW Tính năng tự động phát hiện ít khi kết thúc lời nói.

ActivityHandling

Các cách xử lý hoạt động của người dùng.

Enum
ACTIVITY_HANDLING_UNSPECIFIED Nếu bạn không chỉ định, hành vi mặc định sẽ là START_OF_ACTIVITY_INTERRUPTS.
START_OF_ACTIVITY_INTERRUPTS Nếu đúng, hoạt động bắt đầu sẽ làm gián đoạn phản hồi của mô hình (còn gọi là "barge in"). Câu trả lời hiện tại của mô hình sẽ bị cắt ngang khi có yêu cầu mới. Đây là hành vi mặc định.
NO_INTERRUPTION Câu trả lời của mô hình sẽ không bị gián đoạn.

TurnCoverage

Các lựa chọn về dữ liệu đầu vào có trong lượt của người dùng.

Enum
TURN_COVERAGE_UNSPECIFIED Nếu bạn không chỉ định, hệ thống sẽ chọn một hành vi mặc định dựa trên mô hình. Ví dụ: đối với Gemini 2.5, chế độ mặc định là TURN_INCLUDES_ONLY_ACTIVITY, còn đối với Gemini 3.1 trở lên, chế độ mặc định là TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO.
TURN_INCLUDES_ONLY_ACTIVITY Bao gồm hoạt động kể từ lượt gần đây nhất, không bao gồm thời gian không hoạt động (ví dụ: không có âm thanh trong luồng âm thanh).
TURN_INCLUDES_ALL_INPUT Bao gồm tất cả dữ liệu đầu vào theo thời gian thực kể từ lượt gần đây nhất, kể cả thời gian không hoạt động (ví dụ: không có âm thanh trong luồng âm thanh).
TURN_INCLUDES_AUDIO_ACTIVITY_AND_ALL_VIDEO Bao gồm hoạt động âm thanh và tất cả video kể từ lượt tương tác gần đây nhất. Với tính năng tự động phát hiện hoạt động, hoạt động âm thanh có nghĩa là lời nói và không bao gồm khoảng lặng.

SessionResumptionConfig

Cấu hình tiếp tục phiên.

Thông báo này có trong cấu hình phiên dưới dạng BidiGenerateContentSetup.session_resumption. Nếu được định cấu hình, máy chủ sẽ gửi thông báo SessionResumptionUpdate.

Trường
handle string

Xử lý một phiên trước đó. Nếu không có, thì một phiên mới sẽ được tạo.

Xử lý phiên đến từ các giá trị SessionResumptionUpdate.token trong các kết nối trước đó.

Biểu diễn dưới dạng JSON
{
  "handle": string
}

ContextWindowCompressionConfig

Cho phép nén cửa sổ ngữ cảnh – một cơ chế để quản lý cửa sổ ngữ cảnh của mô hình sao cho cửa sổ này không vượt quá một độ dài nhất định.

Trường
compression_mechanism Union type
Cơ chế nén cửa sổ ngữ cảnh được sử dụng. compression_mechanism chỉ có thể là một trong những trạng thái sau:
slidingWindow object (SlidingWindow)

Cơ chế cửa sổ trượt.

triggerTokens string (int64 format)

Số lượng mã thông báo (trước khi chạy một lượt) cần thiết để kích hoạt quá trình nén cửa sổ ngữ cảnh.

Bạn có thể dùng tham số này để cân bằng chất lượng với độ trễ vì cửa sổ ngữ cảnh ngắn hơn có thể giúp mô hình phản hồi nhanh hơn. Tuy nhiên, mọi thao tác nén sẽ làm tăng độ trễ tạm thời, vì vậy, bạn không nên kích hoạt các thao tác này thường xuyên.

Nếu bạn không đặt giá trị này, thì giá trị mặc định là 80% giới hạn cửa sổ ngữ cảnh của mô hình. Điều này còn lại 20% cho yêu cầu tiếp theo của người dùng/phản hồi của mô hình.

Biểu diễn dưới dạng JSON
{

  // compression_mechanism
  "slidingWindow": {
    object (SlidingWindow)
  }
  // Union type
  "triggerTokens": string
}

SlidingWindow

Phương thức SlidingWindow hoạt động bằng cách loại bỏ nội dung ở đầu cửa sổ ngữ cảnh. Ngữ cảnh kết quả sẽ luôn bắt đầu từ đầu lượt của vai trò NGƯỜI DÙNG. Hướng dẫn hệ thống và mọi BidiGenerateContentSetup.prefix_turns sẽ luôn nằm ở đầu kết quả.

Trường
targetTokens string (int64 format)

Số lượng mã thông báo mục tiêu cần giữ lại. Giá trị mặc định là triggerTokens/2.

Việc loại bỏ các phần của cửa sổ ngữ cảnh sẽ làm tăng độ trễ tạm thời, vì vậy, bạn nên hiệu chỉnh giá trị này để tránh các thao tác nén thường xuyên.

Biểu diễn dưới dạng JSON
{
  "targetTokens": string
}

HistoryConfig

Cấu hình nhật ký.

Thông báo này có trong cấu hình phiên dưới dạng BidiGenerateContentSetup.history_config. Định cấu hình việc trao đổi tin nhắn trong nhật ký.

Trường
initialHistoryInClientContent boolean

Không bắt buộc. Nếu đúng, sau khi gửi setupComplete, máy chủ sẽ đợi và trước tiên xử lý các thông báo clientContent cho đến khi turnCompletetrue. Nhật ký ban đầu này sẽ không kích hoạt lệnh gọi mô hình và có thể kết thúc bằng vai trò MODEL. Sau khi turnCompletetrue, ứng dụng có thể bắt đầu cuộc trò chuyện theo thời gian thực thông qua realtimeInput.

Biểu diễn dưới dạng JSON
{
  "initialHistoryInClientContent": boolean
}

Phương thức: auth_tokens.create

Tạo một mã thông báo có thể dùng để hạn chế hành vi của một phiên BidiGenerateContent.

Điểm cuối

post https://generativelanguage.googleapis.com/v1beta/auth_tokens

Nội dung yêu cầu

Nội dung yêu cầu chứa một bản sao của AuthToken.

Trường
expireTime string (Timestamp format)

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Thời gian không bắt buộc sau đó, khi sử dụng mã thông báo kết quả, các thông báo trong phiên BidiGenerateContent sẽ bị từ chối. (Gemini có thể chủ động đóng phiên sau thời gian này.)

Nếu bạn không đặt chính sách này, thì chính sách này sẽ mặc định là 30 phút sau. Nếu được đặt, giá trị này phải nhỏ hơn 20 giờ trong tương lai.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

newSessionExpireTime string (Timestamp format)

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Thời gian sau đó các phiên Live API mới sử dụng mã thông báo có được từ yêu cầu này sẽ bị từ chối.

Nếu bạn không đặt, thì sau này giá trị này sẽ mặc định là 60 giây. Nếu được đặt, giá trị này phải nhỏ hơn 20 giờ trong tương lai.

Hãy dùng RFC 3339, trong đó dữ liệu đầu ra được tạo sẽ luôn được chuẩn hoá theo múi giờ và sử dụng 0, 3, 6 hoặc 9 chữ số thập phân. Các khoảng lệch khác ngoài "Z" cũng được chấp nhận. Ví dụ: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" hoặc "2014-10-02T15:01:23+05:30".

fieldMask string (FieldMask format)

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Nếu fieldMask trống và không có bidiGenerateContentSetup, thì thông báo BidiGenerateContentSetup có hiệu lực sẽ được lấy từ mối kết nối Live API.

Nếu fieldMask trống và có bidiGenerateContentSetup , thì thông báo BidiGenerateContentSetup có hiệu lực sẽ được lấy hoàn toàn từ bidiGenerateContentSetup trong yêu cầu này. Thông báo thiết lập từ kết nối Live API sẽ bị bỏ qua.

Nếu fieldMask không trống, thì các trường tương ứng trong bidiGenerateContentSetup sẽ ghi đè các trường trong thông báo thiết lập trong kết nối Live API.

Đây là danh sách tên đủ điều kiện của các trường được phân tách bằng dấu phẩy. Ví dụ: "user.displayName,photo"

config Union type
Cấu hình dành riêng cho phương thức của mã thông báo nhận được. config chỉ có thể là một trong những trạng thái sau:
bidiGenerateContentSetup object (BidiGenerateContentSetup)

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Cấu hình dành riêng cho BidiGenerateContent.

uses integer

Không bắt buộc. Chỉ có đầu vào. Không thể thay đổi. Số lần có thể sử dụng mã thông báo. Nếu giá trị này bằng 0 thì không có giới hạn nào được áp dụng. Việc tiếp tục một phiên Live API không được tính là một lượt sử dụng. Nếu bạn không chỉ định, giá trị mặc định là 1.

Nội dung phản hồi

Nếu thành công, nội dung phản hồi sẽ chứa một thực thể mới tạo của AuthToken.