Korzystanie z komputera

Korzystanie z komputera umożliwia tworzenie agentów sterujących przeglądarką, którzy wchodzą w interakcje i automatyzują zadania. Na podstawie zrzutów ekranu model może „widzieć” ekran komputera i „działać”, generując określone działania w interfejsie, takie jak kliknięcia myszą i wpisywanie tekstu na klawiaturze. Podobnie jak w przypadku wywoływania funkcji musisz napisać kod aplikacji po stronie klienta, aby odbierać i wykonywać działania związane z korzystaniem z komputera.

Za pomocą funkcji Korzystanie z komputera możesz tworzyć agentów, którzy:

  • automatyzować powtarzające się wprowadzanie danych lub wypełnianie formularzy w witrynach;
  • przeprowadzać automatyczne testy aplikacji internetowych i ścieżek użytkownika,
  • prowadzić wyszukiwanie w różnych witrynach (np. zbierać informacje o produktach, cenach i opiniach w witrynach e-commerce, aby podjąć decyzję o zakupie);

Najłatwiej przetestować funkcję korzystania z komputera za pomocą implementacji referencyjnej lub środowiska demonstracyjnego Browserbase.

Jak działa korzystanie z komputera

Aby utworzyć agenta sterującego przeglądarką za pomocą modelu Computer Use, zaimplementuj pętlę agenta, która wykonuje te czynności:

  1. Wysyłanie żądania do modelu

    • Dodaj do żądania interfejsu API narzędzie Computer Use i opcjonalnie dowolne funkcje zdefiniowane przez użytkownika lub wykluczone funkcje.
    • Przekaż modelowi Computer Use prośbę użytkownika.
  2. Otrzymywanie odpowiedzi modelu

    • Model Computer Use analizuje żądanie użytkownika i zrzut ekranu oraz generuje odpowiedź, która zawiera sugerowany function_call reprezentujący działanie w interfejsie (np. „click at coordinate (x,y)” lub „type 'text'”). Opis wszystkich działań w interfejsie obsługiwanych przez model Computer Use znajdziesz w sekcji Obsługiwane działania.
    • Odpowiedź interfejsu API może też zawierać safety_decision z wewnętrznego systemu bezpieczeństwa, który sprawdza proponowane działanie modelu. Ten kod safety_decision klasyfikuje działanie jako:
      • Zwykłe / dozwolone: działanie jest uważane za bezpieczne. Może to też oznaczać brak symbolu safety_decision.
      • Wymaga potwierdzenia (require_confirmation): model ma wykonać działanie, które może być ryzykowne (np. kliknięcie banera z prośbą o zgodę na stosowanie plików cookie).
  3. Wykonaj otrzymane działanie

    • Kod po stronie klienta otrzymuje wartość function_call i wszelkie towarzyszące jej safety_decision.
      • Zwykłe / dozwolone: jeśli symbol safety_decision wskazuje, że działanie jest zwykłe / dozwolone (lub jeśli nie ma symbolu safety_decision), kod po stronie klienta może wykonać określone działanie function_call w środowisku docelowym (np. w przeglądarce internetowej).
      • Wymaga potwierdzenia: jeśli safety_decision wskazuje, że wymaga potwierdzenia, aplikacja musi poprosić użytkownika o potwierdzenie przed wykonaniem function_call. Jeśli użytkownik potwierdzi, wykonaj działanie. Jeśli użytkownik odmówi, nie wykonuj działania.
  4. Zapisz stan nowego środowiska

    • Jeśli działanie zostało wykonane, klient robi nowy zrzut ekranu interfejsu GUI i aktualnego adresu URL, aby wysłać go z powrotem do modelu Computer Use w ramach function_response.
    • Jeśli działanie zostało zablokowane przez system bezpieczeństwa lub użytkownik odmówił potwierdzenia, aplikacja może wysłać do modelu inną formę opinii lub zakończyć interakcję.

Proces powtarza się od kroku 2. Model używa nowego zrzutu ekranu i bieżącego celu, aby zasugerować kolejne działanie. Pętla jest kontynuowana, dopóki zadanie nie zostanie wykonane, nie wystąpi błąd lub proces nie zostanie zakończony (np. z powodu odpowiedzi zabezpieczającej „blokuj” lub decyzji użytkownika).

Korzystanie z komputera
omówienie

Jak wdrożyć funkcję korzystania z komputera

