NVIDIA NIM: qué modelo para qué tarea — análisis técnico 2026

Actualizado:
Preguntarle a la IA sobre este artículo
NVIDIA NIM: qué modelo para qué tarea — análisis técnico 2026

El catálogo build.nvidia.com contiene más de 100 modelos. Esto es tanto su fortaleza como su problema: si es la primera vez que visita la plataforma, la elección paraliza. ¿DeepSeek o Kimi? ¿Nemotron o Llama? ¿GLM-5 o Qwen3.5?

Este artículo es un análisis técnico práctico: qué modelo ejecutar para qué tarea específica.

¿Leyó el material anterior? En el artículo «NVIDIA NIM: cómo la inferencia gratuita está cambiando la arquitectura de los sistemas de IA», analicé por qué la inferencia se está convirtiendo en una capa de producto básico, en qué se diferencia NVIDIA Build de OpenRouter y Groq, y qué consecuencias arquitectónicas tiene esto para los agentes de IA. Este material es una continuación lógica: modelos específicos, código específico.

Contenido

Conexión a NVIDIA NIM: primeros pasos

Antes de comparar modelos, la configuración básica. Lleva menos de 5 minutos.

Paso 1. Regístrese en el Programa de Desarrolladores de NVIDIA (gratuito, solo necesita un correo electrónico).

Paso 2. Genere una clave API en build.nvidia.com. La clave tendrá el prefijo nvapi-.

Paso 3. Instale las dependencias:

pip install openai
export NVIDIA_API_KEY="nvapi-tu-clave"

Cliente Python básico:

from openai import OpenAI

client = OpenAI(
    api_key="nvapi-tu-clave",
    base_url="https://integrate.api.nvidia.com/v1"
)

response = client.chat.completions.create(
    model="meta/llama-4-scout-17b-16e-instruct",  # solo cambia esta línea
    messages=[
        {"role": "system", "content": "Eres un asistente técnico."},
        {"role": "user", "content": "Escribe una función para búsqueda binaria en Python."}
    ],
    temperature=0.1,
    max_tokens=1024
)

print(response.choices[0].message.content)

Equivalente curl:

curl https://integrate.api.nvidia.com/v1/chat/completions \
  -H "Authorization: Bearer $NVIDIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta/llama-4-scout-17b-16e-instruct",
    "messages": [
      {"role": "user", "content": "Escribe una función para búsqueda binaria en Python."}
    ],
    "max_tokens": 1024
  }'

Detalle clave: la URL base es la misma para todos los modelos. Para cambiar de Llama a DeepSeek, solo necesita cambiar una línea: el valor del parámetro model. Es por eso que elegir el modelo correcto no es una refactorización de código, sino una configuración.

Mapa de modelos: quién es quién en el catálogo NIM

A mayo de 2026, hay más de 100 modelos disponibles en el catálogo build.nvidia.com. Analicemos las familias principales:

Familia Desarrollador Modelos clave en NIM Licencia Fortaleza
DeepSeek V4 DeepSeek AI (China) V4-Flash, V4-Pro, V4 (671B) MIT Calidad general, codificación, eficiencia de costos
Kimi K2 Moonshot AI (China) K2.5, K2.6, K2-Thinking Licencia Kimi Codificación de agentes, contexto largo
Nemotron 3 NVIDIA Nano Omni (30B), Super (120B), Ultra (500B) Licencia de Modelo Abierto de NVIDIA Rendimiento de hardware NVIDIA, tareas de agentes
Qwen 3.5 Alibaba (China) Qwen3-8B, Qwen3-32B, Qwen3.5-235B-MoE Apache 2.0 Codificación, multilingüe (especialmente CJK)
GLM-5 / GLM-4 Zhipu AI (China) GLM-4.7, GLM-5, GLM-5.1 MIT Flujos de trabajo de agentes, llamada a funciones
Llama 4 Meta (EE. UU.) Scout 17B, Maverick 70B, Llama 3.3 70B Licencia Comunitaria Llama Uso general, uso de herramientas
MiniMax M2 MiniMax (China) M2.5, M2.7 (230B MoE) Licencia MiniMax Razonamiento, multimodalidad
Gemma 4 Google Gemma 4 31B, Gemma 2B / 7B Licencia Gemma Tareas ligeras, resumen
Especializados Varios NemoClaw, Llama Guard, NV-Embed Varios Seguridad, incrustación, barreras de seguridad

