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 nhiệm vụ hoặ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 GenerateContentRequest đầu vào. 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, bao gồm cả mô hình đã tinh chỉnh. Hãy tham khảo hướng dẫn về mô hình và hướng dẫn điều chỉnh để biết thông tin chi tiết.

Điểm cuối

bài đăng https://generativelanguage.googleapis.com/v1beta/{model=models/*}:generateContent

Tham số đường dẫn

model string

Bắt buộc. Tên của Model cần dùng để tạo nội dung hoàn thà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 truy vấn một lượt, đây là một thực thể 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 Tools mà Model 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. Tool được hỗ trợ là Function và codeExecution. Hãy tham khảo hướng dẫn về Gọi hàm và Thự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 vào ngày GenerateContentRequest.contents và GenerateContentResponse.candidates. Mỗi loại SafetyCategory chỉ được có tối đa một chế độ cài đặt. API sẽ chặn mọi nội dung và phản hồi không đáp ứng ngưỡng do các chế độ cài đặt này đặt ra. Danh sách này 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 gây hại được hỗ trợ là HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT, HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_CIVIC_INTEGRITY, HARM_CATEGORY_JAILBREAK. 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ó. Ngoài ra, hãy tham khảo Hướng dẫn về an toàn để tìm hiểu cách kết hợp các yếu tố an toàn vào ứng dụng AI của bạn.

continuationToken string (bytes format)

Không bắt buộc. Mã thông báo tiếp tục mờ được dùng để tiếp tục tạo từ phản hồi models.generateContent hoặc models.streamGenerateContent trước đó đã dừng khi finishReason được đặt thành CONTINUATION. Xin lưu ý rằng contents là bắt buộc và phải sao chép giống hệt câu lệnh cũng như nhật ký trò chuyện từ yêu cầu ban đầu khi mã thông báo tiếp tục được cung cấp trong một yêu cầu.

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

labels map (key: string, value: string)

Không bắt buộc. Nhãn có siêu dữ liệu do người dùng xác định cho yêu cầu.

Không bắt buộc. Nhãn phải tuân thủ các yêu cầu tiêu chuẩn về nhãn Cloud hợp nhất: – Khoá nhãn phải bắt đầu bằng một chữ cái. – Khoá và giá trị của nhãn không được dài quá 63 ký tự (điểm mã Unicode) và chỉ được chứa chữ cái viết thường, ký tự số, dấu gạch dưới và dấu gạch ngang. – Được phép sử dụng ký tự quốc tế.

Cách sử dụng: – Giá trị nhận dạng an toàn của trình tổng hợp: Sử dụng khoá safety_identifier (ví dụ: {"safety_identifier": "user_session_123"})

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

systemInstruction object (Content)

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

generationConfig object (GenerationConfig)

Không bắt buộc. Các tuỳ chọn cấu hình cho việc tạo và kết quả của mô hình.

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 nhằm 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, cấu hình này sẽ được ưu tiên hơn cấu hình ghi nhật ký ở cấp dự án.

Yêu cầu mẫu

Văn bản

Python

from google import genai

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

Node.js

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

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

Go

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

Shell

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

Java

Client client = new Client();

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

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

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.8-flash",
    contents=["Tell me about this instrument", organ],
)
print(response.text)

Node.js

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

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

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

Go

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

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

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

Shell

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

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

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

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

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.8-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.8-flash",
    contents=["Give me a summary of this audio file.", sample_audio],
)
print(response.text)

Node.js

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

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

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

Go

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

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

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

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

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

Shell

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

tmp_header_file=upload-header.tmp

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

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

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

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

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

cat response.json
echo

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

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.8-flash", contents=[myfile, "Describe this video clip"]
)
print(f"{response.text=}")

Node.js

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

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

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

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

Go

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

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

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

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

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

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

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

Shell

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

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

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

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

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

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

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

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

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

cat response.json
echo

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

PDF

Python

from google import genai

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

Go

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

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

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

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

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

Shell

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


echo $MIME_TYPE
tmp_header_file=upload-header.tmp

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

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

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

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

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

cat response.json
echo

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

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.8-flash",
    history=[
        types.Content(role="user", parts=[types.Part(text="Hello")]),
        types.Content(
            role="model",
            parts=[
                types.Part(
                    text="Great to meet you. What would you like to know?"
                )
            ],
        ),
    ],
)
response = chat.send_message(message="I have 2 dogs in my house.")
print(response.text)
response = chat.send_message(message="How many paws are in my house?")
print(response.text)

Node.js

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

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

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

Go

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

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

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

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

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

Shell

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

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.8-flash",
        GenerateContentConfig.builder()
            .systemInstruction(userContent)
            .systemInstruction(modelContent)
            .build());

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

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

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.8-flash"

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

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

Node.js

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

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

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

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

Go

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

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

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

Mô hình 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.8-flash",
    contents="List a few popular cookie recipes.",
    config=types.GenerateContentConfig(
        response_mime_type="application/json", response_schema=list[Recipe]
    ),
)
print(result)

Node.js

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

Go

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

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

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

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

Shell

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

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.8-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.8-flash",
    contents=(
        "Write and execute code that calculates the sum of the first 50"
        " prime numbers. Ensure that only the executable code and its"
        " resulting output are generated."
    ),
)
# Each part may contain text, executable code, or an execution result.
for part in response.candidates[0].content.parts:
  print(part, "\n")

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

Go

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

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

// Print the response.
printResponse(response)

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

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.8-flash", prompt, null);

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

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

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.8-flash",
    config=types.GenerateContentConfig(
        tools=[add, subtract, multiply, divide]
    ),
)
response = chat.send_message(
    message=(
        "I have 57 cats, each owns 44 mittens, how many mittens is that in"
        " total?"
    )
)
print(response.text)

Go

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

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

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

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

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

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

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

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

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

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

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

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

printResponse(finalResponse)

Node.js

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Shell


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

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

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

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

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.8-flash",
        "I have 57 cats, each owns 44 mittens, how many mittens is that in total?",
        config);

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

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

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

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

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

System.out.println(result);

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.8-flash",
    contents="Tell me a story about a magic backpack.",
    config=types.GenerateContentConfig(
        candidate_count=1,
        stop_sequences=["x"],
        max_output_tokens=20,
        temperature=1.0,
    ),
)
print(response.text)

Node.js

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

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

console.log(response.text);

Go

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

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

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

printResponse(response)

Shell

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

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.8-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.8-flash",
    contents=unsafe_prompt,
    config=types.GenerateContentConfig(
        safety_settings=[
            types.SafetySetting(
                category="HARM_CATEGORY_HATE_SPEECH",
                threshold="BLOCK_MEDIUM_AND_ABOVE",
            ),
            types.SafetySetting(
                category="HARM_CATEGORY_HARASSMENT",
                threshold="BLOCK_ONLY_HIGH",
            ),
        ]
    ),
)
try:
  print(response.text)
except Exception:
  print("No information generated by the model.")

print(response.candidates[0].safety_ratings)

Node.js

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

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

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

Go

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

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

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

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

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

Shell

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

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

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.8-flash", unsafePrompt, config);

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

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

Chỉ 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.8-flash",
    contents="Good morning! How are you?",
    config=types.GenerateContentConfig(
        system_instruction="You are a cat. Your name is Neko."
    ),
)
print(response.text)

Node.js

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

