Skip to main content

Búsqueda web

Los datos de entrenamiento de los modelos de lenguaje grandes tienen una fecha límite de conocimiento, lo que les impide responder preguntas en tiempo real. Habilitar la búsqueda web permite que el modelo recupere datos en tiempo real y responda con precisión a preguntas sensibles al tiempo, como precios de acciones, pronósticos meteorológicos y noticias de última hora.

Uso

Puede habilitar la búsqueda web utilizando las cuatro llamadas de API a continuación, cada una de las cuales requiere diferentes parámetros.
Para la búsqueda web con modelos como qwen3.7-max, use la función de búsqueda web de la Responses API.
  • Compatible con OpenAI: API de Responses
  • Compatible con OpenAI: API de Chat Completions
  • DashScope
  • Compatible con Anthropic
Agregue la herramienta web_search al parámetro tools para habilitar la búsqueda web.
La Responses API solo admite algunos modelos. Para ver los modelos compatibles, consulte Búsqueda web con Responses API.
# Import dependencies and create a client...
response = client.responses.create(
    model="qwen3.8-max",
    input="Hangzhou weather",
    tools=[
        {"type": "web_search"},
        {"type": "web_extractor"},
        {"type": "code_interpreter"}
    ],
    extra_body={"enable_thinking": True}
)

Búsqueda web con modelos multimodales

Las series Max de Qwen4, las series Max, Flash y de código abierto de Qwen3.8, Qwen3.7-Flash, Qwen3.7-Plus, la serie Qwen3.6 y la serie Qwen3.5 (incluyendo qwen3.5-plus, qwen3.5-flash, la serie qwen3.5-omni y los modelos de código abierto de Qwen) aceptan entradas multimodales (imágenes, video) y son modelos multimodales. La compatibilidad con la estrategia de búsqueda varía según la serie: la serie qwen3.5-omni solo admite la estrategia agent; qwen4-max-preview, qwen3.8-max, qwen3.8-max-0902, qwen3.8-flash, qwen3.8-2.4t-a95b y qwen3.8-27b no admiten la estrategia agent en la API multimodal (utilice la opción predeterminada turbo o max); para ejecutar Qwen4 o Qwen3.8 con recuperación al estilo de agente, utilice Búsqueda web con la API de Responses; otros modelos listados en esta sección admiten las estrategias turbo, max y agent. Llame a estos modelos a través de la API multimodal (el endpoint multimodal-generation): utilice client.multimodal.chat.create en el SDK de Python 2.0 y MultiModalConversation en Java, no el endpoint text-generation, que es para modelos de solo texto. Para conocer los conceptos básicos sobre cómo llamar a modelos multimodales, consulte los temas Razonamiento visual y Comprensión de imágenes y videos.
Llamar a los modelos multimodales anteriores con el endpoint text-generation devuelve 400 url error, please check url. Utilice la API multimodal (el endpoint multimodal-generation; client.multimodal.chat.create en Python, MultiModalConversation en Java) en su lugar. En el SDK de Java, MultiModalConversationParam proporciona enableSearch(true) para habilitar la búsqueda web, pero no ofrece un método searchOptions(). Inyecte la estrategia de búsqueda y otras opciones mediante el método genérico parameter("search_options", ...). En Python, client.multimodal.chat.create acepta search_options directamente. La búsqueda web en modelos multimodales requiere llamadas en streaming (use streamCall en Java, o establezca stream=True en Python); de lo contrario, la solicitud devuelve un error Non-streaming mode does not support Web Search.
Python
import os
import dashscope