Llamo la atención sobre una observación importante: en 2026, la mayoría de los modelos de primer nivel provienen de laboratorios chinos. Según BenchLM.ai, las primeras posiciones en la clasificación de modelos de peso abierto las ocupan DeepSeek V4 Pro (87 puntos), Kimi K2.6 (84), GLM-5.1 (83) y Qwen3.5 397B (79). En este contexto, Llama de Meta ya no parece dominante en la parte superior de la tabla.

Benchmarks: cifras reales de rendimiento

Las cifras que se presentan a continuación se recopilaron de Artificial Analysis, BenchLM.ai y LearnAIForge (mayo de 2026).

Índice de Inteligencia General (Artificial Analysis v4.0)

Modelo Índice de Inteligencia Tipo Disponible en NIM
Kimi K2.6 54 Peso abierto
MiMo-V2.5-Pro 54 Peso abierto
DeepSeek V4 Pro (Razonamiento) 52 Peso abierto
GLM-5.1 (Razonamiento) ~50 Peso abierto (MIT)
Nemotron 3 Super 120B 61 (BenchLM) Peso abierto
Nemotron 3 Ultra 500B 65 (BenchLM) Peso abierto

SWE-Bench Verificado (corrección autónoma de problemas reales de GitHub)

Modelo Puntuación SWE-Bench Nota
Nemotron 3 Super 60.47% +18.5 p.p. sobre GPT-OSS-120B; 7.5x mayor rendimiento que Qwen3.5-122B
Qwen3.5-122B ~66% Puntuación más alta, pero menor rendimiento
DeepSeek V4 Pro 89/100 (harness de codificación) Requiere un harness especial para obtener el máximo resultado
Kimi K2.6 87/100 (harness de codificación) 3.6 veces más barato que Claude Opus en las mismas tareas
GPT-OSS-120B (referencia) ~42% Referencia para comparación

RULER Long-Context (precisión en 1M de tokens)

Modelo RULER @ 1M ctx Contexto máximo
Nemotron 3 Super 91.75% 1M tokens
Nemotron 3 Ultra El más grande entre los de peso abierto 10M tokens
DeepSeek V4 Flash Alto 1M tokens
GPT-OSS-120B 22.30% Degrada drásticamente en contextos grandes
NVIDIA NIM: qué modelo para qué tarea — análisis técnico 2026

Tarea 1 — Coding y coding agentico

Coding es la categoría más competitiva entre los modelos NIM en 2026. Analizaré tres niveles de dificultad.

Nivel 1: tareas sencillas (función, algoritmo, corrección de errores)

Recomendación: deepseek-ai/deepseek-v4-flash

Desde un punto de vista práctico, DeepSeek V4 Flash es un modelo MoE de 284B que activa solo una parte de los parámetros por token. Esto proporciona una relación velocidad-calidad inusual: el modelo se comporta significativamente más ligero de lo que su tamaño general podría sugerir.

Según pruebas prácticas de desarrolladores, V4 Flash cubre alrededor del 80% de las tareas de coding típicas con una calidad que antes requería modelos considerablemente más caros y pesados.

# Tareas de coding sencillas — DeepSeek V4 Flash
response = client.chat.completions.create(
    model="deepseek-ai/deepseek-v4-flash",
    messages=[
        {
            "role": "system",
            "content": "You are an expert Python developer. Return only code, no explanations."
        },
        {
            "role": "user",
            "content": "Write a binary search function with type hints and docstring."
        }
    ],
    temperature=0.0,  # para código siempre 0
    max_tokens=512
)

Nivel 2: tareas complejas (edición de múltiples archivos, refactorización)