Go

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

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

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

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

Shell

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

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.8-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 câu trả lời trực tuyến từ mô hình dựa trên dữ liệu đầu vào GenerateContentRequest.

Điểm cuối

bài đăng https://generativelanguage.googleapis.com/v1beta/{model=models/*}:streamGenerateContent

Tham số đường dẫn

model string

Bắt buộc. Tên của Model cần dùng để tạo nội dung hoàn thà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 truy vấn một lượt, đây là một thực thể 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 Tools mà Model 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. Tool được hỗ trợ là Function và codeExecution. Hãy tham khảo hướng dẫn về Gọi hàm và Thự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 vào ngày GenerateContentRequest.contents và GenerateContentResponse.candidates. Mỗi loại SafetyCategory chỉ được có tối đa một chế độ cài đặt. API sẽ chặn mọi nội dung và phản hồi không đáp ứng ngưỡng do các chế độ cài đặt này đặt ra. Danh sách này 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 gây hại được hỗ trợ là HARM_CATEGORY_HATE_SPEECH, HARM_CATEGORY_SEXUALLY_EXPLICIT, HARM_CATEGORY_DANGEROUS_CONTENT, HARM_CATEGORY_HARASSMENT, HARM_CATEGORY_CIVIC_INTEGRITY, HARM_CATEGORY_JAILBREAK. 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ó. Ngoài ra, hãy tham khảo Hướng dẫn về an toàn để tìm hiểu cách kết hợp các yếu tố an toàn vào ứng dụng AI của bạn.

continuationToken string (bytes format)

Không bắt buộc. Mã thông báo tiếp tục mờ được dùng để tiếp tục tạo từ phản hồi models.generateContent hoặc models.streamGenerateContent trước đó đã dừng khi finishReason được đặt thành CONTINUATION. Xin lưu ý rằng contents là bắt buộc và phải sao chép giống hệt câu lệnh cũng như nhật ký trò chuyện từ yêu cầu ban đầu khi mã thông báo tiếp tục được cung cấp trong một yêu cầu.

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

labels map (key: string, value: string)

Không bắt buộc. Nhãn có siêu dữ liệu do người dùng xác định cho yêu cầu.

Không bắt buộc. Nhãn phải tuân thủ các yêu cầu tiêu chuẩn về nhãn Cloud hợp nhất: – Khoá nhãn phải bắt đầu bằng một chữ cái. – Khoá và giá trị của nhãn không được dài quá 63 ký tự (điểm mã Unicode) và chỉ được chứa chữ cái viết thường, ký tự số, dấu gạch dưới và dấu gạch ngang. – Được phép sử dụng ký tự quốc tế.

Cách sử dụng: – Giá trị nhận dạng an toàn của trình tổng hợp: Sử dụng khoá safety_identifier (ví dụ: {"safety_identifier": "user_session_123"})

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

systemInstruction object (Content)

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

generationConfig object (GenerationConfig)

Không bắt buộc. Các tuỳ chọn cấu hình cho việc tạo và kết quả của mô hình.

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 nhằm đưa ra 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, cấu hình này sẽ được ưu tiên hơn cấu hình ghi nhật ký ở cấp dự án.

Yêu cầu mẫu

Văn bản

Python

from google import genai

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

Node.js

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

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

Go

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

Shell

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

Java

Client client = new Client();

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

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

responseStream.close();

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.8-flash",
    contents=["Tell me about this instrument", organ],
)
for chunk in response:
  print(chunk.text)
  print("_" * 80)

Node.js

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

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

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

Go

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

Shell

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

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

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.8-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.8-flash",
    contents=["Give me a summary of this audio file.", sample_audio],
)
for chunk in response:
  print(chunk.text)
  print("_" * 80)

Go

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

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

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

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

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

Shell

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

tmp_header_file=upload-header.tmp

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

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

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

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

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

cat response.json
echo

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.8-flash", contents=[myfile, "Describe this video clip"]
)
for chunk in response:
  print(chunk.text)
  print("_" * 80)

Node.js

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

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

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

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

Go

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

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

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

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

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

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

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

Shell

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

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

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

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

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

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

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

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

cat response.json
echo

PDF

Python

from google import genai

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

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

Go

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

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

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

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

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

Shell

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


echo $MIME_TYPE
tmp_header_file=upload-header.tmp

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

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

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

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

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

cat response.json
echo

Trò chuyện

Python

from google import genai
from google.genai import types

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

print(chat.get_history())

Node.js

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

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

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

console.log(chat.getHistory());

Go

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

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

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

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

fmt.Println(chat.History(false))

Shell

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

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.

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

Trường
candidates[] object (Candidate)

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 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ỉ có đầu ra. responseId được dùng để xác định từng phản hồi.

modelStatus object (ModelStatus)

Chỉ có đầu ra. Trạng thái 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 đã 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 điểm xếp hạng.

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

BlockReason

Chỉ định 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 sử 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 danh mục đó.
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ó chứa 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 Các phương á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 bạn đặt cachedContent, đây vẫn là tổng kích thước câu lệnh hiệu quả, 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 trên tất cả các câu trả lờ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 suy nghĩ cho các mô hình tư duy.

totalTokenCount integer

Tổng số mã thông báo cho yêu cầu tạo (câu lệnh + câu lệnh sử dụng công cụ + suy nghĩ + các câu trả lời đề xuất).

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 điểm 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

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 lần tinh chỉnh.

EXPERIMENTAL Các mô hình trong giai đoạn này chỉ dành cho mục đích thử nghiệm.
PREVIEW Các mô hình trong 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 trong giai đoạn này được coi là ổn định và sẵn sàng cho việc phát hành chính thức.
LEGACY Nếu mô hình đang ở giai đoạn này, thì tức là mô hình này sắp ngừng hoạt động 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 trong giai đoạn này không còn được dùng nữa. Không thể sử dụng các mô hình này.

RETIRED Các mô hình trong giai đoạn này sẽ ngừng hoạt động. 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 mô hình ngừng tạo mã thông báo.

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

safetyRatings[] object (SafetyRating)

Danh sách đ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 ứng cử viên do mô hình tạo.

Trường này có thể được điền thông tin trích dẫn cho bất kỳ văn bản nào 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 nền tảng.

tokenCount integer

Chỉ có đầu ra. Số lượng mã thông báo cho ứng viên này.

groundingAttributions[] object (GroundingAttribution)

Chỉ có đầu ra. Thông tin ghi nhận tác giả cho các 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ăn cứ cho ứng viên.

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 nhật ký trung bình của ứng viên.

logprobsResult object (LogprobsResult)

Chỉ có đầu ra. Điểm số khả năng ghi nhật ký cho 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 từ URL.

continuationToken string (bytes format)

Mã thông báo tiếp tục mờ không bắt buộc được trả về khi finishReason là CONTINUATION. Ứng dụng có thể truyền mã thông báo này trong GenerateContentRequest tiếp theo để tiếp tục tạo.

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

index integer

Chỉ có đầu ra. Chỉ mục của ứng viên trong danh sách ứng viên phản hồi.

finishMessage string

Không bắt buộc. Chỉ có đầu ra. Thông tin chi tiết về lý do mô hình ngừng tạo mã thông báo. Trường 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)
  },
  "continuationToken": string,
  "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 sử dụng.
