DeepSeek V4 Pro (0813): Pensamiento de Retorno y Matriz de 3 APIs

AIHubMix15 min de lectura
DeepSeek V4 Pro (0813): Pensamiento de Retorno y Matriz de 3 APIs

Este artículo cubre las notas de uso y detalles importantes para deepseek-v4-pro-0813. En AIHubMix, el modelo está disponible a través de las APIs de Chat Completions, Responses y Messages compatibles con Claude. Ver también: Documentación oficial de la API de DeepSeek.

Las conclusiones "Verificadas" y las respuestas de muestra en cada sección provienen de llamadas reales realizadas el 2026-08-13 a través de las APIs de AIHubMix (Chat Completions / Responses / Messages); los elementos de especificación no marcados como "Verificados" provienen de la documentación oficial de DeepSeek.

1. Posicionamiento del Modelo y Especificaciones a Primera Vista

V4 Pro es la categoría de gama alta de la generación V4 de DeepSeek (el ligero deepseek-v4-flash es su hermano). La línea de lanzamiento se remonta a DeepSeek-V4 Preview el 2026-04-24, y 0813 es la etiqueta de VERSIÓN DEL MODELO que DeepSeek asignó a la versión actual. Más allá de las especificaciones básicas, cuatro cosas lo distinguen:

  • Un modelo de frontera escasa: 1.6T de parámetros totales / 49B activados (una arquitectura MoE, o mezcla de expertos, donde cada paso de inferencia activa solo un subconjunto de redes expertas: los parámetros totales determinan la capacidad de conocimiento, los parámetros activados determinan el costo computacional por llamada). La tarjeta del modelo enumera atención híbrida CSA+HCA, mHC y el optimizador Muon.
  • Ponderaciones abiertas bajo MIT: deepseek-ai/DeepSeek-V4-Pro se publica en HuggingFace bajo la licencia MIT (una de las licencias de código abierto más permisivas — se permite el uso comercial y la redistribución de código cerrado) y puede ser autoalojado. MIT es poco común para un modelo de este tamaño. Las notas de autoalojamiento de la tarjeta del modelo también sugieren una ventana de contexto de ≥384K tokens al ejecutarse en Think Max (el nivel de pensamiento más alto) — esa es una guía de implementación para el autoalojamiento, no una especificación de la API alojada.
  • El soporte multi-protocolo es de primera parte, no traducción de terceros: DeepSeek ofrece una API de Chat de OpenAI, un punto final compatible con Anthropic (/anthropic, que mapea claude-opus* a este modelo), y la API de Responses (DeepSeek describe soporte nativo para el formato, con adaptaciones para Codex). También ofrece la finalización FIM (fill-in-the-middle) como una función Beta en un punto final separado, que no forma parte de las tres APIs de AIHubMix.
  • Una brecha de ~120× entre precios de aciertos y fallos de caché: el mecanismo de precios publicado de DeepSeek es acierto de caché $0.003625/M vs fallo de caché $0.435/M (salida $0.87/M), y el almacenamiento en caché es automático sin parámetro que establecer. Para cargas de trabajo que reutilizan prefijos largos (prompts del sistema, documentos largos), esa brecha domina la factura. El precio minorista real es el que muestra la página del modelo.