# La siguiente es la configuración de la región de Singapur (ap-southeast-1). Sustituya {WorkspaceId} por el ID real de su espacio de trabajo. El valor de region varía según la región.
client = dashscope.Client(
    # Si no se ha configurado la variable de entorno, sustituya la siguiente línea por su API Key de Model Studio: api_key = "sk-xxx"
    # Las API Key varían según la región. Para obtener una API Key, consulte https://www.alibabacloud.com/help/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    workspace="{WorkspaceId}",
    region="ap-southeast-1",
)
stream = client.multimodal.chat.create(
    # Use un modelo multimodal que admita la búsqueda web
    model="qwen3.5-plus",
    messages=[{"role": "user", "content": [{"text": "What is the weather in Hangzhou today?"}]}],
    # La API multimodal acepta enable_search y search_options directamente
    enable_search=True,
    search_options={
        # La serie qwen3.5-omni requiere agent; la serie Qwen3.8 no admite agent en la API multimodal, mantenga el valor predeterminado
        "search_strategy": "agent",
        "enable_source": True,
    },
    # La búsqueda web en modelos multimodales requiere llamadas en streaming
    stream=True,
)
for chunk in stream:
    content = chunk.choices[0].delta.content or ""
    print(content)

Modelos admitidos

Los siguientes modelos admiten la búsqueda web. Los modelos con entrada multimodal (la serie Max de Qwen4, la serie Qwen3.8, Qwen3.7-Flash/Plus, la serie Qwen3.6, la serie Qwen3.5 y los modelos de código abierto de Qwen) deben llamarse a través de la API multimodal. Consulte Búsqueda web con modelos multimodales.
  • Singapore
  • China (Beijing)
  • Global
  • Qwen
    • Serie Qwen4: qwen4-max-preview (solo Token Plan; search_strategy: agent no es compatible; para la recuperación al estilo de agente, utilice la herramienta web_search a través de la API de Responses)
    • Serie Qwen3.8: qwen3.8-max, qwen3.8-max-0902, qwen3.8-flash, qwen3.8-2.4t-a95b, qwen3.8-27b (search_strategy: agent no es compatible; para la recuperación al estilo de agente, utilice la herramienta web_search a través de la API de Responses)
    • Serie Qwen3.7: qwen3.7-max, qwen3.7-max-preview, qwen3.7-max-2026-05-17 y snapshots posteriores, qwen3.7-plus, qwen3.7-plus-2026-05-26 y snapshots posteriores, qwen3.7-flash, qwen3.7-flash-2026-07-15 y snapshots posteriores
    • Serie Qwen3.6: qwen3.6-plus, qwen3.6-plus-2026-04-02 y snapshots posteriores, qwen3.6-flash, qwen3.6-flash-2026-04-16 y snapshots posteriores, qwen3.6-27b, qwen3.6-35b-a3b
    • Serie Qwen3.5: qwen3.5-plus, qwen3.5-plus-2026-02-15 y snapshots posteriores, qwen3.5-flash, qwen3.5-flash-2026-02-23 y snapshots posteriores, qwen3.5-27b, qwen3.5-35b-a3b, qwen3.5-122b-a10b, qwen3.5-397b-a17b
    • Qwen-Omni: qwen3.8-omni-flash, qwen3.5-omni-plus, qwen3.5-omni-plus-2026-03-15, qwen3.5-omni-flash, qwen3.5-omni-flash-2026-03-15 (la estrategia de búsqueda debe establecerse en agent)
    • Qwen-Omni-Realtime: qwen3.8-omni-flash-realtime, qwen3.5-omni-plus-realtime, qwen3.5-omni-plus-realtime-2026-03-15, qwen3.5-omni-flash-realtime, qwen3.5-omni-flash-realtime-2026-03-15 (la estrategia de búsqueda debe establecerse en agent)
  • Modelos de terceros
    • DeepSeek: deepseek-v4-pro, deepseek-v4-pro-0813, deepseek-v4-flash-0731, deepseek-v4.1-flash-1017 (la serie deepseek-v4 también admite la Responses API)
    • GLM: glm-5.2 (compatible solo con la Responses API)
    • Kimi: kimi-k3.1-pro (admite Responses web_search y Anthropic web_search, pero no admite Chat Completions enable_search); kimi-k3 (compatible solo con la Responses API)

Inicio rápido

Los siguientes ejemplos muestran cómo consultar información bursátil mediante la búsqueda web.
  • Compatible con OpenAI
  • DashScope