Recomendación: moonshotai/kimi-k2.6 o deepseek-ai/deepseek-v4-pro

Según el benchmark comparativo de agentes de coding, Kimi K2.6 obtiene 87/100 y cuesta 3.6 veces menos que Claude Opus en tareas similares. DeepSeek V4 Pro obtiene 89/100, pero requiere un harness específico para liberar su máximo potencial.

# Coding agentico complejo — Kimi K2.6
response = client.chat.completions.create(
    model="moonshotai/kimi-k2.6",
    messages=[
        {
            "role": "system",
            "content": (
                "You are a senior software engineer. "
                "When editing code, show ONLY the changed parts with clear markers. "
                "Always verify your changes are consistent across all files."
            )
        },
        {
            "role": "user",
            "content": "Refactor this FastAPI app to use async SQLAlchemy:\n\n[código aquí]"
        }
    ],
    temperature=0.1,
    max_tokens=4096
)

Nivel 3: corrección autónoma de issues de GitHub (clase SWE-Bench)

Mi recomendación: nvidia/nemotron-3-super-120b

Para tareas del tipo "corrige autónomamente este bug en el repositorio", Nemotron 3 Super muestra un 60.47% en SWE-Bench Verified y proporciona un throughput 7.5 veces mayor en comparación con Qwen3.5-122B con una calidad comparable, lo cual es un factor crítico para mí en escenarios donde los agentes procesan varias tareas en paralelo.

# Agente de coding autónomo — Nemotron 3 Super
# IMPORTANTE: para modelos de pensamiento, añade los parámetros correctos
response = client.chat.completions.create(
    model="nvidia/nemotron-3-super-120b",
    messages=[
        {
            "role": "system",
            "content": (
                "You are an autonomous software engineer. "
                "Given a GitHub issue description and relevant code, "
                "produce a complete patch. Think step by step before coding."
            )
        },
        {
            "role": "user",
            "content": "Issue: #1234 — Memory leak in connection pool\n\n[código del repositorio]"
        }
    ],
    temperature=0.15,
    max_tokens=8192
)

Tabla resumen de coding

Escenario Modelo recomendado Por qué
Funciones sencillas, snippets deepseek-ai/deepseek-v4-flash Velocidad + calidad + ahorro de créditos
Refactorización multi-archivo moonshotai/kimi-k2.6 Contexto largo + paralelismo de sub-agentes
Agente de coding autónomo nvidia/nemotron-3-super-120b Máxima puntuación SWE-Bench + throughput
Máxima precisión (no en tiempo real) deepseek-ai/deepseek-v4-pro 89/100 en harness de coding

Tarea 2 — Razonamiento complejo y matemáticas

Reasoning son tareas donde el modelo debe "pensar" antes de responder: matemáticas, lógica, GPQA Diamond, Humanity's Last Exam.

Observo que para la mayoría de las tareas, la mejor opción universal sigue siendo deepseek-ai/deepseek-v4-pro con el modo de razonamiento activado.

Para tareas científicas: qwen/qwen3.5-397b — Humanity's Last Exam score 25.30% frente a 18.26% en Nemotron Super.

# Tarea de razonamiento con chain-of-thought explícito
response = client.chat.completions.create(
    model="deepseek-ai/deepseek-v4-pro",
    messages=[
        {
            "role": "system",
            "content": (
                "You are a mathematical reasoning engine. "
                "Always show your full chain of thought before the final answer. "
                "Format: ...\n\nFinal answer: ..."
            )
        },
        {
            "role": "user",
            "content": (
                "A train leaves city A at 60 km/h. Another leaves city B at 80 km/h "
                "toward A. The cities are 420 km apart. When and where do they meet?"
            )
        }
    ],
    temperature=0.0,
    max_tokens=2048
)

Importante para modelos de pensamiento: DeepSeek V4-Pro y Kimi K2-Thinking son "modelos de pensamiento" — utilizan un chain-of-thought interno antes de responder. Para los modelos "pensadores", establece temperature=0.0 o un valor muy bajo, de lo contrario, el razonamiento se vuelve inestable.

