Cap 27: Preguntas de Práctica — Simulacro del Examen
Cap 27: Preguntas de Práctica — Simulacro del Examen
El examen Claude Certified Architect – Foundations presenta 4 de 6 escenarios al azar. Cada escenario agrupa múltiples preguntas alrededor de un caso de uso real. Este simulacro cubre los 6 escenarios posibles más preguntas de API fundamentals.
graph LR
A[6 Escenarios Posibles] --> B[El examen elige 4]
B --> C[~8-10 preguntas por sesión]
D[Fundamentos API] --> C
Escenario 1: Customer Support Resolution Agent
Contexto: Estás construyendo un agente de soporte al cliente. Las herramientas disponibles son get_customer, lookup_order, process_refund y escalate_to_human. El objetivo es resolver el 80%+ en el primer contacto.
Pregunta 1: Tu agente de soporte llama a la API y recibe stop_reason: "tool_use". ¿Cuál es el siguiente paso correcto en el agentic loop?
A) Enviar el resultado de la herramienta como un nuevo mensaje user con role: "user" y content de tipo tool_result
B) Ignorar el resultado y llamar a la API de nuevo con el mismo prompt
C) Retornar el texto parcial al usuario inmediatamente
D) Finalizar el loop porque el modelo terminó de pensar
Ver respuesta
Respuesta correcta: A)
Por qué es correcto: Cuando stop_reason es tool_use, el modelo está esperando que la aplicación ejecute la herramienta y devuelva el resultado. El contrato del agentic loop requiere agregar el bloque tool_result al historial con role: "user" antes de llamar de nuevo a la API.
Por qué las otras opciones son incorrectas:
- B) Llamar de nuevo sin el resultado causa que el modelo repita la misma llamada a herramienta indefinidamente.
- C)
stop_reason: "tool_use"nunca produce texto parcial listo para el usuario — el modelo está a mitad de su razonamiento. - D) Solo
stop_reason: "end_turn"o"max_tokens"indica que el modelo terminó."tool_use"es una pausa explícita para ejecución de herramienta.
Pregunta 2: Quieres asegurarte de que el agente siempre use una herramienta (cualquiera del conjunto) en cada turno, en lugar de responder solo con texto. ¿Qué configuración usas?
A) tool_choice: { type: "auto" }
B) tool_choice: { type: "any" }
C) tool_choice: { type: "tool", name: "get_customer" }
D) Incluir instrucción en el system prompt: “Siempre usa una herramienta”
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: tool_choice: { type: "any" } obliga al modelo a llamar al menos una herramienta del conjunto disponible, sin importar cuál. Es la forma de garantizar uso de herramienta sin forzar una herramienta específica.
Por qué las otras opciones son incorrectas:
- A)
"auto"permite al modelo decidir si usa o no una herramienta — puede responder solo con texto. - C)
{ type: "tool", name: "..." }fuerza una herramienta específica, no “cualquier herramienta”. - D) Las instrucciones en el system prompt no garantizan comportamiento estructural; el modelo puede ignorarlas bajo ciertos contextos. Para garantías de comportamiento se usan parámetros de API.
Pregunta 3: Debes garantizar que process_refund nunca se ejecute si get_customer no se llamó primero en la misma sesión. ¿Cuál es la mejor estrategia?
A) Incluir en el system prompt: “Llama a get_customer antes de process_refund”
B) Usar un hook PreToolUse que verifique el historial de herramientas del turno y bloquee process_refund si get_customer no está registrado
C) Quitar process_refund de las herramientas disponibles y agregarla dinámicamente después de que get_customer responda
D) Usar tool_choice: { type: "tool", name: "get_customer" } siempre
Ver respuesta
Respuesta correcta: C)
Por qué es correcto: El patrón más robusto para imponer orden de herramientas es el control dinámico del conjunto de herramientas disponibles. Hasta que get_customer no responda exitosamente, process_refund simplemente no existe para el modelo — es imposible que la llame. Esto garantiza el invariante sin depender de instrucciones que el modelo podría ignorar.
Por qué las otras opciones son incorrectas:
- A) Instrucciones en system prompt son guías, no restricciones estructurales. Un modelo puede inferir que el cliente es conocido sin llamar explícitamente a
get_customer. - B) Los hooks
PreToolUseson válidos pero requieren estado compartido entre turnos, que es frágil en sesiones stateless. Además, el hook bloquea pero no redirige — el modelo puede quedar en un estado de error. - D) Forzar
get_customeren el primer turno no impide que el modelo llameprocess_refundantes en un turno posterior si las herramientas están todas disponibles.
Pregunta 4: Un cliente solicita un reembolso de $500. Tu política es requerir aprobación humana para reembolsos sobre $200. ¿Qué estructura en un hook PreToolUse bloquea correctamente esta ejecución?
A) El hook retorna exit code 1 con mensaje al stderr
B) El hook retorna exit code 0 con JSON en stdout que incluye hookSpecificOutput.permissionDecision: "deny" y permissionDecisionReason
C) El hook llama directamente a escalate_to_human antes de que Claude lo haga
D) El hook modifica el parámetro amount del tool call para reducirlo a $199
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: En PreToolUse, la forma estructurada de bloquear es devolver exit code 0 con un JSON en stdout cuyo hookSpecificOutput lleva hookEventName: "PreToolUse", permissionDecision: "deny" (valores posibles: allow, deny, ask, defer) y permissionDecisionReason con el motivo. Esa razón se comunica al modelo, que puede tomar la siguiente acción correcta (aquí, escalar).
La alternativa es salir con exit code 2 escribiendo la razón en stderr: con exit 2 el stdout y cualquier JSON se ignoran, y stderr es la razón del bloqueo. Desde v2.1.214, exit 2 con JSON inválido también bloquea usando stderr.
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "deny",
"permissionDecisionReason": "Reembolsos sobre $200 requieren aprobación humana"
}
}
Por qué las otras opciones son incorrectas:
- A) Exit code
1es un error no bloqueante: Claude Code lo reporta y continúa con la acción. Un hook de política debe usar la salida JSON conpermissionDecision: "deny"o exit2con stderr. - C) Un hook no debe ejecutar lógica de negocio por su cuenta — su rol es gate-keeping, no acción. Llamar herramientas desde hooks crea loops y efectos secundarios difíciles de rastrear.
- D) Modificar el input sí es un mecanismo soportado (
hookSpecificOutput.updatedInputenPreToolUse, yupdatedToolOutputenPostToolUse), pero bajar elamounta $199 es incorrecto porque evade el control de negocio: la operación real es de $500 y la política exige aprobación humana, no un monto reescrito silenciosamente.
Pregunta 5: El agente recibe la consulta: “Mi pedido lleva 3 semanas y nadie me responde, quiero hablar con una persona”. ¿Cuál es el criterio correcto para invocar escalate_to_human?
A) Siempre que el cliente use palabras negativas como “nadie” o “quiero” B) Cuando el cliente expresa explícitamente preferencia por atención humana, o cuando el agente detecta que no puede resolver el problema con las herramientas disponibles C) Solo cuando el agente falla en todas las herramientas disponibles después de 3 intentos D) Cuando el cliente menciona un período de tiempo mayor a 2 semanas
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: La escalación debe activarse por dos criterios claros: (1) preferencia explícita del cliente por atención humana y (2) incapacidad del agente para resolver con sus herramientas actuales. En este caso, el cliente dice “quiero hablar con una persona” — criterio 1 se cumple directamente.
Por qué las otras opciones son incorrectas:
- A) El análisis de sentimiento por palabras sueltas produce falsos positivos. “Quiero un reembolso” no requiere escalación humana.
- C) Esperar 3 fallos es demasiado tarde — el cliente ya expresó preferencia humana antes de cualquier intento.
- D) El tiempo de espera es un dato, no un criterio de escalación por sí solo. Puede resolverse automáticamente con
lookup_order.
Pregunta 6: Tu agente procesa 500 tickets diarios. Notas que el 40% de los casos el modelo llama a lookup_order antes de get_customer, generando errores porque lookup_order requiere el customer_id del resultado de get_customer. ¿Cuál es la causa raíz más probable?
A) El nivel de esfuerzo (output_config.effort) está en low
B) La descripción de get_customer no especifica que debe llamarse antes de lookup_order
C) lookup_order no tiene validación de inputs en su schema
D) El system prompt es demasiado largo
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El modelo infiere el orden de herramientas desde sus descripciones. Si get_customer no documenta explícitamente que es prerequisito de lookup_order, y si lookup_order no documenta que requiere el output de get_customer, el modelo tomará el orden que le parezca más lógico según el contexto del mensaje del usuario.
Por qué las otras opciones son incorrectas:
- A) El nivel de esfuerzo (
low | medium | high | xhigh | max, anidado enoutput_config.effort) regula cuánto razona el modelo, no la documentación del contrato entre herramientas: un 40% estable es un patrón sistemático, no falta de deliberación. Y el sampling (temperature,top_p,top_k) ya no es configurable en Fable 5, Opus 4.8 y Opus 4.7 (devuelve 400), mientras que Sonnet 5 rechaza cualquier valor no-default, así que tampoco es una palanca disponible. - C) La validación de inputs en el schema arroja un error después de que la herramienta es llamada, no previene que sea llamada en el orden incorrecto.
- D) Un system prompt largo puede afectar el seguimiento de instrucciones, pero si el problema es sistemático (40%), la causa más probable es la falta de documentación en las tool descriptions.
Escenario 2: Code Generation con Claude Code
Contexto: Tu equipo usa Claude Code para code review, refactoring y documentación automatizada, integrado en el pipeline de CI/CD.
Pregunta 7: Un desarrollador quiere que Claude refactorice un módulo crítico de 800 líneas antes de hacer commit. ¿Cuándo usar Plan Mode vs ejecución directa?
A) Plan Mode para cualquier tarea que tome más de 5 minutos B) Plan Mode cuando la tarea involucra múltiples archivos o cambios estructurales — para revisar el plan antes de que Claude modifique nada C) Ejecución directa siempre, porque Plan Mode agrega latencia innecesaria D) Plan Mode solo cuando el desarrollador no entiende el código
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Plan mode hace que Claude investigue y proponga un plan sin ejecutar ningún cambio. Se activa de tres formas: Shift+Tab (cicla los modos), --permission-mode plan al arrancar, o prefijando un único prompt con /plan. Mientras está activo la barra de estado muestra ⏸ plan mode on.
Con Ctrl+G se abre el plan en el editor para corregirlo antes de ejecutar. Al aprobarlo aparecen cuatro opciones: Yes, and use auto mode, Yes, manually approve edits, No, refine with Ultraplan on Claude Code on the web y No, keep planning; aceptar un plan además renombra la sesión automáticamente. Es ideal para cambios multi-archivo o estructurales donde el costo de revertir errores es alto.
Por qué las otras opciones son incorrectas:
- A) El tiempo no es el criterio — una tarea de 10 minutos en un solo archivo puede ejecutarse directamente. El criterio es el riesgo y la amplitud del cambio. La regla operativa de la documentación es: «If you could describe the diff in one sentence, skip the plan» (un typo, un log añadido o renombrar una variable se piden directo).
- C) Plan mode tiene un costo real (latencia y tokens) y por eso no se usa siempre, pero reduce el riesgo de cambios incorrectos en código crítico. Para un módulo de 800 líneas, el tradeoff lo favorece. Además, con auto mode disponible y
useAutoModeDuringPlanactivo (default), el clasificador aprueba los comandos de solo lectura de la fase de exploración sin preguntar. - D) Plan Mode es sobre control y revisión, no sobre la competencia del desarrollador.
Pregunta 8: Tienes un pipeline de CI que usa Claude para hacer code review de cada PR. ¿Cómo evitas que Claude revise código que él mismo generó en el mismo PR?
A) Agregar al system prompt: “No revises tu propio código” B) Filtrar en el pipeline los archivos modificados por commits con el autor “Claude” o con un marcador en el mensaje de commit C) Usar dos modelos diferentes — uno para generar, otro para revisar D) Solo usar Claude para revisión en ramas que no sean feature branches
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: La solución correcta es a nivel de orquestación del pipeline: rastrear qué commits y archivos fueron producidos por Claude (por autor git, tag en el mensaje de commit, o metadata) y excluirlos del conjunto de archivos que se envían a la revisión. Es una separación de responsabilidades implementada en la infraestructura, no en el prompt.
Por qué las otras opciones son incorrectas:
- A) Las instrucciones en el prompt no son confiables para restricciones de seguridad o integridad del proceso — el modelo no tiene acceso confiable a saber qué líneas escribió él.
- C) Dos modelos diferentes no resuelven el problema si ambos reciben el mismo diff — el segundo modelo tampoco sabe qué generó el primero.
- D) El problema ocurre en feature branches específicamente cuando se usa Claude para generar código. Excluir feature branches elimina el caso de uso completo.
Pregunta 9: ¿Cuál es el flag correcto para ejecutar Claude Code de forma no-interactiva en un job de CI/CD?
A) --silent
B) --no-interactive
C) --print (o -p)
D) --batch
Ver respuesta
Respuesta correcta: C)
Por qué es correcto: El flag --print (forma corta -p) hace que Claude Code imprima la respuesta y salga inmediatamente, sin modo interactivo. Es el flag estándar para uso headless en pipelines de CI/CD.
Por qué las otras opciones son incorrectas:
- A)
--silentno es un flag de Claude Code para modo no-interactivo. - B)
--no-interactiveno existe como flag en Claude Code (aunque el concepto suena intuitivo). - D)
--batchno es un flag de Claude Code.
Pregunta 10: Tu CLAUDE.md en el repositorio de la empresa define reglas de code style. ¿Qué debe incluir para que sea útil en el contexto de CI/CD?
A) Instrucciones solo para developers humanos — Claude no necesita CLAUDE.md en CI B) Reglas de style, convenciones de naming, patrones prohibidos, y contexto específico del dominio del negocio C) Solo las reglas de linting — Claude puede inferir el resto del código existente D) Credenciales de acceso a los sistemas internos para que Claude pueda hacer llamadas directas
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: CLAUDE.md es el mecanismo principal para dar contexto persistente a Claude. En CI/CD, Claude necesita conocer las convenciones del proyecto para que sus revisiones y generaciones sean consistentes con el estilo del equipo. Incluir reglas de style, convenciones, patrones prohibidos y contexto de dominio permite que Claude genere feedback relevante y no genérico.
Matiz importante para CI: que CLAUDE.md se cargue depende de cómo se invoque el CLI. La bandera --bare omite hooks, skills, plugins, MCP, auto memory y CLAUDE.md, y es justamente lo recomendado hoy para CI/SDK (será el default de -p en el futuro). Si el pipeline usa --bare, las convenciones deben inyectarse explícitamente con --append-system-prompt o dentro del propio prompt. Además, la verificación de trust está desactivada al correr con -p: un pipeline no conserva las mismas barreras de confianza que una sesión interactiva.
Por qué las otras opciones son incorrectas:
- A) La afirmación es doblemente errónea: el contenido de CLAUDE.md sirve tanto a humanos como a Claude, y la carga en CI no es un hecho automático sino una decisión de configuración (con
--bareno se carga; sin--baresí se carga desde la raíz del proyecto). - C) Claude puede inferir algunos patrones del código, pero las convenciones explícitas son más confiables que la inferencia, especialmente para reglas de negocio.
- D) Nunca incluir credenciales en CLAUDE.md — es un archivo de texto versionado en git. Usar variables de entorno o sistemas de secretos.
Pregunta 11: En CI quieres que Claude use un comando personalizado /security-review. ¿Cómo se invoca en modo no-interactivo?
A) claude -p "/security-review $DIFF"
B) Los slash commands no funcionan en modo no-interactivo — deben convertirse en prompts directos
C) claude --command security-review --input "$DIFF"
D) claude --skill security-review "$DIFF"
Ver respuesta
Respuesta correcta: A)
Por qué es correcto: Los comandos personalizados son accesibles desde el modo --print / -p. El mensaje enviado a Claude puede contener el comando exactamente como se usaría en modo interactivo.
Dónde vive /security-review: los comandos personalizados y las skills se fusionaron. Tanto .claude/commands/security-review.md como .claude/skills/security-review/SKILL.md generan el mismo /security-review y comparten el mismo frontmatter (description, argument-hint, allowed-tools, model, effort, …). Si existieran ambos con el mismo nombre, gana la skill. Ojo con el pipeline: si se corre con --bare, ni comandos ni skills se cargan.
Por qué las otras opciones son incorrectas:
- B) Esta afirmación es incorrecta — los comandos sí funcionan en modo
--print. - C)
--commandno es un flag de Claude Code. - D)
--skillno es un flag de Claude Code.
Escenario 3: Multi-Agent Research System
Contexto: Sistema con un agente coordinador y cuatro agentes especializados: web-search-agent, document-analysis-agent, synthesis-agent y report-agent.
graph TD
CO[Coordinador] --> WS[web-search-agent]
CO --> DA[document-analysis-agent]
WS --> SY[synthesis-agent]
DA --> SY
SY --> RE[report-agent]
Pregunta 12: ¿Por qué synthesis-agent NO debe tener acceso a la herramienta WebSearch?
A) Por razones de costo — WebSearch es la herramienta más cara B) Para mantener separación de responsabilidades: si synthesis-agent puede buscar, puede alterar su síntesis con datos no validados por web-search-agent C) Porque WebSearch y synthesis son incompatibles técnicamente D) Para reducir la latencia del pipeline
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El principio de least-privilege en sistemas multi-agente dicta que cada agente solo debe tener las herramientas necesarias para su función. Si synthesis-agent tiene WebSearch, puede agregar información que no pasó por el proceso de validación y deduplicación de web-search-agent, comprometiendo la calidad y trazabilidad de los datos.
Aclaración crítica: en Claude Code, recortar el campo tools de un subagente no es una frontera de seguridad. La documentación es explícita: «subagents run in the same process as the parent session and use the same sandbox configuration». Su valor es aislamiento de contexto y restricción de herramientas para mejorar la calidad de la síntesis, no contención de un agente hostil. Para un límite duro se usa el sistema de permisos — por ejemplo permissions.deny con Agent(synthesis-agent) para inhabilitar el subagente por completo, o una regla deny sobre la herramienta.
Por qué las otras opciones son incorrectas:
- A) El costo es una consideración secundaria, no la razón arquitectural principal.
- C) No hay incompatibilidad técnica — es una decisión de diseño deliberada.
- D) La latencia podría reducirse, pero no es la justificación correcta para esta restricción arquitectural.
Pregunta 13: web-search-agent encontró 15 artículos relevantes. ¿Cuál es la mejor forma de pasar estos findings a synthesis-agent?
A) Pasar las URLs y dejar que synthesis-agent las descargue por su cuenta
B) Incluir los findings como texto en el mensaje de la herramienta Agent con metadata de provenance (fuente, fecha, relevance score)
C) Guardar en una base de datos compartida y pasar solo el ID de la query
D) Serializar los objetos Python/TypeScript y pasarlos como base64
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El patrón correcto en sistemas multi-agente es pasar los datos estructurados directamente en el contexto del mensaje de invocación del subagente, incluyendo metadata de provenance. La herramienta con la que se invocan subagentes se llama Agent (y hay que incluir "Agent" en allowedTools para autoaprobarla). Esto mantiene el sistema stateless (cada agente tiene todo lo que necesita en su contexto), y el provenance metadata permite que synthesis-agent atribuya correctamente las fuentes en el reporte final.
Por qué las otras opciones son incorrectas:
- A) Que synthesis-agent descargue las URLs viola la separación de responsabilidades — web-search ya validó y procesó el contenido.
- C) Una base de datos compartida introduce estado mutable compartido, que crea acoplamiento y problemas de concurrencia en sistemas de agentes paralelos.
- D) Serializar objetos en base64 no es un patrón de inter-agente — es opaco, difícil de depurar y no portable.
Pregunta 14: web-search-agent reporta que la tasa de desempleo es 4.2%, pero document-analysis-agent encontró en un informe oficial que es 3.8%. ¿Qué debe hacer el coordinador?
A) Usar el dato más reciente automáticamente B) Usar el promedio (4.0%) C) Registrar la contradicción en el reporte con ambas fuentes y sus fechas, y marcar el dato como “disputed” D) Pedirle a synthesis-agent que decida cuál es correcto
Ver respuesta
Respuesta correcta: C)
Por qué es correcto: La integridad de los datos es más importante que la comodidad de tener un solo número. El coordinador debe preservar ambas versiones con su provenance, marcar el conflicto explícitamente, y dejar que el reporte final refleje la incertidumbre. Inventar un consenso (promedio) o elegir arbitrariamente uno sería desinformación.
Por qué las otras opciones son incorrectas:
- A) “Más reciente” puede ser el incorrecto — un artículo web podría estar desactualizado respecto a un informe oficial anterior.
- B) El promedio de cifras estadísticas es estadísticamente inválido y opaco — pierde el contexto de las fuentes originales.
- D)
synthesis-agentno tiene herramientas para determinar cuál fuente es más confiable — eso requiere contexto que el coordinador tiene.
Pregunta 15: El coordinador espera respuesta de document-analysis-agent desde hace 10 minutos. document-analysis-agent está esperando metadata del web-search-agent, que a su vez está esperando una confirmación del coordinador. ¿Qué tipo de problema es este y cómo se detecta?
A) Race condition — se detecta con locks distribuidos B) Deadlock — se detecta con un timeout centralizado en el coordinador y un grafo de dependencias de quién espera a quién C) Memory leak — se detecta monitoreando el uso de RAM de los agentes D) Starvation — se detecta midiendo el throughput de mensajes por minuto
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Un ciclo de espera circular entre agentes es un deadlock clásico. La detección requiere dos elementos: (1) timeouts para identificar que un agente no responde en el tiempo esperado, y (2) un grafo de dependencias que permita al coordinador detectar el ciclo (A espera B, B espera C, C espera A).
Por qué las otras opciones son incorrectas:
- A) Un race condition ocurre cuando múltiples agentes acceden a un recurso compartido simultáneamente — aquí el problema es la espera circular, no el acceso concurrente.
- C) Un memory leak es un problema de recursos de memoria, completamente diferente.
- D) Starvation ocurre cuando un agente nunca obtiene acceso a un recurso porque otros siempre tienen prioridad — no hay ciclo de espera.
Pregunta 16: ¿Qué información es crítica incluir en el provenance metadata de cada finding?
A) Solo la URL de la fuente B) URL, fecha de acceso, autor del agente que recolectó el dato, relevance score, y extracto textual exacto del que se derivó el dato C) Solo el nombre del agente y timestamp D) Hash SHA256 del contenido para verificar integridad
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El provenance metadata completo permite reproducibilidad, auditoría y detección de contradicciones. La URL identifica la fuente, la fecha de acceso permite detectar datos desactualizados, el autor del agente permite trazar errores, el relevance score permite priorizar en síntesis, y el extracto exacto evita distorsiones por parafraseo.
Por qué las otras opciones son incorrectas:
- A) Solo la URL no permite saber cuándo se accedió (el contenido puede haber cambiado), quién lo procesó, ni qué parte específica del documento es relevante.
- C) Nombre del agente y timestamp son necesarios pero insuficientes — sin la fuente original no hay forma de verificar el dato.
- D) El hash SHA256 verifica integridad del contenido descargado pero no aporta contexto semántico sobre la relevancia ni el origen del dato en el documento.
Escenario 4: Developer Productivity with Claude
Contexto: Un agente ayuda a ingenieros a explorar codebases desconocidos usando built-in tools (Read, Write, Edit, Bash, Glob, Grep) y MCP servers para sistemas internos.
Pregunta 17: Un ingeniero pregunta: “¿Dónde están definidos los endpoints de la API de pagos?” ¿Cuándo usar Grep vs Read para responder esto?
A) Siempre usar Read porque es más preciso
B) Usar Grep primero para encontrar archivos candidatos buscando patrones como rutas de pago; luego Read para leer los archivos identificados
C) Usar Bash con find para evitar limitaciones de Grep
D) Usar Glob con patrón **/*.ts y leer todos los archivos TypeScript
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El patrón eficiente es: Grep para búsqueda amplia de patrones en texto (encontrar archivos que mencionan “payment”, “/payments”, “PaymentController”, etc.) y luego Read para leer en detalle los archivos específicos identificados. Esto minimiza tokens consumidos y tiempo de ejecución.
Por qué las otras opciones son incorrectas:
- A)
Readrequiere saber qué archivo leer — no sirve para descubrimiento inicial en un codebase desconocido. - C)
Bashconfindes válido peroGrepes la herramienta correcta para búsqueda de contenido — evita la invocación de shell innecesaria. - D) Leer todos los archivos TypeScript en un codebase grande es extremadamente ineficiente en tokens y tiempo.
Pregunta 18: ¿Qué significa que un agente tenga “demasiadas tools” y cuál es el impacto?
A) El agente se vuelve más lento porque evalúa más opciones B) El modelo tiene dificultad para seleccionar la herramienta correcta, baja la precisión de tool selection, y crece la superficie de ataque y de permisos que hay que auditar C) Las herramientas extras se ignoran automáticamente sin impacto D) El API retorna error si hay más de 20 herramientas definidas
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Con muchas herramientas similares el modelo tiene dificultad para distinguir cuál es la más apropiada, y cada servidor extra amplía la superficie de ataque (contenido externo capaz de inducir prompt injection) y el conjunto de permisos que hay que revisar.
Lo que cambió respecto al consumo de contexto: en Claude Code el tool search está activo por defecto, así que las definiciones de herramientas MCP se difieren: al inicio solo entran los nombres de las herramientas y las instrucciones del servidor, y las definiciones completas se cargan bajo demanda mediante la herramienta ToolSearch. Se controla con ENABLE_TOOL_SEARCH (sin definir = todo diferido; auto = carga upfront si las definiciones caben en el 10% de la ventana; false = todo upfront) y hay exención por servidor o herramienta con alwaysLoad. En las mediciones de Anthropic, el Tool Search Tool con defer_loading: true bajó el arranque de ~72K a ~8,7K tokens y subió la precisión de selección de 79,5% a 88,1%.
Conclusión: el coste de arranque en tokens dejó de ser el problema principal; el impacto real es precisión de selección y superficie de ataque/permisos.
Por qué las otras opciones son incorrectas:
- A) Parcialmente verdadero (el modelo evalúa más opciones) pero incompleto — no menciona el impacto en precisión ni en superficie de riesgo.
- C) Las herramientas no se ignoran: siguen siendo invocables. Lo que sí ocurre con tool search es que sus definiciones no se cargan por adelantado, pero el modelo puede recuperarlas y llamarlas en cualquier momento.
- D) No existe un límite fijo de 20 herramientas en la API de Claude, ni tope fijo de herramientas por servidor MCP — el límite práctico es el presupuesto de contexto.
Pregunta 19: ¿Cuál es la diferencia entre built-in tools de Claude Code y custom tools?
A) Las built-in tools son más rápidas porque están optimizadas en hardware
B) Las built-in tools (Read, Write, Edit, Bash, Monitor, Glob, Grep, WebSearch, WebFetch, AskUserQuestion y Agent) están implementadas internamente por Claude Code con permisos gestionados por el sistema. Las custom tools son funciones definidas por el desarrollador en la API y ejecutadas por la aplicación cliente
C) No hay diferencia funcional — solo es nomenclatura
D) Las custom tools requieren MCP y las built-in no
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Esta es la distinción arquitectural fundamental. Las built-in tools de Claude Code son capacidades integradas en el CLI con gestión de permisos nativa (sandbox, allowlists, hooks). Las custom tools en la API son definidas por el desarrollador en el campo tools de la request y la aplicación cliente es responsable de ejecutarlas cuando el modelo las llama.
Detalle a recordar: la herramienta con la que se invocan subagentes es Agent (para autoaprobarla hay que incluir "Agent" en allowedTools). No confundirla con Task, que en el Claude Agent SDK reemplazó a TodoWrite para el tracking de tareas desde la v0.3.142 y no tiene relación con la delegación a subagentes.
Por qué las otras opciones son incorrectas:
- A) La diferencia no es de hardware sino de quién implementa y ejecuta la herramienta.
- C) La diferencia es fundamental: quién ejecuta, quién gestiona permisos, y dónde vive la implementación.
- D) MCP es un protocolo adicional para exponer herramientas externas. Las custom tools en la API no requieren MCP.
Pregunta 20: Tu empresa tiene un sistema interno de documentación en una intranet. ¿Cómo lo expones a Claude como herramienta de búsqueda?
A) Incluir toda la documentación en el system prompt
B) Configurar un MCP server que implemente el protocolo MCP sobre Streamable HTTP (type: "http") con autenticación, con un tool search_docs que hace queries a la intranet
C) Usar WebSearch y apuntar a la URL de la intranet
D) Copiar manualmente los documentos relevantes en cada prompt
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: MCP (Model Context Protocol) es el estándar para conectar sistemas externos a Claude. Un MCP server expone herramientas con schemas definidos que Claude puede llamar. Para una intranet privada, el patrón correcto es Streamable HTTP con autenticación.
Los cuatro transportes disponibles:
| Transporte | Uso | Notas |
|---|---|---|
stdio | Servidores locales | Default si el entry no declara type |
http | Servidores remotos | Streamable HTTP, el recomendado; acepta streamable-http como alias |
sse | — | DEPRECADO |
ws | WebSocket | Solo configurable vía .mcp.json o claude mcp add-json, no con --transport |
Un entry con url pero sin type es error de configuración: se omite y se reporta MCP server "<name>" has a "url" but no "type".
Autenticación: para OAuth 2.0 existe claude mcp login <name> desde la shell (v2.1.186+), con --no-browser para entornos sin display y --client-id/--client-secret para credenciales preconfiguradas; el secreto se guarda en el keychain del sistema. Para esquemas no-OAuth típicos de intranet (Kerberos, SSO interno, tokens efímeros) se usa headersHelper: un comando que escribe un objeto JSON de headers en stdout y se ejecuta en cada conexión.
Por qué las otras opciones son incorrectas:
- A) Incluir toda la documentación en el system prompt no escala (límite de context window) y es estático.
- C)
WebSearches para internet público — no tiene acceso a intranets privadas. - D) Copiar manualmente es inviable para uso sistemático y rompe el propósito de la automatización.
Pregunta 21: En el Ralph Loop (tarea autónoma de larga duración), un agente lleva 45 minutos ejecutando y no ha reportado progreso. ¿Qué mecanismo debería haber implementado el diseñador del sistema?
A) Un cron job que reinicia el agente cada 30 minutos
B) Checkpoints periódicos con git commit y heartbeat signals al coordinador, con un watchdog que detecte ausencia de heartbeat
C) Un timeout global de 60 minutos con kill automático
D) Logs en stdout cada 5 minutos
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El Ralph Loop requiere mecanismos de observabilidad y recuperación: checkpoints en git para poder reanudar desde el último estado conocido si el agente falla, y heartbeat signals para que el coordinador sepa que el agente está vivo y progresando. Un watchdog que detecte silencio puede decidir si relanzar o escalar al usuario.
Por qué las otras opciones son incorrectas:
- A) Reiniciar cada 30 minutos sin checkpoints pierde todo el progreso acumulado.
- C) Un timeout global sin checkpoints es un kill ciego — pierde trabajo y no proporciona información sobre dónde falló.
- D) Los logs son para observabilidad humana, no para orquestación automatizada. No permiten recuperación ni detección programática de bloqueos.
Escenario 5: Claude Code for Continuous Integration
Contexto: Claude Code automatiza code review, genera tests y da feedback en PRs. El equipo tiene 20 desarrolladores y 50+ PRs por semana.
Pregunta 22: El output del code review de Claude se procesa automáticamente para crear comentarios en GitHub. ¿Qué output format usar?
A) Texto markdown libre — GitHub lo renderiza bien
B) --output-format json para que el pipeline pueda parsear estructuralmente issues, severidad y ubicación en el código
C) HTML, para máxima compatibilidad con la UI de GitHub
D) YAML, porque es más legible que JSON
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Para que una máquina procese el output (crear comentarios con línea de código, severidad, categoría), el formato estructurado JSON es obligatorio. --output-format json en Claude Code produce output parseble que el pipeline puede mapear a la API de comentarios de GitHub. El texto libre requiere parsing frágil con regex.
Opciones headless relacionadas que conviene conocer:
--output-format text | json | stream-json;stream-jsonrequiere--verbose(y--include-partial-messagessi se quieren tokens parciales).--json-schemafija un JSON Schema para la respuesta y entrega el resultado validado en el campostructured_output: es la forma más robusta de garantizar la forma exacta del review, mejor que confiar en que el texto del modelo sea JSON válido.--bareomite hooks, skills, plugins, MCP, auto memory y CLAUDE.md; es lo recomendado para CI/SDK y será el default de-p.- El stdin por pipe está limitado a 10MB (desde v2.1.128), relevante si se canaliza el diff completo de un PR grande.
- Ante
SIGTERMel proceso sale con código 143: el job de CI debe distinguirlo de un fallo de review.
Por qué las otras opciones son incorrectas:
- A) El texto markdown libre es adecuado para consumo humano, no para parsing programático confiable.
- C) HTML no es válido como output de Claude Code y la API de GitHub no acepta HTML en comentarios programáticos.
- D) YAML es legible para humanos pero menos universal como formato de inter-operación de APIs que JSON.
Pregunta 23: El equipo comienza a ignorar los comentarios automáticos de Claude porque hay demasiados falsos positivos (señala problemas que no son problemas). ¿Cuál es la estrategia correcta?
A) Desactivar el sistema hasta que mejore el modelo base
B) Definir criterios de reporte explícitos y binarios en el prompt: Claude solo comenta si el issue cumple condiciones específicas y verificables, no opiniones de estilo
C) Subir el nivel de esfuerzo a max para que el modelo razone más sobre cada hallazgo
D) Reducir el número de PRs que Claude revisa por semana
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Los falsos positivos provienen de criterios ambiguos o subjetivos en el prompt. La solución es redefinir el prompt con criterios binarios y verificables: “reportar si: (1) hay SQL sin parámetros parametrizados, (2) hay credenciales hardcodeadas, (3) hay manejo de errores ausente en llamadas de red”. Criterios precisos = menos falsos positivos.
Por qué las otras opciones son incorrectas:
- A) Desactivar es la solución más costosa — pierde el valor del sistema en lugar de corregirlo.
- C) Más esfuerzo (
output_config.effortenxhighomax) hace que el modelo delibere más, pero sobre los mismos criterios ambiguos: razonar más profundamente sobre “busca problemas” produce más hallazgos marginales, no menos falsos positivos. El esfuerzo no sustituye a una definición precisa de qué cuenta como issue. Y ajustar el sampling tampoco es opción:temperature,top_pytop_kfueron eliminados en Fable 5, Opus 4.8 y Opus 4.7 (devuelven 400), y Sonnet 5 rechaza cualquier valor no-default. - D) Reducir el volumen no resuelve la calidad — si el 30% son falsos positivos, el problema persiste independiente del volumen.
Pregunta 24: Quieres que Claude genere siempre comentarios de seguridad en el formato exacto que requiere tu herramienta de gestión de vulnerabilidades. ¿Qué técnica de prompting usas?
A) Describir el formato en texto: “El formato debe ser JSON con campos id, severity, description”
B) Few-shot examples: incluir 2-3 ejemplos de input + output correcto en el formato exacto
C) Pedir al modelo que invente su propio formato y luego normalizarlo
D) Prellenar el turno assistant final con { para obligar al modelo a continuar en JSON
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Few-shot examples son más efectivos que instrucciones textuales para formatos exactos. Ver el output esperado directamente en el prompt permite al modelo replicar el formato con alta fidelidad, incluyendo detalles sutiles de estructura que son difíciles de describir en texto.
Complemento con garantía dura: cuando el formato debe cumplirse siempre, el prompting se refuerza con structured outputs (output_config.format = {"type": "json_schema", "schema": {…}}), que vincula el output al schema en lugar de confiar en la imitación. En Claude Code headless el equivalente es --json-schema, que entrega el resultado en structured_output.
Por qué las otras opciones son incorrectas:
- A) Describir el formato en texto es menos confiable que mostrarlo — los modelos son mejores imitando que siguiendo descripciones abstractas.
- C) Pedirle al modelo que invente su propio formato requiere normalización frágil y no garantiza compatibilidad.
- D) El prefill del turno
assistantfinal fue eliminado: devuelve 400 en Fable 5, Opus 4.6/4.7/4.8 y Sonnet 4.6/5. Los sustitutos oficiales son structured outputs e instrucciones en el system prompt. Tampoco sirve bajar el sampling:temperature,top_pytop_kya no son configurables en los modelos actuales.
Pregunta 25: ¿Por qué es importante el session isolation en CI? (Cada job de CI tiene su propia sesión de Claude sin memoria de jobs anteriores)
A) Para ahorrar costos de API — las sesiones aisladas no comparten tokens B) Para garantizar que el review de un PR no esté influenciado por el contexto de PRs anteriores, asegurando evaluaciones independientes y reproducibles C) Porque la API de Claude no permite múltiples sesiones simultáneas D) Para cumplir regulaciones de privacidad de código fuente
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Session isolation garantiza que cada PR es evaluado con el mismo contexto limpio (solo el system prompt + el código del PR), sin contaminación de evaluaciones anteriores. Esto hace los resultados reproducibles (el mismo PR siempre produce el mismo review) y justos (un PR buggy anterior no afecta la evaluación del siguiente).
Cómo se materializa en el CLI: además de no reutilizar sesiones (--continue / --resume quedan fuera, y existe --no-session-persistence), la palanca fuerte es --bare, que omite hooks, skills, plugins, MCP, auto memory y CLAUDE.md. La auto memory es especialmente relevante aquí: está activada por defecto y Claude escribe notas propias en ~/.claude/projects/<project>/memory/ que se recargarían en la siguiente ejecución, introduciendo exactamente la contaminación entre jobs que se quiere evitar.
Por qué las otras opciones son incorrectas:
- A) La API de Claude es stateless por defecto — no hay estado que se acumule entre llamadas separadas. El costo se determina por tokens, no por sesiones.
- C) La API sí permite múltiples sesiones simultáneas.
- D) Privacidad es una consideración válida pero no es la razón primaria para session isolation en CI.
Pregunta 26: ¿Qué diferencia hay entre un criterio de security review “vago” vs “categórico” y por qué importa?
A) Un criterio categórico es más largo y detallado B) Un criterio vago (“busca problemas de seguridad”) deja la interpretación al modelo, generando inconsistencia. Un criterio categórico (“reportar si hay: SQL sin sanitizar, credenciales en código, eval() con input de usuario”) produce resultados deterministas y auditables C) Los criterios vagos son mejores para modelos más inteligentes D) La diferencia solo importa cuando el modelo corre con un nivel de esfuerzo bajo
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Los criterios vagos producen resultados que varían según el contexto, el tono del código y el estado interno del modelo. Los criterios categóricos (listas explícitas de condiciones binarias) son verificables: el modelo puede responder “sí/no” para cada criterio de forma consistente. En un sistema de CI con 50+ PRs semanales, la inconsistencia destruye la confianza del equipo.
Por qué las otras opciones son incorrectas:
- A) La longitud no determina la calidad del criterio — un criterio largo puede seguir siendo vago.
- C) Los modelos más inteligentes se benefician igualmente de criterios explícitos — la ambigüedad introduce variabilidad independiente de la inteligencia del modelo.
- D) El nivel de esfuerzo no rescata un criterio vago: con
effort: maxel modelo delibera más sobre una definición ambigua y sigue produciendo interpretaciones inconsistentes entre ejecuciones y entre versiones del modelo. Tampoco existe ya la palanca de sampling (temperature/top_p/top_k) para “estabilizar” la salida.
Escenario 6: Structured Data Extraction
Contexto: Sistema que extrae datos de documentos no estructurados (PDFs, emails, contratos) usando JSON schemas, valida resultados y mantiene alta precisión.
Pregunta 27: ¿Cuál es la vía canónica para garantizar que la extracción de un contrato salga conforme a un JSON schema, en lugar de pedir “responde en JSON” en el prompt?
A) Prellenar el turno assistant final con { para que el modelo continúe en JSON
B) Usar structured outputs: output_config.format = {"type": "json_schema", "schema": {…}}, que vincula la respuesta al schema en lugar de dejarla a discreción del modelo
C) Pedir JSON en el prompt y validar después con un parser, reintentando hasta que salga bien
D) Definir el schema en el system prompt como texto y confiar en few-shot examples
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Structured outputs es GA y es la respuesta canónica para extracción estructurada: se declara output_config.format con {"type": "json_schema", "schema": {…}} y la respuesta queda vinculada al schema. Si el schema define que amount es number, el modelo no devuelve una string. Con instrucciones en el prompt, el modelo tiene discreción de generar cualquier texto — puede producir JSON válido o no, con o sin los campos correctos.
Notas de migración: el antiguo output_format y la cabecera beta structured-outputs-2025-11-13 solo funcionan durante un periodo de transición; escribir código nuevo contra ellos es apostar a algo que desaparece.
Complemento con tool_use: cuando la extracción ocurre dentro de un agentic loop y el resultado se entrega como llamada a herramienta, el equivalente es marcar la definición de la tool con strict: true como campo top-level, lo que exige que el schema declare additionalProperties: false y required. Ambos mecanismos comparten la misma idea: mover la garantía del prompt al contrato.
En Claude Code headless, la forma equivalente es --json-schema, que entrega el resultado validado en el campo structured_output.
Por qué las otras opciones son incorrectas:
- A) El prefill del turno
assistantfinal fue eliminado: devuelve 400 en Fable 5, Opus 4.6/4.7/4.8 y Sonnet 4.6/5. El sustituto oficial es precisamente structured outputs. - C) Validar y reintentar es un fallback razonable frente a errores semánticos, pero no es la vía canónica para garantizar la forma: paga tokens y latencia por cada intento fallido de algo que el contrato del schema ya resuelve de entrada.
- D) Describir el schema en texto y mostrar ejemplos mejora la probabilidad de acierto, pero sigue siendo persuasión, no garantía: no hay validación que impida un campo faltante o un tipo equivocado.
Pregunta 28: Tu sistema extrae datos de contratos y a veces falla. ¿Cuál de estos errores es “retryable” (vale la pena reintentar) vs “non-retryable”?
A) Error HTTP 429 (rate limit): retryable. Error de validación porque el campo fecha_contrato contiene “no especificado”: non-retryable con el mismo prompt
B) Todos los errores son retryable — solo es cuestión de esperar
C) Solo los errores HTTP son retryable — los errores de schema nunca se resuelven
D) Los errores de validación son siempre retryable con backoff exponencial
Ver respuesta
Respuesta correcta: A)
Por qué es correcto: Error 429 es un problema transitorio de rate limiting — el dato existe, el modelo puede extraerlo, solo hay que esperar y reintentar. Un error de validación donde fecha_contrato contiene “no especificado” indica que el documento genuinamente no contiene esa fecha — reintentar con el mismo prompt produce el mismo resultado. La acción correcta es registrar el campo como null o manejar la ausencia.
Por qué las otras opciones son incorrectas:
- B) Reintentar errores non-retryable es costoso e inútil — consume API budget y produce el mismo resultado.
- C) Los errores de schema pueden ser retryables si hay ambigüedad en el documento o si el prompt se mejora — no son categoricamente non-retryable.
- D) Backoff exponencial es la estrategia correcta para 429, no para errores de validación semántica.
Pregunta 29: ¿Cómo implementar confidence scoring para la extracción de un campo?
A) Dividir el número de campos extraídos entre el número de campos esperados
B) Agregar un campo _confidence en el schema de la herramienta donde el modelo reporta su nivel de certeza (high/medium/low) para cada valor extraído, basado en si el texto fuente es explícito, implícito o ausente
C) Contar las veces que el mismo valor aparece en el documento
D) Usar la probabilidad de los tokens del output (logprobs)
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El enfoque más práctico es incluir _confidence como campo del schema y pedir al modelo que lo complete basado en evidencia textual: "high" si el valor está explícitamente en el texto, "medium" si se infiere, "low" si se asume. Esto aprovecha la capacidad del modelo de razonar sobre su propia incertidumbre.
Por qué las otras opciones son incorrectas:
- A) Contar campos extraídos mide completitud, no confianza en la exactitud de cada valor.
- C) La frecuencia de aparición puede indicar relevancia pero no confianza en la extracción — un término que aparece 5 veces puede seguir siendo ambiguo.
- D) Logprobs son una señal de confianza a nivel token, no a nivel semántico de campo. Requieren acceso a logprobs (que no siempre está disponible) y su interpretación es compleja.
Pregunta 30: ¿Qué es el problema “lost in the middle” y cómo afecta la extracción de documentos largos?
A) El modelo olvida el system prompt cuando el contexto es muy largo B) Los modelos tienen menor atención a información ubicada en el centro de un documento largo, comparada con el inicio y el final — datos críticos en las páginas intermedias pueden ser extraídos incorrectamente o ignorados C) La API pierde los tokens del medio cuando el documento supera el context window D) El JSON schema se corrompe cuando hay demasiados campos
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: “Lost in the middle” es un fenómeno documentado en LLMs donde la atención es mayor al inicio y final del contexto. Para documentos largos, datos importantes en las páginas intermedias tienen mayor probabilidad de ser ignorados o mal extraídos. La solución es dividir documentos en chunks más pequeños, poner la información más crítica al inicio, o usar estructuras de extracción iterativa.
Por qué las otras opciones son incorrectas:
- A) El system prompt está al inicio del contexto — es la parte menos afectada por “lost in the middle”.
- C) La API no “pierde” tokens — si el documento supera el context window, la llamada falla con un error o requiere truncación explícita.
- D) El número de campos en el schema afecta el espacio en el context window pero no produce “lost in the middle”.
Pregunta 31: ¿Cuál es la estructura correcta de un validation loop para extracción de datos?
A) Extraer → si hay error → reintentar con el mismo prompt → máximo 3 veces B) Extraer → validar schema → si falla: enviar el error específico de validación como feedback al modelo en el siguiente turno junto con el output incorrecto → re-extraer → máximo N iteraciones con condición de salida C) Extraer → si hay error → escalar a humano inmediatamente D) Extraer → validar → si falla: cambiar el documento de entrada y reintentar
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El validation loop efectivo cierra el ciclo de feedback: el error específico (no solo “falló”) se envía al modelo para que corrija su output. “El campo monto contiene ‘$1.200’ pero debe ser un número: 1200” permite al modelo corregir exactamente ese problema. El límite de iteraciones previene loops infinitos, y la condición de salida puede ser éxito o agotar intentos.
Qué debe quedar dentro del loop y qué no: con structured outputs (output_config.format con json_schema) los fallos de forma — campo faltante, tipo equivocado, JSON malformado — desaparecen del loop porque la respuesta ya viene vinculada al schema. Lo mismo aplica a strict: true en la definición de una tool (que exige additionalProperties: false y required). El validation loop queda entonces para lo que ningún schema puede garantizar: la validación semántica (que el monto corresponda al contrato correcto, que la fecha sea coherente con la vigencia, que el campo no se haya inferido de una cláusula equivocada). Reservar las iteraciones para eso reduce costo y evita gastar reintentos en problemas ya resueltos por el contrato.
Por qué las otras opciones son incorrectas:
- A) Reintentar con el mismo prompt sin feedback produce el mismo error — el modelo no sabe qué corregir.
- C) Escalar inmediatamente ante cualquier error elimina el valor del sistema automatizado — muchos errores son corregibles.
- D) Cambiar el documento de entrada es incorrecto — el documento es el input fijo, no el que debe cambiar.
API Fundamentals
Conceptos de API que aparecen transversalmente en el examen.
Pregunta 32: ¿Cuándo usar Extended Thinking en lugar de un prompt estándar?
A) Siempre — Extended Thinking mejora todas las respuestas
B) Para problemas que requieren razonamiento multi-paso no obvio: matemáticas, lógica compleja, decisiones con múltiples variables interdependientes. No es necesario para tareas simples de extracción o clasificación
C) Se configura igual en todos los modelos vigentes, con thinking: {type: "enabled", budget_tokens: N}
D) Para reducir la latencia — el thinking es más rápido
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El thinking activa razonamiento explícito antes de la respuesta final. Agrega valor en problemas donde el razonamiento en pasos intermedios es crucial para la calidad del resultado. Para tareas simples (clasificar un email, extraer un número), agrega latencia y costo sin beneficio de calidad.
Cómo se configura hoy: el mecanismo actual es thinking: {type: "adaptive"} — el modelo modula por sí mismo cuánto razona según la dificultad, en vez de recibir un presupuesto fijo.
| Modelo | Comportamiento |
|---|---|
| Fable 5 | Thinking siempre activo; {type: "disabled"} devuelve 400 |
| Opus 4.8 / Opus 4.7 | Aceptan {type: "disabled"}; si se omite el campo, corren sin thinking |
| Sonnet 5 | Thinking adaptativo activado por defecto |
| Haiku 4.5 | Único de la tabla vigente que mantiene budget_tokens (no soporta adaptive) |
Gotcha del razonamiento visible: thinking.display es "omitted" por defecto en Fable 5, Opus 4.8/4.7 y Sonnet 5, así que los bloques thinking llegan vacíos. Para ver el razonamiento hay que pedirlo explícitamente: thinking: {type: "adaptive", display: "summarized"}. La cadena cruda nunca se devuelve.
Por qué las otras opciones son incorrectas:
- A) Usar thinking siempre aumenta el costo y latencia sin necesidad para tareas simples. En los modelos donde es intrínseco (Fable 5) la palanca de control ya no es encenderlo o apagarlo, sino el nivel de esfuerzo (
output_config.effort:low | medium | high | xhigh | max). - C)
thinking: {type: "enabled", budget_tokens: N}fue eliminado en Fable 5, Opus 4.8, Opus 4.7 y Sonnet 5 (devuelve 400); solo sigue vivo en Haiku 4.5 y, deprecado, en Opus 4.6 / Sonnet 4.6. La configuración no es uniforme entre modelos. - D) El thinking es más lento (genera tokens de razonamiento adicionales), no más rápido.
Pregunta 33: Tienes un system prompt de 10,000 tokens que es el mismo para todas las llamadas. ¿Cómo implementar prompt caching para reducir costos?
A) Usar cache_control: { type: "ephemeral" } en el bloque de contenido del system prompt — la primera llamada lo almacena, las siguientes reutilizan el cache
B) Guardar el system prompt en un archivo local y leerlo en cada llamada
C) Comprimir el system prompt con gzip antes de enviarlo
D) Dividir el system prompt en múltiples mensajes user pequeños
Ver respuesta
Respuesta correcta: A)
Por qué es correcto: Prompt caching en la API de Claude se activa agregando cache_control: { type: "ephemeral" } al bloque de contenido que quieres cachear. La primera llamada procesa y almacena el contenido en cache; las llamadas siguientes con el mismo contenido y cache_control pagan un costo reducido (cache read). Ideal para system prompts largos y estáticos.
Por qué las otras opciones son incorrectas:
- B) Guardar localmente no activa el cache de la API — el contenido se envía completo en cada llamada.
- C) La API no acepta contenido comprimido con gzip — requiere texto plano.
- D) Dividir en múltiples mensajes
userno activa el cache y rompe la semántica del system prompt.
Pregunta 34: Migras un pipeline de extracción que enviaba temperature: 0 a los modelos actuales. ¿Qué ocurre y cómo se dirige ahora el comportamiento?
A) Nada cambia: temperature: 0 sigue siendo la forma estándar de obtener consistencia
B) El parámetro de sampling fue eliminado: temperature, top_p y top_k devuelven 400 en Fable 5, Opus 4.8 y Opus 4.7, y Sonnet 5 rechaza cualquier valor no-default. El comportamiento se dirige por prompting y, para la forma del output, por structured outputs
C) El parámetro se ignora silenciosamente y la request se procesa igual
D) Hay que compensar bajando output_config.effort a low para recuperar el determinismo
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: El control de sampling desapareció de la API en los modelos actuales. Enviar temperature, top_p o top_k a Fable 5, Opus 4.8 u Opus 4.7 devuelve 400; Sonnet 5 acepta la request solo si el valor es el default y rechaza cualquier otro. La migración consiste en quitar el parámetro, no en ajustarlo.
Lo que reemplaza a la vieja receta de “bajar la temperatura”:
- Prompting para dirigir el comportamiento: criterios explícitos y binarios en vez de instrucciones que dejan margen de interpretación.
- Structured outputs (
output_config.format = {"type": "json_schema", "schema": {…}}) para garantizar la forma del output, que era la razón práctica por la que muchos pipelines usabantemperature: 0. Complementariamente,strict: truecomo campo top-level de la definición de una tool. output_config.effort(low | medium | high | xhigh | max) para regular cuánto delibera el modelo. No es un control de aleatoriedad, pero sí la palanca de calidad/costo que queda.
Conviene además recordar que el prefill del turno assistant final — el otro truco clásico para forzar formato — también fue eliminado y devuelve 400.
Por qué las otras opciones son incorrectas:
- A) Es exactamente lo que dejó de ser cierto: la request falla con 400 en los modelos donde el parámetro fue eliminado.
- C) No se ignora silenciosamente, que sería el peor caso para depurar: el error es explícito (400), lo cual permite detectar la migración pendiente en el pipeline.
- D) El nivel de esfuerzo no es un sustituto del sampling:
lowhace que el modelo delibere menos, lo que no aporta determinismo y puede degradar la calidad de la extracción. Para tareas de coding y agentes el nivel recomendado esxhigh.
Pregunta 35: ¿Cuáles son los modos de tool_choice y cuándo usar cada uno?
A) Solo hay dos modos: "auto" y "none"
B) {"type": "auto"} (default): el modelo decide si usa herramienta o responde con texto. {"type": "any"}: debe usar al menos una herramienta (la que elija). {"type": "tool", "name": "X"}: debe usar exactamente la herramienta X. {"type": "none"}: no puede usar ninguna. Además existe el modificador disable_parallel_tool_use: true
C) "auto" es siempre la mejor opción — los otros modos son para casos edge
D) "any" y "auto" son equivalentes
Ver respuesta
Respuesta correcta: B)
Por qué es correcto: Son cuatro formas documentadas, cada una con semántica y caso de uso propio:
| Forma | Semántica | Cuándo usarla |
|---|---|---|
{"type": "auto"} | Default: el modelo decide | Conversación general |
{"type": "any"} | Debe llamar alguna herramienta | Pasos del agentic loop donde el agente debe actuar, no conversar |
{"type": "tool", "name": "X"} | Debe llamar exactamente X | Flujos donde el siguiente paso está determinado (ej: siempre get_customer al abrir sesión) |
{"type": "none"} | No puede usar herramientas | Turnos de redacción o resumen final donde solo se quiere texto |
A esto se suma el modificador disable_parallel_tool_use: true, que impide que el modelo emita varias llamadas a herramienta en el mismo turno — útil cuando las herramientas tienen efectos secundarios que deben ordenarse.
Gotcha de plataforma: en Amazon Bedrock con Sonnet 5, un tool_choice forzado exige enviar además thinking: {type: "disabled"} en la misma request.
Por qué las otras opciones son incorrectas:
- A) Los dos modos que menciona sí existen (
"auto"y"none"), pero la enumeración es incompleta: faltan"any"y el modo de herramienta específica. - C)
"auto"no es siempre el mejor — en agentic loops,"any"o el modo específico dan control más preciso sobre el flujo de ejecución, y"none"es lo correcto para el turno de redacción final. - D)
"any"obliga a usar alguna herramienta;"auto"permite responder sin herramienta — no son equivalentes.
graph LR
A[35 Preguntas] --> B[6 Escenarios]
A --> C[API Fundamentals]
B --> D[Scenario 1: Customer Support - 6 Qs]
B --> E[Scenario 2: Claude Code CI - 5 Qs]
B --> F[Scenario 3: Multi-Agent - 5 Qs]
B --> G[Scenario 4: Dev Productivity - 5 Qs]
B --> H[Scenario 5: CI Integration - 5 Qs]
B --> I[Scenario 6: Data Extraction - 5 Qs]
C --> J["Thinking adaptativo, Caching, Sampling eliminado, tool_choice - 4 Qs"]
Siguiente: Auditoría de Configuración de Agentes
Volver al: Índice