Aller au contenu principal

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

TailleTokens contexteLatenceCoutUsage
lowMinimalRapideFaibleFaits simples, chiffres
mediumModereStandardMoyenSyntheses, comparaisons
highMaximalPlus lentEleveAnalyses 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_size controle le volume de donnees web injecte
  • Le prompt systeme guide le modele vers les bonnes sources
  • Extrayez les annotations url_citation pour tracer les sources
  • Implementez une validation croisee pour les informations critiques
  • Gerez l’absence de resultats avec reformulation automatique