Comparación de modelos de razonamiento en NIM

Modelo GPQA Diamond Humanity's Last Exam Óptimo para
DeepSeek V4 Pro (Reasoning) Alto ~20% Coding + razonamiento lógico
Qwen3.5-397B (Reasoning) Alto 25.30% Tareas científicas, matemáticas
Nemotron 3 Super Moderado 18.26% Throughput agentico, no ciencia de vanguardia
MiniMax M2.7 Alto Compite con DeepSeek-R1 Razonamiento puro de chain-of-thought

Tarea 3 — RAG y contexto largo

En mis experimentos prácticos con RAG (Retrieval-Augmented Generation) — cuando el modelo recibe un gran contexto externo en forma de documentos, bases de conocimiento o repositorios de código — los resultados más estables los proporcionan no los modelos universales, sino configuraciones especializadas para el volumen de contexto y el tipo de tarea de recuperación.

Mi recomendación: deepseek-ai/deepseek-v4-flash para la mayoría de los escenarios RAG y nvidia/nemotron-3-ultra-500b para tareas de contexto extremadamente largo.

Parámetros clave de selección que considero al trabajar con RAG:

  • Tamaño del contexto: DeepSeek V4 Flash — hasta 1M de tokens; Nemotron Ultra — hasta 10M de tokens, que actualmente es uno de los indicadores más altos entre los modelos de peso abierto.
  • Calidad en contexto largo: Nemotron 3 Super muestra un 91.75% en RULER @ 1M ctx frente a un 22.30% en GPT-OSS-120B, lo que afecta significativamente la estabilidad de las respuestas en documentos largos.
  • Velocidad de recuperación: Las versiones Flash de DeepSeek suelen ofrecer un mejor equilibrio entre latencia y calidad para pipelines RAG estándar, especialmente con un gran número de consultas paralelas.
# Pipeline RAG — DeepSeek V4 Flash con documentos
def query_rag(user_question: str, retrieved_chunks: list[str]) -> str:
    context = "\n\n---\n\n".join(retrieved_chunks)

    response = client.chat.completions.create(
        model="deepseek-ai/deepseek-v4-flash",
        messages=[
            {
                "role": "system",
                "content": (
                    "Answer questions using ONLY the provided context. "
                    "If the answer is not in the context, say so explicitly. "
                    "Always cite the relevant passage."
                )
            },
            {
                "role": "user",
                "content": f"Context:\n{context}\n\nQuestion: {user_question}"
            }
        ],
        temperature=0.0,
        max_tokens=1024
    )
    return response.choices[0].message.content

# Para documentos extremadamente largos — Nemotron Ultra (10M ctx)
def query_giant_document(document: str, question: str) -> str:
    response = client.chat.completions.create(
        model="nvidia/nemotron-3-ultra-500b",
        messages=[
            {
                "role": "system",
                "content": "Analyze the entire document carefully before answering."
            },
            {
                "role": "user",
                "content": f"Document:\n{document}\n\nQuestion: {question}"
            }
        ],
        temperature=0.0,
        max_tokens=2048
    )
    return response.choices[0].message.content

Tabla de selección para RAG

Tamaño del contexto Modelo recomendado Razón
Hasta 128K tokens deepseek-ai/deepseek-v4-flash Velocidad + precisión + ahorro
128K — 1M tokens moonshotai/kimi-k2.5 o deepseek-ai/deepseek-v4 Optimizado para RAG de contexto largo
Más de 1M tokens nvidia/nemotron-3-ultra-500b 10M ctx, 91.75% de precisión RULER

Tarea 4 — Orquestación multi-agente

Para sistemas multi-agente, el parámetro clave no es solo la calidad de una consulta, sino el throughput en sesiones paralelas y la fiabilidad de la llamada a herramientas.