Zanim zaczniesz korzystać z narzędzia Użycie komputera, musisz skonfigurować te elementy:

  • Bezpieczne środowisko wykonawcze: ze względów bezpieczeństwa agenta korzystającego z komputera należy uruchamiać w bezpiecznym i kontrolowanym środowisku (np. w piaskownicy, maszynie wirtualnej, kontenerze lub dedykowanym profilu przeglądarki z ograniczonymi uprawnieniami).
  • Obsługa działań po stronie klienta: musisz wdrożyć logikę po stronie klienta, aby wykonywać działania generowane przez model i robić zrzuty ekranu środowiska po każdym działaniu.

Przykłady w tej sekcji używają przeglądarki jako środowiska wykonawczego i Playwright jako modułu obsługi działań po stronie klienta. Aby uruchomić te przykłady, musisz zainstalować niezbędne zależności i zainicjować instancję przeglądarki Playwright.

Instalowanie Playwright

    pip install google-genai playwright
    playwright install chromium
    

Inicjowanie instancji przeglądarki 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.
    

Przykładowy kod rozszerzający funkcje na środowisko Androida znajdziesz w sekcji Korzystanie z niestandardowych funkcji zdefiniowanych przez użytkownika.

1. Wysyłanie żądania do modelu

Dodaj narzędzie Computer Use do żądania interfejsu API i wyślij do modelu prompta, który zawiera cel użytkownika. Musisz użyć jednego z obsługiwanych modeli korzystania z komputera. W przeciwnym razie pojawi się błąd:

  • gemini-2.5-computer-use-preview-10-2025
  • gemini-3-pro-preview
  • gemini-3-flash-preview

Opcjonalnie możesz też dodać te parametry:

  • Wykluczone działania: jeśli na liście obsługiwanych działań interfejsu znajdują się działania, których model nie powinien wykonywać, określ je jako excluded_predefined_functions.
  • Funkcje zdefiniowane przez użytkownika: oprócz narzędzia do korzystania z komputera możesz uwzględnić niestandardowe funkcje zdefiniowane przez użytkownika.

Pamiętaj, że podczas wysyłania żądania nie musisz określać rozmiaru wyświetlacza. Model przewiduje współrzędne pikseli przeskalowane do wysokości i szerokości ekranu.

Python

from google import genai
from google.genai import types
from google.genai.types import Content, Part

client = genai.Client()

# Specify predefined functions to exclude (optional)
excluded_functions = ["drag_and_drop"]

generate_content_config = genai.types.GenerateContentConfig(
    tools=[
        # 1. Computer Use tool with browser environment
        types.Tool(
            computer_use=types.ComputerUse(
                environment=types.Environment.ENVIRONMENT_BROWSER,
                # Optional: Exclude specific predefined functions
                excluded_predefined_functions=excluded_functions
                )
              ),
        # 2. Optional: Custom user-defined functions
        #types.Tool(
          # function_declarations=custom_functions
          #   )
          ],
  )

# Create the content with user message
contents=[
    Content(
        role="user",
        parts=[
            Part(text="Search for highly rated smart fridges with touchscreen, 2 doors, around 25 cu ft, priced below 4000 dollars on Google Shopping. Create a bulleted list of the 3 cheapest options in the format of name, description, price in an easy-to-read layout."),
        ],
    )
]

# Generate content with the configured settings
response = client.models.generate_content(
    model='gemini-2.5-computer-use-preview-10-2025',
    contents=contents,
    config=generate_content_config,
)

# Print the response output
print(response)

Przykład użycia funkcji niestandardowych znajdziesz w artykule Korzystanie z funkcji niestandardowych.

2. Otrzymywanie odpowiedzi modelu

Gdy narzędzie do korzystania z komputera jest włączone, model odpowie co najmniej 1 FunctionCalls, jeśli uzna, że do wykonania zadania potrzebne są działania w interfejsie. Funkcja Computer Use obsługuje równoległe wywoływanie funkcji, co oznacza, że model może zwracać wiele działań w jednym kroku.

Oto przykładowa odpowiedź modelu.

{
  "content": {
    "parts": [
      {
        "text": "I will type the search query into the search bar. The search bar is in the center of the page."
      },
      {
        "function_call": {
          "name": "type_text_at",
          "args": {
            "x": 371,
            "y": 470,
            "text": "highly rated smart fridges with touchscreen, 2 doors, around 25 cu ft, priced below 4000 dollars on Google Shopping",
            "press_enter": true
          }
        }
      }
    ]
  }
}

3. wykonywać otrzymane działania,

