הכלי Computer Use מאפשר לכם לבנות סוכני בקרה לדפדפן, לנייד ולמחשב, שמבצעים אינטראקציות ומשימות אוטומטיות. באמצעות צילומי מסך, המודל יכול "לראות" מסך מחשב ו "לפעול" על ידי יצירת פעולות ספציפיות בממשק המשתמש, כמו קליקים בעכבר וקלט מהמקלדת. בדומה לקריאה לפונקציה, תצטרכו להטמיע את סביבת ההפעלה בצד הלקוח כדי לקבל ולהפעיל את הפעולות של השימוש במחשב.
רשימת המודלים הנתמכים מופיעה במאמר גרסאות של מודלים. מודלים של Gemini 3.x תומכים בכמה יכולות מתקדמות:
- תמיכה בסביבות מרובות: אפשר ליצור סוכנים לסביבות דפדפן, נייד ומחשב.
- פעולות יעילות עם כוונות: הפעולות כוללות שדה
intentשמסביר את ההיגיון של המודל מאחורי כל שלב. - מדיניות בטיחות שאפשר להגדיר: אפשר לכוונן את התנהגות הבטיחות באמצעות קטגוריות מדיניות מובנות ושינויים בהגדרות ברירת המחדל.
- זיהוי הזרקת הנחיות: הפעלה של סריקת צילומי מסך כדי לזהות הוראות נסתרות של תוקפים.
באמצעות 'שימוש במחשב', אתם יכולים ליצור סוכנים שיכולים:
- להפוך לאוטומטית משימות חוזרות של הזנת נתונים או מילוי טפסים באתרים.
- ביצוע בדיקות אוטומטיות של אפליקציות אינטרנט ותהליכי משתמש
- ביצוע מחקר באתרים שונים (למשל, איסוף מידע על מוצרים, מחירים וביקורות מאתרי מסחר אלקטרוני כדי לקבל החלטה לגבי רכישה)
הנה דוגמה מינימלית לאתחול הלקוח ושליחת הנחיה למודל עם הכלי computer_use שמופעל בסביבת דפדפן:
Python
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model="gemini-3.7-flash",
input="Search for 'Gemini API' on Google.",
tools=[{"type": "computer_use", "environment": "browser"}]
)
print(interaction)
JavaScript
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI();
const interaction = await ai.interactions.create({
model: 'gemini-3.7-flash',
input: "Search for 'Gemini API' on Google.",
tools: [{ type: "computer_use", environment: "browser" }]
});
console.log(interaction);
איך פועלת התכונה 'שימוש במחשב'
כדי ליצור סוכן באמצעות מודל השימוש במחשב, צריך להגדיר לולאה רציפה בין האפליקציה לבין ה-API. מה הקוד יעשה בכל שלב:
- שליחת בקשה למודל
- האפליקציה שולחת בקשת API שמכילה את הכלי לשימוש במחשב, את הגדרות התצורה (כמו סביבת היעד), את ההנחיה של המשתמש וצילום מסך של המסך הנוכחי.
- קבלת התשובה של המודל
- המודל מנתח את המסך ואת ההנחיה ומחזיר תשובה שכוללת
function_callשמייצג פעולה בממשק המשתמש (כמו קליק, גלילה או הקשה על מקש). - במודלים של Gemini 3.x, התשובה כוללת גם נימוק
intentשמסביר למה המודל בחר בפעולה הזו. - התגובה עשויה לכלול גם
safety_decisionממערכת בטיחות פנימית שמסווגת את הפעולה כרגילה/מותרת,require_confirmation(נדרש אישור משתמש) או חסומה.
- המודל מנתח את המסך ואת ההנחיה ומחזיר תשובה שכוללת
- מבצעים את הפעולה שהתקבלה
- אם הפעולה מותרת (או אם המשתמש מאשר אותה), הקוד בצד הלקוח מנתח את
function_call, משנה את קנה המידה של הקואורדינטות המנורמלות כך שיתאימו לאזור התצוגה, ומבצע את הפעולה בסביבת היעד באמצעות כלי אוטומציה (כמו Playwright). אם הפעולה חסומה, הלקוח צריך להפסיק את ההפעלה או לטפל בהפרעה.
- אם הפעולה מותרת (או אם המשתמש מאשר אותה), הקוד בצד הלקוח מנתח את
- תיעוד המצב החדש של הסביבה
- אחרי שהפעולה מסתיימת, האפליקציה מצלמת צילום מסך חדש ושולחת אותו בחזרה למודל ב-
function_resultכדי לבקש את השלב הבא.
- אחרי שהפעולה מסתיימת, האפליקציה מצלמת צילום מסך חדש ושולחת אותו בחזרה למודל ב-
התהליך הזה חוזר על עצמו משלב 2, והמודל מתבקש שוב ושוב לבצע את הפעולה הבאה עד שהמשימה תושלם או תופסק.