Nemotron 3 Super utiliza una arquitectura MoE híbrida Mamba-Transformer. En comparación con los modelos densos, esto proporciona un throughput de inferencia 5 veces mayor en hardware NVIDIA en sesiones de agentes concurrentes — gracias a que MoE activa solo una parte de los parámetros por token.

Para la decodificación especulativa: Nemotron 3 Super alcanza una longitud promedio de aceptación de 3.45 tokens por paso de verificación frente a 2.70 en DeepSeek-R1 — lo que proporciona hasta 3 veces de aceleración sin un modelo de borrador separado.

import asyncio
from openai import AsyncOpenAI

async_client = AsyncOpenAI(
    api_key="nvapi-tu-clave",
    base_url="https://integrate.api.nvidia.com/v1"
)

# Ejecución paralela de agentes especializados
async def run_agent(role: str, model: str, task: str) -> dict:
    response = await async_client.chat.completions.create(
        model=model,
        messages=[{"role": "system", "content": f"You are a specialist in {role}."},
                  {"role": "user", "content": task}],
        temperature=0.1,
        max_tokens=1024
    )
    return {
        "role": role,
        "model": model,
        "result": response.choices[0].message.content
    }

async def multi_agent_pipeline(user_task: str) -> dict:
    # Definimos agentes especializados — cada uno recibe el modelo óptimo
    agents = [
        ("planning",    "nvidia/nemotron-3-super-120b",     f"Plan this task: {user_task}"),
        ("coding",      "moonshotai/kimi-k2.6",             f"Write code for: {user_task}"),
        ("retrieval",   "deepseek-ai/deepseek-v4-flash",    f"Find relevant info about: {user_task}"),
        ("summarizer",  "google/gemma-4-31b-it",            f"Summarize results for: {user_task}"),
    ]

    # Ejecutamos en paralelo — ahorramos tiempo
    results = await asyncio.gather(*[
        run_agent(role, model, task)
        for role, model, task in agents
    ])

    return {r["role"]: r["result"] for r in results}

# Ejecución
results = asyncio.run(multi_agent_pipeline(
    "Analyze our Q3 sales data and generate a board presentation"
))

Presto atención a la decisión arquitectónica: cada agente en el sistema recibe un modelo óptimo para su rol. Por ejemplo, para la tarea de resumen utilizo Gemma, más barata, en lugar de Nemotron — ya que para un resumen simple la diferencia de calidad es mínima, mientras que la diferencia de coste y latencia es significativa.

Tarea 5 — Tareas multilingües

Si tu producto atiende a una audiencia en varios idiomas, la elección del modelo afecta significativamente la calidad.

Para CJK (chino, japonés, coreano): qwen/qwen3-32b o zhipuai/glm-5.1 — Qwen y GLM tienen soporte nativo para chino, que supera con creces a los modelos de Meta o NVIDIA.

Para idiomas eslavos y multilingüismo general: deepseek-ai/deepseek-v4-flash — muestra buenos resultados en la mayoría de los idiomas europeos.

Para multilingüismo multimodal (texto + imágenes + audio): nvidia/nemotron-3-nano-omni — modelo MoE de 30B, lanzado el 28 de abril de 2026, soporta texto, imagen, video y audio a través de una única arquitectura.

# Pipeline multilingüe con selección automática de modelo
LANGUAGE_MODEL_MAP = {
    "zh": "zhipuai/glm-4.7",          # Chino — GLM es el mejor
    "ja": "qwen/qwen3-32b",            # Japonés — Qwen es más fuerte
    "ko": "qwen/qwen3-32b",            # Coreano
    "uk": "deepseek-ai/deepseek-v4",   # Ucraniano
    "ru": "deepseek-ai/deepseek-v4",   # Ruso
    "en": "deepseek-ai/deepseek-v4-flash",  # Inglés — flash es suficiente
    "default": "deepseek-ai/deepseek-v4"
}

def multilingual_query(text: str, lang: str) -> str:
    model = LANGUAGE_MODEL_MAP.get(lang, LANGUAGE_MODEL_MAP["default"])

    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": text}],
        temperature=0.3,
        max_tokens=1024
    )
    return response.choices[0].message.content

