Permite que los modelos busquen información actualizada en la web antes de generar una respuesta.
Responses
La búsqueda web permite que los modelos consulten información actualizada en internet y citen las fuentes en sus respuestas. Para habilitarla, usa la herramienta de búsqueda web en la API de Responses o, en algunos casos, en Chat Completions.
Elige cómo realizar la búsqueda según la pregunta que necesites responder.
Para una consulta rápida, pídele a un modelo que busque un dato específico y cite la fuente.
Si la pregunta requiere consultar varias fuentes, usa un modelo de razonamiento como gpt-6-astra. El modelo puede afinar sus búsquedas a medida que lee los resultados. Usa el modo en segundo plano si la solicitud puede tardar varios minutos.
Elegir una integración
Caso de uso
Opción recomendada
Notas
Nueva integración de búsqueda web
API de Responses con web_search y gpt-6-astra
La herramienta de búsqueda web alojada admite filtros, consulta de fuentes, control de acceso en tiempo real e investigaciones más largas
Integración de búsqueda existente en Chat Completions
Chat Completions con gpt-5-search-api
Usa esta opción solo si necesitas conservar una integración con Chat Completions
Investigación de varios pasos o generación de informes que tardan en completarse
gpt-6-astra con nivel de razonamiento high o xhigh
Usa el modo en segundo plano para los informes que puedan tardar varios minutos
Con la API de Responses, puedes habilitar la búsqueda web si la configuras en el arreglo tools de una solicitud de generación de contenido. Al igual que con cualquier otra herramienta, el modelo puede decidir si busca en la web según el contenido del prompt de entrada.
Para las nuevas integraciones con la API de Responses, usa { "type": "web_search" }. La herramienta anterior, web_search_preview, sigue disponible para las integraciones heredadas, pero no admite controles más recientes como filters, external_web_access y return_token_budget.
Ejemplo de uso de la herramienta de búsqueda 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
Salida y citas
Las respuestas del modelo que usan la herramienta de búsqueda web incluyen dos partes:
Un elemento de salida web_search_call con el ID de la llamada de búsqueda y la acción realizada en web_search_call.action. La acción puede ser una de las siguientes:
search representa una búsqueda web. Por lo general, aunque no siempre, incluye las consultas realizadas en queries. Las acciones de búsqueda tienen un costo por llamada a la herramienta (consulta los precios).
open_page representa la apertura de una página. Está disponible en los modelos de razonamiento.
find_in_page representa una búsqueda dentro de una página. Está disponible en los modelos de razonamiento.
Un elemento de salida message que contiene:
El texto resultante en message.content[0].text
Las anotaciones de las URL citadas en message.content[0].annotations
De forma predeterminada, la respuesta del modelo incluye citas en el texto para las URL encontradas en los resultados de la búsqueda web. Además, el objeto de anotación url_citation contiene la URL, el título y la ubicación de la fuente citada.
Cuando tu interfaz muestre resultados de la web o información extraída de ellos, debes mostrar las citas en el texto como enlaces destacados en los que se pueda hacer clic.
Cuando usas Chat Completions, el modelo siempre obtiene información de la web antes de responder a tu consulta. Para que el modelo decida si debe buscar, cambia a la API de Responses con la herramienta web_search.
Actualmente, usa este modelo para la búsqueda web en Chat Completions:
gpt-5-search-api
Ejemplo del parámetro de búsqueda 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?" }] }'
Salida y citas
El elemento de respuesta de la API en el arreglo choices incluye:
message.content con el texto generado por el modelo, incluidas las citas que aparezcan en el texto
annotations con la lista de URL citadas
De forma predeterminada, la respuesta del modelo incluye citas en el texto para las URL encontradas en los resultados de la búsqueda web. Además, el objeto de anotación url_citation contiene la URL y el título de la fuente citada, así como los índices de caracteres que delimitan el fragmento de la respuesta en el que se usó esa fuente.
Cuando tu interfaz muestre resultados de la web o información extraída de ellos, debes mostrar las citas en el texto como enlaces destacados en los que se pueda hacer clic.
En las integraciones que aún usan gpt-5, la búsqueda web requiere un nivel de esfuerzo de razonamiento superior a minimal.
Tamaño del contexto de búsqueda
search_context_size controla cuánto contexto de los resultados de la búsqueda web recibe el modelo antes de generar una respuesta. Usa low para una consulta que solo requiera unos pocos datos, medium como opción predeterminada equilibrada y high cuando la respuesta pueda requerir más detalles de los resultados. Este ajuste no establece una cantidad exacta de tokens ni garantiza una cantidad específica de fuentes o citas.
Configurar el tamaño del contexto de búsqueda
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 controla cuánto contenido de los resultados de búsqueda web puede devolver la herramienta durante una búsqueda en la API de Responses con modelos de razonamiento GPT-5 o posteriores. Conserva el valor predeterminado para la mayoría de las solicitudes. Configúralo en unlimited solo para investigaciones o evaluaciones que requieran un esfuerzo considerable y en las que sea necesario revisar muchas páginas, ya que, de otro modo, podrían detenerse al alcanzar el límite estándar de tokens devueltos.
Usa unlimited de forma selectiva porque puede aumentar la latencia y el costo. Para tareas largas que requieran varias búsquedas, usa el modo en segundo plano (background: true) para que la solicitud siga ejecutándose de forma asíncrona y puedas recuperar la respuesta final más tarde.
Valor
Comportamiento
default
Aplica el límite estándar de tokens que la herramienta puede devolver en los resultados de búsqueda web. Tiene el mismo efecto que omitir return_token_budget.
unlimited
Elimina el límite predeterminado de tokens que se pueden devolver durante la búsqueda web.
Este parámetro solo se aplica a la herramienta alojada web_search de la API de Responses cuando la búsqueda web usa modelos de razonamiento GPT-5 o posteriores. No modifica la ventana de contexto de búsqueda ni se aplica a la búsqueda web sin razonamiento, a las rutas heredadas de la API de búsqueda, a la búsqueda web en contenedores, a los modelos de búsqueda de Chat Completions ni a web_search_preview. Solo se admiten los valores default y unlimited. Se rechazan null, los números y cualquier otra cadena.
Realizar búsquedas web más extensas
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." }'
Filtrado por dominio
El filtrado por dominio te permite limitar los resultados de la búsqueda web a un conjunto específico de dominios. Con el parámetro filters, puedes configurar hasta 100 dominios permitidos en allowed_domains o hasta 100 dominios bloqueados en blocked_domains. Al indicar los dominios, omite el prefijo HTTP o HTTPS. Por ejemplo, usa openai.com en lugar de https://openai.com/. La búsqueda también incluye los subdominios. El filtrado por dominio solo está disponible en la API de Responses con la herramienta web_search.
Fuentes
Para ver todas las URL obtenidas durante una búsqueda web, usa el campo sources. Las citas en el texto solo muestran las referencias más relevantes, mientras que el campo sources devuelve la lista completa de URL que el modelo consultó para elaborar su respuesta.
La cantidad de fuentes suele ser mayor que la de citas. Aquí también aparecen las fuentes de datos de terceros en tiempo real, identificadas como oai-sports, oai-weather u oai-finance. El campo sources está disponible tanto con la herramienta web_search como con web_search_preview.
Obtener la lista de fuentes
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." }'
Resultados de búsqueda de imágenes
La búsqueda web puede devolver imágenes junto con los resultados de texto habituales. Usa la búsqueda de imágenes cuando tu aplicación necesite imágenes actuales o procedentes de la web, como fotos de productos, sitios emblemáticos, lugares o eventos, u otras referencias visuales.
Para usar la búsqueda de imágenes, configura search_content_types de modo que incluya image. Agrega text si también quieres obtener resultados de texto que ayuden al modelo a resumir, ordenar por relevancia o explicar las imágenes encontradas.
Usa image_settings para controlar las opciones específicas de las imágenes:
max_results: indica un número positivo de imágenes que quieres obtener.
caption: solicita descripciones breves de las imágenes cuando estén disponibles.
Para examinar los resultados de imágenes sin procesar, incluye web_search_call.results en la solicitud y lee web_search_call.results[] en la respuesta. Los resultados de imágenes se devuelven por separado del mensaje del asistente. Si tu aplicación necesita las URL o los metadatos, procesa directamente el elemento web_search_call.
Buscar imágenes
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)
Para afinar los resultados de búsqueda según la ubicación geográfica, puedes indicar la ubicación aproximada del usuario mediante uno o más de estos datos: país, ciudad, región y zona horaria.
Los campos city y region admiten cadenas de texto libre, como Minneapolis y Minnesota, respectivamente.
En la API de Responses, puedes controlar si la herramienta de búsqueda web obtiene contenido en tiempo real o usa solo resultados almacenados en caché o indexados.
Configura external_web_access: false en la herramienta web_search para ejecutarla sin conexión, usando solo la caché.
Si no especificas este parámetro, el valor predeterminado es true (acceso en tiempo real).
Las versiones preliminares (web_search_preview) ignoran este parámetro y se comportan como si external_web_access tuviera el valor true.
Controlar el acceso a internet en tiempo real
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)
Limitaciones
API para completar chats
La API para completar chats solo admite modelos especializados para la búsqueda web. Estos modelos no admiten funciones de la herramienta web_search de la API de Responses, como los filtros de dominio, las listas completas de fuentes, el control de acceso en tiempo real y la configuración del límite de tokens devueltos.
Modelo
Ventana de contexto
Limitación
gpt-5-search-api
200 000
Usa la ruta de los modelos de búsqueda de Chat Completions
API de Responses
Usa la herramienta alojada web_search. La API de Responses sigue aceptando web_search_preview para las integraciones heredadas, pero usa web_search para las integraciones nuevas.
La ventana de contexto de la búsqueda web se limita a 128 000 tokens, incluso cuando el modelo subyacente tiene una ventana de contexto mayor. Para conocer el límite de contexto de gpt-6-astra o de otro modelo compatible, consulta la página del modelo.
gpt-5.4 puede producir resultados de menor calidad si configuras el esfuerzo de razonamiento en none.
La búsqueda web de la API de Responses usa los límites de solicitudes que corresponden a cada nivel del modelo subyacente.
web_search_preview no admite filters ni return_token_budget e ignora external_web_access.
Con tool_choice: "auto", la búsqueda es opcional. Usa tool_choice: "required" o selecciona una herramienta específica de búsqueda web cuando la búsqueda sea obligatoria.