Kod aplikacji musi przeanalizować odpowiedź modelu, wykonać działania i zebrać wyniki.

Poniższy przykładowy kod wyodrębnia wywołania funkcji z odpowiedzi modelu Computer Use i tłumaczy je na działania, które można wykonać za pomocą Playwright. Model zwraca znormalizowane współrzędne (0–999) niezależnie od wymiarów obrazu wejściowego, więc częścią procesu tłumaczenia jest przekształcenie tych znormalizowanych współrzędnych z powrotem na rzeczywiste wartości pikseli.

Zalecany rozmiar ekranu do korzystania z modelu Computer Use to (1440, 900). Model będzie działać w dowolnej rozdzielczości, ale może to wpłynąć na jakość wyników.

Pamiętaj, że ten przykład obejmuje tylko implementację 3 najczęstszych działań interfejsu: open_web_browser, click_attype_text_at. W przypadku zastosowań produkcyjnych musisz wdrożyć wszystkie inne działania interfejsu z listy Obsługiwane działania, chyba że wyraźnie dodasz je jako excluded_predefined_functions.

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(candidate, page, screen_width, screen_height):
    results = []
    function_calls = []
    for part in candidate.content.parts:
        if part.function_call:
            function_calls.append(part.function_call)

    for function_call in function_calls:
        action_result = {}
        fname = function_call.name
        args = function_call.args
        print(f"  -> Executing: {fname}")

        try:
            if fname == "open_web_browser":
                pass # Already open
            elif fname == "click_at":
                actual_x = denormalize_x(args["x"], screen_width)
                actual_y = denormalize_y(args["y"], screen_height)
                page.mouse.click(actual_x, actual_y)
            elif fname == "type_text_at":
                actual_x = denormalize_x(args["x"], screen_width)
                actual_y = denormalize_y(args["y"], screen_height)
                text = args["text"]
                press_enter = args.get("press_enter", False)

                page.mouse.click(actual_x, actual_y)
                # Simple clear (Command+A, Backspace for Mac)
                page.keyboard.press("Meta+A")
                page.keyboard.press("Backspace")
                page.keyboard.type(text)
                if press_enter:
                    page.keyboard.press("Enter")
            else:
                print(f"Warning: Unimplemented or custom function {fname}")

            # Wait for potential navigations/renders
            page.wait_for_load_state(timeout=5000)
            time.sleep(1)

        except Exception as e:
            print(f"Error executing {fname}: {e}")
            action_result = {"error": str(e)}

        results.append((fname, action_result))

    return results

4. Przechwyć nowy stan środowiska

Po wykonaniu działań wyślij wynik wykonania funkcji z powrotem do modelu, aby mógł on wykorzystać te informacje do wygenerowania następnego działania. Jeśli wykonano kilka działań (wywołań równoległych), w kolejnej turze użytkownika musisz wysłać FunctionResponse dla każdego z nich.

Python


def get_function_responses(page, results):
    screenshot_bytes = page.screenshot(type="png")
    current_url = page.url
    function_responses = []
    for name, result in results:
        response_data = {"url": current_url}
        response_data.update(result)
        function_responses.append(
            types.FunctionResponse(
                name=name,
                response=response_data,
                parts=[types.FunctionResponsePart(
                        inline_data=types.FunctionResponseBlob(
                            mime_type="image/png",
                            data=screenshot_bytes))
                ]
            )
        )
    return function_responses

Tworzenie pętli agenta

Aby włączyć interakcje wieloetapowe, połącz w pętlę 4 kroki z sekcji Jak wdrożyć korzystanie z komputera. Pamiętaj, aby prawidłowo zarządzać historią rozmów, dołączając zarówno odpowiedzi modelu, jak i odpowiedzi funkcji.

Aby uruchomić ten przykładowy kod, musisz:

Python


import time
from typing import Any, List, Tuple
from playwright.sync_api import sync_playwright

from google import genai
from google.genai import types
from google.genai.types import Content, Part

client = genai.Client()

# Constants for screen dimensions
SCREEN_WIDTH = 1440
SCREEN_HEIGHT = 900

# Setup Playwright
print("Initializing browser...")
playwright = sync_playwright().start()
browser = playwright.chromium.launch(headless=False)
context = browser.new_context(viewport={"width": SCREEN_WIDTH, "height": SCREEN_HEIGHT})
page = context.new_page()

# Define helper functions. Copy/paste from steps 3 and 4
# def denormalize_x(...)
# def denormalize_y(...)
# def execute_function_calls(...)
# def get_function_responses(...)

