CoT vs thinking models: no pidas ‘piensa paso a paso’ al modelo que ya piensa
Resumen
El chain-of-thought visible es un prompt. El thinking de OpenAI, Claude y Gemini es un knob de runtime: tokens internos, cobrados como output, no se ven en crudo. OpenAI pide evitar ‘think step by step’. Claude deja CoT solo si thinking está off. Gemini cobra total_thought_tokens. Distinto de temperatura y de few-shot.

Qué resuelve
Esta pieza se queda en la decisión práctica: qué instalar, qué riesgo agrega y cómo aplicarlo sin romper operación.
Pedirle al agente “piensa paso a paso” no es lo mismo que encender un thinking model. El primero mete texto visible en el prompt. El segundo reserva tokens internos, los cobra como output y, en las APIs actuales, no te entrega la cadena cruda. Si mezclas ambos, pagas dos veces y a veces empeoras el resultado.
Esto no es temperatura y sampling: ese knob recorta la distribución del siguiente token. Tampoco es few-shot: los ejemplos enseñan el criterio. Ni prompt engineering: roles, formato y system. Aquí el objeto es dónde ocurre el razonamiento —en el prompt o en el runtime— y qué contrato firmar.
Contrato: thinking on → prompt corto, sin CoT. CoT visible → solo si thinking está off. Reservar presupuesto de output para los tokens internos.
Dos mecanismos, dos facturas
| Mecanismo | Dónde vive | Qué ves | Cómo se cobra | Cuándo |
|---|---|---|---|---|
| CoT de prompt | Texto que escribes (<thinking>, “step by step”) | Sale en la respuesta o en tags | Tokens de output visible | Modelo sin thinking, o thinking off |
| Reasoning / thinking | Knob de API (reasoning.effort, thinking, thinking_level) | Resumen opcional; crudo no | Tokens internos como output | Modelo de razonamiento / thinking |
OpenAI Reasoning (markdown canónico, HTTP 200 el 2026-09-06): Reasoning models use internal reasoning tokens before producing a response. Esos tokens are not visible via the API y are billed as output tokens. El objeto usage.output_tokens_details.reasoning_tokens te dice cuántos fueron. Recomiendan reservar al menos 25.000 tokens de output cuando empiezas a experimentar.
Reasoning best practices (HTTP 200 el 2026-09-06): Avoid chain-of-thought prompts. Since these models perform reasoning internally, prompting them to "think step by step" or "explain your reasoning" is unnecessary. A veces empeora. Prompts cortos y directos. Zero-shot primero; few-shot solo si el formato lo exige.
OpenAI: reasoning.effort, no un párrafo extra
El contrato en Responses es reasoning: { effort }. Valores según modelo: none, minimal, low, medium, high, xhigh, max. Menos effort = menos latencia y tokens; más effort = más calidad. El modelo adapta dentro del nivel: tareas simples gastan menos.
Reglas que rompen agentes:
- GPT-6 Astra no acepta
none:reasoning.effort: "none"→ HTTP 400. Function calling de Astra va por Responses, no Chat Completions. - Default no es universal.
gpt-5.5arranca enmedium. max_output_tokensincluye reasoning + texto visible. Si el techo pega antes de emitir,status: incompleteyincomplete_details.reason: max_output_tokens. Puedes pagar input + reasoning sin ver respuesta.- El crudo no se expone. Si quieres un resumen,
reasoning.summary: "auto"(opt-in). No lo trates como log de auditoría.
const response = await openai.responses.create({
model: "gpt-6-astra",
reasoning: { effort: "low", summary: "auto" },
max_output_tokens: 25000,
input: "Revisa este plan de migración y lista modos de fallo.",
});
// usage.output_tokens_details.reasoning_tokens — no está en output_text
GPT-5.6 añade reasoning.mode: standard (default) o pro. Mode y effort son independientes. pro hace más trabajo de modelo y se factura a las tarifas estándar; no es un tercer sampler.