Establezca enable_search=True para habilitar la búsqueda web. Para qwen3.8-omni-flash, establezca también search_options={"search_strategy": "agent"}. Cuando utilice la API de Responses, configure tools=[{"type": "web_search"}] en su lugar. Consulte Búsqueda web con la API de Responses.
El protocolo compatible con OpenAI no admite devolver fuentes de búsqueda en la respuesta.
  • Python
  • Node.js
  • curl
import os
from openai import OpenAI

client = OpenAI(
    # If the environment variable is not set, provide your Model Studio API key directly, for example: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # The following configuration is for the Asia Pacific SE 1 (Singapore) region. Replace {WorkspaceId} with your workspace ID. Configurations differ by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen-plus",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "What is the stock price of Alibaba?"},
    ],
    extra_body={
        "enable_search": True,
        "search_options": {
            # Specify the web search strategy. Only 'agent' is supported.
            "search_strategy": "agent"
        }
    }
)
print(completion.choices[0].message.content)
Respuesta de ejemplo
According to the latest market data, Alibaba's stock price in different markets is as follows:

*   US Stock (BABA): The latest price is approximately 159.84 USD.
*   Hong Kong Stock (09988.HK): The latest price is approximately 158.00 HKD.

Please note that stock prices fluctuate in real time, and this information is for reference only.

Búsqueda web con Responses API

Puede habilitar la búsqueda web agregando la herramienta web_search al arreglo tools del parámetro tools.
Esta función solo es compatible con los siguientes modelos: las series Max, Flash y de código abierto de Qwen3.8, y qwen3.8-omni-flash; los modelos de las series Qwen3.7 y Qwen3.5 (incluidos los modelos de código abierto, pero no los modelos Omni), las series Qwen3.6-Plus y Qwen3.6-Flash, y qwen3.6-35b-a3b; deepseek-v4-flash-0731, deepseek-v4.1-flash-1017, deepseek-v4-pro, deepseek-v4-pro-0813; glm-5.2; y kimi-k3, kimi-k3.1-pro.
Cuando se habilita mediante la herramienta web_search, el modelo realiza una recuperación multivuelta al estilo de agente: puede llamar de forma autónoma a web_search (y opcionalmente a web_extractor / code_interpreter) varias veces dentro de una sola respuesta.
qwen3.8-max, qwen3.8-max-0902, qwen3.8-flash, qwen3.8-2.4t-a95b y qwen3.8-27b no admiten el valor agent de search_strategy en la API de Chat Completions. Para utilizar la recuperación multivuelta al estilo de agente con Qwen3.8, use la herramienta web_search de la API de Responses documentada en esta sección.
La API de Responses no utiliza el parámetro search_strategy. Si se activa la búsqueda web —y si el modelo realiza múltiples rondas de búsqueda— depende exclusivamente de adjuntar la herramienta web_search y de las propias decisiones del modelo. Un valor search_options.search_strategy pasado a la API de Responses se ignora silenciosamente y no activa una búsqueda.
Para los modelos que admiten estas herramientas, habilite web_search, web_extractor y code_interpreter conjuntamente. Para qwen3.8-omni-flash, la única herramienta integrada compatible es web_search.
Para obtener instrucciones de uso, ejemplos de código y guías de migración para la API de Responses, consulte Compatible con OpenAI - Responses.
from openai import OpenAI
import os