try:
    # Go to initial page
    page.goto("https://ai.google.dev/gemini-api/docs")

    # Configure the model (From Step 1)
    config = types.GenerateContentConfig(
        tools=[types.Tool(computer_use=types.ComputerUse(
            environment=types.Environment.ENVIRONMENT_BROWSER
        ))],
        thinking_config=types.ThinkingConfig(include_thoughts=True),
    )

    # Initialize history
    initial_screenshot = page.screenshot(type="png")
    USER_PROMPT = "Go to ai.google.dev/gemini-api/docs and search for pricing."
    print(f"Goal: {USER_PROMPT}")

    contents = [
        Content(role="user", parts=[
            Part(text=USER_PROMPT),
            Part.from_bytes(data=initial_screenshot, mime_type='image/png')
        ])
    ]

    # Agent Loop
    turn_limit = 5
    for i in range(turn_limit):
        print(f"\n--- Turn {i+1} ---")
        print("Thinking...")
        response = client.models.generate_content(
            model='gemini-2.5-computer-use-preview-10-2025',
            contents=contents,
            config=config,
        )

        candidate = response.candidates[0]
        contents.append(candidate.content)

        has_function_calls = any(part.function_call for part in candidate.content.parts)
        if not has_function_calls:
            text_response = " ".join([part.text for part in candidate.content.parts if part.text])
            print("Agent finished:", text_response)
            break

        print("Executing actions...")
        results = execute_function_calls(candidate, page, SCREEN_WIDTH, SCREEN_HEIGHT)

        print("Capturing state...")
        function_responses = get_function_responses(page, results)

        contents.append(
            Content(role="user", parts=[Part(function_response=fr) for fr in function_responses])
        )

finally:
    # Cleanup
    print("\nClosing browser...")
    browser.close()
    playwright.stop()

Korzystanie z niestandardowych funkcji zdefiniowanych przez użytkownika

Opcjonalnie możesz dołączyć do żądania niestandardowe funkcje zdefiniowane przez użytkownika, aby rozszerzyć funkcjonalność modelu. Poniższy przykład dostosowuje model i narzędzie Computer Use do zastosowań mobilnych, uwzględniając niestandardowe działania zdefiniowane przez użytkownika, takie jak open_app, long_press_atgo_home, a wykluczając działania specyficzne dla przeglądarki. Model może inteligentnie wywoływać te funkcje niestandardowe wraz ze standardowymi działaniami interfejsu, aby wykonywać zadania w środowiskach innych niż przeglądarka.

Python

from typing import Optional, Dict, Any

from google import genai
from google.genai import types
from google.genai.types import Content, Part

client = genai.Client()

SYSTEM_PROMPT = """You are operating an Android phone. Today's date is October 15, 2023, so ignore any other date provided.
* To provide an answer to the user, *do not use any tools* and output your answer on a separate line. IMPORTANT: Do not add any formatting or additional punctuation/text, just output the answer by itself after two empty lines.
* Make sure you scroll down to see everything before deciding something isn't available.
* You can open an app from anywhere. The icon doesn't have to currently be on screen.
* Unless explicitly told otherwise, make sure to save any changes you make.
* If text is cut off or incomplete, scroll or click into the element to get the full text before providing an answer.
* IMPORTANT: Complete the given task EXACTLY as stated. DO NOT make any assumptions that completing a similar task is correct.  If you can't find what you're looking for, SCROLL to find it.
* If you want to edit some text, ONLY USE THE `type` tool. Do not use the onscreen keyboard.
* Quick settings shouldn't be used to change settings. Use the Settings app instead.
* The given task may already be completed. If so, there is no need to do anything.
"""

def open_app(app_name: str, intent: Optional[str] = None) -> Dict[str, Any]:
    """Opens an app by name.

    Args:
        app_name: Name of the app to open (any string).
        intent: Optional deep-link or action to pass when launching, if the app supports it.

    Returns:
        JSON payload acknowledging the request (app name and optional intent).
    """
    return {"status": "requested_open", "app_name": app_name, "intent": intent}

def long_press_at(x: int, y: int) -> Dict[str, int]:
    """Long-press at a specific screen coordinate.

    Args:
        x: X coordinate (absolute), scaled to the device screen width (pixels).
        y: Y coordinate (absolute), scaled to the device screen height (pixels).

    Returns:
        Object with the coordinates pressed and the duration used.
    """
    return {"x": x, "y": y}