Elemento Valor
Nombre del modelo en AIHubMix deepseek-v4-pro-0813
Ventana de contexto 1M tokens (1,000,000)
Máxima salida La redacción oficial es MAX OUTPUT MAXIMUM: 384K (el conteo exacto de tokens y el valor predeterminado no se publican)
Modalidades de entrada Solo texto. La página de compatibilidad de Responses indica explícitamente que las entradas de imagen y archivo no son compatibles; la página de Messages marca explícitamente los bloques type="image" como No Soportados; en Chat Completions, el mensaje del usuario content acepta solo una cadena, sin partes de contenido multimodal
Modo de pensamiento Híbrido (pensamiento / no pensamiento), pensamiento activado por defecto
Niveles de pensamiento reasoning_effort acepta low / high / max, predeterminado high; medium y xhigh se mapean a high por compatibilidad
APIs disponibles Chat Completions, Responses, Messages (compatibles con Claude)
Verificado: exceder max_tokens es rechazado por validación en lugar de truncarse silenciosamente — enviar max_tokens=9999999 devuelve HTTP 400, y el cuerpo del error nombra el campo y da el límite 393216.
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
Las imágenes no generan un error, pero se descartan: la redacción oficial para la API de Responses es "Las entradas de imagen y archivo no son compatibles (las partes input_image no causan un error, pero se reemplazan con un texto de marcador de posición)" — una parte input_image no falla la solicitud, se intercambia por texto de marcador de posición. En Chat Completions, el mensaje del usuario content solo acepta una cadena, y en Messages los bloques type="image" están marcados como No Soportados. Al construir enrutamiento multimodal, nunca trate "sin error" como evidencia de que el modelo realmente vio la imagen.

2. ¿Cómo Desactivas el Pensamiento? Tres APIs, Tres Formas de Campo

V4 Pro piensa por defecto: no envíes parámetros en absoluto y la respuesta volverá con contenido de pensamiento. Desactivarlo utiliza una forma de campo diferente en cada una de las tres APIs.

Chat Completions

Usa el objeto thinking de nivel superior.

from openai import OpenAI

client = OpenAI(
    base_url="https://aihubmix.com/v1",
    api_key="<AIHUBMIX_API_KEY>",
)

completion = client.chat.completions.create(
    model="deepseek-v4-pro-0813",
    messages=[{"role": "user", "content": "¿Qué es 2 + 2?"}],
    extra_body={"thinking": {"type": "disabled"}},
)

# Pensamiento activado (predeterminado): message.reasoning_content presente, reasoning_tokens = 43
# Pensamiento desactivado (deshabilitado): reasoning_content ausente, reasoning_tokens ausente
Verificado: con thinking.type="disabled", tanto message.reasoning_content como usage.completion_tokens_details.reasoning_tokens desaparecen juntos, lo que confirma que el cambio tuvo efecto.

Responses

No hay un interruptor separado en Responses; desactivar el pensamiento significa establecer el nivel en none.

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="¿Qué es 2 + 2?",
    reasoning={"effort": "none"},
)

# effort="none": usage.output_tokens_details.reasoning_tokens = 0
#                output[0] es el elemento del mensaje directamente (sin elemento de razonamiento)
# effort no establecido: la salida siempre comienza con un elemento de razonamiento
Verificado: reasoning.effort="none" difiere observablemente del nivel predeterminado (los tokens de pensamiento caen a cero, el elemento de salida reasoning desaparece), lo que confirma que tuvo efecto.

Messages

El mismo nombre y la misma forma que Chat Completions: el objeto thinking de nivel superior.

from anthropic import Anthropic

client = Anthropic(
    api_key="<AIHUBMIX_API_KEY>",
    base_url="https://aihubmix.com",
)

response = client.messages.create(
    model="deepseek-v4-pro-0813",
    max_tokens=1024,
    messages=[{"role": "user", "content": "¿Qué es 2 + 2?"}],
    extra_body={"thinking": {"type": "disabled"}},
)

# Pensamiento activado (predeterminado): content = [bloque de pensamiento, bloque de texto]
# Pensamiento desactivado (deshabilitado): content = [bloque de texto]
Verificado: una vez desactivado, el bloque thinking desaparece por completo y solo permanece el bloque text.
Sobre los niveles de pensamiento: low y max ambos devolvieron 200 en Chat Completions en pruebas (high es el predeterminado y se aplica cuando se omite el campo), pero los conteos de tokens de pensamiento no muestran ninguna diferencia monotónica entre niveles para la misma pregunta (pregunta fácil: low=43 / max=27; pregunta difícil: low=114 / max=92), y nada se repite en la respuesta — los niveles son aceptados, pero no hay señal diferenciadora observable en la respuesta. En Responses, solo el nivel none (pensamiento desactivado) puede ser confirmado desde el lado de la respuesta.

