Permettez aux modèles de rechercher des informations à jour sur le Web avant de générer une réponse.
Responses
La recherche web permet aux modèles de consulter des informations à jour sur Internet et de citer leurs sources dans leurs réponses. Pour l’activer, utilisez l’outil de recherche web dans l’API Responses ou, dans certains cas, dans l’API Chat Completions.
Choisissez une méthode de recherche adaptée à la question à laquelle vous devez répondre.
Pour une vérification rapide, demandez à un modèle de rechercher une information précise et de citer sa source.
Si la question nécessite de consulter plusieurs sources, utilisez un modèle de raisonnement comme gpt-6-astra. Il peut affiner ses recherches à mesure qu’il consulte les résultats. Utilisez le mode en arrière-plan pour une requête susceptible de prendre plusieurs minutes.
Choisissez une intégration
Cas d’usage
Intégration recommandée
Remarques
Nouvelle intégration de recherche web
API Responses avec web_search et gpt-6-astra
L’outil de recherche web hébergé permet de filtrer les domaines, de consulter les sources, de contrôler l’accès en direct et de mener des recherches plus longues.
Intégration de recherche existante dans Chat Completions
Chat Completions avec gpt-5-search-api
Utilisez cette option uniquement si vous devez conserver une intégration Chat Completions.
Recherche en plusieurs étapes ou production de rapports de longue durée
gpt-6-astra avec un effort de raisonnement réglé sur high ou xhigh
Utilisez le mode en arrière-plan pour les rapports dont la production peut prendre plusieurs minutes.
Avec l’API Responses, vous pouvez activer la recherche web en configurant l’outil dans le tableau tools d’une requête de génération de contenu. Comme pour tout autre outil, le modèle décide de l’utiliser ou non en fonction du contenu du prompt.
Pour toute nouvelle intégration avec l’API Responses, utilisez { "type": "web_search" }. L’ancien outil web_search_preview reste disponible pour les intégrations existantes, mais ne prend pas en charge les paramètres plus récents tels que filters, external_web_access et return_token_budget.
Exemple d’utilisation de l’outil de recherche web
JavaScript
1
2
3
4
5
6
7
8
9
10import OpenAI from"openai";constclient=newOpenAI();constresponse=await client.responses.create({ model: "gpt-6-astra", tools: [{ type: "web_search" }], input: "What was a positive news story from today?",});console.log(response.output_text);
1
2
3
4
5
6
7
8
9
10
11from openai import OpenAIclient = OpenAI()response = client.responses.create( model="gpt-6-astra", tools=[{"type": "web_search"}], input="What was a positive news story from today?",)print(response.output_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15using OpenAI.Responses;#pragma warning disable OPENAI001string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;ResponsesClient client = new(key);CreateResponseOptions options = new() { Model = "gpt-6-astra" };options.Tools.Add(ResponseTool.CreateWebSearchTool());options.InputItems.Add( ResponseItem.CreateUserMessageItem("What was a positive news story from today?"));ResponseResult response = await client.CreateResponseAsync(options);Console.WriteLine(response.GetOutputText());
1
2
3
4
5
6
7
8
9
10
11require "openai"openai = OpenAI::Client.newresponse = openai.responses.create( model: "gpt-6-astra", tools: [{ type: "web_search" }], input: "What was a positive news story from today?")puts(response.output_text)
1
2
3
4
5
6
7
8curl "https://api.openai.com/v1/responses" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -d '{ "model": "gpt-6-astra", "tools": [{"type": "web_search"}], "input": "what was a positive news story from today?"}'
1
2
3
4
5
6
7
8openai responses create \ --model gpt-6-astra \ --raw-output \ --transform 'output.#(type=="message").content.0.text' <<'YAML'tools: - type: web_searchinput: What was a positive news story from today?YAML
Résultats et citations
Lorsque le modèle utilise l’outil de recherche web, sa réponse comprend deux éléments :
Un élément de sortie web_search_call qui contient l’identifiant de l’appel de recherche et indique l’action effectuée dans web_search_call.action. Les actions possibles sont les suivantes :
search correspond à une recherche web. Cette action inclut généralement, mais pas systématiquement, les requêtes exécutées dans queries. Chaque action de recherche est facturée comme un appel d’outil (voir les tarifs).
open_page correspond à l’ouverture d’une page. Les modèles de raisonnement prennent en charge cette action.
find_in_page correspond à une recherche dans une page. Les modèles de raisonnement prennent en charge cette action.
Un élément de sortie message qui contient :
Le texte de la réponse dans message.content[0].text
Les annotations message.content[0].annotations pour les URL citées
Par défaut, le modèle insère dans le texte de sa réponse des citations qui renvoient aux URL trouvées lors de la recherche web. L’objet d’annotation url_citation indique également l’URL et le titre de la source citée, ainsi que l’emplacement de la citation dans la réponse.
Lorsque votre interface affiche des résultats de recherche web ou des informations qui en sont issues, vous devez présenter les citations dans le texte sous forme de liens bien visibles et cliquables.
Avec Chat Completions, le modèle récupère toujours des informations sur le Web avant de répondre à votre requête. Pour laisser le modèle décider s’il doit lancer une recherche, passez à l’API Responses avec l’outil web_search.
Pour effectuer une recherche web avec Chat Completions, utilisez actuellement le modèle suivant :
gpt-5-search-api
Exemple de paramètre de recherche web
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15import OpenAI from"openai";constclient=newOpenAI();constcompletion=await client.chat.completions.create({ model: "gpt-5-search-api", web_search_options: {}, messages: [ { role: "user", content: "What was a positive news story from today?", }, ],});console.log(completion.choices[0].message.content);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16from openai import OpenAIclient = OpenAI()completion = client.chat.completions.create( model="gpt-5-search-api", web_search_options={}, messages=[ { "role": "user", "content": "What was a positive news story from today?", } ],)print(completion.choices[0].message.content)
1
2
3
4
5
6
7
8
9
10
11curl -X POST "https://api.openai.com/v1/chat/completions" \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-type: application/json" \ -d '{ "model": "gpt-5-search-api", "web_search_options": {}, "messages": [{ "role": "user", "content": "What was a positive news story from today?" }] }'
Résultats et citations
Dans la réponse de l’API, l’élément du tableau choices contient :
message.content, qui contient le texte généré par le modèle, y compris les éventuelles citations intégrées au texte
annotations, qui contient la liste des URL citées
Par défaut, le modèle insère dans le texte de sa réponse des citations qui renvoient aux URL trouvées lors de la recherche web. L’objet d’annotation url_citation indique également l’URL et le titre de la source citée, ainsi que les indices de caractères qui délimitent le passage de la réponse qui s’appuie sur cette source.
Lorsque votre interface affiche des résultats de recherche web ou des informations qui en sont issues, vous devez présenter les citations dans le texte sous forme de liens bien visibles et cliquables.
Migration depuis les anciennes intégrations de recherche web
Si vous utilisez
Migration recommandée
Remarques
web_search_preview dans l’API Responses
Passez à web_search
web_search prend en charge des paramètres plus récents tels que filters, external_web_access et return_token_budget.
gpt-4o-search-preview ou gpt-4o-mini-search-preview
Passez à l’outil web_search de l’API Responses ou utilisez gpt-5-search-api si vous devez conserver Chat Completions.
Les modèles de recherche en préversion sont obsolètes et ont été mis hors service le 23 juillet 2026.
Une intégration de recherche avec Chat Completions
Utilisez gpt-5-search-api ou passez à l’outil web_search de l’API Responses pour bénéficier de réglages supplémentaires et rendre la recherche facultative.
Les modèles de recherche de Chat Completions effectuent toujours une recherche avant de répondre. Dans l’API Responses, la recherche est un outil.
o4-mini dans l’API Responses
Passez à un modèle de raisonnement pris en charge et utilisez-le avec web_search.
Si votre intégration utilise encore gpt-5, la recherche web exige un effort de raisonnement supérieur à minimal.
Taille du contexte de recherche
search_context_size détermine la quantité d’informations issues des résultats de recherche web dont dispose le modèle avant de générer sa réponse. Utilisez low si quelques détails suffisent, medium comme valeur par défaut équilibrée et high lorsque la réponse peut nécessiter davantage de détails tirés des résultats. Ce réglage ne fixe pas un nombre exact de tokens et ne garantit aucun nombre précis de sources ou de citations.
Réglage de la taille du contexte de recherche
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14import OpenAI from"openai";constopenai=newOpenAI();constresponse=await openai.responses.create({ model: "gpt-6-astra", tools: [ { type: "web_search", search_context_size: "low", }, ], input: "What movie won best picture in 2025?",});console.log(response.output_text);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16from openai import OpenAIclient = OpenAI()response = client.responses.create( model="gpt-6-astra", tools=[ { "type": "web_search", "search_context_size": "low", } ], input="What movie won best picture in 2025?",)print(response.output_text)
return_token_budget détermine la quantité de contenu que l’outil peut renvoyer dans ses résultats de recherche web lors d’une recherche avec l’API Responses et les modèles de raisonnement GPT-5 ou ultérieurs. Conservez la valeur par défaut pour la plupart des requêtes. Utilisez unlimited uniquement pour les recherches ou évaluations qui demandent un effort important et nécessitent de consulter de nombreuses pages, si le plafond habituel de tokens renvoyés risque de les interrompre.
Réservez unlimited à ces cas, car cette valeur peut augmenter la latence et le coût. Pour les tâches de longue durée qui enchaînent plusieurs recherches, utilisez le mode en arrière-plan (background: true). La requête peut ainsi se poursuivre de manière asynchrone et vous pouvez récupérer la réponse finale ultérieurement.
Valeur
Comportement
default
Applique le budget standard de tokens que l’outil peut renvoyer dans les résultats de recherche web. Vous obtenez le même comportement en omettant return_token_budget.
unlimited
Supprime le plafond appliqué par défaut au nombre de tokens que l’outil peut renvoyer au cours de la recherche web.
Ce paramètre s’applique uniquement à l’outil hébergé web_search de l’API Responses lorsque la recherche web fait appel à un modèle de raisonnement GPT-5 ou ultérieur. Il ne modifie pas la fenêtre de contexte de recherche. Il ne s’applique ni à la recherche web sans raisonnement, ni aux anciennes intégrations de l’API Search, ni à la recherche web dans un conteneur, ni aux modèles de recherche de Chat Completions, ni à web_search_preview. Les seules valeurs acceptées sont default et unlimited. L’API rejette null, les nombres et toute autre chaîne de caractères.
Exécution de recherches web plus longues
curl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46import OpenAI from "openai";import { Agent, fetch } from "undici";// Allow long research runs without automatic request retries.const timeout = 15 * 60 * 1000;const dispatcher = new Agent({ headersTimeout: timeout, bodyTimeout: timeout,});const client = new OpenAI({ timeout, maxRetries: 0, fetch, fetchOptions: { dispatcher },});try { const stream = client.responses.stream({ model: "gpt-6-astra", reasoning: { effort: "xhigh" }, tools: [ { type: "web_search", return_token_budget: "unlimited", }, ], input: [ "Research the economic impact of semaglutide on global healthcare systems.", "", "Do:", "- Include specific figures, trends, statistics, and measurable outcomes.", "- Prioritize reliable, up-to-date sources: peer-reviewed research, health organizations (e.g., WHO, CDC), regulatory agencies, or pharmaceutical earnings reports.", "- Include inline citations and return all source metadata.", "", "Be analytical, avoid generalities, and ensure that each section supports data-backed reasoning that could inform healthcare policy or financial modeling.", ].join("\n"), }); const response = await stream.finalResponse(); if (response.status !== "completed") { throw new Error(`Research response ended with status ${response.status}`); } console.log(response.output_text);} finally { await dispatcher.close();}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24from openai import OpenAIclient = OpenAI()response = client.responses.create( model="gpt-6-astra", reasoning={"effort": "xhigh"}, tools=[ { "type": "web_search", "return_token_budget": "unlimited", } ], input="""Research the economic impact of semaglutide on global healthcare systems.Do:- Include specific figures, trends, statistics, and measurable outcomes.- Prioritize reliable, up-to-date sources: peer-reviewed research, health organizations (e.g., WHO, CDC), regulatory agencies, or pharmaceutical earnings reports.- Include inline citations and return all source metadata.Be analytical, avoid generalities, and ensure that each section supports data-backed reasoning that could inform healthcare policy or financial modeling.""",)print(response.output_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37package mainimport ( "context" "fmt" "strings" "github.com/openai/openai-go/v3" "github.com/openai/openai-go/v3/responses" "github.com/openai/openai-go/v3/shared")func main() { client := openai.NewClient() tool := responses.ToolParamOfWebSearch(responses.WebSearchToolTypeWebSearch) tool.OfWebSearch.SetExtraFields(map[string]any{"return_token_budget": "unlimited"}) input := strings.Join([]string{ "Research the economic impact of semaglutide on global healthcare systems.", "", "Do:", "- Include specific figures, trends, statistics, and measurable outcomes.", "- Prioritize reliable, up-to-date sources: peer-reviewed research, health organizations, regulatory agencies, or pharmaceutical earnings reports.", "- Include inline citations and return all source metadata.", "", "Be analytical, avoid generalities, and ensure that each section supports data-backed reasoning that could inform healthcare policy or financial modeling.", }, "\n") response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{ Model: "gpt-6-astra", Reasoning: shared.ReasoningParam{Effort: shared.ReasoningEffortXhigh}, Tools: []responses.ToolUnionParam{tool}, Input: responses.ResponseNewParamsInputUnion{OfString: openai.String(input)}, }) if err != nil { panic(err) } fmt.Println(response.OutputText())}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16require "openai"client = OpenAI::Client.newresponse = client.responses.create( model: "gpt-6-astra", input: "Research the economic impact of semaglutide on global healthcare systems. Include current figures and citations.", reasoning: { effort: :xhigh }, tools: [ { type: :web_search, return_token_budget: :unlimited } ])puts(response.output_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14curl"https://api.openai.com/v1/responses"\-H"Content-Type: application/json"\-H"Authorization: Bearer $OPENAI_API_KEY"\-d'{ "model": "gpt-6-astra", "reasoning": { "effort": "xhigh" }, "tools": [ { "type": "web_search", "return_token_budget": "unlimited" } ], "input": "Research the economic impact of semaglutide on global healthcare systems.\n\nDo:\n- Include specific figures, trends, statistics, and measurable outcomes.\n- Prioritize reliable, up-to-date sources: peer-reviewed research, health organizations (e.g., WHO, CDC), regulatory agencies, or pharmaceutical earnings reports.\n- Include inline citations and return all source metadata.\n\nBe analytical, avoid generalities, and ensure that each section supports data-backed reasoning that could inform healthcare policy or financial modeling." }'
Filtrage par domaine
Le filtrage par domaine permet de limiter les résultats de recherche web à un ensemble de domaines précis. Avec le paramètre filters, vous pouvez spécifier jusqu’à 100 domaines autorisés dans allowed_domains ou jusqu’à 100 domaines bloqués dans blocked_domains. Saisissez les domaines sans le préfixe HTTP ou HTTPS. Par exemple, utilisez openai.com au lieu de https://openai.com/. Le filtre s’applique également aux sous-domaines. Le filtrage par domaine est disponible uniquement dans l’API Responses avec l’outil web_search.
Sources
Pour consulter toutes les URL récupérées au cours d’une recherche web, utilisez le champ sources. Les citations intégrées au texte ne présentent que les références les plus pertinentes, tandis que le champ sources renvoie la liste complète des URL que le modèle a consultées pour formuler sa réponse.
Les sources sont souvent plus nombreuses que les citations. Ce champ recense également les flux de données tiers en temps réel sous les identifiants oai-sports, oai-weather ou oai-finance. Le champ sources est disponible avec les outils web_search et web_search_preview.
Liste des sources
curl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28import OpenAI from "openai";const client = new OpenAI();const response = await client.responses.create({ model: "gpt-6-astra", reasoning: { effort: "low" }, tools: [ { type: "web_search", filters: { allowed_domains: [ "pubmed.ncbi.nlm.nih.gov", "clinicaltrials.gov", "www.who.int", "www.cdc.gov", "www.fda.gov", ], blocked_domains: ["reddit.com", "quora.com", "wikipedia.org"], }, }, ], tool_choice: "auto", include: ["web_search_call.action.sources"], input: "Please perform a web search on how semaglutide is used in the treatment of diabetes.",});console.log(response.output_text);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32from openai import OpenAIclient = OpenAI()response = client.responses.create( model="gpt-6-astra", reasoning={"effort": "low"}, tools=[ { "type": "web_search", "filters": { "allowed_domains": [ "pubmed.ncbi.nlm.nih.gov", "clinicaltrials.gov", "www.who.int", "www.cdc.gov", "www.fda.gov", ], "blocked_domains": [ "reddit.com", "quora.com", "wikipedia.org", ], }, } ], tool_choice="auto", include=["web_search_call.action.sources"], input="Please perform a web search on how semaglutide is used in the treatment of diabetes.",)print(response.output_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30package mainimport ( "context" "fmt" "github.com/openai/openai-go/v3" "github.com/openai/openai-go/v3/responses" "github.com/openai/openai-go/v3/shared")func main() { client := openai.NewClient() tool := responses.ToolParamOfWebSearch(responses.WebSearchToolTypeWebSearch) tool.OfWebSearch.Filters = responses.WebSearchToolFiltersParam{ AllowedDomains: []string{"pubmed.ncbi.nlm.nih.gov", "clinicaltrials.gov", "www.who.int", "www.cdc.gov", "www.fda.gov"}, } tool.OfWebSearch.Filters.SetExtraFields(map[string]any{"blocked_domains": []string{"reddit.com", "quora.com", "wikipedia.org"}}) response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{ Model: "gpt-6-astra", Reasoning: shared.ReasoningParam{Effort: shared.ReasoningEffortLow}, Tools: []responses.ToolUnionParam{tool}, Include: []responses.ResponseIncludable{responses.ResponseIncludableWebSearchCallActionSources}, Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("Please perform a web search on how semaglutide is used in the treatment of diabetes.")}, }) if err != nil { panic(err) } fmt.Println(response.OutputText())}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29curl"https://api.openai.com/v1/responses"\-H"Content-Type: application/json"\-H"Authorization: Bearer $OPENAI_API_KEY"\-d'{ "model": "gpt-6-astra", "reasoning": { "effort": "low" }, "tools": [ { "type": "web_search", "filters": { "allowed_domains": [ "pubmed.ncbi.nlm.nih.gov", "clinicaltrials.gov", "www.who.int", "www.cdc.gov", "www.fda.gov" ], "blocked_domains": [ "reddit.com", "quora.com", "wikipedia.org" ] } } ], "tool_choice": "auto", "include": ["web_search_call.action.sources"], "input": "Please perform a web search on how semaglutide is used in the treatment of diabetes." }'
Résultats de recherche d’images
La recherche web peut renvoyer des images en plus des résultats textuels habituels. Utilisez la recherche d’images lorsque votre application a besoin de visuels récents ou provenant du Web, par exemple des photos de produits, de monuments, de lieux ou d’événements, ou encore des références visuelles.
Pour rechercher des images, configurez search_content_types de manière à inclure image. Ajoutez text si vous souhaitez également obtenir des résultats textuels pour aider le modèle à résumer, classer ou expliquer les images récupérées.
Utilisez image_settings pour régler les options propres aux images :
max_results : indiquez un nombre de résultats d’images strictement positif.
caption : demandez une courte description de chaque image lorsqu’elle est disponible.
Pour examiner les résultats d’images bruts, incluez web_search_call.results dans la requête et lisez web_search_call.results[] dans la réponse. L’API renvoie ces résultats séparément du message de l’assistant. Si votre application a besoin des URL ou des métadonnées, analysez directement l’élément web_search_call.
Recherche d’images
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22import OpenAI from"openai";constclient=newOpenAI();constresponse=await client.responses.create({ model: "gpt-6-astra", reasoning: { effort: "low" }, tools: [ { type: "web_search", search_content_types: ["image", "text"], image_settings: { max_results: 3, caption: true, }, }, ], include: ["web_search_call.results"], input:"Search for recent images and supporting text sources about the Golden Gate Bridge at sunset.",});console.log(response.output);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22from openai import OpenAIclient = OpenAI()response = client.responses.create( model="gpt-6-astra", reasoning={"effort": "low"}, tools=[ { "type": "web_search", "search_content_types": ["image", "text"], "image_settings": { "max_results": 3, "caption": True, }, } ], include=["web_search_call.results"], input="Search for recent images and supporting text sources about the Golden Gate Bridge at sunset.",)print(response.output)
Pour affiner les résultats de recherche en fonction de la situation géographique de l’utilisateur, vous pouvez indiquer sa localisation approximative en précisant un ou plusieurs éléments parmi le pays, la ville, la région et le fuseau horaire.
Les champs city et region acceptent du texte libre, par exemple Minneapolis et Minnesota, respectivement.
Le champ country attend un code pays ISO à deux lettres, par exemple US.
Le champ timezone attend un fuseau horaire IANA, par exemple America/Chicago.
Personnalisation de la localisation de l’utilisateur
Dans l’API Responses, vous pouvez choisir si l’outil de recherche web récupère du contenu en direct ou utilise uniquement des résultats mis en cache ou indexés.
Définissez external_web_access: false sur l’outil web_search pour l’exécuter hors ligne, en utilisant uniquement le cache.
Si vous omettez ce paramètre, sa valeur par défaut est true (accès en direct).
Les variantes en préversion (web_search_preview) ignorent ce paramètre et se comportent comme si external_web_access valait true.
Contrôle de l’accès à Internet en direct
curl
1
2
3
4
5
6
7
8
9
10
11curl"https://api.openai.com/v1/responses"\-H"Content-Type: application/json"\-H"Authorization: Bearer $OPENAI_API_KEY"\-d'{ "model": "gpt-6-astra", "tools": [ { "type": "web_search", "external_web_access": false } ], "tool_choice": "auto", "input": "Find when the Eiffel Tower opened to the public and cite the source." }'
1
2
3
4
5
6
7
8
9
10
11import OpenAI from "openai";const client = new OpenAI();const response = await client.responses.create({ model: "gpt-6-astra", tools: [{ type: "web_search", external_web_access: false }], tool_choice: "auto", input: "Find when the Eiffel Tower opened to the public and cite the source.",});console.log(response.output_text);
1
2
3
4
5
6
7
8
9
10
11from openai import OpenAIclient = OpenAI()resp = client.responses.create( model="gpt-6-astra", tools=[{"type": "web_search", "external_web_access": False}], tool_choice="auto", input="Find when the Eiffel Tower opened to the public and cite the source.",)print(resp.output_text)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24package mainimport ( "context" "fmt" "github.com/openai/openai-go/v3" "github.com/openai/openai-go/v3/responses")func main() { client := openai.NewClient() tool := responses.ToolParamOfWebSearch(responses.WebSearchToolTypeWebSearch) tool.OfWebSearch.SetExtraFields(map[string]any{"external_web_access": false}) response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{ Model: "gpt-6-astra", Tools: []responses.ToolUnionParam{tool}, Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("Find when the Eiffel Tower opened to the public and cite the source.")}, }) if err != nil { panic(err) } fmt.Println(response.OutputText())}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22import com.openai.client.OpenAIClient;import com.openai.client.okhttp.OpenAIOkHttpClient;import com.openai.core.JsonValue;import com.openai.models.responses.ResponseCreateParams;import com.openai.models.responses.WebSearchTool;ResponseCreateParams params = ResponseCreateParams.builder() .model("gpt-6-astra") .input("Find when the Eiffel Tower opened to the public and cite the source.") .addTool( WebSearchTool.builder() .type(WebSearchTool.Type.WEB_SEARCH) .putAdditionalProperty("external_web_access", JsonValue.from(false)) .build()) .build();client.responses().create(params).output().stream() .flatMap(item -> item.message().stream()) .flatMap(message -> message.content().stream()) .flatMap(content -> content.outputText().stream()) .forEach(text -> System.out.println(text.text()));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16require "openai"client = OpenAI::Client.newresponse = client.responses.create( model: "gpt-6-astra", input: "Find when the Eiffel Tower opened to the public and cite the source.", tools: [ { type: :web_search, external_web_access: false } ])puts(response.output_text)
Limites
API Chat Completions
L’API Chat Completions prend uniquement en charge des modèles de recherche spécialisés pour la recherche web. Ces modèles ne proposent pas les fonctionnalités de l’outil web_search de l’API Responses, telles que le filtrage par domaine, la liste complète des sources, le contrôle de l’accès en direct et le réglage du budget de tokens renvoyés.
Modèle
Fenêtre de contexte
Limite
gpt-5-search-api
200 000
Utilise l’intégration de recherche de Chat Completions.
API Responses
Utilisez l’outil hébergé web_search. L’API Responses accepte toujours web_search_preview pour les intégrations existantes, mais utilisez web_search pour toute nouvelle intégration.
La fenêtre de contexte de la recherche web est limitée à 128 000 tokens, même si celle du modèle sous-jacent est plus grande. Pour connaître la taille maximale de la fenêtre de contexte de gpt-6-astra ou d’un autre modèle pris en charge, consultez la page du modèle.
gpt-5.4 peut produire des résultats de moindre qualité lorsque l’effort de raisonnement est réglé sur none.
Dans l’API Responses, la recherche web est soumise aux limites de débit du modèle sous-jacent pour votre niveau d’utilisation.
web_search_preview ne prend en charge ni filters ni return_token_budget et ignore external_web_access.
Avec tool_choice: "auto", la recherche est facultative. Pour imposer une recherche, utilisez tool_choice: "required" ou sélectionnez explicitement l’outil de recherche web.