Claude può interagire con ambienti desktop attraverso lo strumento di controllo del computer, che fornisce capacità di screenshot e controllo del mouse/tastiera per l'interazione autonoma del desktop.
Il controllo del computer è attualmente in beta e richiede un header beta:
"computer-use-2025-11-24" per Claude Opus 4.5"computer-use-2025-01-24" per Claude Sonnet 4.5, Haiku 4.5, Opus 4.1, Sonnet 4, Opus 4, e Sonnet 3.7 (deprecato)Il controllo del computer è una funzione beta che consente a Claude di interagire con ambienti desktop. Questo strumento fornisce:
Sebbene il controllo del computer possa essere aumentato con altri strumenti come bash e editor di testo per flussi di lavoro di automazione più completi, il controllo del computer si riferisce specificamente alla capacità dello strumento di controllo del computer di vedere e controllare gli ambienti desktop.
Il controllo del computer è disponibile per i seguenti modelli Claude:
| Modello | Versione dello strumento | Flag Beta |
|---|---|---|
| Claude Opus 4.5 | computer_20251124 | computer-use-2025-11-24 |
| Tutti gli altri modelli supportati | computer_20250124 | computer-use-2025-01-24 |
Claude Opus 4.5 introduce la versione dello strumento computer_20251124 con nuove capacità inclusa l'azione zoom per l'ispezione dettagliata della regione dello schermo. Tutti gli altri modelli (Sonnet 4.5, Haiku 4.5, Sonnet 4, Opus 4, Opus 4.1, e Sonnet 3.7) utilizzano la versione dello strumento computer_20250124.
Le versioni precedenti dello strumento non sono garantite essere retrocompatibili con i modelli più recenti. Utilizza sempre la versione dello strumento che corrisponde alla versione del tuo modello.
Il controllo del computer è una funzione beta con rischi unici distinti dalle funzioni API standard. Questi rischi sono aumentati quando si interagisce con Internet. Per minimizzare i rischi, considera di prendere precauzioni come:
In alcune circostanze, Claude seguirà i comandi trovati nel contenuto anche se entra in conflitto con le istruzioni dell'utente. Ad esempio, le istruzioni Claude su pagine web o contenute in immagini possono ignorare le istruzioni o causare a Claude di fare errori. Suggeriamo di prendere precauzioni per isolare Claude da dati e azioni sensibili per evitare rischi legati all'iniezione di prompt.
Abbiamo addestrato il modello a resistere a queste iniezioni di prompt e abbiamo aggiunto un ulteriore livello di difesa. Se utilizzi i nostri strumenti di controllo del computer, eseguiremo automaticamente classificatori sui tuoi prompt per segnalare potenziali istanze di iniezioni di prompt. Quando questi classificatori identificano potenziali iniezioni di prompt negli screenshot, indirizzeranno automaticamente il modello a chiedere la conferma dell'utente prima di procedere con l'azione successiva. Riconosciamo che questa protezione extra non sarà ideale per ogni caso d'uso (ad esempio, casi d'uso senza un umano nel ciclo), quindi se desideri rinunciare e disattivarla, per favore contattaci.
Suggeriamo comunque di prendere precauzioni per isolare Claude da dati e azioni sensibili per evitare rischi legati all'iniezione di prompt.
Inizia rapidamente con la nostra implementazione di riferimento del controllo del computer che include un'interfaccia web, un contenitore Docker, implementazioni di strumenti di esempio e un ciclo di agenti.
Nota: L'implementazione è stata aggiornata per includere nuovi strumenti sia per i modelli Claude 4 che per Claude Sonnet 3.7. Assicurati di estrarre la versione più recente del repository per accedere a queste nuove funzioni.
Per favore utilizza questo modulo per fornire feedback sulla qualità delle risposte del modello, l'API stessa, o la qualità della documentazione - non vediamo l'ora di sentirti!
Ecco come iniziare con il controllo del computer:
Un header beta è richiesto solo per lo strumento di controllo del computer.
L'esempio sopra mostra tutti e tre gli strumenti utilizzati insieme, il che richiede l'header beta perché include lo strumento di controllo del computer.
Ci riferiamo alla ripetizione dei passaggi 3 e 4 senza input dell'utente come il "ciclo di agenti" - cioè Claude che risponde con una richiesta di utilizzo dello strumento e la tua applicazione che risponde a Claude con i risultati della valutazione di quella richiesta.
Il controllo del computer richiede un ambiente informatico sandbox in cui Claude possa interagire in sicurezza con applicazioni e il web. Questo ambiente include:
Display virtuale: Un server di display X11 virtuale (utilizzando Xvfb) che renderizza l'interfaccia desktop che Claude vedrà attraverso gli screenshot e controllerà con azioni del mouse/tastiera.
Ambiente desktop: Un'interfaccia UI leggera con window manager (Mutter) e pannello (Tint2) in esecuzione su Linux, che fornisce un'interfaccia grafica coerente per Claude per interagire.
Applicazioni: Applicazioni Linux preinstallate come Firefox, LibreOffice, editor di testo e gestori di file che Claude può utilizzare per completare le attività.
Implementazioni di strumenti: Codice di integrazione che traduce le richieste di strumenti astratti di Claude (come "sposta il mouse" o "prendi uno screenshot") in operazioni effettive nell'ambiente virtuale.
Ciclo di agenti: Un programma che gestisce la comunicazione tra Claude e l'ambiente, inviando le azioni di Claude all'ambiente e restituendo i risultati (screenshot, output dei comandi) a Claude.
Quando utilizzi il controllo del computer, Claude non si connette direttamente a questo ambiente. Invece, la tua applicazione:
Per la sicurezza e l'isolamento, l'implementazione di riferimento esegue tutto questo all'interno di un contenitore Docker con mappature di porta appropriate per visualizzare e interagire con l'ambiente.
Abbiamo costruito un'implementazione di riferimento che include tutto ciò di cui hai bisogno per iniziare rapidamente con il controllo del computer:
Il nucleo del controllo del computer è il "ciclo di agenti" - un ciclo in cui Claude richiede azioni degli strumenti, la tua applicazione le esegue e restituisce i risultati a Claude. Ecco un esempio semplificato:
async def sampling_loop(
*,
model: str,
messages: list[dict],
api_key: str,
max_tokens: int = 4096,
tool_version: str,
thinking_budget: int | None = None,
max_iterations: int = 10, # Aggiungi limite di iterazione per prevenire cicli infiniti
):
"""
Un semplice ciclo di agenti per le interazioni di controllo del computer di Claude.
Questa funzione gestisce il dialogo tra:
1. Invio di messaggi dell'utente a Claude
2. Claude che richiede di utilizzare gli strumenti
3. La tua app che esegue quegli strumenti
4. Invio dei risultati dello strumento a Claude
"""
# Configura gli strumenti e i parametri API
client = Anthropic(api_key=api_key)
beta_flag = "computer-use-2025-01-24" if "20250124" in tool_version else "computer-use-2024-10-22"
# Configura gli strumenti - dovresti già averli inizializzati altrove
tools = [
{"type": f"computer_{tool_version}", "name": "computer", "display_width_px": 1024, "display_height_px": 768},
{"type": f"text_editor_{tool_version}", "name": "str_replace_editor"},
{"type": f"bash_{tool_version}", "name": "bash"}
]
# Ciclo principale di agenti (con limite di iterazione per prevenire costi API incontrollati)
iterations = 0
while True and iterations < max_iterations:
iterations += 1
# Configura il parametro di thinking opzionale (per Claude Sonnet 3.7)
thinking = None
if thinking_budget:
thinking = {"type": "enabled", "budget_tokens": thinking_budget}
# Chiama l'API Claude
response = client.beta.messages.create(
model=model,
max_tokens=max_tokens,
messages=messages,
tools=tools,
betas=[beta_flag],
thinking=thinking
)
# Aggiungi la risposta di Claude alla cronologia della conversazione
response_content = response.content
messages.append({"role": "assistant", "content": response_content})
# Controlla se Claude ha utilizzato degli strumenti
tool_results = []
for block in response_content:
if block.type == "tool_use":
# In un'app reale, eseguiresti lo strumento qui
# Ad esempio: result = run_tool(block.name, block.input)
result = {"result": "Tool executed successfully"}
# Formatta il risultato per Claude
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": result
})
# Se nessuno strumento è stato utilizzato, Claude ha finito - restituisci i messaggi finali
if not tool_results:
return messages
# Aggiungi i risultati dello strumento ai messaggi per la prossima iterazione con Claude
messages.append({"role": "user", "content": tool_results})Il ciclo continua fino a quando Claude non risponde senza richiedere alcuno strumento (completamento dell'attività) o fino al raggiungimento del limite massimo di iterazione. Questo salvaguardia previene potenziali cicli infiniti che potrebbero risultare in costi API inaspettati.
Ti consigliamo di provare l'implementazione di riferimento prima di leggere il resto di questa documentazione.
Ecco alcuni suggerimenti su come ottenere i migliori output di qualità:
After each step, take a screenshot and carefully evaluate if you have achieved the right outcome. Explicitly show your thinking: "I have evaluated step X..." If not correct, try again. Only when you confirm a step was executed correctly should you move on to the next one.<robot_credentials>. L'utilizzo del controllo del computer all'interno di applicazioni che richiedono l'accesso aumenta il rischio di cattivi risultati a causa dell'iniezione di prompt. Per favore rivedi la nostra guida sulla mitigazione delle iniezioni di prompt prima di fornire al modello le credenziali di accesso.Se incontri ripetutamente un insieme chiaro di problemi o conosci in anticipo le attività che Claude dovrà completare, utilizza il prompt di sistema per fornire a Claude suggerimenti espliciti o istruzioni su come completare le attività con successo.
Quando uno degli strumenti definiti da Anthropic viene richiesto tramite l'API Claude, viene generato un prompt di sistema specifico per il controllo del computer. È simile al prompt di sistema per l'utilizzo dello strumento ma inizia con:
You have access to a set of functions you can use to answer the user's question. This includes access to a sandboxed computing environment. You do NOT currently have the ability to inspect files or interact with external resources, except by invoking the below functions.
Come con l'utilizzo regolare dello strumento, il campo system_prompt fornito dall'utente è ancora rispettato e utilizzato nella costruzione del prompt di sistema combinato.
Lo strumento di controllo del computer supporta queste azioni:
Azioni di base (tutte le versioni)
[x, y]Azioni migliorate (computer_20250124)
Disponibili nei modelli Claude 4 e Claude Sonnet 3.7:
Azioni migliorate (computer_20251124)
Disponibili in Claude Opus 4.5:
computer_20250124enable_zoom: true nella definizione dello strumento. Accetta un parametro region con coordinate [x1, y1, x2, y2] che definiscono gli angoli in alto a sinistra e in basso a destra dell'area da ispezionare.| Parametro | Obbligatorio | Descrizione |
|---|---|---|
type | Sì | Versione dello strumento (computer_20251124, computer_20250124, o computer_20241022) |
name | Sì | Deve essere "computer" |
display_width_px | Sì | Larghezza del display in pixel |
display_height_px | Sì | Altezza del display in pixel |
display_number | No | Numero di display per ambienti X11 |
Importante: Lo strumento di controllo del computer deve essere eseguito esplicitamente dalla tua applicazione - Claude non può eseguirlo direttamente. Sei responsabile dell'implementazione della cattura dello screenshot, dei movimenti del mouse, degli input da tastiera e di altre azioni in base alle richieste di Claude.
Claude Sonnet 3.7 ha introdotto una nuova capacità di "thinking" che ti consente di vedere il processo di ragionamento del modello mentre lavora su attività complesse. Questa funzione ti aiuta a capire come Claude sta affrontando un problema e può essere particolarmente preziosa per il debug o scopi educativi.
Per abilitare il thinking, aggiungi un parametro thinking alla tua richiesta API:
"thinking": {
"type": "enabled",
"budget_tokens": 1024
}Il parametro budget_tokens specifica quanti token Claude può utilizzare per il thinking. Questo viene sottratto dal tuo budget complessivo di max_tokens.
Quando il thinking è abilitato, Claude restituirà il suo processo di ragionamento come parte della risposta, che può aiutarti a:
Ecco un esempio di come potrebbe apparire l'output del thinking:
[Thinking]
Devo salvare un'immagine di un gatto sul desktop. Dividiamo questo in passaggi:
1. Per prima cosa, prenderò uno screenshot per vedere cosa c'è sul desktop
2. Poi cercherò un browser web per cercare immagini di gatti
3. Dopo aver trovato un'immagine adatta, dovrò salvarla sul desktop
Iniziamo prendendo uno screenshot per vedere cosa è disponibile...Lo strumento di controllo del computer può essere combinato con altri strumenti per creare flussi di lavoro di automazione più potenti. Questo è particolarmente utile quando hai bisogno di:
L'implementazione di riferimento è pensata per aiutarti a iniziare con il computer use. Include tutti i componenti necessari affinché Claude utilizzi un computer. Tuttavia, puoi costruire il tuo ambiente per il computer use in base alle tue esigenze. Avrai bisogno di:
tool_use utilizzando le tue implementazioni di strumentiLo strumento di computer use è implementato come uno strumento senza schema. Quando utilizzi questo strumento, non è necessario fornire uno schema di input come con altri strumenti; lo schema è integrato nel modello di Claude e non può essere modificato.
Quando implementi lo strumento di computer use, possono verificarsi vari errori. Ecco come gestirli:
L'API vincola le immagini a un massimo di 1568 pixel sul lato più lungo e circa 1,15 megapixel totali (vedi ridimensionamento delle immagini per i dettagli). Ad esempio, uno schermo 1512x982 viene sottocampionato a circa 1330x864. Claude analizza questa immagine più piccola e restituisce coordinate in quello spazio, ma il tuo strumento esegue i clic nello spazio dello schermo originale.
Questo può causare il mancato raggiungimento dei target da parte delle coordinate di clic di Claude a meno che tu non gestisca la trasformazione delle coordinate.
Per risolvere questo problema, ridimensiona gli screenshot tu stesso e ridimensiona le coordinate di Claude:
La funzionalità di computer use è in beta. Sebbene le capacità di Claude siano all'avanguardia, gli sviluppatori dovrebbero essere consapevoli delle sue limitazioni:
left_mouse_down, left_mouse_up e nuovo supporto dei tasti modificatori. La selezione delle celle può essere più affidabile utilizzando questi controlli granulari e combinando i tasti modificatori con i clic.Rivedi e verifica sempre attentamente le azioni e i registri del computer use di Claude. Non utilizzare Claude per attività che richiedono una precisione perfetta o informazioni sensibili dell'utente senza supervisione umana.
Computer use follows the standard tool use pricing. When using the computer use tool:
System prompt overhead: The computer use beta adds 466-499 tokens to the system prompt
Computer use tool token usage:
| Model | Input tokens per tool definition |
|---|---|
| Claude 4.x models | 735 tokens |
| Claude Sonnet 3.7 (deprecated) | 735 tokens |
Additional token consumption:
If you're also using bash or text editor tools alongside computer use, those tools have their own token costs as documented in their respective pages.
Infine, per favore informa gli utenti finali dei rischi rilevanti e ottieni il loro consenso prima di abilitare il controllo del computer nei tuoi prodotti.
import anthropic
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-sonnet-4-5", # o un altro modello compatibile
max_tokens=1024,
tools=[
{
"type": "computer_20250124",
"name": "computer",
"display_width_px": 1024,
"display_height_px": 768,
"display_number": 1,
},
{
"type": "text_editor_20250728",
"name": "str_replace_based_edit_tool"
},
{
"type": "bash_20250124",
"name": "bash"
}
],
messages=[{"role": "user", "content": "Save a picture of a cat to my desktop."}],
betas=["computer-use-2025-01-24"]
)
print(response)1. Fornisci a Claude lo strumento di controllo del computer e un prompt dell'utente
2. Claude decide di utilizzare lo strumento di controllo del computer
stop_reason di tool_use, segnalando l'intenzione di Claude.3. Estrai l'input dello strumento, valuta lo strumento su un computer e restituisci i risultati
user contenente un blocco di contenuto tool_result.4. Claude continua a chiamare gli strumenti di controllo del computer fino al completamento dell'attività
stop_reason di tool_use e dovresti tornare al passaggio 3.enable_zoom |
| No |
Abilita l'azione zoom (computer_20251124 solo). Imposta su true per consentire a Claude di ingrandire regioni specifiche dello schermo. Predefinito: false |
curl https://api.anthropic.com/v1/messages \
-H "content-type: application/json" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: computer-use-2025-01-24" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 2000,
"tools": [
{
"type": "computer_20250124",
"name": "computer",
"display_width_px": 1024,
"display_height_px": 768,
"display_number": 1
},
{
"type": "text_editor_20250728",
"name": "str_replace_based_edit_tool"
},
{
"type": "bash_20250124",
"name": "bash"
},
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature, either 'celsius' or 'fahrenheit'"
}
},
"required": ["location"]
}
}
],
"messages": [
{
"role": "user",
"content": "Find flights from San Francisco to a place with warmer weather."
}
],
"thinking": {
"type": "enabled",
"budget_tokens": 1024
}
}'Configura il tuo ambiente di calcolo
Crea un display virtuale o connettiti a un display esistente con cui Claude interagirà. Questo in genere comporta la configurazione di Xvfb (X Virtual Framebuffer) o tecnologia simile.
Implementa i gestori di azioni
Crea funzioni per gestire ogni tipo di azione che Claude potrebbe richiedere:
def handle_computer_action(action_type, params):
if action_type == "screenshot":
return capture_screenshot()
elif action_type == "left_click":
x, y = params["coordinate"]
return click_at(x, y)
elif action_type == "type":
return type_text(params["text"])
# ... gestisci altre azioniElabora le chiamate di strumenti di Claude
Estrai ed esegui le chiamate di strumenti dalle risposte di Claude:
for content in response.content:
if content.type == "tool_use":
action = content.input["action"]
result = handle_computer_action(action, content.input)
# Restituisci il risultato a Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result
}Implementa l'agent loop
Crea un loop che continua fino a quando Claude completa l'attività:
while True:
response = client.beta.messages.create(...)
# Controlla se Claude ha utilizzato strumenti
tool_results = process_tool_calls(response)
if not tool_results:
# Nessun altro tool use, attività completata
break
# Continua la conversazione con i risultati degli strumenti
messages.append({"role": "user", "content": tool_results})import math
def get_scale_factor(width, height):
"""Calcola il fattore di scala per soddisfare i vincoli dell'API."""
long_edge = max(width, height)
total_pixels = width * height
long_edge_scale = 1568 / long_edge
total_pixels_scale = math.sqrt(1_150_000 / total_pixels)
return min(1.0, long_edge_scale, total_pixels_scale)
# Quando acquisisci lo screenshot
scale = get_scale_factor(screen_width, screen_height)
scaled_width = int(screen_width * scale)
scaled_height = int(screen_height * scale)
# Ridimensiona l'immagine alle dimensioni ridimensionate prima di inviarla a Claude
screenshot = capture_and_resize(scaled_width, scaled_height)
# Quando gestisci le coordinate di Claude, ridimensionale
def execute_click(x, y):
screen_x = x / scale
screen_y = y / scale
perform_click(screen_x, screen_y)Scopri di più sul tool use e sulla creazione di strumenti personalizzati