3. ¿Por Qué Una Conversación de Múltiples Turnos Devuelve Repentinamente 400? El Historial de Pensamiento Debe Ser Devuelto Verbatim

Este es el desencadenante más común con este modelo: en modo de pensamiento, una conversación de múltiples turnos debe devolver el contenido de pensamiento del turno anterior de manera literal, o la solicitud es rechazada. No degradada, no de menor calidad — un duro HTTP 400.

Las tres APIs llevan el mismo contenido de pensamiento bajo diferentes nombres de campo:

API Forma de retorno Cuerpo de error cuando falta
Chat Completions El campo reasoning_content en el mensaje del asistente El `reasoning_content` en el modo de pensamiento debe ser devuelto a la API.
Responses El elemento de salida con type="reasoning" en el array input El `reasoning_text` en el modo de pensamiento debe ser devuelto a la API.
Messages El bloque thinking dentro de los bloques de contenido del asistente El `content[].thinking` en el modo de pensamiento debe ser devuelto a la API.
Verificado (condiciones de activación): esta validación se activa consistentemente en solicitudes de múltiples turnos que llevan tools (el modelo emite una llamada a la herramienta, luego se envía el resultado de la herramienta). En solicitudes de múltiples turnos sin herramientas, donde el modelo responde directamente, la validación no se activó en esta ronda de pruebas y la solicitud devolvió 200. En otras palabras, la orquestación de herramientas (cargas de trabajo de agente / llamada a funciones) es donde es más probable que se encuentre, así que trate el contenido de pensamiento como parte del estado de la conversación que persiste y se reproduce.

Chat Completions

# Múltiples turnos: devolver el mensaje anterior del asistente de manera literal, incluyendo reasoning_content
messages = [
    {"role": "user", "content": "¿Qué es 1 + 1? Recuerda el resultado."},
    {
        "role": "assistant",
        "content": "2",
        "reasoning_content": "<reasoning_content de la respuesta anterior>",
    },
    {"role": "user", "content": "Agrega 1 al resultado."},
]

# Eliminando reasoning_content -> HTTP 400 invalid_request_error
Verificado: un mensaje histórico del asistente que falta reasoning_content devuelve 400; agregarlo de nuevo hace que la solicitud idéntica devuelva 200 y continúe correctamente.

Responses

# Múltiples turnos: input = entrada anterior + response.output (elemento de razonamiento incluido) + nuevo mensaje
input = previous_input + response.output + [
    {"role": "user", "content": "Agrega 1 al resultado."}
]

# Filtrando el elemento type="reasoning" -> HTTP 400
Verificado: insertar response.output tal como está es todo lo que se necesita. Filtrar elementos de salida por type == "message" mientras se ensambla el historial elimina el elemento reasoning y activa el 400 — esta es la forma más común de ser afectado.

Messages

# Múltiples turnos: devolver response.content de manera literal como el mensaje del asistente
messages = [
    {"role": "user", "content": "¿Cuál es el clima en París?"},
    {"role": "assistant", "content": response.content},   # bloques de pensamiento + uso de herramientas
    {"role": "user", "content": [tool_result_block]},
]

# Eliminando el bloque de pensamiento -> HTTP 400
Verificado: eliminar el bloque thinking del array de contenido devuelve 400 (con error.type establecido en invalid_request_error).

4. Llamada a Herramientas

Cada API declara herramientas en su propia forma de protocolo; las formas no son intercambiables.

Chat Completions

Forma anidada (un objeto function que envuelve name / parameters). Una tool_choice de función nombrada fuerza la llamada.