def go_home() -> Dict[str, str]:
    """Navigates to the device home screen.

    Returns:
        A small acknowledgment payload.
    """
    return {"status": "home_requested"}

#  Build function declarations
CUSTOM_FUNCTION_DECLARATIONS = [
    types.FunctionDeclaration.from_callable(client=client, callable=open_app),
    types.FunctionDeclaration.from_callable(client=client, callable=long_press_at),
    types.FunctionDeclaration.from_callable(client=client, callable=go_home),
]

#Exclude browser functions
EXCLUDED_PREDEFINED_FUNCTIONS = [
    "open_web_browser",
    "search",
    "navigate",
    "hover_at",
    "scroll_document",
    "go_forward",
    "key_combination",
    "drag_and_drop",
]

#Utility function to construct a GenerateContentConfig
def make_generate_content_config() -> genai.types.GenerateContentConfig:
    """Return a fixed GenerateContentConfig with Computer Use + custom functions."""
    return genai.types.GenerateContentConfig(
        system_instruction=SYSTEM_PROMPT,
        tools=[
            types.Tool(
                computer_use=types.ComputerUse(
                    environment=types.Environment.ENVIRONMENT_BROWSER,
                    excluded_predefined_functions=EXCLUDED_PREDEFINED_FUNCTIONS,
                )
            ),
            types.Tool(function_declarations=CUSTOM_FUNCTION_DECLARATIONS),
        ],
    )

# Create the content with user message
contents: list[Content] = [
    Content(
        role="user",
        parts=[
            # text instruction
            Part(text="Open Chrome, then long-press at 200,400."),
        ],
    )
]

# Build your fixed config (from helper)
config = make_generate_content_config()

# Generate content with the configured settings
response = client.models.generate_content(
        model='gemini-2.5-computer-use-preview-10-2025',
        contents=contents,
        config=config,
    )

print(response)

Obsługiwane działania w interfejsie

Model może poprosić o wykonanie tych działań w interfejsie za pomocą znaku FunctionCall. Kod po stronie klienta musi implementować logikę wykonywania tych działań. Przykłady znajdziesz w implementacji referencyjnej.

Nazwa polecenia Opis Argumenty (w wywołaniu funkcji) Przykładowe wywołanie funkcji
open_web_browser Otwiera przeglądarkę. Brak {"name": "open_web_browser", "args": {}}
wait_5_seconds Wstrzymuje wykonywanie na 5 sekund, aby umożliwić załadowanie treści dynamicznych lub zakończenie animacji. Brak {"name": "wait_5_seconds", "args": {}}
go_back Przechodzi do poprzedniej strony w historii przeglądarki. Brak {"name": "go_back", "args": {}}
go_forward Przechodzi do następnej strony w historii przeglądarki. Brak {"name": "go_forward", "args": {}}
search Otwiera stronę główną domyślnej wyszukiwarki (np. Google). Przydatne do rozpoczęcia nowego wyszukiwania. Brak {"name": "search", "args": {}}
nawigować Przekierowuje przeglądarkę bezpośrednio na podany adres URL. url: str {"name": "navigate", "args": {"url": "https://www.wikipedia.org"}}
click_at Kliknięcia w określonym miejscu na stronie. Wartości x i y są oparte na siatce 1000 x 1000 i skalowane do wymiarów ekranu. y: int (0–999), x: int (0–999) {"name": "click_at", "args": {"y": 300, "x": 500}}
hover_at Najedź kursorem myszy na określone współrzędne na stronie. Przydatne do wyświetlania podmenu. Wartości x i y są oparte na siatce 1000 x 1000. y: int (0–999) x: int (0–999) {"name": "hover_at", "args": {"y": 150, "x": 250}}
type_text_at Wpisuje tekst w określonych współrzędnych. Domyślnie najpierw czyści pole, a po wpisaniu tekstu naciska klawisz ENTER, ale te działania można wyłączyć. Współrzędne x i y są oparte na siatce 1000 x 1000. y: int (0–999), x: int (0–999), text: str, press_enter: bool (opcjonalny, domyślnie True), clear_before_typing: bool (opcjonalny, domyślnie True) {"name": "type_text_at", "args": {"y": 250, "x": 400, "text": "search query", "press_enter": false}}
key_combination Naciśnij klawisze lub kombinacje klawiszy, np. „Control+C” lub „Enter”. Przydatne do wywoływania działań (np. przesyłania formularza za pomocą klawisza „Enter”) lub operacji w schowku. keys: str (np. „enter”, „control+c”). {"name": "key_combination", "args": {"keys": "Control+A"}}
scroll_document Przewija całą stronę internetową „w górę”, „w dół”, „w lewo” lub „w prawo”. direction: str ("up", "down", "left" lub "right") {"name": "scroll_document", "args": {"direction": "down"}}
scroll_at Przewija określony element lub obszar o współrzędnych (x, y) w określonym kierunku o określoną wielkość. Współrzędne i wartość (domyślnie 800) są oparte na siatce 1000 x 1000. y: int (0–999), x: int (0–999), direction: str („up”, „down”, „left”, „right”), magnitude: int (0–999, opcjonalnie, domyślnie 800) {"name": "scroll_at", "args": {"y": 500, "x": 500, "direction": "down", "magnitude": 400}}
drag_and_drop Przeciąga element ze współrzędnych początkowych (x, y) i upuszcza go we współrzędnych docelowych (destination_x, destination_y). Wszystkie współrzędne są oparte na siatce 1000 x 1000. y: int (0–999), x: int (0–999), destination_y: int (0–999), destination_x: int (0–999) {"name": "drag_and_drop", "args": {"y": 100, "x": 100, "destination_y": 500, "destination_x": 500}}