STOP Điểm dừng tự nhiên của mô hình hoặc trình tự dừng được cung cấp.
MAX_TOKENS Đã đạt đến số lượng mã thông báo tối đa được chỉ định trong yêu cầu.
SAFETY Nội dung câu trả lời đề xuất đã bị gắn cờ vì lý do an toàn.
RECITATION Nội dung của câu trả lời đề xuất đã bị gắn cờ vì lý do trích dẫn.
LANGUAGE Nội dung câu trả lời đề xuất đã bị gắn cờ vì sử dụng ngôn ngữ không được hỗ trợ.
OTHER Không rõ lý do.
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 Quá trình tạo mã thông báo đã dừng do có thể chứa nội dung bị cấm.
SPII Quá trình tạo token đã 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 vì hình ảnh tạo sinh chứa nội dung vi phạm quy định về an toàn.
IMAGE_PROHIBITED_CONTENT Quá trình tạo hình ảnh đã dừng vì hình ảnh tạo sinh 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ó nội dung lặp lại.
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 quy tắc chuyển cấp.
PUP_LIMITED_DISABLED Cho biết quá trình tạo mã thông báo đã dừng vì tài khoản người dùng bị giới hạn hoặc bị vô hiệu hoá do vi phạm Chính sách về các hành vi bị cấm (PUP).
CONTINUATION Quá trình tạo mã thông báo đã dừng vì câu trả lời đạt đến giới hạn mã thông báo cho mỗi yêu cầu, nhưng quá trình tạo vẫn chưa hoàn tất. Bạn có thể tiếp tục câu trả lời của mô hình thông qua một yêu cầu tiếp theo bằng cách sử dụng continuationToken được trả về. Lưu ý: maxOutputTokens được tích luỹ qua các bước nhảy tiếp theo và phải được tăng hoặc bỏ qua một cách đơn điệu.

GroundingAttribution

Thông tin ghi nhậ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 cho nguồn đóng góp vào hoạt động phân bổ này.

content object (Content)

Nội dung nguồn thông tin cơ sở tạo nên thông tin ghi nhậ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 cho nguồn đóng góp vào hoạt động phân bổ này.

Trường
source Union type
Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
groundingPassage object (GroundingPassageId)

Giá trị nhận dạng cho một đoạn văn bản cùng dòng.

semanticRetrieverChunk object (SemanticRetrieverChunk)

Giá trị nhận dạng cho một Chunk được tìm nạp thông qua Trình truy xuất ngữ nghĩa.

Kết thúc các trường loại trừ lẫn nhau.
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 cho một phần trong GroundingPassage.

Trường
passageId string

Chỉ có đầu ra. Mã của đoạn văn bả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 một Chunk được truy xuất thông qua Trình truy xuất ngữ nghĩa được chỉ định trong GenerateAnswerRequest bằ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 ghi công. 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 liên kết thông tin được bật.

Trường
groundingChunks[] object (GroundingChunk)

Danh sách tài liệu tham khảo hỗ trợ được truy xuất từ nguồn thông tin thực tế được chỉ định. Khi truyền trực tuyến, trường này chỉ chứa những đoạn thông tin 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 hỗ trợ căn cứ.

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 dùng để dựa vào dữ liệu thực tế.

searchEntryPoint object (SearchEntryPoint)

Không bắt buộc. Mục nhập tìm kiếm trên Google cho các lượ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 dựa trên dữ liệu thực tế.

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 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 trên Google Tìm kiếm.

Trường
renderedContent string

Không bắt buộc. Đoạn mã nội dung web có thể được nhúng vào trang web hoặc thành phần hiển thị web 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ộ dữ liệu <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 phân đoạn bằng chứng hỗ trợ làm cơ sở cho câu trả lời của mô hình. Đó có thể là một đoạn thông tin trên web, bối cảnh được truy xuất từ một tệp hoặc thông tin từ Google Maps.

Trường
chunk_type Union type
Loại phân đoạn. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
web object (Web)

Đoạn thông tin cơ sở trên web.

image object (Image)

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

retrievedContext object (RetrievedContext)

Không bắt buộc. Phân đoạn căn cứ từ bối cảnh được công cụ tìm kiếm tệp truy xuất.

maps object (Maps)

Không bắt buộc. Phân đoạn căn cứ từ Google Maps.

Kết thúc các trường loại trừ lẫn nhau.
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 trích từ 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 văn bản 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 chứa hình ảnh.

domain string

Miền gốc của trang web 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 từ ngữ cảnh được 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ề bối cảnh được truy xuất.

uri string

Không bắt buộc. Tham chiếu URI 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 bối cảnh được truy xuất (nếu có).

mediaId string

Không bắt buộc. Tên tài nguyên blob của nội dung nghe nhì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

Người dùng đã cung cấp siêu dữ liệu 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, một danh sách chuỗi hoặc một số. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
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ị 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 sử dụng.

Kết thúc các trường loại trừ lẫn nhau.
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

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 thông tin cơ sở từ Google Maps. Một đoạn Maps tương ứng với một địa điểm.

Trường
uri string

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

title string

Tên của địa điểm.

text string

Nội dung mô tả bằng văn bản về câu trả lời về đị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)