איך מטמיעים את התכונה 'שימוש במחשב'
לפני שמתחילים להשתמש בכלי 'שימוש במחשב', צריך להגדיר:
- סביבת ביצוע מאובטחת: מריצים את הסוכן במכונה וירטואלית או במאגר מבודד כדי לבודד אותו ממערכת המארח ולהגביל את ההשפעה הפוטנציאלית שלו. הטמעה לדוגמה כוללת ארגז חול מבוסס Docker שמוכן לשימוש, ואפשר להשתמש בו כנקודת התחלה.
- מטפל בפעולות מצד הלקוח: הטמעת לוגיקה מצד הלקוח כדי להפעיל קואורדינטות, להקליד טקסט ולצלם צילומי מסך.
בדוגמאות שבהמשך נעשה שימוש בדפדפן אינטרנט כסביבת ההפעלה וב-Playwright כמטפל בצד הלקוח.
0. הגדרת Playwright
קודם כול, מתקינים את החבילות הנדרשות:
pip install google-genai playwright
playwright install chromium
לאחר מכן, מאתחלים מופע של דפדפן Playwright לשימוש בהרצה:
from playwright.sync_api import sync_playwright
# 1. Configure screen dimensions for the target environment
SCREEN_WIDTH = 1440
SCREEN_HEIGHT = 900
# 2. Start the Playwright browser
# In production, utilize a sandboxed environment.
playwright = sync_playwright().start()
# Set headless=False to see the actions performed on your screen
browser = playwright.chromium.launch(headless=False)
# 3. Create a context and page with the specified dimensions
context = browser.new_context(
viewport={"width": SCREEN_WIDTH, "height": SCREEN_HEIGHT}
)
page = context.new_page()
# 4. Navigate to an initial page to start the task
page.goto("https://www.google.com")
# The 'page', 'SCREEN_WIDTH', and 'SCREEN_HEIGHT' variables
# will be used in the steps below.
1. שליחת בקשה למודל
מאתחלים את ספריית הלקוח ומגדירים את הכלי 'שימוש במחשב'. שימו לב: אין צורך לציין את גודל התצוגה כשמגישים בקשה. המודל חוזה את קואורדינטות הפיקסלים שמותאמות לגובה ולרוחב של המסך.
Gemini 3.x
Python
משתמשים ב-google-genai Python SDK (גרסה 2.7.0 ואילך) כדי להגדיר בקשה לטירגוט סביבת הדפדפן:
from google import genai
client = genai.Client()
interaction = client.interactions.create(
model='gemini-3.7-flash',
input="Find a flight from SF to Hawaii on Jun 30th, coming back on Jul 6th",
tools=[
{
"type": "computer_use",
"environment": "browser",
"enable_prompt_injection_detection": True
}
]
)
print(interaction)
JavaScript
משתמשים ב-Node.js SDK @google/genai כדי להגדיר בקשה שמטרגטת את סביבת הדפדפן:
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI();
const interaction = await ai.interactions.create({
model: 'gemini-3.7-flash',
input: "Find a flight from SF to Hawaii on Jun 30th, coming back on Jul 6th",
tools: [
{
type: "computer_use",
environment: "browser",
enable_prompt_injection_detection: true
}
]
});
console.log(interaction);
REST
משתמשים ב-curl כדי לשלוח בקשה:
curl -X POST \
"https://generativelanguage.googleapis.com/v1beta/interactions" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.7-flash",
"input": "Find me a flight from SF to Hawaii on Jun 30th, coming back on Jul 6th. Start by navigating directly to flights.google.com",
"tools": [
{
"type": "computer_use",
"environment": "browser",
"enable_prompt_injection_detection": true
}
]
}'
Gemini 2.5 (גרסה קודמת)
Python
from google import genai
client = genai.Client()
# Specify predefined functions to exclude (optional)
excluded_functions = ["drag_and_drop"]
interaction = client.interactions.create(
model='gemini-2.5-computer-use-preview-10-2025',
input="Search for highly rated smart fridges on Google Shopping.",
tools=[
{
"type": "computer_use",
"environment": "browser",
"excluded_predefined_functions": excluded_functions
}
]
)
print(interaction)
JavaScript
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI();
// Specify predefined functions to exclude (optional)
const excludedFunctions = ["drag_and_drop"];
const interaction = await ai.interactions.create({
model: 'gemini-2.5-computer-use-preview-10-2025',
input: "Search for highly rated smart fridges on Google Shopping.",
tools: [
{
type: "computer_use",
environment: "browser",
excluded_predefined_functions: excludedFunctions
}
]
});
console.log(interaction);
2. קבלת התשובה מהמודל
מודל התגובה מציע קריאה לפונקציה. במודלים של Gemini 3.x, התשובה מכילה כוונת חשיבה רציונלית מותאמת אישית לצד קואורדינטות. בדוגמה הבאה מוצגות שתי התשובות:
Gemini 3.x
{
"steps": [
{
"type": "function_call",
"name": "click",
"arguments": {
"x": 450,
"y": 120,
"intent": "Click the search box to type the destination."
}
}
]
}
Gemini 2.5 (גרסה קודמת)
{
"steps": [
{
"type": "model_output",
"content": [
{
"type": "text",
"text": "I will type the search query into the search bar."
}
]
},
{
"type": "function_call",
"name": "type_text_at",
"arguments": {
"x": 371,
"y": 470,
"text": "highly rated smart fridges",
"press_enter": true
}
}
]
}
3. ביצוע הפעולות שהתקבלו
האפליקציה צריכה לנתח את קואורדינטות התגובה, לבצע את הפעולה ולשנות את קנה המידה שלהן מקואורדינטות נורמליות של 1,000x1,000.
הקוד שלמטה מטפל גם בפקודות של כלי מדור קודם (click_at, type_text_at) וגם בפקודות מודרניות יעילות (click, type).
Python
from typing import Any, List, Tuple
import time
def denormalize_x(x: int, screen_width: int) -> int:
"""Convert normalized x coordinate (0-1000) to actual pixel coordinate."""
return int(x / 1000 * screen_width)
def denormalize_y(y: int, screen_height: int) -> int:
"""Convert normalized y coordinate (0-1000) to actual pixel coordinate."""
return int(y / 1000 * screen_height)
def execute_function_calls(interaction, page, screen_width, screen_height):
results = []
function_calls = [
step for step in interaction.steps if step.type == "function_call"
]
for function_call in function_calls:
action_result = {}
fname = function_call.name
args = function_call.arguments
print(f" -> Executing: {fname} (Intent: {args.get('intent', 'N/A')})")
try:
if fname in ("open_web_browser", "open_app"):
pass # Handled / already open
elif fname in ("click", "click_at", "double_click", "triple_click", "middle_click", "right_click", "move", "long_press"):
actual_x = denormalize_x(args["x"], screen_width)
actual_y = denormalize_y(args["y"], screen_height)
if fname in ("click", "click_at"):
page.mouse.click(actual_x, actual_y)
elif fname == "double_click":
page.mouse.dblclick(actual_x, actual_y)
elif fname == "right_click":
page.mouse.click(actual_x, actual_y, button="right")
elif fname == "middle_click":
page.mouse.click(actual_x, actual_y, button="middle")
elif fname == "move":
page.mouse.move(actual_x, actual_y)
elif fname in ("type", "type_text_at"):
actual_x = denormalize_x(args["x"], screen_width) if "x" in args else None
actual_y = denormalize_y(args["y"], screen_height) if "y" in args else None
text = args["text"]
press_enter = args.get("press_enter", False)
if actual_x is not None and actual_y is not None:
page.mouse.click(actual_x, actual_y)
# Clear field first
page.keyboard.press("Meta+A")
page.keyboard.press("Backspace")
page.keyboard.type(text)
if press_enter:
page.keyboard