Tarea 6 — Salida estructurada y llamada a funciones

En mi práctica, a menudo me encuentro con que la salida estructurada fiable (JSON según un esquema) y la llamada a funciones son componentes críticos para los sistemas agenticos de producción. No todos los modelos manejan esto igual de bien, especialmente cuando se trata de esquemas complejos o herramientas anidadas.

Más detalles sobre la mecánica del uso de herramientas, el esquema JSON y su relación con RAG los he desglosado aquí: uso de herramientas vs llamada a funciones y RAG.

Modelos con soporte confirmado para llamadas a funciones en NIM: Llama 3.1 70B/405B, Nemotron-3-Super, GLM-4.7, GLM-5.1, Kimi K2.5, Mixtral 8x22B, Qwen 2.5 72B — todos soportan el formato estándar de uso de herramientas de OpenAI.

import json

# Llamada a funciones — GLM-5.1 o Nemotron Super
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get current weather for a city",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "City name"},
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "Temperature unit"
                    }
                },
                "required": ["city"]
            }
        }
    }
]

response = client.chat.completions.create(
    model="zhipuai/glm-5.1",   # O: nvidia/nemotron-3-super-120b
    messages=[
        {"role": "user", "content": "What's the weather in Kyiv and Berlin?"}
    ],
    tools=tools,
    tool_choice="auto",
    temperature=0.0
)

# Verificación de la llamada a la herramienta
message = response.choices[0].message
if message.tool_calls:
    for tool_call in message.tool_calls:
        args = json.loads(tool_call.function.arguments)
        print(f"Tool: {tool_call.function.name}, Args: {args}")

Salida JSON estructurada sin llamada a funciones:

# Salida JSON forzada a través de prompt del sistema
response = client.chat.completions.create(
    model="zhipuai/glm-5.1",
    messages=[
        {
            "role": "system",
            "content": (
                "You MUST respond ONLY with valid JSON matching this schema exactly. "
                "No explanations, no markdown, no code blocks.\n"
                "Schema: {\"sentiment\": \"positive|negative|neutral\", "
                "\"score\": 0.0-1.0, \"keywords\": [\"string\"]}"
            )
        },
        {
            "role": "user",
            "content": "Analyze sentiment: 'The product exceeded all my expectations!'"
        }
    ],
    temperature=0.0,
    max_tokens=256
)

# SIEMPRE valida la salida
try:
    result = json.loads(response.choices[0].message.content)
except json.JSONDecodeError:
    # Lógica de fallback para JSON roto
    print("Model returned invalid JSON, retrying with stricter prompt...")

Práctica: cómo cambiar modelos sin refactorizar

El enfoque más eficaz es un objeto de configuración centralizado que separa la elección del modelo de la lógica de negocio:

from dataclasses import dataclass
from openai import OpenAI
from typing import Optional

@dataclass
class ModelConfig:
    model_id: str
    temperature: float = 0.1
    max_tokens: int = 1024
    supports_tools: bool = True
    context_window: int = 128_000

# Configuración centralizada — cambia aquí, no en el código
MODELS = {
    "coding_simple":    ModelConfig("deepseek-ai/deepseek-v4-flash",    temperature=0.0),
    "coding_complex":   ModelConfig("moonshotai/kimi-k2.6",             temperature=0.1, max_tokens=4096),
    "coding_agent":     ModelConfig("nvidia/nemotron-3-super-120b",     temperature=0.15, max_tokens=8192),
    "reasoning":        ModelConfig("deepseek-ai/deepseek-v4-pro",      temperature=0.0, max_tokens=4096),
    "rag_standard":     ModelConfig("deepseek-ai/deepseek-v4-flash",    temperature=0.0),
    "rag_longcontext":  ModelConfig("nvidia/nemotron-3-ultra-500b",     temperature=0.0, context_window=10_000_000),
    "multilingual":     ModelConfig("deepseek-ai/deepseek-v4",          temperature=0.3),
    "structured":       ModelConfig("zhipuai/glm-5.1",                  temperature=0.0),
    "summarizer":       ModelConfig("google/gemma-4-31b-it",            temperature=0.3, max_tokens=512),
}

