รวมเครื่องมือในตัวและการเรียกฟังก์ชัน
Gemini อนุญาตให้รวมเครื่องมือในตัว เช่น
google_search และการเรียกฟังก์ชัน
(หรือที่เรียกว่า เครื่องมือที่กำหนดเอง) ไว้ในการโต้ตอบครั้งเดียวได้โดยการเก็บรักษาและแสดง
ประวัติบริบทของการเรียกเครื่องมือ ชุดเครื่องมือในตัวและเครื่องมือที่กำหนดเองช่วยให้เวิร์กโฟลว์ที่ซับซ้อนและเป็นแบบ Agent ทำงานได้ เช่น โมเดลสามารถอ้างอิงข้อมูลเว็บแบบเรียลไทม์ก่อนที่จะเรียกตรรกะทางธุรกิจที่เฉพาะเจาะจงของคุณ
ตัวอย่างต่อไปนี้แสดงวิธีเปิดใช้ชุดเครื่องมือในตัวและเครื่องมือที่กำหนดเองด้วย google_search และฟังก์ชันที่กำหนดเอง getWeather
Python
from google import genai
client = genai.Client()
getWeather = {
"type": "function",
"name": "getWeather",
"description": "Gets the weather for a requested city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city and state, e.g. Utqiaġvik, Alaska",
},
},
"required": ["city"],
},
}
# The Interactions API manages context automatically across tool calls.
# The model will first use Google Search, then call getWeather.
interaction = client.interactions.create(
model="gemini-3-flash-preview",
input="What is the northernmost city in the United States? What's the weather like there today?",
tools=[
{"google_search": {}},
getWeather,
],
)
# Process steps: the interaction contains search results and a function call
for step in interaction.steps:
if step.type == "function_call":
print(f"Function call: {step.name} with args: {step.arguments}")
# In a real application, you would execute the function here
# and provide the result back to the model.
JavaScript
import { GoogleGenAI } from '@google/genai';
const client = new GoogleGenAI({});
const getWeather = {
type: "function",
name: "getWeather",
description: "Get the weather in a given location",
parameters: {
type: "object",
properties: {
location: {
type: "string",
description: "The city and state, e.g. San Francisco, CA"
}
},
required: ["location"]
}
};
// The Interactions API manages context automatically across tool calls.
// The model will first use Google Search, then call getWeather.
const interaction = await client.interactions.create({
model: "gemini-3-flash-preview",
input: "What is the northernmost city in the United States? What's the weather like there today?",
tools: [
{ googleSearch: {} },
getWeather,
],
});
// Process steps: the interaction contains search results and a function call
for (const step of interaction.steps) {
if (step.type === "function_call") {
console.log(`Function call: ${step.name} with args: ${JSON.stringify(step.arguments)}`);
// In a real application, you would execute the function here
// and provide the result back to the model.
}
}
REST
curl -X POST "https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-d '{
"model": "gemini-3-flash-preview",
"input": "What is the northernmost city in the United States? What'\''s the weather like there today?",
"tools": [
{ "type": "google_search" },
{
"type": "function",
"name": "getWeather",
"description": "Get the weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
}
},
"required": ["location"]
}
}
]
}'
วิธีการทำงาน
โมเดล Gemini 3 ใช้ การหมุนเวียนบริบทของเครื่องมือ เพื่อเปิดใช้ชุดเครื่องมือในตัวและเครื่องมือที่กำหนดเอง การหมุนเวียนบริบทของเครื่องมือช่วยให้เก็บรักษาและแสดงบริบทของเครื่องมือในตัว รวมถึงแชร์บริบทดังกล่าวกับเครื่องมือที่กำหนดเองในการโต้ตอบเดียวกันได้
เปิดใช้การรวมเครื่องมือ
- ใส่
function_declarationsพร้อมกับเครื่องมือในตัวที่ต้องการใช้เพื่อทริกเกอร์ลักษณะการทำงานของการรวม
API จะแสดงขั้นตอนต่อไปนี้
ในการตอบกลับการโต้ตอบ API จะแสดงขั้นตอนแยกต่างหากสำหรับการเรียกเครื่องมือในตัวและการเรียกฟังก์ชัน (เครื่องมือที่กำหนดเอง) ดังนี้
- ขั้นตอนเครื่องมือในตัว: API จะจัดการขั้นตอนเหล่านี้โดยอัตโนมัติ โดยจะเก็บรักษา บริบทไว้ในแต่ละรอบ
- ขั้นตอนการเรียกใช้ฟังก์ชัน: API จะแสดงขั้นตอน
function_callสำหรับฟังก์ชันที่กำหนดเอง คุณต้องรันฟังก์ชันและส่งผลลัพธ์กลับ
ช่องที่สำคัญในขั้นตอนที่แสดง
ช่องบางช่องในขั้นตอนที่แสดงมีความสำคัญต่อการเก็บรักษาบริบทของเครื่องมือและการเปิดใช้การรวมเครื่องมือ
id: พบในขั้นตอนfunction_callและfunction_responseตัวระบุที่ไม่ซ้ำกันซึ่งจับคู่การเรียกกับการตอบกลับsignature: พบในขั้นตอนthoughtรวมถึงขั้นตอนการเรียกเครื่องมือทั้งหมด (เช่นfunction_call) และขั้นตอนผลลัพธ์ (เช่นfunction_response) สำหรับโมเดล Gemini 3 ขึ้นไป บริบทที่เข้ารหัสนี้จะเปิดใช้การหมุนเวียนบริบทของเครื่องมือ ในการโต้ตอบต่างๆ
การจัดการช่องเหล่านี้
- โหมด Stateful (แนะนำ): เมื่อคุณใช้
previous_interaction_idเซิร์ฟเวอร์จะจัดการทั้งช่องidและsignatureโดยอัตโนมัติ - โหมด Stateless: เมื่อจัดการประวัติการสนทนาด้วยตนเอง คุณต้องส่งทั้งช่อง
idและsignatureกลับไปยังโมเดลในคำขอที่ตามมาเพื่อตรวจสอบความถูกต้องและเก็บรักษาบริบท SDK อย่างเป็นทางการจะจัดการขั้นตอนนี้โดยอัตโนมัติหากคุณส่งออบเจ็กต์การตอบกลับแบบเต็มกลับไปยังประวัติ
ข้อมูลเฉพาะของเครื่องมือ
เครื่องมือในตัวบางรายการจะแสดงอาร์กิวเมนต์ข้อมูลที่ผู้ใช้มองเห็นได้ซึ่งเฉพาะเจาะจงกับประเภทเครื่องมือ
| เครื่องมือ | อาร์กิวเมนต์การเรียกเครื่องมือที่ผู้ใช้มองเห็นได้ (หากมี) | การตอบกลับของเครื่องมือที่ผู้ใช้มองเห็นได้ (หากมี) |
|---|---|---|
| google_search | queries |
search_suggestions |
| google_maps | queries |
placesgoogle_maps_widget_context_token |
| url_context | urlsURLs to be browsed |
status: Browse statusretrieved_url: URLs browsed |
| file_search | ไม่มี | ไม่มี |
โทเค็นและการกำหนดราคา
โปรดทราบว่าระบบจะนับส่วนการเรียกเครื่องมือในตัวในคำขอรวมกับ prompt_token_count เนื่องจากตอนนี้คุณสามารถเห็นและรับขั้นตอนเครื่องมือระดับกลางเหล่านี้ได้แล้ว ขั้นตอนเหล่านี้จึงเป็นส่วนหนึ่งของประวัติการสนทนา ซึ่งจะเป็นเช่นนี้สำหรับ
กรณีของ คำขอ เท่านั้น ไม่ใช่ การตอบกลับ
เครื่องมือ Google Search เป็นข้อยกเว้นของกฎนี้ Google Search ใช้โมเดลการกำหนดราคาของตัวเองในระดับคําค้นหาอยู่แล้ว ดังนั้นระบบจึงไม่คิดค่าโทเค็นซ้ำ (ดูหน้าการกำหนดราคา)
อ่านข้อมูลเพิ่มเติมได้ในหน้าโทเค็น
ข้อจำกัด
- ตั้งค่าเป็นโหมด
validatedโดยค่าเริ่มต้น (ไม่รองรับโหมดauto) เมื่อเปิดใช้การหมุนเวียนบริบทของเครื่องมือ - เครื่องมือในตัว เช่น
google_searchอาศัยข้อมูลตำแหน่งและเวลาปัจจุบัน ดังนั้นหากsystem_instructionหรือfunction_declaration.descriptionมีข้อมูลตำแหน่งและเวลาที่ไม่สอดคล้องกัน ฟีเจอร์การรวมเครื่องมืออาจทำงานได้ไม่ดี
เครื่องมือที่รองรับ
การหมุนเวียนบริบทของเครื่องมือมาตรฐานใช้ได้กับเครื่องมือฝั่งเซิร์ฟเวอร์ (ในตัว) การรันโค้ดก็เป็นเครื่องมือฝั่งเซิร์ฟเวอร์เช่นกัน แต่มีโซลูชันในตัวสำหรับการหมุนเวียนบริบท การใช้คอมพิวเตอร์และการเรียกฟังก์ชันเป็นเครื่องมือฝั่งไคลเอ็นต์ และมีโซลูชันในตัวสำหรับการหมุนเวียนบริบทด้วย
| เครื่องมือ | ฝั่งการดำเนินการ | การรองรับการหมุนเวียนบริบท |
|---|---|---|
| Google Search | ฝั่งเซิร์ฟเวอร์ | รองรับ |
| Google Maps | ฝั่งเซิร์ฟเวอร์ | รองรับ |
| บริบท URL | ฝั่งเซิร์ฟเวอร์ | รองรับ |
| การค้นหาไฟล์ | ฝั่งเซิร์ฟเวอร์ | รองรับ |
| การรันโค้ด | ฝั่งเซิร์ฟเวอร์ | รองรับ (ในตัว ใช้ขั้นตอน code_execution และ code_execution_result) |
| การใช้คอมพิวเตอร์ | ฝั่งไคลเอ็นต์ | รองรับ (ในตัว ใช้ขั้นตอน function_call และ function_response) |
| ฟังก์ชันที่กำหนดเอง | ฝั่งไคลเอ็นต์ | รองรับ (ในตัว ใช้ขั้นตอน function_call และ function_response) |
ขั้นตอนถัดไป
- ดูข้อมูลเพิ่มเติมเกี่ยวกับการเรียกฟังก์ชันใน Gemini API
- สำรวจเครื่องมือที่รองรับ