client = OpenAI(
    # If you have not configured an environment variable, replace the following line with your Model Studio API key: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # This configuration is for the Singapore region. Replace {WorkspaceId} with your actual workspace ID. Configurations vary by region.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)

response = client.responses.create(
    model="qwen3.8-max",
    input="What is the weather in Singapore tomorrow?",
    tools=[
        {"type": "web_search"},
        {"type": "web_extractor"},
        {"type": "code_interpreter"}
    ],
    extra_body={"enable_thinking": True}
)

print("="*20 + "Response content" + "="*20)
print(response.output_text)

print("="*20 + "Tool call trace" + "="*20)
# Agent-style multi-turn retrieval: the model may call web_search multiple times
for item in response.output:
    t = getattr(item, "type", None)
    if t == "web_search_call":
        q = getattr(getattr(item, "action", None), "query", "")
        print(f"[web_search_call] query={q}")
    elif t == "web_extractor_call":
        print(f"[web_extractor_call]")

print("="*20 + "Source citations" + "="*20)
for item in response.output:
    if getattr(item, "type", None) == "message":
        for part in item.content:
            for ann in getattr(part, "annotations", []) or []:
                if getattr(ann, "type", None) == "url_citation":
                    print(f"- {ann.title}: {ann.url}")

print("="*20 + "Tool call count" + "="*20)
usage = response.usage
if hasattr(usage, "x_tools") and usage.x_tools:
    print(f"Web search count: {usage.x_tools.get('web_search', {}).get('count', 0)}")
Para una consulta como "¿Cuál es el clima en Singapur mañana?", el modelo realiza múltiples rondas de recuperación dentro de una sola respuesta. El arreglo output contiene múltiples elementos web_search_call (y opcionalmente web_extractor_call) intercalados con reasoning y el message final:
{
    "output": [
        { "type": "reasoning", "..." : "..." },
        { "type": "web_search_call", "action": { "query": "Singapore weather tomorrow" } },
        { "type": "reasoning", "..." : "..." },
        { "type": "web_extractor_call", "..." : "..." },
        { "type": "web_search_call", "action": { "query": "Singapore 7-day forecast" } },
        { "type": "reasoning", "..." : "..." },
        { "type": "message", "content": [ /* final answer with url_citation annotations */ ] }
    ],
    "usage": {
        "x_tools": { "web_search": { "count": 2 } }
    }
}
La presencia de múltiples elementos web_search_call y x_tools.web_search.count > 1 confirma una recuperación multivuelta al estilo de agente: el modelo decidió por sí mismo refinar la consulta y buscar de nuevo.

Obtener fuentes de búsqueda

Después de que se ejecuta una búsqueda web, las fuentes de búsqueda se devuelven en la respuesta. Aparecen en el elemento cuyo type es web_search_call dentro del arreglo output, y su campo action.sources es la lista de enlaces de origen. Puede extraerlos del response en el ejemplo anterior de la siguiente manera:
La API de Responses no admite los parámetros enable_source, enable_citation ni citation_format, y no inserta marcadores de cita [1] en el contenido de la respuesta. Para utilizar marcadores de cita, use la API de DashScope.
# Extract search sources from the response above
print("=" * 20 + "Search sources" + "=" * 20)
for item in response.output:
    if item.type == "web_search_call":
        for i, source in enumerate(item.action.sources, start=1):
            print(f"[{i}] {source.url}")

Facturación

Los cargos por búsqueda web constan de dos componentes:
  • Tarifas de llamada al modelo: La función de búsqueda web agrega contenido web recuperado al prompt, lo que aumenta el número de tokens de entrada. Estos tokens se facturan a la tarifa estándar del modelo. Para obtener detalles sobre los precios, consulte la consola de Model Studio. Cuando utiliza la API de Responses o el método compatible con Anthropic, la herramienta de búsqueda web se factura a la misma tarifa que la política de agente.
  • tarifas de política de búsqueda:
    • política de agente:
      • La tarifa por cada 1,000 llamadas es la siguiente:
        • Para las regiones de China (Beijing), EE. UU. (Virginia), China (Hong Kong), Japón (Tokio) y Alemania (Frankfurt): $0.573411.
        • Para la región de Singapur: $10.00.
    • Política agent_max (Oferta por tiempo limitado): Esta política cubre tanto la búsqueda web como la herramienta de extractor web.
      • Tarifa por cada 1,000 llamadas para la herramienta de búsqueda web:
        • Para las regiones de China (Beijing), EE. UU. (Virginia), China (Hong Kong), Japón (Tokio) y Alemania (Frankfurt): $0.573411.
        • Para la región de Singapur: $10.00.
      • La herramienta de extractor web es gratuita por tiempo limitado.

Mensajes de error

Para solucionar errores, consulte Códigos de error.