Kimi K2 (Moonshot)
La familia K2 está construida alrededor de "razonamiento profundo a través de múltiples llamadas a herramientas para tareas altamente complejas", según su propia doc: primero descompone el problema paso a paso, después actúa con las herramientas disponibles. Todos comparten 256K (262.144) tokens de contexto.
Razonamiento y tool use
reasoning_content
El razonamiento aparece en el campo reasoning_content de la respuesta, separado del contenido final — igual que DeepSeek.
Preserved thinking (keep)
El parámetro keep controla si el razonamiento previo se retiene entre turnos. K2.7-code lo fuerza siempre en "all"; K2.6 lo deja opcional; K2.5 no lo soporta.
max_tokens ≥ 16.000
La doc de Moonshot recomienda un mínimo de 16K tokens de salida — un reflejo directo de que estos modelos están pensados para respuestas sustanciales con razonamiento real, no contestaciones cortas.
Pairing de tools estricto
Moonshot rechaza tool_calls que no tengan su respuesta contigua inmediatamente después — a diferencia de otros proveedores más permisivos con el orden de los mensajes en una conversación con herramientas.
Kimi K2.7 Code
kimi-k2.7-code
flagship · estándarEspecializado en generación de código, con razonamiento siempre activo (no se puede apagar) y keep:"all" forzado. El límite de generación por paso es ~49.152 tokens aunque el máximo oficial diga 262.144 — si necesitás un tope duro conservador, configuralo en ese valor.
Kimi K2.6
kimi-k2.6
flagship · estándarEl modelo de propósito general de la familia K2 — mismo estilo de razonamiento por pasos, pero con el pensamiento activable/desactivable vía thinking.type (default habilitado) y keep opcional.
Kimi K2.5
kimi-k2.5
balanced · estándarLa variante más liviana de la familia K2 — thinking activable/desactivable pero sin el parámetro keep.
Ejemplo: pairing correcto de tool calls
// ❌ Moonshot rechaza esto: el tool_result no sigue inmediato al tool_call
messages = [user, assistant(tool_call A), assistant(tool_call B), tool_result(A)]
// ✅ Cada tool_call va seguido por su tool_result antes de la siguiente
messages = [user, assistant(tool_call A), tool_result(A), assistant(tool_call B), tool_result(B)]