Bezpieczeństwo

Potwierdzenie decyzji dotyczącej bezpieczeństwa

W zależności od działania odpowiedź modelu może też zawierać safety_decision z wewnętrznego systemu bezpieczeństwa, który sprawdza proponowane działanie modelu.

{
  "content": {
    "parts": [
      {
        "text": "I have evaluated step 2. It seems Google detected unusual traffic and is asking me to verify I'm not a robot. I need to click the 'I'm not a robot' checkbox located near the top left (y=98, x=95).",
      },
      {
        "function_call": {
          "name": "click_at",
          "args": {
            "x": 60,
            "y": 100,
            "safety_decision": {
              "explanation": "I have encountered a CAPTCHA challenge that requires interaction. I need you to complete the challenge by clicking the 'I'm not a robot' checkbox and any subsequent verification steps.",
              "decision": "require_confirmation"
            }
          }
        }
      }
    ]
  }
}

Jeśli wartość parametru safety_decision to require_confirmation, musisz poprosić użytkownika o potwierdzenie przed wykonaniem działania. Zgodnie z warunkami korzystania z usługi nie możesz pomijać próśb o potwierdzenie przez człowieka.

Ten przykładowy kod wyświetla użytkownikowi prośbę o potwierdzenie przed wykonaniem działania. Jeśli użytkownik nie potwierdzi działania, pętla zostanie zakończona. Jeśli użytkownik potwierdzi działanie, zostanie ono wykonane, a pole safety_acknowledgement zostanie oznaczone jako True.

Python

import termcolor

def get_safety_confirmation(safety_decision):
    """Prompt user for confirmation when safety check is triggered."""
    termcolor.cprint("Safety service requires explicit confirmation!", color="red")
    print(safety_decision["explanation"])

    decision = ""
    while decision.lower() not in ("y", "n", "ye", "yes", "no"):
        decision = input("Do you wish to proceed? [Y]es/[N]o\n")

    if decision.lower() in ("n", "no"):
        return "TERMINATE"
    return "CONTINUE"

def execute_function_calls(candidate, page, screen_width, screen_height):

    # ... Extract function calls from response ...

    for function_call in function_calls:
        extra_fr_fields = {}

        # Check for safety decision
        if 'safety_decision' in function_call.args:
            decision = get_safety_confirmation(function_call.args['safety_decision'])
            if decision == "TERMINATE":
                print("Terminating agent loop")
                break
            extra_fr_fields["safety_acknowledgement"] = "true" # Safety acknowledgement

        # ... Execute function call and append to results ...

Jeśli użytkownik potwierdzi, musisz umieścić potwierdzenie bezpieczeństwa w FunctionResponse.

Python

function_response_parts.append(
    FunctionResponse(
        name=name,
        response={"url": current_url,
                  **extra_fr_fields},  # Include safety acknowledgement
        parts=[
            types.FunctionResponsePart(
                inline_data=types.FunctionResponseBlob(
                    mime_type="image/png", data=screenshot
                )
             )
           ]
         )
       )

Sprawdzone metody ochrony bezpieczeństwa