Các nguồn cung cấp câu trả lời về đặc điểm của một địa điểm nhất định trên 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 nhất định 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 các nguồn này để trả lời câu hỏi về các đặc điểm của địa điểm (ví dụ: "Quán bar Foo có Wi-Fi không" hoặc "Quán bar Foo 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 thông tin đánh giá làm nguồn.

Trường
reviewSnippets[] object (ReviewSnippet)

Đoạn trích của 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 nhất định trên Google Maps.

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

ReviewSnippet

Gói gọn một đoạn trích của bài đánh giá của người dùng để trả lời 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ợ dựa trên dữ liệu thực tế.

Trường
groundingChunkIndices[] integer

Không bắt buộc. Danh sách các chỉ mục (vào "grounding_chunk" trong response.candidate.grounding_metadata) chỉ định các trích dẫn liên kết với tuyên bố. 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à có liên quan đến tuyên bố. Nếu phản hồi đang truyền trực tuyến, thì groundingChunkIndices sẽ tham chiếu đến các chỉ mục trên tất cả phản hồi. Ứng dụng khách có trách nhiệm tích luỹ các đoạn thông tin cơ sở từ tất cả các phản hồi (đồng thời duy trì cùng một thứ tự).

confidenceScores[] number

Không bắt buộc. Điểm độ tin cậy của tài liệu tham khảo hỗ trợ. Nằm trong khoảng từ 0 đến 1. 1 là mức độ tin tưởng 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 của ứng viên. Các chỉ mục này chỉ định phần nào được kết xuất có liên kết với nguồn hỗ trợ này.

segment object (Segment)

Phân khúc nội dung mà dịch vụ 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 khúc của nội dung.

Trường
partIndex integer

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

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 bắt đầu, 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 từ đầu Phần, không bao gồm, bắt đầu từ 0.

text string

Văn bản tương ứng với phân đ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 dựa trên dữ liệu thực tế.

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 này chỉ được điền sẵn khi bạn bật tính năng truy xuất động và dựa trên dữ liệu của Google Tìm kiếm. Điểm số này sẽ được so sánh với ngưỡng để xác định xem có kích hoạt Google Tìm kiếm 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 ứng viên được chọn có thể nằm trong hoặc không nằm trong topCandidates.

logProbabilitySum number

Tổng xác suất nhật ký cho tất 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

Ứng viên cho mã thông báo và điểm số logprobs.

Trường
token string

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

tokenId integer

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

logProbability number

Xác suất nhật ký của ứng viên.

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 từ URL.

Trường
urlMetadata[] object (UrlMetadata)

Danh sách bối cảnh từ 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.

Trường
retrievedUrl string

URL được 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 sử 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 tác giả nguồn cho một nội dung.

Trường
citationSources[] object (CitationSource)

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

Nguồn trích dẫ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 phân đoạn trong câu trả lời được lấy từ nguồn này.

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

endIndex integer

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

uri string

Không bắt buộc. URI được ghi nhận là nguồn cho một phần văn bản.

license string

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

Bạn phải cung cấp thông tin về giấy phép cho các đoạn mã được trích dẫn.

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

HarmCategory

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

Các danh mục này bao gồm nhiều loại nội dung 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ệ. KHÔNG DÙNG NỮA: Danh mục chỉ dành cho PaLM, không được các mô hình Gemini hỗ trợ.

HARM_CATEGORY_TOXICITY

PaLM – Nội dung thô lỗ, khiếm nhã hoặc tục tĩu. KHÔNG DÙNG NỮA: Danh mục chỉ dành cho PaLM, không được các mô hình Gemini hỗ trợ.

HARM_CATEGORY_VIOLENCE

PaLM – Mô tả các tình huống bạo lực đối với một cá nhân hoặc nhóm người, hoặc mô tả chung về cảnh máu me. KHÔNG DÙNG NỮA: Danh mục chỉ dành cho PaLM, không được các mô hình Gemini hỗ trợ.

HARM_CATEGORY_SEXUAL

PaLM – Chứa nội dung đề cập đến hành vi tình dục hoặc nội dung dâm dục khác. KHÔNG DÙNG NỮA: Danh mục chỉ dành cho PaLM, không được các mô hình Gemini hỗ trợ.

HARM_CATEGORY_MEDICAL

PaLM – Đưa ra lời khuyên y tế chưa được kiểm chứng. KHÔNG DÙNG NỮA: Danh mục chỉ dành cho PaLM, không được các mô hình Gemini hỗ trợ.

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. KHÔNG DÙNG NỮA: Danh mục chỉ dành cho PaLM, không được các mô hình Gemini hỗ trợ.

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 tổn hại đến tính liêm chính trong đời số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 cố gắng bỏ qua hoặc phá vỡ bộ nguyên tắc an toàn của mô hình (hành vi bẻ khoá).

ModalityTokenCount

Biểu thị thông tin đếm 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ố lượng mã thông báo 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 của phần nội dung

Enum
MODALITY_UNSPECIFIED Phương thức không 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 đánh giá an toàn bao gồm 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 theo mức độ an toàn dựa trên một số danh mục gây hại và xác suất phân loại tác 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. Xác suất 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 sẽ đưa ra xác suất nội dung 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 mà một nội dung gây ra.

Enum
HARM_PROBABILITY_UNSPECIFIED Xác suất chưa được chỉ định.
NEGLIGIBLE Nội dung có khả năng không an toàn ở mức không đáng kể.
LOW Nội dung có ít khả năng không an toàn.
MEDIUM Nội dung có khả năng trung bình là không an toàn.
HIGH Nội dung có nhiều khả năng không an toàn.

SafetySetting

Chế độ cài đặt an toàn, ảnh hưởng đến hành vi chặn vì lý do 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 cho phép nội dung bị chặn.

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 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 được chỉ định và cao hơn.

Enum
HARM_BLOCK_THRESHOLD_UNSPECIFIED Ngưỡng chưa được chỉ định.
BLOCK_LOW_AND_ABOVE Nội dung có mức độ rủi ro KHÔNG ĐÁNG KỂ sẽ được cho phép.
BLOCK_MEDIUM_AND_ABOVE Nội dung có mức độ KHÔNG ĐÁNG KỂ và THẤP sẽ được cho phép.
BLOCK_ONLY_HIGH Nội dung có mức độ rủi ro KHÔNG ĐÁNG KỂ, THẤP và TRUNG BÌNH sẽ được cho phép.
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, tức 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 gồm nhiều phần của một thông báo.

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

Trường
parts[] object (Part)

Parts được sắp xếp theo thứ tự tạo thành một thông báo duy nhất. Các phần có thể có loại MIME khác nhau.

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 đặt cho các cuộc trò chuyện nhiều lượt, nếu không thì 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 thuộc 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 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ó 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 byte thô.

Trường
thought boolean

Không bắt buộc. Cho biết phần này có phải là suy nghĩ của mô hình hay không.

thoughtSignature string (bytes format)

Không bắt buộc. Chữ ký mờ cho suy nghĩ để có thể sử 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 liên kết với Phần. Các tác nhân sử dụng genai.Part làm nội dung đại diện 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 hoặc một cách để ghép nhiều luồng Phần.

mediaResolution object (MediaResolution)

Không bắt buộc. Độ phân giải của 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.

audioTranscription object (AudioTranscription)

Không bắt buộc. Bản chép lời âm thanh (đầu vào hoặc đầu ra). Thuộc tính này chỉ được đặt khi Phần này chứa dữ liệu âm thanh.

speechMetadata object (SpeechMetadata)

Không bắt buộc. Siêu dữ liệu được áp dụng cho các phần văn bản để tuỳ chỉnh cách nói hoặc tổng hợp, chẳng hạn như chỉ định danh tính của người nói hoặc phong cách nói.

data Union type
Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
text string

Văn bản cùng dòng.

inlineData object (Blob)

Byte nội dung nghe nhìn cùng dòng.

functionCall object (FunctionCall)

Một FunctionCall dự đoán được trả về từ mô hình, 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 đối số.

functionResponse object (FunctionResponse)

Kết quả đầu ra của 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 kết quả đầu ra của 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ả 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 sẵ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ẽ gửi lại thông báo này cho API.

toolResponse object (ToolResponse)

Kết quả của quá trình thực thi ToolCall phía máy chủ. Trường này được ứng dụng khách điền sẵn kết quả thực thi ToolCall tương ứng.

Kết thúc các trường loại trừ lẫn nhau.
metadata Union type
Kiểm soát quá trình xử lý trước dữ liệu bổ sung. Đặt giá trị này khi có inline_data hoặc file_data để định cấu hình quá trình xử lý trước nội dung nghe nhìn tĩnh cho mỗi phần. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
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 khi dữ liệu video được trình bày trong inlineData hoặc fileData.

Kết thúc các trường loại trừ lẫn nhau.
Biểu diễn dưới dạng JSON
{
  "thought": boolean,
  "thoughtSignature": string,
  "partMetadata": {
    object
  },
  "mediaResolution": {
    object (MediaResolution)
  },
  "mediaProcessing": enum (MediaProcessing),
  "audioTranscription": {
    object (AudioTranscription)
  },
  "speechMetadata": {
    object (SpeechMetadata)
  },

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

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

Giọt nước

Byte nội dung nghe nhìn thô.

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

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 tệp đượ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 bài viết Đị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.

displayName string

Không bắt buộc. Chỉ định tên dùng để tham chiếu đến blob này cho mô hình (ví dụ: "my_blob.png"). Được dùng làm giá trị nhận dạng tệp đối chiếu blob khi verbalizationMode được đặt thành REFERENCE_ONLY.

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

FunctionCall

Một FunctionCall dự đoán được trả về từ mô hình, 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 đối số.

Trường
id string

Không bắt buộc. Giá trị nhận dạng riêng biệ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, có độ dài tối đa là 128.

args object (Struct format)

Không bắt buộc. Các tham số và giá trị của 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 kết quả đầu ra từ hàm được dùng làm ngữ cảnh cho mô hình. Trường này phải chứa kết quả của một FunctionCall được thực hiện dựa trên thông tin 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 nhắm đến. 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, có độ 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. Phương thức gọi có thể sử dụng bất kỳ khoá nào mà họ chọn, miễn là phù hợp với cú pháp của hàm để trả về kết quả của hàm, ví dụ: "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 con 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. Xem https://ai.google.dev/gemini-api/docs/function-calling#multimodal.

parts[] object (FunctionResponsePart)

Không bắt buộc. Parts theo thứ tự tạo thành một phản hồi của hàm. Các phần có thể có các loại MIME IANA khác nhau.

willContinue boolean

Không bắt buộc. Báo hiệu rằng lệnh gọi hàm vẫn tiếp tục và sẽ trả về nhiều phản hồi hơn, 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 thì 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

Kiểu dữ liệu chứa nội dung nghe nhìn trong tin nhắn FunctionResponse.

FunctionResponsePart bao gồm dữ liệu có kiểu dữ liệu 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ó 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 byte thô.

Trường
data Union type
Dữ liệu của phần phản hồi hàm. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
inlineData object (FunctionResponseBlob)

Byte nội dung nghe nhìn cùng dòng.

Kết thúc các trường loại trừ lẫn nhau.
Biểu diễn dưới dạng JSON
{

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

FunctionResponseBlob

Byte nội dung nghe nhìn thô 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 loại MIME không được hỗ trợ, hệ thống sẽ trả về lỗi. Để xem danh sách đầy đủ các loại tệp được hỗ trợ, hãy xem bài viết Đị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

Chỉ định cách lên lịch phản hồi trong cuộc trò chuyện.

Enum
SCHEDULING_UNSPECIFIED Giá trị này không được sử 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 bối cảnh cuộc trò chuyện và nhắc tạo kết quả 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 bối cảnh cuộc trò chuyện, làm gián đoạn quá trình tạo đang diễn ra và nhắc tạo kết quả.

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.

displayName string

Không bắt buộc. Chỉ định tên dùng để tham chiếu đến tệp này cho mô hình (ví dụ: "my_file.pdf"). Được dùng làm giá trị nhận dạng tệp đối chiếu khi verbalizationMode được đặt thành REFERENCE_ONLY.

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

ExecutableCode

Mã do mô hình tạo ra để 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ẽ được tự động 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 riêng biệt của phần ExecutableCode. Máy chủ trả về CodeExecutionResult có id 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ả thực thi ExecutableCode.

Chỉ được tạo khi sử 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 áp dụng. Chỉ được điền sẵn nếu ExecutableCode tương ứng có mã nhận dạng.

outcome enum (Outcome)

Bắt buộc. Kết quả của việc thực thi mã.

output string

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

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

Kết quả

Bảng 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 Quá trình thực thi mã diễn ra quá lâu nên đã bị huỷ. Có thể có hoặc không có output một phần.

ToolCall

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ách KHÔNG được thực thi ToolCall này. Thay vào đó, ứng dụng khách phải truyền ToolCall này trở lại API trong một 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 riêng biệt của lệnh gọi công cụ. Máy chủ trả về phản hồi của công cụ có id khớ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ụ không xác định.
GOOGLE_SEARCH_WEB Công cụ Google Tìm kiếm, liên kết với Tool.google_search.search_types.web_search.
GOOGLE_SEARCH_IMAGE Công cụ tìm kiếm hình ảnh, liên kết với Tool.google_search.search_types.image_search.
URL_CONTEXT Công cụ bối cảnh từ URL, liên kết với Tool.url_context.
GOOGLE_MAPS Công cụ Google Maps, liên kết với Tool.google_maps.

ToolResponse

Kết quả của quá trình thực thi ToolCall phía máy chủ. Tin nhắn 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 phải 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

Siêu dữ liệu mô tả nội dung video đầu vào. Đặt giá trị này trong Part.video_metadata hoặc FunctionResponsePart.video_metadata khi inlineData hoặc fileData chứa video để định cấu hình quá trình xử lý trước video tĩnh (chẳng hạn như cắt bớt thời gian, tốc độ khung hình, số lượng khung hình tối đa hoặc các lớp nội dung được trích xuất).

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, kết thúc bằng "s". Ví dụ: "3.5s".

endOffset string (Duration format)

Không bắt buộc. Độ lệch kết thúc của video.

Thời lượng tính bằng giây, có tối đa 9 chữ số thập phân, 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 không được 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 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. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
level enum (Level)

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

Kết thúc các trường loại trừ lẫn nhau.
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 Độ phân giải của nội dung nghe nhìn chưa được đặt.
MEDIA_RESOLUTION_LOW Độ phân giải của nội dung nghe nhìn được đặt ở mức thấp.
MEDIA_RESOLUTION_MEDIUM Đã đặt độ phân giải của nội dung nghe nhìn thành trung bình.
MEDIA_RESOLUTION_HIGH Đã đặt độ phân giải của nội dung nghe nhìn thành cao.
MEDIA_RESOLUTION_ULTRA_HIGH Đã đặt độ phân giải của nội dung nghe nhìn thành 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 là xử lý theo mô hình cụ thể.
STATIC Trích xuất khung hình theo tốc độ cố định. Tất cả khung hình đều được đặt trong ngữ cảnh.
AGENTIC Điều hướng động dựa trên mô hình. Nên dùng cho hầu hết các trường hợp sử dụng.

AudioTranscription

Bản chép lời của một phần âm thanh. Đối với âm thanh có nhiều người nói, mỗi phân đoạn người nói là một Phần riêng biệt có AudioTranscription riêng mang speakerLabel.

Trường
text string

Bắt buộc. Văn bản chép lời của đoạn âm thanh này.

speakerLabel string

Không bắt buộc. Nhãn xác định người nói của đoạn âm thanh này (ví dụ: "spk_1", "spk_2"). Có mặt khi tính năng phân biệt người nói được thiết lập.

words[] object (WordInfo)

Không bắt buộc. Bản chép lời chi tiết ở cấp độ từ và thông tin chi tiết về thời gian. Xuất hiện khi wordTimestamp được đặt.

Biểu diễn dưới dạng JSON
{
  "text": string,
  "speakerLabel": string,
  "words": [
    {
      object (WordInfo)
    }
  ]
}

WordInfo

Thông tin về một từ được nhận dạng.

Trường
word string

Bắt buộc. Bản chép lời của từ.

startOffset string (Duration format)

Không bắt buộc. Độ lệch bắt đầu theo thời gian của từ so với thời điểm bắt đầu của âm thanh.

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

endOffset string (Duration format)

Không bắt buộc. Độ lệch kết thúc theo thời gian của từ so với thời điểm bắt đầu âm thanh.

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

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

SpeechMetadata

Siêu dữ liệu lời nói cho text phần.

Trường
speaker string

Không bắt buộc. Tên người nói (không bắt buộc) để tổng hợp nhiều người nói.

style string

Không bắt buộc. Hướng dẫn không bắt buộc về phong cách cho tính năng tổng hợp lời nói.

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

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ã 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 điểm tạo môi trường theo định dạng ISO 8601 (YYYY-MM-DDThh:mm:ssZ).

updated string

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

lastAccessed string

Chỉ có đầu ra. Thời gian truy cập gần đây nhất vào môi trường, theo đị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. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
networkAllowlist object (EnvironmentNetworkEgressAllowlist)

Chỉ cho phép một số miền cụ thể.

networkMode enum (NetworkMode)

Chế độ lưu lượng truy cập ra ngoài mạng.

Kết thúc các trường loại trừ lẫn nhau.
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ế độ lưu lượng truy cập ra ngoài 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 sử dụng.
DISABLED Tất cả lưu lượng truy cập ra ngoà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 kiểu này có thể là đối tượng, nhưng cũng có thể là dữ liệu gốc 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ể sử 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ố. Thông tin này có thể chứa ví dụ về cách sử dụng. Nội dung mô tả tham số có thể được định dạng dưới dạng Markdown.

nullable boolean

Không bắt buộc. Cho biết 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 Enum Direction là: {type:STRING, format:enum, enum:["EAST", NORTH", "SOUTH", "WEST"]}

maxItems string (int64 format)

Không bắt buộc. Số 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. Cá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 thuộc tính tối thiểu 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. SCHEMA FIELDS FOR TYPE STRING Minimum length of the 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 một biểu thức chính quy.

example value (Value format)

Không bắt buộc. Ví dụ về đối tượng. Sẽ 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) giản đồ 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à trường chuẩn trong thông số kỹ thuật của OpenAPI. 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 Lược đồ JSON, trường này dành cho trình tạo tài liệu và không ảnh hưởng đến việc xác thực. Do đó, trường này được đưa vào đây và bị bỏ qua để các nhà phát triển gửi giản đồ có trường default không gặp 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. TRƯỜNG LƯỢC ĐỒ CHO KIỂU INTEGER và NUMBER Giá trị tối thiểu của Type.INTEGER và Type.NUMBER

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 loại 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 rỗng.

Công cụ

Thông tin chi tiết về công cụ mà mô hình có thể sử 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.

Trường
functionDeclarations[] object (FunctionDeclaration)

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

Mô hình hoặc hệ thống không thực thi hàm. Thay vào đó, hàm đã xác định có thể được trả về dưới dạng FunctionCall 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 FunctionCall vào phản hồi. Lượt trò chuyện tiếp theo có thể chứa FunctionResponse có bối 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 dựa trên Google Tìm kiếm.

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 dành riêng cho 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 từ URL.

mcpServers[] object (McpServer)

Không bắt buộ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 dựa vào bối cảnh không gian địa lý liên quan đến truy vấn của người dùng để đưa ra câu trả lời của mô hình.

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. Phần khai báo này bao gồm tên hàm và các tham số. 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 sử 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, có độ dài tối đa là 128.

description string

Bắt buộc. Nội dung mô tả ngắn gọn về hàm.

behavior enum (Behavior)

Không bắt buộc. Chỉ định hành vi của hàm. 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. Giản đồ phải mô tả một đối tượng có các thuộc tính là tham số của 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 không thể dùng cùng lúc với parameters.

response object (Schema)

Không bắt buộc. Mô tả kết quả của hàm này ở định dạng Giản đồ JSON. Phản ánh Đối tượng phản hồi Open API 3.03. Schema 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ả kết quả của hàm này ở định dạng Giản đồ JSON. Giá trị do giản đồ chỉ định là giá trị phản hồi của hàm.

Trường này không thể dùng cùng lúc 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 sử dụng.
BLOCKING Nếu bạn đặt giá trị này, hệ thống sẽ đợi nhận phản hồi của hàm trước khi tiếp tục cuộc trò chuyện.
NON_BLOCKING Nếu bạn đặt tham số này, hệ thống sẽ không đợi để nhận phản hồi của hàm. Thay vào đó, mô hình sẽ cố gắng xử lý các phản hồi của hàm khi 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ụ truy xuất dữ liệu web công khai để làm cơ sở, do Google cung cấp.

Trường
dynamicRetrievalConfig object (DynamicRetrievalConfig)

Chỉ định cấu hình truy xuất độ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 tính năng truy xuất động.

Trường
mode enum (Mode)

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

dynamicThreshold number

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

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 động.

Enum
MODE_UNSPECIFIED Luôn kích hoạt tính năng truy xuất.
MODE_DYNAMIC Chỉ chạy truy xuất khi hệ thống quyết định 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 ExecutableCode và CodeExecutionResult chỉ được tạo khi sử dụng công cụ này.

GoogleSearch

Loại công cụ GoogleSearch. Công cụ hỗ trợ Google Tìm kiếm trong Mô hình. 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 phạm vi 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, 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 cách

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ể bật trên công cụ GoogleSearch.

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 chuẩn trên web để tìm thông tin 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 để tìm thông tin 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 được vận hành.

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. Một số trong số đó có thể được loại trừ rõ ràng khỏi việc tự động đưa vào. Việc này có thể phục vụ hai mục đích: 1. Sử dụng không gian hành động khác / bị hạn chế hơn. 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 tính năng kiểm tra phát hiện hành vi tiêm câu lệnh (prompt injection) trong yêu cầu sử dụng máy tính hay không.

disabledSafetyPolicies[] enum (SafetyPolicy)

Không bắt buộc. Chính sách an toàn bị vô hiệu hoá 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

Đại diện cho môi trường đang được vận hành, chẳng hạn như trình duyệt web.

Enum
ENVIRONMENT_UNSPECIFIED 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

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

Enum
SAFETY_POLICY_UNSPECIFIED Chính sách an toàn chưa xác định.
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 về việc tạo tài khoản.
DATA_MODIFICATION Chính sách an toàn cho việc sửa đổi dữ liệu.
LEGAL_TERMS_AND_AGREEMENTS Chính sách an toàn cho các điều khoản và thoả thuận pháp lý.

UrlContext

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

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

FileSearch

Công cụ FileSearch truy xuất kiến thức từ kho ngữ liệu Tìm kiếm ngữ nghĩa. Các tệp được nhập vào kho dữ liệu Truy xuất ngữ nghĩa bằ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 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.

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. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
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.

Kết thúc các trường loại trừ lẫn nhau.
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.

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 thao tác 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, 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, kết thúc bằng "s". Ví dụ: "3.5s".

terminateOnClose boolean

Có đóng phiên máy khách khi quá trình truyền tải đó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ụ GoogleMaps cung cấp bối cảnh không gian địa lý cho truy vấn 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 của tiện ích để hiển thị một tiện ích Google Maps có ngữ 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 mà sau đó, khi sử dụng mã thông báo thu được, 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, thì giá trị này sẽ mặc định là 30 phút trong tương lai. 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 mà sau đó, các phiên Live API mới sử dụng mã thông báo từ yêu cầu này sẽ bị từ chối.

Nếu không được đặt, giá trị này sẽ mặc định là 60 giây trong tương lai. 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ừ kết nối Live API.

Nếu fieldMask trống và bidiGenerateContentSetup có, 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. Tin nhắn thiết lập từ kết nối Live API 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 đầy đủ 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 theo phương thức cụ thể cho mã thông báo thu được. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
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.

Kết thúc các trường loại trừ lẫn nhau.
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 phiên Live API không được tính là một lần sử dụng. Nếu không được 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

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

Ứng dụng khách 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. Giá trị này đóng vai trò 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 đây 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 riêng biệt.

tools[] object (Tool)

Không bắt buộc. Danh sách Tools mà mô hình có thể sử 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 SessionResumptionUpdate thông báo.

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 bối cảnh khi vượt quá độ dài đã định cấu hình.

inputAudioTranscription object (AudioTranscriptionConfig)

Không bắt buộc. Nếu bạn đặt chính sách này, tính năng chép lời cho dữ liệu nhập bằng giọng nói sẽ được bật. 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, tuỳ chọn này sẽ bật tính năng chép lời cho đầ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ủ.

labels map (key: string, value: string)

Không bắt buộc. Nhãn có siêu dữ liệu do người dùng xác định cho yêu cầu.

Không bắt buộc. Nhãn phải tuân thủ các yêu cầu tiêu chuẩn về nhãn Cloud hợp nhất: – Khoá nhãn phải bắt đầu bằng một chữ cái. – Khoá và giá trị của nhãn không được dài quá 63 ký tự (điểm mã Unicode) và chỉ được chứa chữ cái viết thường, ký tự số, dấu gạch dưới và dấu gạch ngang. – Được phép sử dụng ký tự quốc tế.

Cách sử dụng: – Giá trị nhận dạng an toàn của trình tổng hợp: Sử dụng khoá safety_identifier (ví dụ: {"safety_identifier": "user_session_123"})

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

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)
  },
  "labels": {
    string: string,
    ...
  }
}

GenerationConfig

Các lựa chọn cấu hình cho việc tạo và kết quả của mô hình. Không phải tham số nào cũng có thể định cấu hình cho mọi mô hình.

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 kết quả. 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) Kết quả dạng văn bản. application/json: Phản hồi JSON trong các câu trả lời đề xuất. text/x.enum: ENUM dưới dạng phản hồi chuỗi trong các đề xuất phản hồi. 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à đối tượng, dữ liệu gốc hoặc mảng.

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