Claude: thinking es objeto, CoT es fallback
Extended thinking (HTTP 200 el 2026-09-06): modo manual thinking: { type: "enabled", budget_tokens: N }.
- Mínimo 1.024. Menor → rechazo.
budget_tokens<max_tokens, salvo interleaved thinking (el presupuesto cubre todos los bloques del turno).- El presupuesto es target, no techo duro.
max_tokenssí es techo. Mideusage.output_tokens_details.thinking_tokens. - Deprecated en Claude 4.6 (la request aún pasa). 4.7+ lo rechaza con 400 (
thinking.type.enabled is not supported). Ahí toca adaptive thinking. - Cambiar
budget_tokensinvalida breakpoints de prompt cache: el presupuesto se renderiza en el prompt. Elige un número y no lo muevas en la conversación cacheada. - Presupuestos > 32k: Anthropic pide batch; requests largas pegan timeouts de red.
Prompting best practices (HTTP 200 el 2026-09-06): Prefer general instructions over prescriptive steps. “Think thoroughly” suele rendir más que un plan humano. Manual CoT es fallback cuando thinking está off: tags <thinking> / <answer>. En Opus 5, si apagas thinking, el modelo puede filtrar XML interno al output visible: no copies el patrón a ciegas. Con thinking off, Opus 4.5 es sensible a la palabra “think”; usa “consider / evaluate / reason through”.
Gemini: thinking_level y thought blocks
Gemini thinking (HTTP 200 el 2026-09-06): thinking dinámico por defecto. Lo controlas con generation_config.thinking_level. gemini-3.8-flash default on (medium); niveles low | medium | high. Otros snapshots añaden minimal. Precio = output tokens + thinking tokens (total_thought_tokens).
En modo stateless debes reenviar los bloques thought tal cual, con firma. No los recortes ni los reescribas: el backend los usa para continuar. Si cambias de modelo en la misma sesión, igual reenvías; la compatibilidad la resuelve el backend.
Matriz de decisión para un agente
| Superficie | Qué hacer | Qué no hacer |
|---|---|---|
| Clasificar / extraer / JSON corto | Modelo barato, thinking off o effort: none/minimal/low, structured outputs | CoT en el prompt “para que razone el JSON” |
| Tools + plan de 2–4 pasos | Thinking low/medium (OpenAI) o adaptive (Claude) o thinking_level: low | “Explica tu razonamiento” + effort high |
| Debug / research / coding largo | medium→high con eval; Claude adaptive + effort; Gemini high | Subir effort y CoT a la vez |
| Voz / chat de soporte | none/low o thinking off | Presupuesto 32k “por si acaso” |
El CoT visible sigue siendo útil en un caso: el modelo no tiene thinking, o lo apagaste a propósito (latencia, costo, o un clasificador). Entonces sí: tags, respuesta corta, y el razonamiento no entra al log de usuario.

Checklist de runtime
- Elige un mecanismo por superficie. No CoT + thinking.
- Pinnea el knob (
effort,budget_tokens,thinking_level) en config, no en el system prompt. - Reserva output: OpenAI ≥ 25k al empezar; Claude
max_tokens> budget; Gemini miratotal_thought_tokens. - Loguea
reasoning_tokens/thinking_tokens/total_thought_tokens. No loguees el crudo (no te lo dan; el resumen es opt-in). - No muevas el presupuesto mid-conversation si usas prompt caching.
- Evalúa calidad y costo. Si
highno gana en eval, baja. Ver evals prácticos y el curso.
FAQ
¿Puedo pedir un resumen del thinking para el humano? Sí, como producto aparte: OpenAI summary: "auto"; Claude entrega thinking blocks resumidos; Gemini thinking_summaries. No es el CoT del prompt.
¿El CoT visible sirve de eval? Solo si el modelo no piensa por API. Con thinking models el criterio de eval es el output y las tools, no la cadena interna.
¿Es lo mismo que temperatura 0? No. Temperatura 0 no apaga el thinking ni lo hace determinista. El sampler y el reasoning son ejes distintos.
Más en el hub de construcción de agentes y en seguridad, coste y operación.
Lecturas relacionadas
Sigue explorando AgentOps y otras piezas para builders.

Timeouts y cancelación de llamadas LLM: AbortSignal, no un setTimeout decorativo

Idempotencia en tools de agentes: una clave, un efecto

Temperatura y sampling en agentes: el knob no es creatividad