Korzystanie z komputera to nowe narzędzie, które wiąże się z nowymi zagrożeniami, o których deweloperzy powinni pamiętać:

  • Niezaufane treści i oszustwa: aby osiągnąć cel użytkownika, model może korzystać z niezaufanych źródeł informacji i instrukcji wyświetlanych na ekranie. Jeśli na przykład celem użytkownika jest zakup telefonu Pixel, a model natrafi na oszustwo typu „Bezpłatny Pixel za wypełnienie ankiety”, istnieje pewne prawdopodobieństwo, że model wypełni ankietę.
  • Sporadyczne niezamierzone działania: model może błędnie zinterpretować cel użytkownika lub treść strony internetowej, co spowoduje podjęcie nieprawidłowych działań, takich jak kliknięcie niewłaściwego przycisku lub wypełnienie niewłaściwego formularza. Może to prowadzić do niepowodzenia zadań lub eksfiltracji danych.
  • Naruszenia zasad: funkcje interfejsu API mogą być wykorzystywane, celowo lub nieumyślnie, do działań, które naruszają zasady Google (zasady dotyczące niedozwolonych zastosowań generatywnej AIDodatkowe warunki korzystania z Gemini API). Obejmuje to działania, które mogą zakłócać integralność systemu, zagrażać bezpieczeństwu, omijać środki bezpieczeństwa, sterować urządzeniami medycznymi itp.

