Aviso de independencia: DeepSeek Español es un sitio informativo independiente operado por Ahmed Aly. No pertenece a DeepSeek, no está afiliado ni respaldado por la empresa y no ofrece la API. La referencia técnica definitiva es la documentación oficial de FIM Completion.
Última verificación documental: 25 de julio de 2026. No se ha utilizado una clave real para afirmar que una ejecución concreta funciona; los ejemplos reproducen los campos y límites publicados por DeepSeek y deben probarse en un entorno propio antes de producción.
Respuesta rápida
FIM (Fill-In-the-Middle) completa el hueco situado entre un prefijo y un sufijo opcional. Envía un POST a https://api.deepseek.com/beta/completions, usa deepseek-v4-pro, coloca el contenido anterior en prompt y el posterior en suffix, y lee la inserción desde choices[0].text. La guía oficial limita la salida FIM a 4K tokens y presenta la función como Beta.
| Elemento | Valor documentado |
|---|---|
| Base URL Beta | https://api.deepseek.com/beta |
| Ruta | POST /completions |
| Modelo expresamente enumerado | deepseek-v4-pro |
| Entrada izquierda | prompt, obligatoria |
| Entrada derecha | suffix, opcional |
| Texto generado | choices[0].text |
| Salida máxima FIM | 4K tokens |
| Estado | Beta; modo non-thinking |

