Configurer et contrôler les résultats web
Configurer et controler les resultats web
L’outil Web Search offre des options de configuration pour affiner les resultats : taille du contexte de recherche, localisation, et strategies de prompting pour guider les requetes du modele.
Parametre search_context_size
Le parametre search_context_size controle la quantite de contenu web injecte dans le contexte du modele :
from openai import OpenAI
client = OpenAI()
# Contexte minimal : reponses rapides et concises
response = client.responses.create(
model="gpt-5.3",
input="Quel est le PIB de la France en 2025 ?",
tools=[{
"type": "web_search_preview",
"search_context_size": "low"
}]
)
# Contexte moyen : bon compromis (defaut)
response = client.responses.create(
model="gpt-5.3",
input="Resume les tendances du marche IA en Europe",
tools=[{
"type": "web_search_preview",
"search_context_size": "medium"
}]
)
# Contexte large : analyses approfondies
response = client.responses.create(
model="gpt-5.3",
input="Compare les strategies IA de la France, l'Allemagne et les Pays-Bas",
tools=[{
"type": "web_search_preview",
"search_context_size": "high"
}]
)
Impact sur les couts et la latence
| Taille | Tokens contexte | Latence | Cout | Usage |
|---|---|---|---|---|
low | Minimal | Rapide | Faible | Faits simples, chiffres |
medium | Modere | Standard | Moyen | Syntheses, comparaisons |
high | Maximal | Plus lent | Eleve | Analyses approfondies |
Guider les requetes de recherche par le prompt
Le modele formule ses propres requetes de recherche. Vous pouvez influencer ce comportement dans le prompt systeme :
response = client.responses.create(
model="gpt-5.3",
instructions=(
"Tu es un analyste de marche specialise en technologie europeenne. "
"Quand tu fais des recherches web, privilegia les sources institutionnelles "
"(Commission europeenne, INSEE, Eurostat) et les medias specialises "
"(Les Echos, La Tribune, TechCrunch). "
"Ignore les blogs personnels et les forums."
),
input="Quel est l'etat du financement des startups IA en France ?",
tools=[{
"type": "web_search_preview",
"search_context_size": "high"
}]
)
Extraire et structurer les citations
Pour exploiter programmatiquement les sources, extrayez les annotations :
def extraire_sources(response) -> list[dict]:
"""Extrait toutes les citations URL d'une reponse avec Web Search."""
sources = []
for item in response.output:
if item.type == "message":
for block in item.content:
if hasattr(block, "annotations"):
for ann in block.annotations:
if ann.type == "url_citation":
sources.append({
"url": ann.url,
"titre": ann.title,
"extrait_debut": ann.start_index,
"extrait_fin": ann.end_index
})
return sources
# Utilisation
response = client.responses.create(
model="gpt-5.3",
input="Quelles sont les nouvelles regles RGPD pour l'IA en 2026 ?",
tools=[{"type": "web_search_preview"}]
)
sources = extraire_sources(response)
for s in sources:
print(f" {s['titre']}: {s['url']}")
Pattern : recherche avec validation croisee
Pour des informations critiques, forcez le modele a croiser les sources :
def recherche_validee(question: str, min_sources: int = 3) -> dict:
"""Recherche web avec exigence de sources multiples."""
response = client.responses.create(
model="gpt-5.3",
instructions=(
f"Pour repondre a cette question, tu dois trouver au moins "
f"{min_sources} sources independantes qui confirment l'information. "
"Si les sources se contredisent, signale les divergences. "
"Cite chaque source explicitement."
),
input=question,
tools=[{
"type": "web_search_preview",
"search_context_size": "high"
}]
)
sources = extraire_sources(response)
return {
"reponse": response.output_text,
"sources": sources,
"fiabilite": "haute" if len(sources) >= min_sources else "a_verifier"
}
Gerer l’absence de resultats
Le modele peut ne pas trouver ce que vous cherchez. Gerez ce cas :
def recherche_avec_fallback(question: str) -> dict:
"""Recherche web avec detection d'echec et reformulation."""
# Premiere tentative
response = client.responses.create(
model="gpt-5.3",
input=question,
tools=[{"type": "web_search_preview"}]
)
sources = extraire_sources(response)
if len(sources) == 0:
# Reformulation automatique
response = client.responses.create(
model="gpt-5.3",
input=f"Reformule cette question pour une recherche web plus efficace, "
f"puis cherche : {question}",
tools=[{"type": "web_search_preview", "search_context_size": "high"}]
)
sources = extraire_sources(response)
return {
"reponse": response.output_text,
"sources": sources
}
Web Search avec streaming
Pour une experience interactive, combinez Web Search avec le streaming :
stream = client.responses.create(
model="gpt-5.3",
input="Quelles sont les actualites tech de la semaine ?",
tools=[{"type": "web_search_preview"}],
stream=True
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
elif event.type == "response.completed":
# Extraire les sources a la fin
sources = extraire_sources(event.response)
print(f"\n\n--- {len(sources)} sources consultees ---")
Points cles a retenir
search_context_sizecontrole le volume de donnees web injecte- Le prompt systeme guide le modele vers les bonnes sources
- Extrayez les annotations
url_citationpour tracer les sources - Implementez une validation croisee pour les informations critiques
- Gerez l’absence de resultats avec reformulation automatique