Cómo usar DeepSeek con Anthropic SDK: mapeo de modelos y campos no compatibles

Aviso de independencia: DeepSeek Español es un sitio informativo independiente operado por Ahmed Aly. No pertenece a DeepSeek ni a Anthropic y no está afiliado ni respaldado por ninguna de las dos empresas. Esta guía usa el cliente oficial de Anthropic contra el endpoint compatible que publica DeepSeek; no afirma que DeepSeek sea un modelo Claude ni que exista paridad completa entre ambos servicios.

Última verificación documental: 25 de julio de 2026. Los ejemplos se han contrastado con la documentación oficial y no contienen una clave real. Deben probarse con una cuenta propia antes de utilizarlos en producción.

Respuesta rápida

Para usar DeepSeek con Anthropic SDK, crea el cliente con una clave de DeepSeek y la Base URL https://api.deepseek.com/anthropic. El SDK añade la ruta de Messages, por lo que no debes añadir /v1 a la Base URL. En llamadas directas utiliza deepseek-v4-pro o deepseek-v4-flash, sin el sufijo [1m]. La compatibilidad cubre Messages, texto, streaming, thinking y herramientas estándar, pero varios campos y tipos de contenido de Anthropic se ignoran o no están admitidos.

ElementoValor verificado
Base URL del clientehttps://api.deepseek.com/anthropic
Ruta resultante de Messages/anthropic/v1/messages
CredencialClave API de DeepSeek
Modelos actualesdeepseek-v4-pro y deepseek-v4-flash
Node.js@anthropic-ai/sdk; Node.js 20 LTS o posterior no EOL
Pythonanthropic; Python 3.9 o posterior
FormatoAnthropic Messages compatible, con diferencias documentadas
Proveedor y facturaciónDeepSeek Open Platform
Tabla oficial de compatibilidad del endpoint Anthropic de DeepSeek con campos admitidos, ignorados y no compatibles
La documentación de DeepSeek separa los parámetros compatibles, ignorados y no admitidos por su endpoint Anthropic. Captura realizada el 25 de julio de 2026.

Qué significa la compatibilidad con Anthropic SDK

El SDK de Anthropic actúa como cliente HTTP. Al cambiar su Base URL, construye solicitudes con el formato Messages y las envía al host de DeepSeek. DeepSeek autentica la clave, elige el modelo, ejecuta la inferencia y registra el consumo en la cuenta de DeepSeek API.

Esta compatibilidad facilita reutilizar una integración basada en Messages, pero no convierte el servicio en la API de Anthropic. Los modelos, precios, límites, tratamiento de datos, disponibilidad y soporte pertenecen a DeepSeek. Además, la tabla oficial identifica campos ignorados y bloques que provocan incompatibilidades; por eso una aplicación debe probar las funciones que realmente utiliza.

Requisitos y manejo de la clave

  • Una cuenta de DeepSeek Platform con una clave API activa y saldo disponible.
  • Node.js 20 LTS o posterior no EOL para el SDK TypeScript, o Python 3.9 o posterior para el SDK Python.
  • Una variable de entorno privada llamada DEEPSEEK_API_KEY.
  • Un entorno de prueba sin datos personales ni secretos innecesarios.
  • Límites propios de tiempo, tamaño, concurrencia, reintentos y gasto.

DEEPSEEK_API_KEY es un nombre elegido por esta guía para que el origen de la credencial sea inequívoco. El constructor del SDK recibe ese valor mediante apiKey en TypeScript o api_key en Python. No expongas la clave en JavaScript del navegador, repositorios, registros, tickets o capturas de pantalla.

DeepSeek con Anthropic SDK en Node.js o TypeScript

Crea un proyecto, instala el paquete oficial y define la variable en la terminal:

npm install @anthropic-ai/sdk
export DEEPSEEK_API_KEY="sustituir-por-la-clave-real"

Ejemplo mínimo de Messages con V4 Pro:

import Anthropic from "@anthropic-ai/sdk";

const apiKey = process.env.DEEPSEEK_API_KEY;
if (!apiKey) {
  throw new Error("Falta la variable DEEPSEEK_API_KEY");
}