Aby ograniczyć te zagrożenia, możesz wdrożyć te środki bezpieczeństwa i sprawdzone metody:

  1. Proces z udziałem człowieka:

    • Wdrożenie potwierdzenia użytkownika: gdy odpowiedź dotycząca bezpieczeństwa wskazuje na require_confirmation, przed wykonaniem działania musisz wdrożyć potwierdzenie użytkownika. Przykładowy kod znajdziesz w sekcji Potwierdzanie decyzji dotyczącej bezpieczeństwa.
    • Podawanie niestandardowych instrukcji dotyczących bezpieczeństwa: oprócz wbudowanych kontroli potwierdzenia przez użytkownika deweloperzy mogą opcjonalnie dodać niestandardową instrukcję systemową, która wymusza ich własne zasady bezpieczeństwa, aby blokować określone działania modelu lub wymagać potwierdzenia przez użytkownika, zanim model podejmie określone nieodwracalne działania o wysokim ryzyku. Oto przykład niestandardowej instrukcji systemowej dotyczącej bezpieczeństwa, którą możesz uwzględnić podczas interakcji z modelem.

      Przykładowe instrukcje bezpieczeństwa

      Ustaw własne reguły bezpieczeństwa jako instrukcję systemową:

          ## **RULE 1: Seek User Confirmation (USER_CONFIRMATION)**
      
          This is your first and most important check. If the next required action falls
          into any of the following categories, you MUST stop immediately, and seek the
          user's explicit permission.
      
          **Procedure for Seeking Confirmation:**  * **For Consequential Actions:**
          Perform all preparatory steps (e.g., navigating, filling out forms, typing a
          message). You will ask for confirmation **AFTER** all necessary information is
          entered on the screen, but **BEFORE** you perform the final, irreversible action
          (e.g., before clicking "Send", "Submit", "Confirm Purchase", "Share").  * **For
          Prohibited Actions:** If the action is strictly forbidden (e.g., accepting legal
          terms, solving a CAPTCHA), you must first inform the user about the required
          action and ask for their confirmation to proceed.
      
          **USER_CONFIRMATION Categories:**
      
          *   **Consent and Agreements:** You are FORBIDDEN from accepting, selecting, or
              agreeing to any of the following on the user's behalf. You must ask the
              user to confirm before performing these actions.
              *   Terms of Service
              *   Privacy Policies
              *   Cookie consent banners
              *   End User License Agreements (EULAs)
              *   Any other legally significant contracts or agreements.
          *   **Robot Detection:** You MUST NEVER attempt to solve or bypass the
              following. You must ask the user to confirm before performing these actions.
          *   CAPTCHAs (of any kind)
              *   Any other anti-robot or human-verification mechanisms, even if you are
                  capable.
          *   **Financial Transactions:**
              *   Completing any purchase.
              *   Managing or moving money (e.g., transfers, payments).
              *   Purchasing regulated goods or participating in gambling.
          *   **Sending Communications:**
              *   Sending emails.
              *   Sending messages on any platform (e.g., social media, chat apps).
              *   Posting content on social media or forums.
          *   **Accessing or Modifying Sensitive Information:**
              *   Health, financial, or government records (e.g., medical history, tax
                  forms, passport status).
              *   Revealing or modifying sensitive personal identifiers (e.g., SSN, bank
                  account number, credit card number).
          *   **User Data Management:**
              *   Accessing, downloading, or saving files from the web.
              *   Sharing or sending files/data to any third party.
              *   Transferring user data between systems.
          *   **Browser Data Usage:**
              *   Accessing or managing Chrome browsing history, bookmarks, autofill data,
                  or saved passwords.
          *   **Security and Identity:**
              *   Logging into any user account.
              *   Any action that involves misrepresentation or impersonation (e.g.,
                  creating a fan account, posting as someone else).
          *   **Insurmountable Obstacles:** If you are technically unable to interact with
              a user interface element or are stuck in a loop you cannot resolve, ask the
              user to take over.
          ---
      
          ## **RULE 2: Default Behavior (ACTUATE)**
      
          If an action does **NOT** fall under the conditions for `USER_CONFIRMATION`,
          your default behavior is to **Actuate**.
      
          **Actuation Means:**  You MUST proactively perform all necessary steps to move
          the user's request forward. Continue to actuate until you either complete the
          non-consequential task or encounter a condition defined in Rule 1.
      
          *   **Example 1:** If asked to send money, you will navigate to the payment
              portal, enter the recipient's details, and enter the amount. You will then
              **STOP** as per Rule 1 and ask for confirmation before clicking the final
              "Send" button.
          *   **Example 2:** If asked to post a message, you will navigate to the site,
              open the post composition window, and write the full message. You will then
              **STOP** as per Rule 1 and ask for confirmation before clicking the final
              "Post" button.
      
              After the user has confirmed, remember to get the user's latest screen
              before continuing to perform actions.
      
          # Final Response Guidelines:
          Write final response to the user in the following cases:
          - User confirmation
          - When the task is complete or you have enough information to respond to the user
          
  2. Bezpieczne środowisko wykonawcze: uruchamiaj agenta w bezpiecznym środowisku piaskownicy, aby ograniczyć jego potencjalny wpływ (np. odizolowanej maszyny wirtualnej, kontenera (np. Docker) lub dedykowany profil przeglądarki z ograniczonymi uprawnieniami.

  3. Czyszczenie danych wejściowych: czyszczenie całego tekstu wygenerowanego przez użytkownika w promptach w celu zmniejszenia ryzyka niezamierzonych instrukcji lub wstrzykiwania promptów. Jest to przydatna warstwa zabezpieczeń, ale nie zastępuje bezpiecznego środowiska wykonawczego.

  4. Ograniczenia dotyczące treści: używaj ograniczeń i interfejsów API bezpieczeństwa treści, aby oceniać dane wejściowe użytkownika, dane wejściowe i wyjściowe narzędzia oraz odpowiedź agenta pod kątem odpowiedniości, wstrzykiwania promptów i wykrywania jailbreaku.

  5. Listy dozwolonych i zablokowanych: wdróż mechanizmy filtrowania, aby kontrolować, gdzie model może się poruszać i co może robić. Dobrym punktem wyjścia jest lista zablokowanych zabronionych witryn, a jeszcze bezpieczniejsza jest bardziej restrykcyjna lista dozwolonych.

  6. Obserwacja i rejestrowanie: prowadź szczegółowe dzienniki na potrzeby debugowania, kontroli i reagowania na incydenty. Klient powinien rejestrować prompty, zrzuty ekranu, sugerowane przez model działania (function_call), odpowiedzi związane z bezpieczeństwem i wszystkie działania ostatecznie wykonywane przez klienta.

  7. Zarządzanie środowiskiem: zadbaj o spójność środowiska GUI. Nieoczekiwane wyskakujące okienka, powiadomienia lub zmiany układu mogą wprowadzić model w błąd. W miarę możliwości zaczynaj każde nowe zadanie od znanego, czystego stanu.

Wersje modelu

Właściwość Opis
Kod modelu

Gemini API

gemini-2.5-computer-use-preview-10-2025

Obsługiwane typy danych

Wejście

Obraz, tekst

Dane wyjściowe

Tekst

Limity tokenów[*]

Limit tokenów wejściowych

128 000

Limit tokenów wyjściowych

64 000

Wersje
Więcej informacji znajdziesz w wzorcach wersji modelu.
  • Podgląd: gemini-2.5-computer-use-preview-10-2025
Ostatnia aktualizacja Październik 2025 r.

Co dalej?