completion = client.chat.completions.create(
    model="deepseek-v4-pro-0813",
    messages=[{"role": "user", "content": "¿Cuál es el clima en París?"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Obtener el clima para una ciudad",
            "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
        },
    }],
    tool_choice={"type": "function", "function": {"name": "get_weather"}},
)

# Observado: finish_reason "tool_calls", tool_calls[0].function.arguments = {"city": "París"}
Verificado: tool_choice: "required" no puede ser utilizado mientras el pensamiento está activado — devuelve 400 El modo de pensamiento no soporta este tool_choice; desactivar el pensamiento (thinking.type="disabled") hace que la solicitud idéntica devuelva 200. Cuando necesite semántica de "debe llamar a una herramienta", use una tool_choice de función nombrada en su lugar (como arriba, que funciona con el pensamiento activado), o desactive el pensamiento primero y luego use required.

Responses

Forma plana (type / name / parameters al mismo nivel).

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="¿Cuál es el clima en París?",
    tools=[{
        "type": "function",
        "name": "get_weather",
        "description": "Obtener el clima para una ciudad",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
)

# Elementos de salida observados: ["reasoning", "function_call"]; arguments = {"city": "París"}
Verificado: copiar la forma anidada de Chat Completions (function: {...}) en Responses devuelve 400 — use la forma plana. tool_choice: "required" está sujeto a la misma restricción de modo de pensamiento que en Chat.

Messages

Forma nativa de Anthropic (input_schema), con tool_choice: {"type": "any"} para forzar una llamada.

response = client.messages.create(
    model="deepseek-v4-pro-0813",
    max_tokens=1024,
    tools=[{
        "name": "get_weather",
        "description": "Obtener el clima para una ciudad",
        "input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice={"type": "any"},
    messages=[{"role": "user", "content": "¿Cuál es el clima en París?"}],
)

# Observado: el contenido contiene un bloque de uso de herramienta, nombre = get_weather, input = {"city": "París"}
La llamada a herramientas en paralelo no puede ser desactivada, por diseño de DeepSeek — la página oficial de compatibilidad con Anthropic indica, en la fila de tool_choice, que disable_parallel_tool_use es ignorado, y la página de Responses también indica parallel_tool_calls | Ignorado (la llamada a herramientas en paralelo siempre está habilitada). Las pruebas coinciden: preguntar sobre dos ciudades a la vez con disable_parallel_tool_use: true aún devuelve dos bloques tool_use. Si necesita ejecución en serie, tome la primera llamada o colóquelas en cola usted mismo en el lado del cliente.
Cantidad de herramientas y costo de contexto: enviar 200 definiciones de funciones en una sola solicitud aún devolvió 200 con una respuesta normal y no activó ninguna validación de conteo (observado en este camino; no se probaron conteos más altos). Pero prompt_tokens para esa solicitud alcanzó 6,105 — las definiciones de herramientas entran en el contexto en su totalidad y se facturan. Cuando tiene muchas herramientas, recorte el conjunto de herramientas por escenario en lugar de declarar todo incondicionalmente.

5. Salida Estructurada

Chat Completions

response_format admite el modo JSON.

completion = client.chat.completions.create(
    model="deepseek-v4-pro-0813",
    messages=[{"role": "user", "content": "Devuelve {\"a\": 1} como JSON."}],
    response_format={"type": "json_object"},
)

# Contenido de respuesta observado: {"a":1}
Verificado: la salida es un JSON válido.

Responses

Declara un esquema JSON a través de text.format, con modo strict soportado.

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="Devuelve el número 1 bajo la clave a.",
    text={
        "format": {
            "type": "json_schema",
            "name": "extract",
            "strict": True,
            "schema": {"type": "object", "properties": {"a": {"type": "integer"}}, "required": ["a"]},
        }
    },
)

# Texto de salida observado: {"a":1}
Verificado: la salida se ajusta estrictamente al esquema dado.

Messages

El protocolo Messages (Anthropic) no tiene equivalente a response_format / text.format. La solución habitual es llevar el esquema en una herramienta: declare una herramienta cuyo input_schema sea su esquema objetivo, establezca tool_choice: {"type": "any"}, y lea el resultado estructurado del input del bloque tool_use. Esta ronda de pruebas no verificó específicamente ese patrón; cuando necesite garantías de esquema estrictas, prefiera Chat Completions o Responses.

6. ¿Cómo Habilitas el Almacenamiento en Caché del Contexto? No lo Haces, Es Automático

El almacenamiento en caché del contexto (los prefijos idénticos se reutilizan, y la porción almacenada en caché se factura a una tarifa más baja) está activado por defecto y no necesita parámetros. Una segunda solicitud con el mismo prefijo largo informa el acierto en usage, bajo un nombre de campo que varía según la API. Para detalles de caché y precios actuales, consulte la página del modelo; para estrategias de caché entre modelos y técnicas de tasa de aciertos, consulte prácticas de caché de prompts.

Chat Completions

# uso de la segunda llamada con un prefijo largo idéntico
"prompt_tokens_details": {"cached_tokens": 640}   # primera llamada: 0
Verificado: dos llamadas consecutivas con el mismo prefijo largo en el mismo canal movieron cached_tokens de 0 a 640.

Responses

# uso de la segunda llamada con instrucciones largas idénticas
"input_tokens_details": {"cached_tokens": 896}    # primera llamada: 0

Messages

# uso de una llamada cuyo prefijo largo del sistema ya estaba calentado
"cache_read_input_tokens": 896
Verificado: el prefijo anterior fue calentado por una solicitud de Responses con contenido idéntico, y la primera llamada a Messages alcanzó 896 de inmediato — consistente con que el caché se basa en el prefijo de contenido y se comparte entre superficies de protocolo.

7. logprobs: Chat Devuelve Dos Canales

logprobs (logaritmos de probabilidades — el detalle de confianza del modelo por token candidato) regresa en diferentes formas en las dos APIs, y el código de análisis debe manejarlas por separado.

Chat Completions

completion = client.chat.completions.create(
    model="deepseek-v4-pro-0813",
    messages=[{"role": "user", "content": "Di hola."}],
    logprobs=True,
    top_logprobs=2,
)

# Observado: choices[0].logprobs contiene DOS arreglos
#   logprobs.content[]            -> tokens de la respuesta final
#   logprobs.reasoning_content[]  -> tokens del texto de pensamiento
Verificado: Chat devuelve probabilidades logarítmicas tanto para content como para reasoning_content. El código que solo lee logprobs.content, según la forma de respuesta estándar de OpenAI, no generará un error pero perderá silenciosamente el canal de pensamiento; si su código asume un solo arreglo bajo logprobs, agregue primero una verificación de forma.

Responses

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="Di hola.",
    top_logprobs=3,
)

# Observado: logprobs solo en el último elemento del mensaje
#   output[-1].content[0].logprobs[] con detalles de logprob + top_logprobs
Verificado: Responses adjunta logprobs solo al último elemento de texto — ninguno de los formatos de doble canal vistos en Chat.

Messages

El protocolo Messages (Anthropic) no tiene campo equivalente. Para detalles de probabilidad a nivel de token, use Chat Completions o Responses.

8. ¿Qué APIs Pueden Buscar en la Web?

La búsqueda en la web aquí es una herramienta del lado del servidor (la recuperación se ejecuta en el servidor; el cliente nunca emite la solicitud en sí), y realmente se ejecuta en ambas APIs Responses y Messages en pruebas.

Responses

response = client.responses.create(
    model="deepseek-v4-pro-0813",
    input="¿Cuál es la última versión estable de Python?",
    tools=[{"type": "web_search"}],
)

# Secuencia de elementos de salida observada:
# ["reasoning", "web_search_call", "reasoning", "message"]
Verificado: un elemento web_search_call aparece en la secuencia de salida, lo que significa que el servidor realmente ejecutó una recuperación.

Messages

response = client.messages.create(
    model="deepseek-v4-pro-0813",
    max_tokens=1024,
    tools=[{"type": "web_search_20250305", "name": "web_search"}],
    messages=[{"role": "user", "content": "¿Cuál es la última versión estable de Python?"}],
)

# Secuencia de bloques de contenido observada:
# ["thinking", "server_tool_use", "web_search_tool_result", "thinking", "text"]
# usage.server_tool_use.web_search_requests = 1
Verificado: usage.server_tool_use.web_search_requests cuenta 1 — la solicitud de recuperación realmente ocurrió y fue medida.

Chat Completions

La búsqueda en la web no puede ser activada en Chat. La referencia oficial de la API de Chat de DeepSeek no contiene ningún campo de herramienta de búsqueda en ninguna parte del esquema de solicitud (esa es una ausencia establecida al revisar la lista de campos uno por uno; DeepSeek no ha hecho ninguna declaración explícita negando el soporte). La API con una declaración oficial explícita de soporte para búsqueda del lado del servidor es Responses (web_search), y la página oficial de compatibilidad de Messages también enumera los bloques de contenido relacionados con la búsqueda.

# Tres grupos de control, misma pregunta que requiere información en vivo, todos HTTP 200:
# Un campo de búsqueda no -> "no se puede recuperar", anotaciones = null
# B opciones_web_search    -> "no se puede recuperar", anotaciones = null, uso idéntico a A
# C habilitar_búsqueda         -> "no se puede recuperar", anotaciones = null, uso idéntico a A
Verificado: enviar web_search_options o enable_search no genera un error, pero tampoco recupera nada — la respuesta no lleva annotations (la lista de citas adjunta a una respuesta cuando se ejecuta la búsqueda en la web), y el uso coincide con el grupo de control campo por campo. Para acceso a la web, use la API de Responses o Messages en su lugar.

9. Notas de Uso: Diseño de DeepSeek vs Desviaciones en Nuestro Camino

Todo lo siguiente devuelve HTTP 200 mientras se comporta de manera contraintuitiva. Las causas difieren, y también lo que deberías hacer al respecto, así que se enumeran por separado: el primer grupo es cómo DeepSeek diseñó el modelo, y cambiar de proveedores no lo cambiará; el segundo grupo es el comportamiento actual en el camino de AIHubMix, en el que estamos trabajando.

9.1 Por Diseño de DeepSeek

Comportamiento Redacción oficial Qué hacer
Responses no retiene el estado de sesión o metadatos La página oficial de compatibilidad de Responses indica, fila por fila, store | No soportado. La respuesta siempre lleva store: false, metadata | No soportado, y safety_identifier | No soportado (de esos cuatro campos, solo user es Soportado). Las pruebas coinciden: la solicitud devuelve 200, pero metadata es nulo, safety_identifier está ausente, y store es siempre false Mantén los datos de correlación de solicitudes en el cliente; no confíes en la retención del lado del servidor
Los parámetros de muestreo no tienen efecto en modo de pensamiento DeepSeek indica explícitamente que temperature y top_p son inertes silenciosamente en modo de pensamiento. En pruebas, ambos devuelven 200 sin nada repetido y sin cambio en la forma de respuesta No confíes en los parámetros de muestreo para la estabilidad de salida en modo de pensamiento; usa salida estructurada cuando necesites determinismo
La continuación de prefijos / FIM está solo en el punto final beta oficial La descripción oficial de prefix es "(Beta) … Debes establecer base_url="https://api.deepseek.com/beta" para usar esta función", y la finalización FIM es igualmente una función Beta. Verificado en producción de AIHubMix: enviar prefix: true contra el punto final estándar devuelve 200 pero el prefijo se descarta silenciosamente, consistente en dirección con la redacción oficial Para un formato de salida controlado, usa salida estructurada (sección 5) o truncamiento stop
No se puede desactivar la llamada a herramientas en paralelo Ver sección 4: DeepSeek indica en ambas páginas de Responses y Anthropic que el interruptor es ignorado y la llamada en paralelo siempre está activada Coloca las llamadas en cola en el cliente cuando necesites ejecución en serie

9.2 Comportamiento Actual en el Camino de AIHubMix

Comportamiento Lo que muestran las pruebas Qué hacer
Tipo no estándar en objetos de error de Responses El error.type en respuestas 4xx es Aihubmix_api_error, mientras que la misma clase de error en Messages devuelve el invalid_request_error canónico Rama en el código de estado HTTP, no en la cadena error.type
Tokens de pensamiento contados como 0 en Messages La respuesta lleva un bloque thinking, sin embargo usage.output_tokens_details.thinking_tokens es siempre 0, lo que contradice el contenido de pensamiento realmente producido; bajo el contrato de Anthropic contra el que integramos, ese campo es requerido y debería ser ≤ output_tokens Para la contabilidad del costo de pensamiento, usa completion_tokens_details.reasoning_tokens en Chat o output_tokens_details.reasoning_tokens en Responses
Messages repite model como deepseek-v4-pro La solicitud envía deepseek-v4-pro-0813 y la respuesta repite deepseek-v4-pro. La causa es el nombre: el único nombre de modelo de API oficial de DeepSeek es deepseek-v4-pro, y 0813 es su etiqueta de versión No hagas del campo de respuesta model la única base para verificaciones de enrutamiento de modelos o atribución de uso

9.3 No Definido por DeepSeek, Así que Sin Veredicto de Ninguna Manera

Enviar un valor fuera del enum para reasoning_effort (por ejemplo, bogus_xyz) devuelve 200 con una respuesta normal, sin error y sin efecto observable. El hecho es lo suficientemente claro — este camino actualmente no valida el enum de reasoning_effort. Lo que no está claro es si debería: DeepSeek publica el enum legal pero nunca indica si un nivel ilegal debería ser rechazado, por lo que no hay una línea base para juzgar, lo que significa que esto no cuenta ni como comportamiento oficial ni como un defecto en nuestro camino. El enfoque seguro del lado del cliente: valida el nivel tú mismo y no cuentes con que la API lo atrape.

10. Matriz de Capacidad × Soporte de API

Las celdas a continuación dan la ortografía de parámetros / campos para cada API. Excepto donde se marque como redacción explícita de DeepSeek, cada conclusión proviene de llamadas reales realizadas el 2026-08-13 contra las APIs de producción de AIHubMix.

Capacidad Chat Completions Responses Messages
Instrucciones básicas de chat / sistema messages input + instructions messages + system de nivel superior
Streaming stream + stream_options stream (response.createdresponse.completed) stream (message_startmessage_stop)
Techo de salida max_tokens (400 cuando se excede, techo 393216) max_output_tokens max_tokens
Desactivación del pensamiento thinking: {"type": "disabled"} reasoning: {"effort": "none"} thinking: {"type": "disabled"}
Nivel de pensamiento 🟡 reasoning_effort aceptado, sin señal diferenciadora reasoning.effort (solo none confirmable) 🟡 output_config.effort aceptado, nada se repite
Contenido de pensamiento devuelto reasoning_content field reasoning output item thinking content block
Retorno obligatorio del historial de pensamiento ✅ falta reasoning_content → 400 ✅ falta el elemento reasoning → 400 ✅ falta el bloque thinking → 400
Llamada a herramientas tools anidados + tool_choice nombrado tools planos input_schema + tool_choice: {"type":"any"}
Forzar una llamada con required ❗ 400 mientras el pensamiento está activado; desactivar el pensamiento primero ❗ igual que a la izquierda {"type": "any"}
Llamada a herramientas en paralelo (no desactivable) ➖ no hay tal campo en la API oficial de Chat ❗ DeepSeek indica que parallel_tool_calls es ignorado y la llamada en paralelo siempre está activada ❗ DeepSeek indica que disable_parallel_tool_use es ignorado; las pruebas aún devuelven dos bloques tool_use
Salida estructurada response_format (json_object) text.format (json_schema + strict) ➖ no hay campo de protocolo; lleva el esquema en una herramienta
Medición automática de aciertos de caché usage.prompt_tokens_details.cached_tokens usage.input_tokens_details.cached_tokens usage.cache_read_input_tokens
logprobs ❗ canal dual: content + reasoning_content top_logprobs solo en el último elemento de texto
Búsqueda en la web ➖ no hay campo de búsqueda en la API oficial de Chat; enviar uno tampoco recupera tools: [{"type": "web_search"}] web_search_20250305
Secuencias de parada stop ➖ no hay campo de secuencia de parada en el protocolo (solo max_output_tokens limita la longitud) stop_sequences (stop_reason: "stop_sequence")

Leyenda: ✅ verificado funcionando · 🟡 aceptado pero no puede ser confirmado efectivo · ❗ necesita atención (ver las notas anteriores) · ➖ no existe tal concepto en esta API

FAQ

¿Qué APIs soporta deepseek-v4-pro-0813 en AIHubMix?
Chat Completions (/v1/chat/completions), Responses (/v1/responses), y la API Messages compatible con Claude (/v1/messages).

¿Por qué una conversación de múltiples turnos devuelve repentinamente 400?
La causa más común es el historial de pensamiento que no fue devuelto. En modo de pensamiento, el contenido de pensamiento del turno anterior debe ser reproducido de manera literal: reasoning_content en el mensaje del asistente para Chat, el elemento de salida type="reasoning" para Responses, y el bloque de contenido thinking para Messages. Los múltiples turnos con herramientas son donde esto afecta más — muchos marcos filtran elementos de salida por type == "message" mientras ensamblan el historial, lo que elimina el elemento de razonamiento.

¿Se puede desactivar el pensamiento?
Sí. Envía thinking: {"type": "disabled"} en Chat o Messages, y reasoning: {"effort": "none"} en Responses. Una vez desactivado, tanto el contenido de pensamiento como los tokens de pensamiento desaparecen.

¿Difieren los tres niveles de reasoning_effort?
low / high / max son todos aceptados (predeterminado high; medium y xhigh se mapean a high por compatibilidad). En pruebas, los conteos de tokens de pensamiento para la misma pregunta no muestran ninguna diferencia monotónica entre niveles y nada se repite, por lo que la diferencia no puede ser confirmada desde el lado del llamador. Solo el nivel none en Responses (pensamiento desactivado) produce una clara diferencia observable.

¿Por qué tool_choice: "required" devuelve 400?
Ese valor no es aceptado mientras el pensamiento está activado (el cuerpo del error dice El modo de pensamiento no soporta este tool_choice). Usa una tool_choice de función nombrada ({"type": "function", "function": {"name": "..."}}) para forzar una llamada específica con el pensamiento activado, o desactiva el pensamiento primero y luego usa required.

¿Cómo habilitas el almacenamiento en caché del contexto?
No lo haces — es automático. Coloca el contenido estable e invariable (prompts del sistema, fragmentos de conocimiento, definiciones de herramientas) al principio de la solicitud, y el conteo de aciertos se informa en el uso: prompt_tokens_details.cached_tokens en Chat, input_tokens_details.cached_tokens en Responses, y cache_read_input_tokens en Messages.


Para precios y estado en tiempo real, consulta la página del modelo deepseek-v4-pro-0813; para más modelos, visita la galería de modelos.

Guías prácticas relacionadas: Guía práctica de Kimi K3 (nuevos parámetros y una matriz de soporte de tres APIs) y cambios en la facturación y almacenamiento en caché de prompts de GPT-5.6.