const client = new Anthropic({
  apiKey,
  baseURL: "https://api.deepseek.com/anthropic",
});

const message = await client.messages.create({
  model: "deepseek-v4-pro",
  max_tokens: 512,
  system: "Responde en español y distingue hechos de suposiciones.",
  messages: [
    {
      role: "user",
      content: "Explica en tres puntos qué valida una prueba unitaria.",
    },
  ],
});

const text = message.content
  .filter((block) => block.type === "text")
  .map((block) => block.text)
  .join("");

console.log("stop_reason:", message.stop_reason);
console.log(text);

No des por hecho que content[0] siempre es texto. Una respuesta puede incluir bloques de thinking o herramientas; filtrar por block.type evita interpretar otro tipo de bloque como salida visible.

DeepSeek con Anthropic SDK en Python

python3 -m venv .venv
source .venv/bin/activate
pip install anthropic
export DEEPSEEK_API_KEY="sustituir-por-la-clave-real"
import os
from anthropic import Anthropic

api_key = os.environ.get("DEEPSEEK_API_KEY")
if not api_key:
    raise RuntimeError("Falta la variable DEEPSEEK_API_KEY")

client = Anthropic(
    api_key=api_key,
    base_url="https://api.deepseek.com/anthropic",
)

message = client.messages.create(
    model="deepseek-v4-pro",
    max_tokens=512,
    system="Responde en español y distingue hechos de suposiciones.",
    messages=[
        {
            "role": "user",
            "content": "Explica en tres puntos qué valida una prueba unitaria.",
        }
    ],
)

text = "".join(
    block.text
    for block in message.content
    if block.type == "text"
)

print("stop_reason:", message.stop_reason)
print(text)

El SDK añade /v1/messages a la Base URL configurada. Si escribes https://api.deepseek.com/anthropic/v1 como base, puedes construir una ruta duplicada. Conserva exactamente https://api.deepseek.com/anthropic.

Modelos V4 y nombres retirados

Valor enviado en modelComportamiento documentado
deepseek-v4-proSelecciona V4 Pro directamente.
deepseek-v4-flashSelecciona V4 Flash directamente.
Nombre que empieza por claude-opusEl endpoint lo mapea a V4 Pro.
Nombre que empieza por claude-sonnet o claude-haikuEl endpoint lo mapea a V4 Flash.
Nombre no admitidoFallback documentado a V4 Flash.

Usa IDs explícitos de DeepSeek para que una migración sea auditable y para evitar que una errata active el fallback. El sufijo [1m] es una convención de Claude Code, no parte del ID de API; no lo añadas a solicitudes realizadas directamente con el SDK.

DeepSeek fijó el 24 de julio de 2026 a las 15:59 UTC como límite para retirar por completo deepseek-chat y deepseek-reasoner. El plazo ya ha vencido y el ejemplo actual de GET /models solo enumera deepseek-v4-flash y deepseek-v4-pro. No uses los aliases antiguos en código nuevo ni atribuyas un error HTTP concreto sin una prueba autenticada.

Parámetros y bloques compatibles

La matriz oficial de compatibilidad Anthropic de DeepSeek documenta estos elementos:

ÁreaElementos admitidos
AutenticaciónCabecera x-api-key, gestionada por el SDK a partir de la clave configurada.
Messagesmax_tokens, stop_sequences, stream, system, temperature de 0 a 2 y top_p.
Metadatosmetadata.user_id; el resto de metadatos se ignora.
Herramientasname, description, input_schema y tool_choice con none, auto, any o una herramienta concreta.
Contenidotext, thinking, tool_use, tool_result, server_tool_use y web_search_tool_result.

Compatible no significa idéntico en todos los valores. Por ejemplo, temperature acepta hasta 2 en DeepSeek, y cuando Thinking está activo temperature y top_p no producen efecto. Valida el comportamiento con el modelo y modo concretos que utilizará tu aplicación.

Campos aceptados pero ignorados