Không dùng nữa. Thay vào đó, hãy sử dụng responseFormat.

_responseJsonSchema
(deprecated)
value (Value format)

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

Nếu bạn đặt thuộc tính này, bạn phải bỏ qua responseSchema nhưng bắt buộc phải có responseMimeType.

Mặc dù bạn có thể gửi toàn bộ Lược đồ 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 đây đượ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 vòng được mở rộng ở một mức độ hạn chế 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 rỗng là không đủ.) Nếu bạn đặt $ref trên một giản đồ phụ, thì bạn không thể đặt thuộc tính nào khác, ngoại trừ những thuộc tính bắt đầu bằng $.

Không dùng nữa. Thay vào đó, hãy sử dụng responseFormat.

responseJsonSchema value (Value format)

Không bắt buộc. Thông tin 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. 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à cần được dự kiến trong phản hồi. Đây là kết quả khớp chính xác với các phương thức của phản hồi.

Một mô hình có thể có nhiều kiểu kết hợp các 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 không được đặ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 với các mô hình thế hệ trước (nhóm mô hình 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 câu trả lời đề xuất.

Lưu ý: Giá trị mặc định sẽ khác nhau 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 kết quả đầu ra.

Lưu ý: Giá trị mặc định sẽ khác nhau 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].

Trường này không còn được hỗ trợ và sẽ bị bỏ qua mà không có thông báo trên Gemini 3.6 Flash và các mô hình mới hơn.

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

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 Top-k 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 Nucleus 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 tuỳ theo Model và được chỉ định bằng thuộc tính Model.top_p được trả về từ hàm getModel. 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 top-k và không cho phép đặt topK cho các yêu cầu.