POST /beta/completions, la Base URL Beta y deepseek-v4-pro como valor de modelo. Captura realizada el 25 de julio de 2026.Qué es FIM Completion y cuándo usarlo
En una solicitud FIM, el cliente proporciona el texto que queda antes del hueco y, cuando existe, el texto que debe aparecer después. El modelo devuelve únicamente una propuesta para la parte intermedia. En código, esto permite conservar firmas, comentarios, sangría y cierres de bloque que ya existen sin pedir una reescritura completa del archivo.
- Completar el cuerpo de una función entre su firma y el siguiente bloque.
- Proponer una condición dentro de una estructura ya creada.
- Insertar una consulta, transformación o fragmento breve donde ambos extremos aportan contexto.
- Completar texto técnico cuando la continuación debe encajar con un final conocido.
FIM no es un editor ni un parche estructural. La API devuelve texto; tu aplicación decide si lo inserta, lo descarta o solicita una revisión. Antes de escribirlo en disco, valida sintaxis, formato, tipos, dependencias, permisos y pruebas.
Modelo actual y estado de los identificadores antiguos
El esquema oficial de POST /completions enumera actualmente deepseek-v4-pro. Por eso todos los ejemplos de esta guía utilizan ese ID.
Discrepancia documental: la tabla general de modelos marca FIM en non-thinking para V4 Flash y V4 Pro, pero la referencia específica del endpoint solo ofrece
deepseek-v4-procomo valor posible. No afirmamos que Flash sea incompatible; tampoco lo presentamos como opción confirmada mientras las dos páginas no coincidan.
DeepSeek fijó la retirada completa de deepseek-chat y deepseek-reasoner para el 24 de julio de 2026 a las 15:59 UTC. El plazo ya ha terminado y el ejemplo actual de GET /models solo enumera deepseek-v4-flash y deepseek-v4-pro. Esta página no utiliza los nombres retirados ni afirma un código de error concreto sin una prueba autenticada.
No añadas [1m] al modelo de FIM. Ese sufijo pertenece a determinadas configuraciones de Claude Code; no forma parte del ID que acepta esta referencia.
Cómo preparar prompt y suffix
- Localiza con exactitud el primer y el último carácter del hueco.
- Conserva en
promptla sangría, los comentarios y los delimitadores anteriores. - Incluye en
suffixel código posterior, también sus saltos de línea y cierres de bloque. - Limita
max_tokensal tamaño razonable de la inserción. - Une prefijo, texto generado y sufijo solo después de comprobar que existe una opción válida.
- Ejecuta formateador, análisis estático y pruebas antes de guardar o desplegar.
El espacio en blanco forma parte del contexto. Si el prefijo termina dentro de un bloque con dos espacios de sangría, consérvalos. Si el sufijo comienza con un salto de línea y una llave, inclúyelos. Esta precisión reduce repeticiones y cierres duplicados, aunque no garantiza una salida correcta.
Ejemplo de FIM con Python
Instala el cliente compatible y guarda la clave exclusivamente en una variable de entorno del servidor:
python3 -m venv .venv
source .venv/bin/activate
pip install openai
export DEEPSEEK_API_KEY="sustituir-por-la-clave-real"
import os
from openai import OpenAI
api_key = os.environ.get("DEEPSEEK_API_KEY")
if not api_key:
raise RuntimeError("Falta la variable DEEPSEEK_API_KEY")
client = OpenAI(
api_key=api_key,
base_url="https://api.deepseek.com/beta",
)
prefix = "def normalizar_slug(texto: str) -> str:\n "
suffix = "\n\nprint(normalizar_slug('Guía de API'))"
response = client.completions.create(
model="deepseek-v4-pro",
prompt=prefix,
suffix=suffix,
echo=False,
max_tokens=128,
temperature=0.2,
)
if not response.choices:
raise RuntimeError("DeepSeek no devolvió ninguna opción")
choice = response.choices[0]
if choice.text is None:
raise RuntimeError("La opción no contiene texto")
resultado = prefix + choice.text + suffix
print("finish_reason:", choice.finish_reason)
print(resultado)
El método correcto es client.completions.create. client.chat.completions.create llama a una ruta distinta y no convierte una solicitud de chat en FIM.
Ejemplo equivalente con Node.js
npm install openai
export DEEPSEEK_API_KEY="sustituir-por-la-clave-real"
import OpenAI from "openai";
const apiKey = process.env.DEEPSEEK_API_KEY;
if (!apiKey) {
throw new Error("Falta la variable DEEPSEEK_API_KEY");
}
const client = new OpenAI({
apiKey,
baseURL: "https://api.deepseek.com/beta",
});
const prefix = "function normalizarSlug(texto) {\n ";
const suffix = "\n}\n\nconsole.log(normalizarSlug('Guía de API'));";
const response = await client.completions.create({
model: "deepseek-v4-pro",
prompt: prefix,
suffix,
echo: false,
max_tokens: 128,
temperature: 0.2,
});
const choice = response.choices?.[0];
if (!choice || typeof choice.text !== "string") {
throw new Error("DeepSeek no devolvió una inserción válida");
}
const resultado = prefix + choice.text + suffix;
console.log("finish_reason:", choice.finish_reason);
console.log(resultado);
Solicitud FIM con cURL
curl https://api.deepseek.com/beta/completions \
-H "Authorization: Bearer ${DEEPSEEK_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro",
"prompt": "function normalizarSlug(texto) {\n ",
"suffix": "\n}\n",
"echo": false,
"max_tokens": 128,
"temperature": 0.2
}'
La URL final debe contener /beta/completions. Durante el diagnóstico conserva el estado HTTP y el cuerpo de error, pero elimina la cabecera de autorización antes de compartir registros.
Parámetros documentados de FIM
| Parámetro | Uso y límite publicado |
|---|---|
model | Obligatorio; la referencia específica enumera deepseek-v4-pro. |
prompt | Obligatorio; contenido anterior al hueco. |
suffix | Opcional; contenido posterior al hueco. |
max_tokens | Limita la generación; la guía FIM fija un máximo de 4K. |
echo | Puede incluir el prompt junto con la finalización. Usa false si solo necesitas la inserción. |
logprobs | Hasta 20 alternativas probables, además del token elegido. |
stop | Una cadena o una lista de hasta 16 secuencias; la secuencia de parada no se devuelve. |
stream | Envía progreso mediante Server-Sent Events y termina con data: [DONE]. |
stream_options.include_usage | Con streaming, añade un bloque de uso antes de [DONE]; ese bloque tiene choices vacío. |
temperature | De 0 a 2; valor predeterminado 1. |
top_p | Hasta 1; valor predeterminado 1. Ajusta este o temperature, no ambos a la vez. |
frequency_penalty y presence_penalty están obsoletos y no producen efecto. El esquema FIM tampoco incluye thinking, reasoning_effort ni reasoning_content. No los añadas por analogía con Chat Completions.
Cómo interpretar la respuesta
El objeto devuelto tiene el tipo text_completion. La inserción se encuentra en choices[].text y cada opción incluye un finish_reason que debes revisar antes de aceptar el resultado.
finish_reason | Interpretación documentada | Acción segura |
|---|---|---|
stop | Parada natural o por una secuencia configurada. | Validar la inserción completa. |
length | Se alcanzó el límite de generación. | No asumir que el código está completo; revisar o dividir el hueco. |
content_filter | Se omitió contenido por filtrado. | No presentar la salida como completa. |
insufficient_system_resource | La inferencia fue interrumpida por falta de recursos. | Registrar el fallo sin secretos y aplicar un reintento limitado si procede. |
El bloque usage informa tokens de entrada, salida y totales, además de contadores de caché. Para estimar el gasto consulta la guía de precios de DeepSeek API y confirma las tarifas en la fuente oficial; no calcules tokens a partir del número de caracteres.
FIM frente a Chat Prefix Completion
| Criterio | FIM Completion | Chat Prefix Completion |
|---|---|---|
| Ruta Beta | /completions | /chat/completions |
| Entrada | prompt y suffix | Último mensaje assistant con prefix: true |
| Objetivo | Insertar texto entre dos extremos | Forzar el comienzo de una respuesta de chat |
| Salida principal | choices[].text | choices[].message |
Ambas funciones usan la Base URL Beta, pero no son intercambiables. Para autenticación, Chat Completions y selección general de modelos, consulta la guía de DeepSeek API en español.
Seguridad y control de calidad antes de guardar
- No envíes claves, contraseñas, tokens, datos personales innecesarios ni archivos completos si basta un fragmento.
- Mantén
DEEPSEEK_API_KEYen el servidor o en un gestor de secretos; las condiciones de la plataforma prohíben exponerla en código del navegador. - Trata la salida como texto no confiable. No la conviertas directamente en SQL, comandos del sistema o cambios de producción.
- Limita el tamaño del fragmento, el tiempo de ejecución, los reintentos y el gasto por usuario.
- Ejecuta formatters, linters, analizadores de seguridad y pruebas relevantes antes de aceptar la propuesta.
- Conserva el modelo, la fecha,
finish_reasony el consumo para poder reproducir una incidencia sin registrar secretos.
Solución de problemas frecuentes
La ruta no reconoce FIM
Comprueba que el cliente utiliza https://api.deepseek.com/beta como Base URL y llama a Completions. No añadas el cuerpo FIM a /chat/completions.
El resultado repite el principio o el final
Usa echo: false, verifica dónde termina prompt y conserva los bordes exactos. Si el modelo repite parte del sufijo, detecta la superposición mediante una regla comprobable; no elimines texto de forma heurística sin pruebas.
Errores HTTP
DeepSeek documenta 400 para formato, 401 para autenticación, 402 para saldo, 422 para parámetros, 429 para límites y 500/503 para fallos transitorios del servidor. Corrige 400, 401 y 422 antes de repetir. Para 429, 500, 503 o fallos de red, usa una cola y reintentos limitados con espera exponencial. Consulta la guía de códigos de error.
Preguntas frecuentes
¿El sufijo es obligatorio?
No. La referencia lo define como opcional. Proporcionarlo es lo que permite al modelo usar el contexto posterior al hueco.
¿Puedo activar Thinking Mode en FIM?
No según la matriz vigente: FIM figura como función non-thinking y el esquema específico no incluye el campo thinking.
¿Debo usar V4 Flash o V4 Pro?
Usa deepseek-v4-pro en una integración basada en la referencia actual porque es el único valor expresamente enumerado por el endpoint. La tabla general también marca Flash, pero esa discrepancia impide presentarlo como opción confirmada.
¿FIM modifica mi archivo?
No. La API devuelve texto. Solo el cliente o la aplicación que programes puede insertarlo o escribirlo en disco.
¿Puedo generar más de 4K tokens en una operación FIM?
No conforme a la guía oficial consultada. Reduce o divide el hueco, o utiliza un flujo distinto para una generación extensa.
Fuentes oficiales verificadas
- DeepSeek: FIM Completion (Beta).
- DeepSeek: Create FIM Completion (Beta), referencia del endpoint.
- DeepSeek: Models & Pricing.
- DeepSeek: List Models.
- DeepSeek V4 Preview Release y retirada de aliases.
- DeepSeek: Error Codes.
- DeepSeek Open Platform Terms of Service.
Guías relacionadas: DeepSeek API en español · DeepSeek V4 · Precios de DeepSeek API · DeepSeek con Anthropic SDK.