Un campo ignorado puede no generar error, pero tampoco activa la función esperada. La documentación enumera:

  • Cabeceras anthropic-beta y anthropic-version.
  • container, mcp_servers, service_tier y top_k.
  • cache_control en mensajes y herramientas.
  • disable_parallel_tool_use y tool_result.is_error.
  • citations y los campos de metadata distintos de user_id.

No utilices una cabecera beta como prueba de que una función de Anthropic quedó habilitada. Aunque cache_control se ignora, DeepSeek mantiene por separado su caché automática de prefijos en modo best effort; no prometas un acierto de caché para una solicitud concreta.

Contenido y funciones no compatibles

ElementoEstadoImplicación
Bloques image y documentNo admitidosEnvía texto compatible; no presentes el endpoint como multimodal.
search_resultNo admitidoNo lo sustituyas por web_search_tool_result sin adaptar el flujo.
redacted_thinkingNo admitidoNo esperes el mismo tratamiento de bloques de razonamiento redactados.
code_execution_tool_resultNo admitidoGestiona cualquier ejecución en tu propia aplicación y con permisos explícitos.
mcp_tool_use y mcp_tool_resultNo admitidosLa compatibilidad con herramientas estándar no equivale a compatibilidad MCP administrada por la API.
container_uploadNo admitidoNo envíes archivos mediante este tipo de bloque.

La guía no documenta paridad para Message Batches, Files API, recuento previo de tokens, computer use, helpers beta u output estructurado mediante JSON Schema. Si una función no aparece en la matriz, trátala como no confirmada hasta que exista documentación oficial o una prueba controlada; no la anuncies como compatible.

Thinking, esfuerzo y caché

DeepSeek activa Thinking por defecto en este endpoint. En formato Anthropic documenta output_config.effort: high y max se aplican directamente; low y medium se mapean a high, y xhigh se mapea a max. budget_tokens se ignora. Estas reglas impiden prometer que cada nivel de otro proveedor conserva su semántica exacta.

Cuando una respuesta con thinking solicita herramientas, conserva y vuelve a enviar todos los bloques del mensaje del asistente, no solo el bloque tool_use. Esto mantiene el contexto que el endpoint necesita para continuar el turno. No muestres ni registres razonamiento interno como si fuera una explicación revisada para el usuario.

La caché de prefijos de DeepSeek está activada automáticamente y no requiere cache_control. Mantener idéntico el comienzo de las solicitudes puede permitir un acierto, pero el servicio la describe como best effort; mide los contadores de uso reales y no la presupuestes como garantía.

Streaming con el SDK

El endpoint admite Server-Sent Events y los SDK proporcionan utilidades para consumirlos. Ejemplo en Python:

with client.messages.stream(
    model="deepseek-v4-pro",
    max_tokens=512,
    messages=[
        {"role": "user", "content": "Resume qué es una API en dos frases."}
    ],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

    final_message = stream.get_final_message()

print("\nstop_reason:", final_message.stop_reason)

No concatentes todos los eventos como si fueran texto: también pueden aparecer eventos de inicio, delta, thinking, uso o herramientas. Utiliza el parser del SDK, gestiona cortes de conexión y no presentes una respuesta parcial como completa si no recibes el final del mensaje.

Uso seguro de herramientas

  1. Declara cada herramienta con un nombre estable, una descripción precisa y un input_schema restrictivo.
  2. Cuando llegue un bloque tool_use, valida su nombre y argumentos contra una lista permitida.
  3. Solicita autorización para acciones sensibles, aplica límites de tiempo y ejecuta con los privilegios mínimos.
  4. Devuelve el resultado como tool_result asociado al ID correcto.
  5. Reenvía el historial completo necesario y continúa hasta una respuesta final o un límite de iteraciones definido por tu aplicación.

La API propone una llamada; no ejecuta por sí sola una función local. Nunca conviertas argumentos generados en comandos de shell, consultas destructivas, pagos o escrituras de producción sin validación determinista y autorización explícita. Establece un máximo de pasos para evitar bucles.

Uso correcto de metadata.user_id

DeepSeek admite metadata.user_id con un máximo de 512 caracteres y los caracteres a-z, A-Z, 0-9, guion y guion bajo, según su guía de Rate Limit & Isolation. Usa un identificador seudónimo interno; no envíes correo, teléfono, nombre, dirección ni otro dato personal. Los demás campos de metadata se ignoran según la matriz publicada.

Errores, diagnóstico y reintentos

EstadoCausa documentada habitualRespuesta recomendada
400Formato incorrecto.Revisar cuerpo, Base URL, bloques y tipos; no repetir sin corregir.
401Autenticación fallida.Comprobar que la clave procede de DeepSeek y sigue activa.
402Saldo insuficiente.Revisar saldo y facturación en DeepSeek Platform.
422Parámetros inválidos.Comparar modelo y campos con la matriz vigente.
429Demasiadas solicitudes.Reducir concurrencia, poner en cola y esperar.
500 o 503Fallo temporal del servidor.Aplicar reintentos limitados con espera exponencial y aleatoria.

Registra un ID interno, estado HTTP, modelo, duración, stop_reason y uso, pero elimina la clave, el prompt sensible y los datos personales. Define un máximo de intentos y evita reintentar automáticamente un 400, 401 o 422 que requiere corrección. Consulta la guía de códigos de error de DeepSeek API y el estado oficial del servicio.

Seguridad, privacidad y coste

  • Envía solo el contexto necesario y elimina secretos antes de construir el mensaje.
  • Mantén la clave en el servidor o en un gestor de secretos; rota cualquier clave expuesta.
  • Valida la salida antes de mostrarla, ejecutarla o guardarla.
  • Separa los permisos de lectura, escritura, red y ejecución de herramientas.
  • Controla tokens de entrada, salida, thinking, caché y búsquedas para limitar el gasto.
  • No prometas retención cero, ausencia de entrenamiento o residencia en España si no está garantizado por las condiciones y el contrato aplicables.

El paquete de Anthropic es el cliente, pero la Base URL dirige el contenido a DeepSeek y el consumo se factura según las tarifas de DeepSeek API. Consulta las tarifas explicadas en español, confirma el precio vigente en la tabla oficial y revisa las condiciones de Open Platform y la política de privacidad antes de enviar datos de terceros.

Anthropic SDK, Claude Code o FIM: cuál elegir

OpciónÚsala cuandoNo la confundas con
Anthropic SDKTu aplicación ya utiliza el formato Messages o sus utilidades de streaming y tools.Paridad completa con la plataforma de Anthropic.
DeepSeek con Claude CodeNecesitas un agente de terminal que inspeccione un proyecto y coordine herramientas bajo permisos.Una integración respaldada por Anthropic para modelos no Claude.
FIM CompletionDebes completar un hueco exacto entre un prefijo y un sufijo.Messages o un agente que modifique archivos por sí solo.

Preguntas frecuentes

¿Necesito una clave de Anthropic?

No para este endpoint. Configura el SDK con una clave creada en DeepSeek Platform y la Base URL de DeepSeek. No mezcles credenciales de proveedores distintos.

¿Debo añadir /v1 a la Base URL?

No. Utiliza https://api.deepseek.com/anthropic. El SDK construye la ruta de Messages a partir de esa base.

¿Debo escribir deepseek-v4-pro[1m]?

No en una llamada directa con Anthropic SDK. Usa deepseek-v4-pro. [1m] es una convención documentada para determinadas configuraciones de Claude Code.

¿Puedo enviar imágenes o PDF?

No mediante los bloques Anthropic image o document de este endpoint, porque DeepSeek los marca como no admitidos.

¿Funciona cache_control?

El campo se ignora. DeepSeek utiliza una caché automática de prefijos en modo best effort; comprueba el uso devuelto en vez de asumir un acierto.

¿Puedo usar deepseek-chat o deepseek-reasoner?

No en una integración actual. El plazo oficial de retirada ya terminó y la lista vigente solo muestra deepseek-v4-flash y deepseek-v4-pro.

Fuentes oficiales verificadas

Guías relacionadas: DeepSeek con Claude Code · FIM Completion · DeepSeek API en español · Precios de DeepSeek API.