Trường này không còn được hỗ trợ và sẽ bị bỏ qua mà không có thông báo trên Gemini 3.6 Flash và các mô hình mới hơn.

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 (nucleus) hoặc kết hợp phương pháp lấy mẫu Top-k và nucleus. Phương pháp lấy mẫu top-k 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 chế độ cài đặt 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 được trả về từ hàm getModel. 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 top-k và không cho phép đặt topK cho các yêu cầu.

Trường này không còn được hỗ trợ và sẽ bị bỏ qua mà không có thông báo trên Gemini 3.6 Flash và các mô hình mới hơn.

seed integer

Không bắt buộc. Hạt giống 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 hạt giống đượ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 logprob của mã thông báo tiếp theo nếu mã thông báo đó đã xuất hiện trong phản hồi.

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

Hình phạt dương sẽ không khuyến khích việc sử dụng các mã thông báo đã được dùng trong phản hồi, từ đó tăng vốn từ vựng.

Hình phạt âm sẽ khuyến khích việc sử dụng các mã thông báo đã được dùng trong phản hồi, làm giảm vốn từ vựng.

frequencyPenalty number

Không bắt buộc. Hình phạt tần suất được áp dụng cho logprob 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.

Hình phạt dương sẽ không khuyến khích việc sử dụng các mã thông báo đã được dùng, tỷ lệ thuận với số lần mã thông báo đó được dùng: Mã thông báo càng được 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âu trả lời.