class NIMClient:
    def __init__(self, api_key: str):
        self.client = OpenAI(
            api_key=api_key,
            base_url="https://integrate.api.nvidia.com/v1"
        )

    def query(
        self,
        task: str,
        messages: list[dict],
        config_key: str = "coding_simple",
        tools: Optional[list] = None
    ) -> str:
        cfg = MODELS[config_key]

        kwargs = {
            "model": cfg.model_id,
            "messages": messages,
            "temperature": cfg.temperature,
            "max_tokens": cfg.max_tokens,
        }
        if tools and cfg.supports_tools:
            kwargs["tools"] = tools
            kwargs["tool_choice"] = "auto"

        response = self.client.chat.completions.create(**kwargs)
        return response.choices[0].message.content

# Uso — la lógica de negocio no conoce los modelos específicos
nim = NIMClient(api_key="nvapi-tu-clave")

# Para cambiar el modelo, solo tienes que cambiar config_key
result = nim.query(
    task="coding",
    messages=[{"role": "user", "content": "Escribe un quicksort en Python"}],
    config_key="coding_simple"  # cambia a "coding_complex" para tareas más complejas
)

Árbol de decisión: qué modelo elegir

¿Qué tarea?
│
├── CODING
│   ├── Snippet / función simple
│   │   └── deepseek-ai/deepseek-v4-flash  ✓ rápido, barato
│   ├── Multi-archivo / refactorización
│   │   └── moonshotai/kimi-k2.6           ✓ contexto largo
│   └── Agente autónomo (clase SWE-Bench)
│       └── nvidia/nemotron-3-super-120b   ✓ mayor rendimiento
│
├── RAZONAMIENTO / MATEMÁTICAS
│   ├── Lógica, razonamiento de código
│   │   └── deepseek-ai/deepseek-v4-pro    ✓ razonamiento CoT
│   └── Tareas científicas, benchmark HLE
│       └── qwen/qwen3.5-397b              ✓ 25.30% HLE
│
├── RAG / CONTEXTO LARGO
│   ├── Hasta 128K tokens
│   │   └── deepseek-ai/deepseek-v4-flash  ✓ recuperación rápida
│   ├── Hasta 1M tokens
│   │   └── moonshotai/kimi-k2.5           ✓ optimizado para contexto largo
│   └── Más de 1M tokens
│       └── nvidia/nemotron-3-ultra-500b   ✓ 10M ctx, 91.75% RULER
│
├── ORQUESTADOR MULTIAGENTE
│   └── nvidia/nemotron-3-super-120b       ✓ 5x rendimiento, eficiencia MoE
│
├── MULTILENGUAJE
│   ├── CJK (zh/ja/ko)
│   │   └── qwen/qwen3-32b o zhipuai/glm-4.7
│   └── Idiomas europeos
│       └── deepseek-ai/deepseek-v4
│
├── SALIDA ESTRUCTURADA / LLAMADA A FUNCIONES
│   └── zhipuai/glm-5.1 o nvidia/nemotron-3-super-120b
│
└── RESUMEN (sensible al presupuesto)
    └── google/gemma-4-31b-it              ✓ el más barato para tareas simples

Trampas: comportamientos específicos del modelo

Lo que no está escrito en la documentación, pero es crucial en producción:

1. Los modelos de pensamiento requieren un manejo especial

Kimi K2-Thinking y DeepSeek V4-Pro en modo de razonamiento son "modelos de pensamiento". Generan una cadena de pensamiento interna antes de responder. Según la experiencia práctica de los desarrolladores, si cambias de un modelo de pensamiento a uno normal sin ajustar los parámetros, puedes obtener errores de API.

# Para modelos de pensamiento — NO pases reasoning_budget con modelos normales
# Para modelos que no son de pensamiento — establece NIM_ENABLE_THINKING=false si hay un conflicto

