Lo strumento di ricerca web offre a Claude accesso diretto ai contenuti web in tempo reale, permettendogli di rispondere alle domande con informazioni aggiornate oltre il suo limite di conoscenza. Claude cita automaticamente le fonti dai risultati di ricerca come parte della sua risposta.
Ti invitiamo a contattarci tramite il nostro modulo di feedback per condividere la tua esperienza con lo strumento di ricerca web.
Modelli supportati
La ricerca web è disponibile su:
- Claude Sonnet 4.5 (
claude-sonnet-4-5-20250929)
- Claude Sonnet 4 (
claude-sonnet-4-20250514)
- Claude Sonnet 3.7 (deprecato) (
claude-3-7-sonnet-20250219)
- Claude Haiku 4.5 (
claude-haiku-4-5-20251001)
- Claude Haiku 3.5 (
claude-3-5-haiku-latest)
- Claude Opus 4.1 (
claude-opus-4-1-20250805)
- Claude Opus 4 (
claude-opus-4-20250514)
Come funziona la ricerca web
Quando aggiungi lo strumento di ricerca web alla tua richiesta API:
- Claude decide quando cercare in base al prompt.
- L’API esegue le ricerche e fornisce a Claude i risultati. Questo processo può ripetersi più volte durante una singola richiesta.
- Alla fine del suo turno, Claude fornisce una risposta finale con fonti citate.
Come utilizzare la ricerca web
L’amministratore della tua organizzazione deve abilitare la ricerca web in Console.
Fornisci lo strumento di ricerca web nella tua richiesta API:
curl https://api.anthropic.com/v1/messages \
--header "x-api-key: $ANTHROPIC_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "content-type: application/json" \
--data '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "What's the weather in NYC?"
}
],
"tools": [{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 5
}]
}'
Definizione dello strumento
Lo strumento di ricerca web supporta i seguenti parametri:
{
"type": "web_search_20250305",
"name": "web_search",
// Optional: Limit the number of searches per request
"max_uses": 5,
// Optional: Only include results from these domains
"allowed_domains": ["example.com", "trusteddomain.org"],
// Optional: Never include results from these domains
"blocked_domains": ["untrustedsource.com"],
// Optional: Localize search results
"user_location": {
"type": "approximate",
"city": "San Francisco",
"region": "California",
"country": "US",
"timezone": "America/Los_Angeles"
}
}
Max uses
Il parametro max_uses limita il numero di ricerche eseguite. Se Claude tenta più ricerche di quelle consentite, il web_search_tool_result sarà un errore con il codice di errore max_uses_exceeded.
Filtro dei domini
Quando si utilizzano i filtri dei domini:
- I domini non devono includere lo schema HTTP/HTTPS (usa
example.com invece di https://example.com)
- I sottodomini sono automaticamente inclusi (
example.com copre docs.example.com)
- I sottopercorsi sono supportati (
example.com/blog)
- Puoi utilizzare
allowed_domains o blocked_domains, ma non entrambi nella stessa richiesta.
Le restrizioni dei domini a livello di richiesta devono essere compatibili con le restrizioni dei domini a livello di organizzazione configurate in Console. I domini a livello di richiesta possono solo limitare ulteriormente i domini, non sovrascrivere o espandere oltre l’elenco a livello di organizzazione. Se la tua richiesta include domini che entrano in conflitto con le impostazioni dell’organizzazione, l’API restituirà un errore di convalida.
Localizzazione
Il parametro user_location ti consente di localizzare i risultati di ricerca in base alla posizione di un utente.
type: Il tipo di posizione (deve essere approximate)
city: Il nome della città
region: La regione o lo stato
country: Il paese
timezone: L’ID della zona oraria IANA.
Risposta
Ecco una struttura di risposta di esempio:
{
"role": "assistant",
"content": [
// 1. Claude's decision to search
{
"type": "text",
"text": "I'll search for when Claude Shannon was born."
},
// 2. The search query used
{
"type": "server_tool_use",
"id": "srvtoolu_01WYG3ziw53XMcoyKL4XcZmE",
"name": "web_search",
"input": {
"query": "claude shannon birth date"
}
},
// 3. Search results
{
"type": "web_search_tool_result",
"tool_use_id": "srvtoolu_01WYG3ziw53XMcoyKL4XcZmE",
"content": [
{
"type": "web_search_result",
"url": "https://en.wikipedia.org/wiki/Claude_Shannon",
"title": "Claude Shannon - Wikipedia",
"encrypted_content": "EqgfCioIARgBIiQ3YTAwMjY1Mi1mZjM5LTQ1NGUtODgxNC1kNjNjNTk1ZWI3Y...",
"page_age": "April 30, 2025"
}
]
},
{
"text": "Based on the search results, ",
"type": "text"
},
// 4. Claude's response with citations
{
"text": "Claude Shannon was born on April 30, 1916, in Petoskey, Michigan",
"type": "text",
"citations": [
{
"type": "web_search_result_location",
"url": "https://en.wikipedia.org/wiki/Claude_Shannon",
"title": "Claude Shannon - Wikipedia",
"encrypted_index": "Eo8BCioIAhgBIiQyYjQ0OWJmZi1lNm..",
"cited_text": "Claude Elwood Shannon (April 30, 1916 – February 24, 2001) was an American mathematician, electrical engineer, computer scientist, cryptographer and i..."
}
]
}
],
"id": "msg_a930390d3a",
"usage": {
"input_tokens": 6039,
"output_tokens": 931,
"server_tool_use": {
"web_search_requests": 1
}
},
"stop_reason": "end_turn"
}
Risultati di ricerca
I risultati di ricerca includono:
url: L’URL della pagina di origine
title: Il titolo della pagina di origine
page_age: Quando il sito è stato aggiornato l’ultima volta
encrypted_content: Contenuto crittografato che deve essere passato indietro nelle conversazioni multi-turno per le citazioni
Citazioni
Le citazioni sono sempre abilitate per la ricerca web e ogni web_search_result_location include:
url: L’URL della fonte citata
title: Il titolo della fonte citata
encrypted_index: Un riferimento che deve essere passato indietro per le conversazioni multi-turno.
cited_text: Fino a 150 caratteri del contenuto citato
I campi di citazione della ricerca web cited_text, title e url non contano verso l’utilizzo dei token di input o output.
Quando si visualizzano gli output dell’API direttamente agli utenti finali, le citazioni devono essere incluse alla fonte originale. Se stai apportando modifiche agli output dell’API, incluso il rielaborazione e/o la combinazione con il tuo materiale prima di visualizzarli agli utenti finali, visualizza le citazioni come appropriato in base alla consultazione con il tuo team legale.
Errori
Quando lo strumento di ricerca web incontra un errore (come il raggiungimento dei limiti di velocità), l’API Claude restituisce comunque una risposta 200 (successo). L’errore è rappresentato nel corpo della risposta utilizzando la seguente struttura:
{
"type": "web_search_tool_result",
"tool_use_id": "servertoolu_a93jad",
"content": {
"type": "web_search_tool_result_error",
"error_code": "max_uses_exceeded"
}
}
Questi sono i possibili codici di errore:
too_many_requests: Limite di velocità superato
invalid_input: Parametro di query di ricerca non valido
max_uses_exceeded: Utilizzi massimi dello strumento di ricerca web superati
query_too_long: La query supera la lunghezza massima
unavailable: Si è verificato un errore interno
Motivo di arresto pause_turn
La risposta può includere un motivo di arresto pause_turn, che indica che l’API ha messo in pausa un turno di lunga durata. Puoi fornire la risposta così com’è in una richiesta successiva per permettere a Claude di continuare il suo turno, o modificare il contenuto se desideri interrompere la conversazione.
Caching del prompt
La ricerca web funziona con il caching del prompt. Per abilitare il caching del prompt, aggiungi almeno un punto di interruzione cache_control nella tua richiesta. Il sistema memorizzerà automaticamente nella cache fino all’ultimo blocco web_search_tool_result durante l’esecuzione dello strumento.
Per le conversazioni multi-turno, imposta un punto di interruzione cache_control su o dopo l’ultimo blocco web_search_tool_result per riutilizzare il contenuto memorizzato nella cache.
Ad esempio, per utilizzare il caching del prompt con la ricerca web per una conversazione multi-turno:
import anthropic
client = anthropic.Anthropic()
# First request with web search and cache breakpoint
messages = [
{
"role": "user",
"content": "What's the current weather in San Francisco today?"
}
]
response1 = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=messages,
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"user_location": {
"type": "approximate",
"city": "San Francisco",
"region": "California",
"country": "US",
"timezone": "America/Los_Angeles"
}
}]
)
# Add Claude's response to the conversation
messages.append({
"role": "assistant",
"content": response1.content
})
# Second request with cache breakpoint after the search results
messages.append({
"role": "user",
"content": "Should I expect rain later this week?",
"cache_control": {"type": "ephemeral"} # Cache up to this point
})
response2 = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=messages,
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"user_location": {
"type": "approximate",
"city": "San Francisco",
"region": "California",
"country": "US",
"timezone": "America/Los_Angeles"
}
}]
)
# The second response will benefit from cached search results
# while still being able to perform new searches if needed
print(f"Cache read tokens: {response2.usage.get('cache_read_input_tokens', 0)}")
Streaming
Con lo streaming abilitato, riceverai gli eventi di ricerca come parte dello stream. Ci sarà una pausa mentre la ricerca viene eseguita:
event: message_start
data: {"type": "message_start", "message": {"id": "msg_abc123", "type": "message"}}
event: content_block_start
data: {"type": "content_block_start", "index": 0, "content_block": {"type": "text", "text": ""}}
// Claude's decision to search
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "web_search"}}
// Search query streamed
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"query\":\"latest quantum computing breakthroughs 2025\"}"}}
// Pause while search executes
// Search results streamed
event: content_block_start
data: {"type": "content_block_start", "index": 2, "content_block": {"type": "web_search_tool_result", "tool_use_id": "srvtoolu_xyz789", "content": [{"type": "web_search_result", "title": "Quantum Computing Breakthroughs in 2025", "url": "https://example.com"}]}}
// Claude's response with citations (omitted in this example)
Richieste batch
Puoi includere lo strumento di ricerca web nell’API Messages Batches. Le chiamate dello strumento di ricerca web tramite l’API Messages Batches hanno lo stesso prezzo di quelle nelle richieste dell’API Messages regolari.
Utilizzo e prezzi
Web search usage is charged in addition to token usage:
"usage": {
"input_tokens": 105,
"output_tokens": 6039,
"cache_read_input_tokens": 7123,
"cache_creation_input_tokens": 7345,
"server_tool_use": {
"web_search_requests": 1
}
}
Web search is available on the Claude API for $10 per 1,000 searches, plus standard token costs for search-generated content. Web search results retrieved throughout a conversation are counted as input tokens, in search iterations executed during a single turn and in subsequent conversation turns.
Each web search counts as one use, regardless of the number of results returned. If an error occurs during web search, the web search will not be billed.