Thận trọng: Hình phạt âm sẽ khuyến khích mô hình sử dụng lại mã thông báo theo tỷ lệ với số lần mã thông báo đó được sử dụng. Giá trị âm nhỏ sẽ làm giảm vốn từ vựng của câu trả lời. Giá trị âm càng lớn thì mô hình càng 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ả ứng viên được chọn) để trả về ở mỗi bước giải mã trong Candidate.logprobs_result. Số phải nằm trong khoảng [0, 20].

enableEnhancedCivicAnswers boolean

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

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 luận. 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 nội dung nghe nhìn được chỉ định sẽ được sử dụng.

enableAffectiveDialog boolean

Không bắt buộc. Nếu bạn bật tính năng này, mô hình sẽ phát hiện cảm xúc và điều chỉnh 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 cho bản 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 phản hồ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 cho việc tạo lời nói 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. 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-RU và th-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 để loa sử dụng. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
prebuiltVoiceConfig object (PrebuiltVoiceConfig)

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

voice string

Không bắt buộc. Giá trị nhận dạng người nói để tổng hợp. Định dạng được hỗ trợ:

  • Tên người nói cho giọng nói tạo sẵn (ví dụ: Orus hoặc Kore).
  • Mã giọng nói cho giọng nói được lưu trữ (ví dụ: voice_xxx).
  • Khoá nhân bản giọng nói (ví dụ: voicekey_xxx).
