L’outil de recherche web donne à Claude un accès direct au contenu web en temps réel, lui permettant de répondre aux questions avec des informations à jour au-delà de sa limite de connaissances. Claude cite automatiquement les sources des résultats de recherche dans le cadre de sa réponse.
Modèles pris en charge
La recherche web est disponible sur :
- Claude Opus 4.1 (
claude-opus-4-1-20250805
)
- Claude Opus 4 (
claude-opus-4-20250514
)
- Claude Sonnet 4 (
claude-sonnet-4-20250514
)
- Claude Sonnet 3.7 (
claude-3-7-sonnet-20250219
)
- Claude Sonnet 3.5 (nouveau) (
claude-3-5-sonnet-latest
)
- Claude Haiku 3.5 (
claude-3-5-haiku-latest
)
Lorsque vous ajoutez l’outil de recherche web à votre requête API :
- Claude décide quand effectuer une recherche en fonction de l’invite.
- L’API exécute les recherches et fournit à Claude les résultats. Ce processus peut se répéter plusieurs fois au cours d’une seule requête.
- À la fin de son tour, Claude fournit une réponse finale avec des sources citées.
L’administrateur de votre organisation doit activer la recherche web dans la Console.
Fournissez l’outil de recherche web dans votre requête 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-opus-4-1-20250805",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "Comment mettre à jour une application web vers TypeScript 5.5 ?"
}
],
"tools": [{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 5
}]
}'
Définition de l’outil
L’outil de recherche web prend en charge les paramètres suivants :
{
"type": "web_search_20250305",
"name": "web_search",
// Optionnel : Limiter le nombre de recherches par requête
"max_uses": 5,
// Optionnel : Inclure uniquement les résultats de ces domaines
"allowed_domains": ["example.com", "trusteddomain.org"],
// Optionnel : Ne jamais inclure les résultats de ces domaines
"blocked_domains": ["untrustedsource.com"],
// Optionnel : Localiser les résultats de recherche
"user_location": {
"type": "approximate",
"city": "San Francisco",
"region": "California",
"country": "US",
"timezone": "America/Los_Angeles"
}
}
Utilisations maximales
Le paramètre max_uses
limite le nombre de recherches effectuées. Si Claude tente plus de recherches que autorisé, le web_search_tool_result
sera une erreur avec le code d’erreur max_uses_exceeded
.
Filtrage de domaine
Lors de l’utilisation de filtres de domaine :
- Les domaines ne doivent pas inclure le schéma HTTP/HTTPS (utilisez
example.com
au lieu de https://example.com
)
- Les sous-domaines sont automatiquement inclus (
example.com
couvre docs.example.com
)
- Les sous-chemins sont pris en charge (
example.com/blog
)
- Vous pouvez utiliser soit
allowed_domains
soit blocked_domains
, mais pas les deux dans la même requête.
Les restrictions de domaine au niveau de la requête doivent être compatibles avec les restrictions de domaine au niveau de l’organisation configurées dans la Console. Les domaines au niveau de la requête ne peuvent que restreindre davantage les domaines, pas remplacer ou étendre au-delà de la liste au niveau de l’organisation. Si votre requête inclut des domaines qui entrent en conflit avec les paramètres de l’organisation, l’API retournera une erreur de validation.
Localisation
Le paramètre user_location
vous permet de localiser les résultats de recherche en fonction de l’emplacement d’un utilisateur.
type
: Le type d’emplacement (doit être approximate
)
city
: Le nom de la ville
region
: La région ou l’état
country
: Le pays
timezone
: L’ID de fuseau horaire IANA.
Réponse
Voici un exemple de structure de réponse :
{
"role": "assistant",
"content": [
// 1. Décision de Claude de rechercher
{
"type": "text",
"text": "Je vais rechercher quand Claude Shannon est né."
},
// 2. La requête de recherche utilisée
{
"type": "server_tool_use",
"id": "srvtoolu_01WYG3ziw53XMcoyKL4XcZmE",
"name": "web_search",
"input": {
"query": "claude shannon date de naissance"
}
},
// 3. Résultats de recherche
{
"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": "30 avril 2025"
}
]
},
{
"text": "Basé sur les résultats de recherche, ",
"type": "text"
},
// 4. Réponse de Claude avec citations
{
"text": "Claude Shannon est né le 30 avril 1916, à 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 (30 avril 1916 – 24 février 2001) était un mathématicien américain, ingénieur électricien, informaticien, cryptographe et i..."
}
]
}
],
"id": "msg_a930390d3a",
"usage": {
"input_tokens": 6039,
"output_tokens": 931,
"server_tool_use": {
"web_search_requests": 1
}
},
"stop_reason": "end_turn"
}
Résultats de recherche
Les résultats de recherche incluent :
url
: L’URL de la page source
title
: Le titre de la page source
page_age
: Quand le site a été mis à jour pour la dernière fois
encrypted_content
: Contenu chiffré qui doit être retransmis dans les conversations multi-tours pour les citations
Citations
Les citations sont toujours activées pour la recherche web, et chaque web_search_result_location
inclut :
url
: L’URL de la source citée
title
: Le titre de la source citée
encrypted_index
: Une référence qui doit être retransmise pour les conversations multi-tours.
cited_text
: Jusqu’à 150 caractères du contenu cité
Les champs de citation de recherche web cited_text
, title
, et url
ne comptent pas dans l’utilisation des jetons d’entrée ou de sortie.
Lors de l’affichage des résultats web ou des informations contenues dans les résultats web aux utilisateurs finaux, les citations en ligne doivent être clairement visibles et cliquables dans votre interface utilisateur.
Erreurs
Lorsque l’outil de recherche web rencontre une erreur (comme atteindre les limites de taux), l’API Anthropic retourne toujours une réponse 200 (succès). L’erreur est représentée dans le corps de la réponse en utilisant la structure suivante :
{
"type": "web_search_tool_result",
"tool_use_id": "servertoolu_a93jad",
"content": {
"type": "web_search_tool_result_error",
"error_code": "max_uses_exceeded"
}
}
Voici les codes d’erreur possibles :
too_many_requests
: Limite de taux dépassée
invalid_input
: Paramètre de requête de recherche invalide
max_uses_exceeded
: Utilisations maximales de l’outil de recherche web dépassées
query_too_long
: La requête dépasse la longueur maximale
unavailable
: Une erreur interne s’est produite
Raison d’arrêt pause_turn
La réponse peut inclure une raison d’arrêt pause_turn
, qui indique que l’API a mis en pause un tour de longue durée. Vous pouvez fournir la réponse telle quelle dans une requête ultérieure pour laisser Claude continuer son tour, ou modifier le contenu si vous souhaitez interrompre la conversation.
Mise en cache des invites
La recherche web fonctionne avec la mise en cache des invites. Pour activer la mise en cache des invites, ajoutez au moins un point d’arrêt cache_control
dans votre requête. Le système mettra automatiquement en cache jusqu’au dernier bloc web_search_tool_result
lors de l’exécution de l’outil.
Pour les conversations multi-tours, définissez un point d’arrêt cache_control
sur ou après le dernier bloc web_search_tool_result
pour réutiliser le contenu mis en cache.
Par exemple, pour utiliser la mise en cache des invites avec la recherche web pour une conversation multi-tours :
import anthropic
client = anthropic.Anthropic()
# Première requête avec recherche web et point d'arrêt de cache
messages = [
{
"role": "user",
"content": "Quel est le temps actuel à San Francisco aujourd'hui ?"
}
]
response1 = client.messages.create(
model="claude-opus-4-1-20250805",
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"
}
}]
)
# Ajouter la réponse de Claude à la conversation
messages.append({
"role": "assistant",
"content": response1.content
})
# Deuxième requête avec point d'arrêt de cache après les résultats de recherche
messages.append({
"role": "user",
"content": "Dois-je m'attendre à de la pluie plus tard cette semaine ?",
"cache_control": {"type": "ephemeral"} # Mettre en cache jusqu'à ce point
})
response2 = client.messages.create(
model="claude-opus-4-1-20250805",
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"
}
}]
)
# La deuxième réponse bénéficiera des résultats de recherche mis en cache
# tout en étant encore capable d'effectuer de nouvelles recherches si nécessaire
print(f"Jetons de lecture de cache : {response2.usage.get('cache_read_input_tokens', 0)}")
Streaming
Avec le streaming activé, vous recevrez des événements de recherche dans le cadre du flux. Il y aura une pause pendant l’exécution de la recherche :
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": ""}}
// Décision de Claude de rechercher
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "server_tool_use", "id": "srvtoolu_xyz789", "name": "web_search"}}
// Requête de recherche diffusée
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "input_json_delta", "partial_json": "{\"query\":\"dernières percées en informatique quantique 2025\"}"}}
// Pause pendant l'exécution de la recherche
// Résultats de recherche diffusés
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": "Percées en informatique quantique en 2025", "url": "https://example.com"}]}}
// Réponse de Claude avec citations (omise dans cet exemple)
Requêtes par lots
Vous pouvez inclure l’outil de recherche web dans l’API Messages Batches. Les appels d’outil de recherche web via l’API Messages Batches sont facturés au même prix que ceux dans les requêtes API Messages régulières.
Utilisation et tarification
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 Anthropic 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.