# Comprobación antes de la consulta
THINKING_MODELS = {
    "moonshotai/kimi-k2-thinking",
    "deepseek-ai/deepseek-v4-pro",  # en modo de razonamiento
}

def safe_query(model: str, messages: list, **kwargs) -> str:
    if model in THINKING_MODELS:
        kwargs.setdefault("temperature", 0.0)
        # NO añadas stream=True para modelos de pensamiento sin procesamiento adicional
    return client.chat.completions.create(
        model=model, messages=messages, **kwargs
    ).choices[0].message.content

2. GLM/Qwen requieren flags específicos para etiquetas de razonamiento

# GLM y Qwen 3.5 requieren --reasoning-format none
# si no se necesitan etiquetas <think> en la respuesta
# A través de la API, esto se resuelve con un prompt del sistema:
system_no_thinking = (
    "Responde directamente sin mostrar tu proceso de razonamiento. "
    "No uses etiquetas <think>."
)

3. Llama 4 utiliza un formato de herramienta Pythonico

Llama 4 Scout tiene un formato de llamadas a herramientas diferente al estándar de OpenAI (sintaxis Pythonica). Si tu analizador espera una llamada a herramienta JSON estándar, puede fallar al cambiar a Llama 4.

4. Límite de tasa de 40 RPM y flujos de trabajo de agentes

Con agentes de varios pasos, una "solicitud lógica" puede generar 5-10 llamadas a la API. 40 RPM = máximo ~4-8 tareas de usuario reales por minuto para un solo agente.

import time
import functools

def rate_limited(max_per_minute: int = 35):  # dejamos un buffer de 40
    min_interval = 60.0 / max_per_minute
    last_called = [0.0]

    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            elapsed = time.time() - last_called[0]
            wait = min_interval - elapsed
            if wait > 0:
                time.sleep(wait)
            result = func(*args, **kwargs)
            last_called[0] = time.time()
            return result
        return wrapper
    return decorator

@rate_limited(max_per_minute=35)
def api_call(messages, model):
    return client.chat.completions.create(
        model=model, messages=messages, max_tokens=1024
    )

5. Tabla resumen de comportamientos específicos del modelo

Modelo / familia Característica Qué hacer
Kimi K2-Thinking, DeepSeek V4-Pro Modelo de pensamiento — CoT interno temperature=0.0, no mezclar con configuraciones que no sean de pensamiento
GLM-5, Qwen 3.5 Por defecto, generan etiquetas <think> Añadir "No mostrar pensamiento" en el prompt del sistema
Llama 4 Scout/Maverick Formato de llamada a herramienta Pythonico Analizador separado o usar Llama 3.3 70B para uso de herramientas
Nemotron 3 Super/Ultra MoE — bajo rendimiento en lotes pequeños Óptimo con consultas paralelas, no de un solo disparo
Gemma 4 Requiere build b8665+ para ejecución local Al desplegar localmente, verifica la versión
Todos los modelos (nivel gratuito) 40 RPM, 1000 créditos al registrarse Rate limiting + backoff exponencial para errores 429

Resumen

Yo lo formulo así: elegir el modelo correcto en NVIDIA NIM no se trata de encontrar el "mejor" modelo, sino más bien de descomponer correctamente las tareas y asignar un modelo especializado a cada rol en el sistema.

Tres principios clave que utilizo en la práctica:

  1. No uso un modelo pesado donde uno ligero es suficiente. Gemma 4 para resúmenes en lugar de Nemotron Ultra no es un compromiso, sino una decisión arquitectónicamente correcta.
  2. Separo la elección del modelo de la lógica de negocio. Una configuración de modelo centralizada me permite cambiar el modelo sin refactorizar el código principal del sistema.
  3. Tengo en cuenta los comportamientos específicos del modelo desde el principio. Los modelos de pensamiento, los diferentes formatos de llamada a herramientas, las diferencias de tokenizador son cosas que inevitablemente aparecen en producción, y es mejor incorporarlas en la arquitectura de antemano.

Fuentes