Kết thúc các trường loại trừ lẫn nhau.
Biểu diễn dưới dạng JSON
{

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

PrebuiltVoiceConfig

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

Trường
voiceName string

Không bắt buộc. Tên của giọng nói đặt trước 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 tư duy.

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, 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 đưa ra câu trả lời. Giá trị mặc định phụ thuộc vào mô hình. Tham khảo Hướng dẫn về cấp độ tư duy để biết thêm thông tin chi tiết. Nên dùng cho các mô hình Gemini 3 trở lên. Nếu bạn sử dụng với các mẫu trước đó, lỗi sẽ xảy ra.

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 độ suy 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 Ít hoặc không cần suy nghĩ.
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 tạo sinh. 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 là 1K.

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

MediaResolution

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

Enum
MEDIA_RESOLUTION_UNSPECIFIED Độ phân giải của nội dung nghe nhìn chưa được đặt.
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 thành trung bình (256 token).
MEDIA_RESOLUTION_HIGH Độ phân giải của nội dung nghe nhìn được đặt ở mức cao (đã thu phóng khung hình với 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 phẳng, trong đó mỗi trường con 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 văn bản đầu ra.

schema value (Value format)

Không bắt buộc. Giản đồ JSON mà kết quả đầ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 kết quả văn bản.

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

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/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 sử 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 sử dụng.
INLINE Dữ liệu âm thanh được trả về cùng dòng trong phản hồi.
URI Dữ liệu âm thanh được trả về dưới dạng 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 hình ảnh đầu ra.

delivery enum (Delivery)

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

aspectRatio enum (AspectRatio)

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

imageSize enum (ImageSize)

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

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 kết quả hình ảnh.

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

Giao hàng

Chế độ phân phối cho kết quả hình ảnh.

Enum
DELIVERY_UNSPECIFIED Giá trị mặc định. Giá trị này không được sử 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 hình ảnh đầu ra.

Enum
ASPECT_RATIO_UNSPECIFIED Giá trị mặc định. Giá trị này không được sử 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 sử 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 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. Các 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ẽ lặp lại dữ liệu đầu vào. Nếu bạn chọn false, chúng tôi sẽ không tạo âm thanh cho ngôn ngữ đích.

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ề ngôn ngữ có trong âm thanh. Nếu bị bỏ qua hoặc để trống, thì chế độ này sẽ mặc định là 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ừ 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ừ vựng tuỳ chỉnh để hướng mô hình nhận dạng lời nói đến việc nhận dạng các cụm từ cụ thể (tên sản phẩm, danh từ riêng, biệt ngữ).

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.

mode enum (Mode)

Không bắt buộc. Định cấu hình chế độ chép lời. Các giá trị được hỗ trợ: VERBATIM, SMART. Nếu không được chỉ định, giá trị mặc định sẽ là bản chép lời VERBATIM. Ở chế độ SMART, mô hình sẽ loại bỏ từ thừa trong lời nói (loại bỏ từ đệm, từ lặp lại và từ nói nhầm), sửa lỗi ngữ pháp nhẹ, định dạng tự động (đoạn văn, dấu đầu dòng, danh sách được đánh số) và chỉnh sửa nhỏ cho người dùng (tự sửa lỗi trong dòng). Dấu thời gian và tính năng phân tách người nói không tương thích với chế độ SMART.

language_config Union type
Không dùng nữa: Hãy sử dụng language_codes cấp cao nhất. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
languageAuto
(deprecated)
object (LanguageAuto)

Không bắt buộc. Mô hình 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.

Kết thúc các trường loại trừ lẫn nhau.
Biểu diễn dưới dạng JSON
{
  "languageCodes": [
    string
  ],
  "adaptationPhrases": [
    string
  ],
  "customVocabulary": [
    string
  ],
  "wordTimestamp": boolean,
  "diarization": boolean,
  "mode": enum (Mode),

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

LanguageAuto

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ề các 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
  ]
}

Chế độ

Chế độ chép lời.

Enum
MODE_UNSPECIFIED Chế độ chép lời không xác định.
VERBATIM Chế độ chép lời nguyên văn.
SMART Chế độ chép lời thông minh.

RealtimeInputConfig

Định cấu hình hành vi nhập dữ 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, 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.

interimTranscriptTimestampEnabled boolean

Không bắt buộc. Định cấu hình dấu thời gian của bản chép lời tạm thời.

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

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 bạn bật chế độ này (mặc định), thì dữ liệu nhập bằng giọng nói và văn bản được phát hiện sẽ được tính là hoạt động. Nếu bị tắt, ứ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 giọng nói.

prefixPaddingMs integer

Không bắt buộc. Thời lượng cần thiết 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 điểm bắt đầu lời nói càng nhạy và lời nói càng ngắn thì càng dễ nhận dạng. Tuy nhiên, điều này cũng làm tăng khả năng xảy ra 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 âm thanh 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 lặ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 thời điểm bắt đầu 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 thời điểm bắt đầu nói thường xuyên hơn.
START_SENSITIVITY_LOW Tính năng tự động phát hiện sẽ ít phát hiện thời điểm bắt đầu nói hơn.

EndSensitivity

Xác định cách phát hiện điểm kết thúc 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 sẽ kết thúc lời nói thường xuyên hơn.
END_SENSITIVITY_LOW Tính năng tự động phát hiện sẽ ít khi kết thúc lời nói hơn.

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, việc bắt đầu hoạt động 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 ngay tại thời điểm bị gián đoạn. Đâ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, thì hành vi mặc định sẽ được chọn dựa trên mô hình. Ví dụ: đối với Gemini 2.5, giá trị mặc định là TURN_INCLUDES_ONLY_ACTIVITY, còn đối với Gemini 3.1 trở lên, giá trị 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 nhất, không bao gồm hoạt động không hoạt động (ví dụ: im lặng trên 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 nhất, bao gồm cả trạng thái không hoạt động (ví dụ: khoảng lặng trên 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 gần nhất. Khi bật 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 hoạt động.

Thông báo này được đưa vào 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

Tên người dùng của một phiên trước đó. Nếu không có, một phiên mới sẽ được tạo.

Giá trị xử lý phiên bắt nguồn từ 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

Bật tính năng 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 để cửa sổ này không vượt quá độ 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. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
slidingWindow object (SlidingWindow)

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

Kết thúc các trường loại trừ lẫn nhau.
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 tính năng nén cửa sổ ngữ cảnh.

Bạn có thể dùng tham số này để cân bằng giữa chất lượng và độ 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 đều 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ị mặc định sẽ là 80% giới hạn cửa sổ ngữ cảnh của mô hình. Như vậy, 20% còn lại sẽ dành cho yêu cầu tiếp theo của người dùng/câu trả lời tiếp theo 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. Bối cảnh thu được sẽ luôn bắt đầu từ đầu lượt của vai trò NGƯỜI DÙNG. Chỉ 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 điề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 đưa vào 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à xử lý trước các thông báo clientContent cho đến khi turnComplete là true. 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 turnComplete là true, ứ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ã thông báo có thể dùng để ràng buộc hành vi của phiên BidiGenerateContent.

Điểm cuối

bài đăng 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 mà sau đó, khi sử dụng mã thông báo thu được, 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, thì giá trị này sẽ mặc định là 30 phút trong tương lai. 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 mà sau đó, các phiên Live API mới sử dụng mã thông báo từ yêu cầu này sẽ bị từ chối.

Nếu không được đặt, giá trị này sẽ mặc định là 60 giây trong tương lai. 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ừ kết nối Live API.

Nếu fieldMask trống và bidiGenerateContentSetup có, 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. Tin nhắn thiết lập từ kết nối Live API 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 đầy đủ 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 theo phương thức cụ thể cho mã thông báo thu được. Sau đây là danh sách các trường loại trừ lẫn nhau. Tối đa một trong các trường sẽ được đặt trong phản hồi:
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.

Kết thúc các trường loại trừ lẫn nhau.
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 phiên Live API không được tính là một lần sử dụng. Nếu không được 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.