Web Search API : recherche web programmatique
Web Search API : recherche web programmatique
L’outil Web Search permet au modele d’effectuer des recherches sur le web en temps reel directement depuis la Responses API. Plus besoin d’integrer une API de recherche tierce : le modele formule la requete, execute la recherche et synthetise les resultats.
Activer Web Search
L’activation est immediate : ajoutez web_search_preview dans le tableau tools :
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.3",
input="Quels sont les derniers resultats de la Ligue 1 ?",
tools=[{"type": "web_search_preview"}]
)
print(response.output_text)
Le modele decide automatiquement quand chercher sur le web. Si la question porte sur des connaissances recentes ou des faits verifiables, il lance une recherche.
Structure de la reponse
La reponse contient des annotations avec les sources utilisees :
response = client.responses.create(
model="gpt-5.3",
input="Quel est le cours actuel de l'action LVMH ?",
tools=[{"type": "web_search_preview"}]
)
# Texte synthetise
print(response.output_text)
# Examiner les sources
for item in response.output:
if hasattr(item, "content"):
for block in item.content:
if hasattr(block, "annotations"):
for annotation in block.annotations:
if annotation.type == "url_citation":
print(f"Source : {annotation.url}")
print(f"Titre : {annotation.title}")
Contexte utilisateur pour la pertinence
Fournissez un contexte geographique et temporel pour ameliorer la pertinence :
response = client.responses.create(
model="gpt-5.3",
input="Quel restaurant japonais est ouvert ce soir ?",
tools=[{
"type": "web_search_preview",
"user_location": {
"type": "approximate",
"city": "Paris",
"country": "FR"
}
}]
)
Le parametre user_location accepte plusieurs niveaux de precision :
# Localisation approximative
"user_location": {
"type": "approximate",
"city": "Lyon",
"region": "Auvergne-Rhone-Alpes",
"country": "FR"
}
Combiner Web Search et fonctions personnalisees
Le vrai pouvoir apparait quand vous combinez la recherche web avec vos propres outils :
tools = [
{"type": "web_search_preview"},
{
"type": "function",
"name": "sauvegarder_veille",
"description": "Sauvegarder un resultat de veille dans la base de donnees",
"parameters": {
"type": "object",
"properties": {
"titre": {"type": "string"},
"resume": {"type": "string"},
"url_source": {"type": "string"},
"categorie": {
"type": "string",
"enum": ["concurrent", "marche", "reglementation", "technologie"]
}
},
"required": ["titre", "resume", "categorie"],
"additionalProperties": false
},
"strict": true
}
]
response = client.responses.create(
model="gpt-5.3",
input="Cherche les dernieres actualites sur la reglementation IA en Europe "
"et sauvegarde les resultats importants",
tools=tools
)
Cas d’usage en production
Veille concurrentielle automatisee
def veille_quotidienne(entreprises: list[str]):
"""Lance une veille web pour chaque concurrent."""
resultats = []
for entreprise in entreprises:
response = client.responses.create(
model="gpt-5.3",
input=f"Quelles sont les dernieres actualites concernant {entreprise} ? "
"Concentre-toi sur les annonces produit, levees de fonds "
"et partenariats des 7 derniers jours.",
tools=[{"type": "web_search_preview"}]
)
resultats.append({
"entreprise": entreprise,
"synthese": response.output_text
})
return resultats
Verification de faits
def verifier_affirmation(affirmation: str) -> dict:
"""Verifie une affirmation en croisant plusieurs sources web."""
response = client.responses.create(
model="gpt-5.3",
input=f"Verifie cette affirmation en cherchant des sources fiables : "
f"'{affirmation}'. Indique si c'est vrai, faux ou incertain, "
f"avec les sources qui appuient ta conclusion.",
tools=[{"type": "web_search_preview"}]
)
# Extraire les citations
sources = []
for item in response.output:
if hasattr(item, "content"):
for block in item.content:
if hasattr(block, "annotations"):
for ann in block.annotations:
if ann.type == "url_citation":
sources.append(ann.url)
return {
"analyse": response.output_text,
"nombre_sources": len(sources),
"sources": sources
}
Limites a connaitre
- Le modele peut ne pas trouver de resultats pertinents pour des sujets tres niches
- Les resultats dependent de l’indexation web au moment de la requete
- Le nombre de recherches par appel est limite : le modele optimise en formulant des requetes precises
- Les contenus derriere un paywall ou un login ne sont pas accessibles
Points cles a retenir
web_search_previews’ajoute en une ligne danstools- Le modele decide seul quand chercher sur le web
user_locationameliore la pertinence des resultats locaux- Les annotations
url_citationfournissent les sources - Combinez Web Search avec vos fonctions pour automatiser la veille