[{"id": "g1", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "Un agente de análisis de documentos descubre que dos fuentes creíbles contienen estadísticas directamente contradictorias para una métrica clave: un informe gubernamental indica un crecimiento del 40%, mientras que un análisis de la industria indica un 12%. Ambas fuentes parecen creíbles, y la discrepancia podría afectar materialmente las conclusiones de la investigación. ¿Cómo debería el agente de análisis de documentos manejar esta situación de la forma más efectiva?", "question": "¿Cuál es el enfoque más efectivo?", "options": [{"letter": "A", "text": "Aplicar heurísticas de credibilidad para elegir el número más probablemente correcto, terminar el análisis con ese valor y agregar una nota al pie mencionando la discrepancia.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Incluir ambos números en la salida del análisis sin marcarlos como conflictivos, dejando que el agente de síntesis decida cuál usar según el contexto más amplio.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Detener el análisis y escalar inmediatamente al coordinador, pidiéndole que decida qué fuente es más autoritativa antes de continuar.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Completar el análisis con ambos números, anotar explícitamente el conflicto con atribución de fuente y dejar que el coordinador decida cómo reconciliar los datos antes de pasarlos a síntesis.", "correct": true, "explanation": "Este enfoque preserva la separación de responsabilidades: el agente de análisis completa su trabajo principal sin bloquearse, conserva ambos valores conflictivos con atribución clara y traslada correctamente la reconciliación al coordinador, que tiene un contexto más amplio."}], "correct": "D", "task_id": "5.6", "objective": "Preserve information provenance and handle uncertainty in multi-source synthesis", "group": "B"}, {"id": "g2", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "Los agentes de búsqueda web y de análisis de documentos completaron sus tareas y devolvieron resultados al coordinador. ¿Cuál es el siguiente paso para crear un informe de investigación integrado?", "question": "¿Cuál es el siguiente paso más apropiado?", "options": [{"letter": "A", "text": "Cada agente envía sus resultados directamente al agente redactor del informe, evitando al coordinador.", "correct": false, "explanation": ""}, {"letter": "B", "text": "El agente de análisis de documentos solicita los resultados de búsqueda web y los fusiona internamente.", "correct": false, "explanation": ""}, {"letter": "C", "text": "El coordinador pasa ambos conjuntos de resultados al agente de síntesis para una integración unificada.", "correct": true, "explanation": "En una arquitectura coordinador–subagente, el coordinador reenvía ambos conjuntos de resultados al agente de síntesis para una integración centralizada, preservando el control y asegurando una fusión de alta calidad."}, {"letter": "D", "text": "El coordinador concatena las salidas crudas de ambos agentes y las devuelve como resultado final.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "1.2", "objective": "Orchestrate multi-agent systems with coordinator-subagent patterns", "group": "A"}, {"id": "g3", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "Un subagente de análisis de documentos falla con frecuencia al procesar archivos PDF: algunos tienen secciones corruptas que disparan excepciones de parseo, otros están protegidos con contraseña, y a veces la biblioteca de parseo se cuelga con archivos grandes. Actualmente, cualquier excepción termina inmediatamente el subagente y devuelve un error al coordinador, que debe decidir si reintentar, omitir o fallar toda la tarea. Esto causa una participación excesiva del coordinador en el manejo rutinario de errores. ¿Qué mejora arquitectónica es más efectiva?", "question": "¿Qué mejora es más efectiva?", "options": [{"letter": "A", "text": "Crear un agente dedicado al manejo de errores que monitoree todos los fallos a través de una cola compartida y decida acciones de recuperación, enviando comandos de reinicio directamente a los subagentes.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Configurar el subagente para que siempre devuelva resultados parciales con estado de éxito, embebiendo detalles del error en metadatos; el coordinador trata todas las respuestas como exitosas.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Hacer que el coordinador valide todos los documentos antes de enviarlos al subagente, rechazando documentos que puedan causar fallos.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Implementar recuperación local en el subagente para fallos transitorios y escalar al coordinador solo los errores que no puede resolver, incluyendo pasos intentados y resultados parciales.", "correct": true, "explanation": "Maneja los errores en el nivel más bajo capaz de resolverlos. La recuperación local reduce la carga del coordinador mientras escala los problemas verdaderamente irrecuperables con contexto completo y progreso parcial."}], "correct": "D", "task_id": "2.2", "objective": "Implement structured error responses for MCP tools", "group": "J"}, {"id": "g4", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "Después de ejecutar el sistema sobre \"el impacto de la IA en las industrias creativas\", observas que cada subagente se completa con éxito: el agente de búsqueda web encuentra artículos relevantes, el agente de análisis de documentos los resume correctamente y el agente de síntesis produce un texto coherente. Sin embargo, los informes finales solo cubren artes visuales y omiten por completo música, literatura y cine. En los registros del coordinador, ves que descompuso el tema en tres subtareas: \"IA en arte digital\", \"IA en diseño gráfico\" e \"IA en fotografía\". ¿Cuál es la causa raíz más probable?", "question": "¿Cuál es la causa raíz más probable?", "options": [{"letter": "A", "text": "Al agente de síntesis le faltan instrucciones para detectar lagunas de cobertura.", "correct": false, "explanation": ""}, {"letter": "B", "text": "El agente de análisis de documentos filtra fuentes no visuales debido a criterios de relevancia demasiado estrictos.", "correct": false, "explanation": ""}, {"letter": "C", "text": "La descomposición de tareas del coordinador es demasiado estrecha, asignando a los subagentes trabajo que no cubre todas las áreas relevantes.", "correct": true, "explanation": "El coordinador descompuso un tema amplio solo en subtareas de artes visuales, omitiendo por completo música, literatura y cine. Como los subagentes ejecutaron sus asignaciones correctamente, la descomposición estrecha es la causa raíz evidente."}, {"letter": "D", "text": "Las consultas del agente de búsqueda web son insuficientes y deberían ampliarse para cubrir más sectores.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "1.6", "objective": "Design task decomposition strategies for complex workflows", "group": "A"}, {"id": "g5", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "El subagente de búsqueda web devuelve resultados solo para 3 de 5 categorías de fuentes solicitadas (sitios de competencia e informes de la industria tienen éxito, pero archivos de noticias y feeds sociales agotan el tiempo). El subagente de análisis de documentos procesa con éxito todos los documentos provistos. El subagente de síntesis debe producir un resumen a partir de entradas previas de calidad mixta. ¿Qué estrategia de propagación de errores es más efectiva?", "question": "¿Qué estrategia de propagación de errores es más efectiva?", "options": [{"letter": "A", "text": "Continuar la síntesis usando solo las fuentes exitosas y producir una salida sin mencionar qué datos no estaban disponibles.", "correct": false, "explanation": ""}, {"letter": "B", "text": "El subagente de síntesis devuelve un error al coordinador, disparando un reintento completo o el fallo de la tarea por datos incompletos.", "correct": false, "explanation": ""}, {"letter": "C", "text": "El subagente de síntesis pide al coordinador que reintente las fuentes con tiempo de espera agotado con un timeout más largo antes de iniciar la síntesis.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Estructurar la salida de síntesis con anotaciones de cobertura que indiquen qué conclusiones están bien respaldadas y dónde hay vacíos por fuentes no disponibles.", "correct": true, "explanation": "Las anotaciones de cobertura implementan una degradación elegante con transparencia, preservando el valor del trabajo completado mientras propagan la incertidumbre para permitir decisiones informadas sobre la confianza."}], "correct": "D", "task_id": "5.6", "objective": "Preserve information provenance and handle uncertainty in multi-source synthesis", "group": "B"}, {"id": "g6", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "El subagente de análisis de documentos encuentra un archivo PDF corrupto que no puede parsear. Al diseñar el manejo de errores del sistema, ¿cuál es la forma más efectiva de manejar este fallo?", "question": "¿Cuál es el enfoque más efectivo?", "options": [{"letter": "A", "text": "Devolver un error con contexto al agente coordinador, permitiéndole decidir cómo proceder.", "correct": true, "explanation": "Devolver un error con contexto al coordinador es lo más efectivo porque le permite tomar una decisión informada—omitir el archivo, intentar un método de parseo alternativo o notificar al usuario—mientras se mantiene visibilidad sobre el fallo."}, {"letter": "B", "text": "Omitir silenciosamente el documento corrupto y continuar procesando los archivos restantes para no interrumpir el flujo.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Reintentar automáticamente el parseo del documento tres veces con retroceso exponencial antes de reportar un fallo.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Lanzar una excepción que termine todo el flujo de investigación.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "2.2", "objective": "Implement structured error responses for MCP tools", "group": "J"}, {"id": "g8", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "Un colega propone que el agente de análisis de documentos envíe sus resultados directamente al agente de síntesis, evitando al coordinador. ¿Cuál es la principal ventaja de mantener al coordinador como hub central de toda la comunicación entre subagentes?", "question": "¿Cuál es la principal ventaja de mantener al coordinador como hub central?", "options": [{"letter": "A", "text": "El coordinador puede observar todas las interacciones, manejar errores uniformemente y decidir qué información debe recibir cada subagente.", "correct": true, "explanation": "El patrón coordinador proporciona visibilidad centralizada de todas las interacciones, manejo uniforme de errores en todo el sistema y control fino sobre qué información recibe cada subagente—estas son las ventajas principales de una topología de comunicación en estrella."}, {"letter": "B", "text": "El coordinador agrupa múltiples solicitudes a los subagentes, reduciendo el total de llamadas a la API y la latencia general.", "correct": false, "explanation": ""}, {"letter": "C", "text": "El enrutamiento a través del coordinador permite lógica de reintento automático que las llamadas directas entre agentes no pueden soportar.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Los subagentes usan memoria aislada, y la comunicación directa requeriría serialización compleja que solo el coordinador puede realizar.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "1.2", "objective": "Orchestrate multi-agent systems with coordinator-subagent patterns", "group": "A"}, {"id": "g9", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "El subagente de búsqueda web agota el tiempo de espera mientras investiga un tema complejo. Necesitas diseñar cómo se devuelve la información sobre este fallo al coordinador. ¿Qué enfoque de propagación de errores permite mejor una recuperación inteligente?", "question": "¿Qué enfoque de propagación de errores permite mejor una recuperación inteligente?", "options": [{"letter": "A", "text": "Devolver contexto de error estructurado al coordinador, incluyendo el tipo de fallo, la consulta ejecutada, cualquier resultado parcial y posibles enfoques alternativos.", "correct": true, "explanation": "Devolver contexto de error estructurado—incluyendo tipo de fallo, consulta ejecutada, resultados parciales y enfoques alternativos—da al coordinador todo lo necesario para tomar decisiones inteligentes de recuperación (por ejemplo, reintentar con una consulta modificada o continuar con resultados parciales). Preserva el máximo contexto para una toma de decisiones informada a nivel de coordinación."}, {"letter": "B", "text": "Capturar el timeout dentro del subagente y devolver un conjunto de resultados vacío marcado como exitoso.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Implementar reintentos automáticos con retroceso exponencial dentro del subagente, devolviendo solo un estado genérico \"búsqueda no disponible\" después de agotar los reintentos.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Propagar la excepción de timeout directamente al manejador de nivel superior, terminando todo el flujo de investigación.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "2.2", "objective": "Implement structured error responses for MCP tools", "group": "J"}, {"id": "g11", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "Mientras investigas un tema amplio, observas que el agente de búsqueda web y el agente de análisis de documentos investigan los mismos subtemas, llevando a una duplicación sustancial en sus salidas. El uso de tokens casi se duplica sin un aumento proporcional en la amplitud o profundidad de la investigación. ¿Cuál es la forma más efectiva de abordar esto?", "question": "¿Cuál es la forma más efectiva de abordar esto?", "options": [{"letter": "A", "text": "Permitir que ambos agentes terminen en paralelo y luego que el coordinador deduplique los resultados solapados antes de pasarlos al agente de síntesis.", "correct": false, "explanation": ""}, {"letter": "B", "text": "El coordinador particiona explícitamente el espacio de investigación antes de delegar, asignando a cada agente subtemas o tipos de fuente distintos.", "correct": true, "explanation": "Hacer que el coordinador particione explícitamente el espacio de investigación antes de delegar es lo más efectivo porque aborda la causa raíz—límites de tarea poco claros—antes de que comience cualquier trabajo. Preserva el paralelismo mientras previene esfuerzo duplicado y tokens desperdiciados."}, {"letter": "C", "text": "Implementar un mecanismo de estado compartido donde los agentes registran su área de enfoque actual para que otros agentes puedan evitar dinámicamente la duplicación durante la ejecución.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Cambiar a ejecución secuencial donde el análisis de documentos se ejecuta solo después de que la búsqueda web termina, usando los resultados de búsqueda como contexto para evitar duplicación.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "1.6", "objective": "Design task decomposition strategies for complex workflows", "group": "A"}, {"id": "g12", "domain": 1, "scenario": "Sistema de investigación multiagente", "situation": "Durante la investigación, el subagente de búsqueda web consulta tres categorías de fuentes con resultados diferentes: las bases de datos académicas devuelven 15 artículos relevantes, los informes de la industria devuelven \"0 resultados\" y las bases de datos de patentes devuelven \"Tiempo de conexión agotado\". Al diseñar la propagación de errores al coordinador, ¿qué enfoque permite las mejores decisiones de recuperación?", "question": "¿Qué enfoque permite las mejores decisiones de recuperación?", "options": [{"letter": "A", "text": "Agregar los resultados en una sola métrica de porcentaje de éxito (por ejemplo, \"67% de cobertura de fuentes\") con registros detallados disponibles a demanda.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Reportar tanto \"timeout\" como \"0 resultados\" como fallos que requieren intervención del coordinador.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Reintentar fallos transitorios internamente y reportar solo errores persistentes.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Distinguir fallos de acceso (timeout) que requieren una decisión de reintento de resultados vacíos válidos (\"0 resultados\") que representan consultas exitosas.", "correct": true, "explanation": "Un timeout (fallo de acceso) y \"0 resultados\" (resultado vacío válido) son resultados semánticamente diferentes que requieren respuestas diferentes. Distinguirlos permite al coordinador reintentar la base de datos de patentes mientras acepta los \"0 resultados\" de informes de la industria como un hallazgo válido e informativo."}], "correct": "D", "task_id": "2.2", "objective": "Implement structured error responses for MCP tools", "group": "J"}, {"id": "g47", "domain": 1, "scenario": "Agente de soporte al cliente", "situation": "Tu agente maneja solicitudes de un solo problema con 94% de precisión (por ejemplo, \"Necesito un reembolso para el pedido #1234\"). Pero cuando los clientes incluyen múltiples problemas en un solo mensaje (por ejemplo, \"Necesito un reembolso para el pedido #1234 y también quiero actualizar la dirección de envío del pedido #5678\"), la precisión de selección de herramientas baja al 58%. El agente generalmente resuelve solo un problema o mezcla parámetros entre solicitudes. ¿Qué enfoque mejora más efectivamente la confiabilidad para solicitudes de múltiples problemas?", "question": "¿Qué enfoque es más efectivo?", "options": [{"letter": "A", "text": "Implementar una capa de preprocesamiento que use una llamada de modelo separada para descomponer mensajes de múltiples problemas en solicitudes separadas, manejar cada una independientemente y fusionar resultados.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Combinar herramientas relacionadas en menos herramientas universales.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar ejemplos few-shot al prompt demostrando razonamiento correcto y secuenciación de herramientas para solicitudes de múltiples problemas.", "correct": true, "explanation": "Los ejemplos few-shot que demuestran razonamiento correcto y secuenciación de herramientas para solicitudes de múltiples problemas son los más efectivos porque el agente ya funciona bien en problemas únicos—lo que necesita es guía sobre el patrón para descomponer y enrutar múltiples problemas y mantener los parámetros separados."}, {"letter": "D", "text": "Implementar validación de respuesta que detecte respuestas incompletas y reprompte automáticamente al agente para resolver problemas omitidos.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "3.5", "objective": "Apply iterative refinement techniques for progressive improvement", "group": "I"}, {"id": "g48", "domain": 1, "scenario": "Agente de soporte al cliente", "situation": "Los registros de producción muestran que para solicitudes simples como \"reembolso para el pedido #1234\", tu agente resuelve el problema en 3–4 llamadas a herramientas con 91% de éxito. Pero para solicitudes complejas como \"Me cobraron dos veces, mi descuento no se aplicó y quiero cancelar\", el agente promedia 12+ llamadas a herramientas con solo 54% de éxito—a menudo investigando problemas secuencialmente y obteniendo datos de cliente redundantes para cada uno. ¿Qué cambio mejora más efectivamente el manejo de solicitudes complejas?", "question": "¿Qué cambio es más efectivo?", "options": [{"letter": "A", "text": "Agregar puntos de control explícitos de verificación entre etapas, requiriendo que el agente registre el progreso después de resolver cada problema antes de pasar al siguiente.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Reducir el número de herramientas combinando `get_customer`, `lookup_order` y herramientas relacionadas con facturación en una sola herramienta `investigate_issue`.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Descomponer la solicitud en problemas separados, luego investigar cada uno en paralelo usando contexto de cliente compartido antes de sintetizar una resolución final.", "correct": true, "explanation": "Descomponer en problemas separados e investigar en paralelo con contexto de cliente compartido corrige ambos problemas clave: elimina la recuperación de datos redundante reutilizando el contexto compartido entre problemas y reduce los bucles totales de llamadas a herramientas paralelizando la investigación antes de sintetizar una sola resolución."}, {"letter": "D", "text": "Agregar ejemplos few-shot al prompt del sistema demostrando secuencias ideales de llamadas a herramientas para varios escenarios de facturación multifacéticos.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "1.1", "objective": "Design and implement agentic loops for autonomous task execution", "group": "A"}, {"id": "g50", "domain": 1, "scenario": "Agente de soporte al cliente", "situation": "Después de llamar a `get_customer` y `lookup_order`, el agente tiene todos los datos disponibles del sistema pero aún enfrenta incertidumbre. ¿Qué situación es el disparador más justificado para llamar a `escalate_to_human`?", "question": "¿Qué situación es la más justificada para escalación?", "options": [{"letter": "A", "text": "Un cliente quiere cancelar un pedido enviado ayer y que llega mañana. El agente debería escalar porque el cliente podría cambiar de opinión después de recibir el paquete.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Un cliente afirma que no recibió un pedido, pero el seguimiento muestra que fue entregado y firmado en su dirección hace tres días. El agente debería escalar porque presentar evidencia contradictoria podría dañar la relación con el cliente.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Un cliente solicita igualar el precio de un competidor. Tus políticas permiten ajustes de precio para bajadas de precio en tu propio sitio dentro de 14 días, pero no dicen nada sobre precios de competidores. El agente debería escalar para interpretación de política.", "correct": true, "explanation": "Esta es una verdadera laguna de política: las reglas de la empresa cubren bajadas de precio en tu propio sitio pero no abordan la igualación de precios de competidores. El agente no debe inventar política y debería escalar para juicio humano sobre cómo interpretar o extender las reglas existentes."}, {"letter": "D", "text": "Un mensaje de cliente contiene tanto una pregunta de facturación como una devolución de producto. El agente debería escalar para que un humano coordine ambos problemas en una sola interacción.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "5.2", "objective": "Design effective escalation and ambiguity resolution patterns", "group": "C"}, {"id": "g53", "domain": 1, "scenario": "Agente de soporte al cliente", "situation": "Las métricas de producción muestran que tu agente promedia 4+ bucles de API por resolución. El análisis revela que Claude a menudo solicita `get_customer` y `lookup_order` en turnos secuenciales separados incluso cuando ambos se necesitan inicialmente. ¿Cuál es la forma más efectiva de reducir el número de bucles?", "question": "¿Cuál es la forma más efectiva de reducir bucles?", "options": [{"letter": "A", "text": "Implementar ejecución especulativa que llame automáticamente a herramientas probablemente necesarias en paralelo con cualquier herramienta solicitada y devuelva todos los resultados independientemente de lo que se solicitó.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Aumentar `max_tokens` para dar a Claude más espacio para planificar y combinar naturalmente solicitudes de herramientas.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Crear herramientas compuestas como `get_customer_with_orders` que agrupen combinaciones comunes de búsqueda en llamadas únicas.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Instruir a Claude en el prompt para agrupar solicitudes de herramientas en un turno y devolver todos los resultados juntos antes de la siguiente llamada a la API.", "correct": true, "explanation": "Promptear a Claude para agrupar solicitudes de herramientas relacionadas en un solo turno aprovecha su capacidad nativa de solicitar múltiples herramientas a la vez. Corrige directamente el patrón de llamada secuencial con cambio arquitectónico mínimo."}], "correct": "D", "task_id": "1.1", "objective": "Design and implement agentic loops for autonomous task execution", "group": "A"}, {"id": "g58", "domain": 1, "scenario": "Agente de soporte al cliente", "situation": "Estás implementando el bucle del agente para tu agente de soporte. Después de cada llamada a la API de Claude, debes decidir si continuar el bucle (ejecutar las herramientas solicitadas y llamar a Claude de nuevo) o detenerte (presentar la respuesta final al cliente). ¿Qué determina esta decisión?", "question": "¿Qué determina esta decisión?", "options": [{"letter": "A", "text": "Verificar el campo `stop_reason` en la respuesta de Claude—continuar si es `tool_use` y detenerse si es `end_turn`.", "correct": true, "explanation": "`stop_reason` es la señal estructurada explícita de Claude para el control del bucle: `tool_use` indica que Claude quiere ejecutar una herramienta y recibir resultados de vuelta, mientras que `end_turn` indica que Claude ha completado su respuesta y el bucle debería terminar."}, {"letter": "B", "text": "Parsear el texto de Claude para frases como \"He terminado\" o \"¿Puedo ayudarte con algo más?\"—las señales de lenguaje natural indican finalización de tarea.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Establecer un conteo máximo de iteraciones (por ejemplo, 10 llamadas) y detenerse cuando se alcance, independientemente de si Claude indica que se necesita más trabajo.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Verificar si la respuesta contiene contenido de texto del asistente—si Claude generó texto explicativo, el bucle debería terminar.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "1.1", "objective": "Design and implement agentic loops for autonomous task execution", "group": "A"}, {"id": "m1", "domain": 1, "scenario": null, "situation": "Tu pipeline de investigación multiagente se cayó después de procesar 12 de 28 documentos. El agente de búsqueda web había identificado fuentes relevantes, el agente de análisis de documentos había completado parcialmente la extracción, y el sintetizador había comenzado a identificar patrones. Necesitas reanudar el procesamiento sin repetir trabajo ni perder la fidelidad de los hallazgos previos.", "question": "¿Qué enfoque de gestión de estado equilibra mejor la fidelidad de la información con la eficiencia de contexto al restaurar el estado de los agentes?", "options": [{"letter": "A", "text": "Que cada agente mantenga su propio archivo de estado persistente y lo recargue de forma independiente al inicio de cada sesión.", "correct": false, "explanation": "Un estado fragmentado por agente rompe la visibilidad del coordinador y hace que el razonamiento entre agentes sea frágil. Además, que cada agente recargue estado interno no relacionado satura su contexto con ruido que no necesita."}, {"letter": "B", "text": "Persistir el registro de conversación del coordinador con todas las delegaciones de tareas y respuestas, y entregarlo a los agentes al reanudar.", "correct": false, "explanation": "Un registro completo de conversación es la opción de mayor fidelidad pero menor eficiencia de contexto. Reproducirías todo en cada subagente y superarías los presupuestos de contexto."}, {"letter": "C", "text": "Que cada agente persista un reporte estructurado en una ubicación conocida. Al reanudar, el coordinador carga los reportes e inyecta el estado relevante en los prompts de los agentes.", "correct": true, "explanation": "Correcto. Los reportes estructurados por agente conservan la fidelidad (los hallazgos, con esquema), permiten que el coordinador mantenga el control de la orquestación y mantienen enfocado el contexto de cada subagente. Es el patrón de coordinador + artefacto compacto."}, {"letter": "D", "text": "Indexar todas las salidas de los agentes en un almacén vectorial compartido. Al reanudar, cada agente consulta el almacén mediante búsqueda semántica para recuperar los hallazgos previos relevantes.", "correct": false, "explanation": "La recuperación semántica sobre las salidas de los agentes es excesiva para reanudar un pipeline caído: añade un modo de fallo de recuperación y puede pasar por alto el estado preciso que un reporte estructurado preserva exactamente."}], "correct": "C", "task_id": "1.7", "objective": "Manage session state, resumption, and forking", "group": "A"}, {"id": "m2", "domain": 1, "scenario": null, "situation": "Después de que el agente de búsqueda web encuentra 25 fuentes (120K tokens de contenido sin procesar), el agente de análisis de documentos extrae ideas clave (15K tokens) y el agente de síntesis produce un borrador de narrativa coherente (3K tokens), el coordinador debe pasar el contexto al agente de generación de reportes para la salida final con las citas de fuentes adecuadas.", "question": "¿Qué estrategia para pasar el contexto ofrece el mejor equilibrio entre completitud y eficiencia?", "options": [{"letter": "A", "text": "Pasar solo el borrador de síntesis y usar un pipeline de posprocesamiento aparte que vincule las afirmaciones con las fuentes e inserte las citas después de generar el reporte.", "correct": false, "explanation": "La vinculación posterior es frágil: sin el mapeo que usó el modelo, no puedes ligar de forma confiable las afirmaciones con la fuente correcta. El modo de fallo habitual son citas alucinadas o mal atribuidas."}, {"letter": "B", "text": "Pasar el borrador de síntesis junto con un índice de fuentes estructurado que mapee las afirmaciones clave con las URLs de sus fuentes y los extractos relevantes.", "correct": true, "explanation": "Correcto. La síntesis aporta la narrativa; el índice de fuentes le da al generador de reportes exactamente la vinculación que necesita para citar sin volver a leer 120K tokens de contenido sin procesar."}, {"letter": "C", "text": "Pasar un resumen condensado de todas las etapas previas que preserve los hallazgos principales y los atribuya a las fuentes solo por nombre.", "correct": false, "explanation": "La atribución solo por nombre pierde las URLs y los extractos, así que el generador de reportes no puede citar ni verificar; además, el 'solo por nombre' tiende a derivar en citas vagas."}, {"letter": "D", "text": "Pasar el contexto completo acumulado de todos los agentes previos.", "correct": false, "explanation": "Máxima completitud pero derrochadora: más de 120K tokens de contenido de búsqueda sin procesar son, en su mayoría, ruido irrelevante en la etapa de generación de reportes."}], "correct": "B", "task_id": "1.4", "objective": "Implement multi-step workflows with enforcement and handoff patterns", "group": "A"}, {"id": "m4", "domain": 1, "scenario": null, "situation": "El agente de búsqueda web ha reunido varias fuentes relevantes para un tema de investigación. El agente de análisis de documentos ahora necesita examinar esas fuentes.", "question": "¿Cómo fluye normalmente la información entre estos dos subagentes especializados?", "options": [{"letter": "A", "text": "Los agentes se comunican a través de una cola de mensajes basada en eventos, y el agente de análisis de documentos se suscribe a los eventos de finalización de la búsqueda web.", "correct": false, "explanation": "Los buses de eventos no forman parte del modelo de subagentes de Claude. Los subagentes no se publican/suscriben entre sí directamente."}, {"letter": "B", "text": "El agente de búsqueda web invoca directamente al agente de análisis de documentos, pasándole las fuentes descubiertas como parámetros.", "correct": false, "explanation": "Los subagentes están aislados: no pueden llamar directamente a subagentes hermanos. Eso también los acoplaría fuertemente y anularía el patrón de coordinador."}, {"letter": "C", "text": "El coordinador recibe la salida del agente de búsqueda web e incluye los hallazgos relevantes en el prompt al invocar al agente de análisis de documentos.", "correct": true, "explanation": "Correcto. En un patrón coordinador-trabajador, el coordinador es el eje. Recoge la salida de cada subagente y reenvía explícitamente las partes relevantes al prompt del siguiente subagente."}, {"letter": "D", "text": "Ambos agentes acceden a un almacén de memoria compartido donde el agente de búsqueda web escribe los hallazgos y el agente de análisis de documentos los lee.", "correct": false, "explanation": "Un almacén compartido puede añadirse como optimización, pero no es la forma habitual en que se comunican los subagentes, y además introduce problemas de lecturas obsoletas y consistencia."}], "correct": "C", "task_id": "1.2", "objective": "Orchestrate multi-agent systems with coordinator-subagent patterns", "group": "A"}, {"id": "m5", "domain": 1, "scenario": null, "situation": "En producción observas que consultas simples de verificación de hechos (p. ej., \"¿En qué año se firmó el Acuerdo de París sobre el Clima?\") recorren los cuatro subagentes de forma secuencial, consumiendo más de 40 segundos y bastantes tokens por consulta. La investigación comparativa compleja sí se beneficia del pipeline completo. Tu distribución de consultas es diversa y evoluciona a medida que los usuarios descubren nuevas aplicaciones.", "question": "¿Cuál es el enfoque más eficaz para optimizar ante una complejidad de consulta variable?", "options": [{"letter": "A", "text": "Implementar enrutamiento basado en patrones que categorice las consultas por su estructura (hecho único vs. comparativa vs. analítica) y mapee cada categoría a una combinación predefinida de subagentes.", "correct": false, "explanation": "El enrutamiento por patrones se cristaliza a medida que la distribución de consultas evoluciona: las nuevas intenciones rompen los patrones y caen silenciosamente en el pipeline equivocado."}, {"letter": "B", "text": "Crear una vía rápida para las preguntas factuales que omita por completo a los subagentes, y enrutar todas las demás consultas por el pipeline completo para asegurar la exhaustividad de la investigación.", "correct": false, "explanation": "Una vía rápida binaria corrige el peor caso pero desperdicia el pipeline completo en cada consulta moderadamente compleja que podría haber usado un subconjunto."}, {"letter": "C", "text": "Que el coordinador analice cada consulta y decida dinámicamente qué subagentes invocar según su evaluación de los requisitos de la consulta.", "correct": true, "explanation": "Correcto. Dejar que el LLM coordinador razone sobre cada consulta y elija solo los subagentes que necesita se adapta de forma natural a una distribución de consultas diversa y en evolución: esa es la fortaleza del patrón de coordinador."}, {"letter": "D", "text": "Entrenar un clasificador de complejidad de consultas con datos históricos etiquetados para predecir las combinaciones óptimas de subagentes, reentrenándolo periódicamente a medida que evolucionan los patrones de consulta.", "correct": false, "explanation": "Un clasificador entrenado necesita etiquetas, reentrenamiento y monitoreo de deriva. Es sobreingeniería cuando el coordinador puede tomar la misma decisión en tiempo de ejecución a partir de la propia consulta."}], "correct": "C", "task_id": "1.2", "objective": "Orchestrate multi-agent systems with coordinator-subagent patterns", "group": "A"}, {"id": "m6", "domain": 1, "scenario": null, "situation": "Al investigar \"adopción de energías renovables\", el agente de búsqueda web devuelve estadísticas recientes (2024: 35% de adopción), mientras que el agente de análisis de documentos extrae datos de reportes internos (2022: 18% de adopción). El agente de síntesis marca incorrectamente estas fuentes como contradictorias en lugar de reconocer que los datos muestran crecimiento a lo largo del tiempo.", "question": "¿Qué cambio permitiría mejor que el agente de síntesis interprete correctamente esas diferencias temporales?", "options": [{"letter": "A", "text": "Exigir que los subagentes incluyan las fechas de publicación o de recolección de datos en sus salidas estructuradas.", "correct": true, "explanation": "Correcto. El agente de síntesis malinterpreta los datos porque nunca ve las fechas. Hacer que cada dato lleve su propia marca de tiempo en la salida estructurada le permite a la síntesis razonar sobre tendencias en lugar de contradicciones."}, {"letter": "B", "text": "Añadir un agente de resolución de conflictos que descarte automáticamente los datos más antiguos cuando existan datos más recientes para la misma métrica.", "correct": false, "explanation": "Descartar silenciosamente los datos más antiguos destruye la información de tendencia, que es justamente lo que pregunta el enunciado."}, {"letter": "C", "text": "Configurar el agente de búsqueda web para que solo devuelva resultados de los últimos 6 meses.", "correct": false, "explanation": "Reducir la ventana descarta el contexto histórico y no corrige la brecha arquitectónica de que los metadatos no se están pasando a la síntesis."}, {"letter": "D", "text": "Instruir al agente de síntesis para que siempre trate los datos más recientes como autoritativos y coloque los hallazgos más antiguos en un apéndice histórico separado.", "correct": false, "explanation": "Las instrucciones de prompt por sí solas no son confiables y, además, esconden el razonamiento temporal detrás de una regla. Estructurar los datos con fechas es la solución sistemática."}], "correct": "A", "task_id": "5.6", "objective": "Preserve information provenance and handle uncertainty in multi-source synthesis", "group": "B"}, {"id": "m7", "domain": 1, "scenario": null, "situation": "El agente de síntesis recibe hallazgos resumidos de los agentes de búsqueda web y de análisis de documentos, y luego pasa un resumen consolidado al generador de reportes. Durante las pruebas, descubres que los reportes generados hacen afirmaciones factuales sin las citas adecuadas: el generador de reportes no puede atribuir las afirmaciones a sus fuentes originales porque esos metadatos se perdieron durante los pasos de resumen.", "question": "¿Cuál es el enfoque más eficaz para asegurar una atribución de fuentes adecuada en los reportes finales?", "options": [{"letter": "A", "text": "Que cada agente emita datos estructurados que separen los resúmenes de contenido de los metadatos de fuente (URLs, nombres de documentos, números de página).", "correct": true, "explanation": "Correcto. El contenido estructurado + los metadatos de fuente separados preservan el mapeo de extremo a extremo, de modo que el generador de reportes recibe tanto lo que se dijo como de dónde provino."}, {"letter": "B", "text": "Que el generador de reportes consulte al agente de búsqueda web para relocalizar las fuentes de las afirmaciones del reporte final.", "correct": false, "explanation": "Volver a consultar es lento, con pérdidas, e invita a la atribución errónea: el agente de búsqueda web no sabe qué afirmación provino de qué fuente."}, {"letter": "C", "text": "Instruir al agente de síntesis para que incruste las referencias de fuente en línea dentro de su texto de resumen usando un formato de cita consistente.", "correct": false, "explanation": "Las citas en línea dentro de texto libre se desvían y se pierden durante resúmenes posteriores. Los metadatos estructurados sobreviven mejor a las transformaciones."}, {"letter": "D", "text": "Omitir el resumen y pasar las salidas completas sin procesar de la búsqueda web y del análisis de documentos directamente al generador de reportes.", "correct": false, "explanation": "Reventarías el presupuesto de contexto y le complicarías la tarea al generador de reportes. El resumen es útil; el verdadero bug es perder los metadatos durante el resumen."}], "correct": "A", "task_id": "5.6", "objective": "Preserve information provenance and handle uncertainty in multi-source synthesis", "group": "B"}, {"id": "m9", "domain": 1, "scenario": null, "situation": "En producción, los reportes finales suelen contener afirmaciones sin la atribución de fuentes adecuada. La investigación muestra que, si bien los agentes de búsqueda web y de análisis de documentos adjuntan correctamente las citas a sus salidas, el agente de síntesis pierde el rastro de qué fuentes respaldan qué conclusiones al combinar los hallazgos.", "question": "¿Cuál es el cambio arquitectónico más eficaz?", "options": [{"letter": "A", "text": "Mantener transcripciones completas de todas las interacciones de los subagentes y añadir un agente de resolución de citas que analice los registros y determine las atribuciones antes de generar el reporte.", "correct": false, "explanation": "El análisis posterior de registros es frágil y costoso, y aun así pierde las vinculaciones cuando la síntesis fusiona puntos de múltiples fuentes."}, {"letter": "B", "text": "Exigir que todos los subagentes emitan mapeos estructurados de afirmación-fuente que el agente de síntesis deba preservar y fusionar al combinar hallazgos de múltiples fuentes.", "correct": true, "explanation": "Correcto. Los mapeos explícitos de afirmación-fuente son una salida de primera clase que el agente de síntesis puede fusionar de forma determinista: no se pierde ninguna atribución durante el resumen."}, {"letter": "C", "text": "Añadir un paso de verificación en el que el generador de reportes use coincidencia por similitud semántica contra las fuentes originales para reconstruir qué afirmaciones provinieron de qué documentos.", "correct": false, "explanation": "La búsqueda por similitud puede atribuir la fuente equivocada cuando dos fuentes dicen cosas similares. Quieres el mapeo original del modelo, no una reconstrucción."}, {"letter": "D", "text": "Que el coordinador inyecte prefijos identificadores de fuente en el texto antes de cada traspaso, y luego analice esos prefijos en la generación del reporte para reconstruir las citas.", "correct": false, "explanation": "Los tokens de prefijo dentro de la prosa se pierden, se parafrasean o se alucinan. Los mapeos estructurados fuera de la prosa son más robustos."}], "correct": "B", "task_id": "5.6", "objective": "Preserve information provenance and handle uncertainty in multi-source synthesis", "group": "B"}, {"id": "m10", "domain": 1, "scenario": null, "situation": "Después de que el agente de búsqueda web y el agente de análisis de documentos completan sus tareas, el coordinador invoca al agente de síntesis. Sin embargo, el agente de síntesis responde que no puede completar la tarea porque no se le proporcionaron hallazgos de investigación.", "question": "¿Cuál es la causa más probable de este problema?", "options": [{"letter": "A", "text": "La ventana de contexto del agente de síntesis no es lo suficientemente grande para contener las salidas combinadas de ambos agentes previos.", "correct": false, "explanation": "Un desbordamiento de la ventana de contexto suele manifestarse como un truncamiento o un error de la API, no como que el agente diga 'no se proporcionaron hallazgos'."}, {"letter": "B", "text": "El coordinador no incluyó las salidas de los agentes previos en el prompt del agente de síntesis.", "correct": true, "explanation": "Correcto. Las invocaciones de subagentes están aisladas: nada fluye entre ellas a menos que el coordinador lo coloque explícitamente en el prompt. El mensaje 'no se proporcionaron hallazgos' es exactamente lo que verías."}, {"letter": "C", "text": "Los subagentes necesitan compartir una única conexión a la API para habilitar el intercambio automático de contexto entre invocaciones.", "correct": false, "explanation": "No existe ningún 'intercambio automático de contexto' a través de una conexión compartida. El aislamiento de contexto es por diseño."}, {"letter": "D", "text": "El agente de síntesis necesita herramientas que puedan obtener resultados directamente de los historiales de conversación de los otros agentes.", "correct": false, "explanation": "Obtener el historial entre agentes no es una capacidad estándar ni la solución correcta: el coordinador debería reenviar los hallazgos explícitamente."}], "correct": "B", "task_id": "1.3", "objective": "Configure subagent invocation, context passing, and spawning", "group": "B"}, {"id": "m12", "domain": 1, "scenario": null, "situation": "El coordinador entrega instrucciones detalladas paso a paso al subagente de búsqueda web, especificando consultas de búsqueda exactas, prioridades de fuentes y filtros de fecha. El monitoreo en producción revela tres problemas: (1) el subagente reporta \"resultados insuficientes\" en lugar de intentar enfoques alternativos cuando las búsquedas preespecificadas fallan, (2) la calidad de la investigación cae para temas emergentes que no coinciden con los patrones esperados, y (3) el subagente rara vez saca a la luz fuentes tangenciales valiosas.", "question": "¿Cuál es la forma más eficaz de mejorar la adaptabilidad del subagente?", "options": [{"letter": "A", "text": "Eliminar por completo los detalles procedimentales, delegando con objetivos simples como \"investiga X a fondo\" y confiando en las capacidades generales del subagente.", "correct": false, "explanation": "Demasiado hacia el otro extremo: 'investiga X a fondo' pierde las salvaguardas (calidad de fuentes, actualidad) que hacen confiable la delegación."}, {"letter": "B", "text": "Añadir directivas de respaldo explícitas a las instrucciones detalladas: \"Si las búsquedas especificadas arrojan menos de N resultados, intenta formulaciones alternativas de la consulta antes de reportar un fallo\".", "correct": false, "explanation": "Parcha un modo de fallo pero mantiene al agente atrapado en un pensamiento procedimental: sigue siendo frágil para los temas emergentes y las fuentes tangenciales."}, {"letter": "C", "text": "Implementar un paso de clasificación de temas en el que el coordinador categorice las solicitudes como \"bien definidas\" o \"exploratorias\" y use estilos de instrucción distintos para cada categoría.", "correct": false, "explanation": "Un clasificador con dos categorías es frágil, y de todos modos seguirías enviando instrucciones rígidas en la rama bien definida."}, {"letter": "D", "text": "Especificar los objetivos de investigación y los criterios de calidad (amplitud de cobertura, diversidad de fuentes, actualidad) en lugar de pasos procedimentales, dejando que el subagente determine su estrategia de búsqueda.", "correct": true, "explanation": "Correcto. Delega la intención y los estándares de calidad, no los procedimientos. Así el subagente puede elegir consultas, seguir tangentes prometedoras y recuperarse de callejones sin salida por su cuenta."}], "correct": "D", "task_id": "1.3", "objective": "Configure subagent invocation, context passing, and spawning", "group": "B"}, {"id": "m13", "domain": 1, "scenario": null, "situation": "El monitoreo en producción muestra que las consultas de seguimiento como \"resume lo que aprendimos sobre las tendencias del mercado\" tardan sistemáticamente más de 40 segundos. La investigación revela que el coordinador genera el subagente de síntesis para cada solicitud de resumen, pasándole más de 80K tokens de hallazgos acumulados. El coordinador ya tiene esos hallazgos en su contexto por haber orquestado la investigación.", "question": "¿Cuál es la forma más eficaz de mejorar el tiempo de respuesta para estos resúmenes de seguimiento?", "options": [{"letter": "A", "text": "Pregenerar y cachear resúmenes en múltiples granularidades cada vez que se acumulan nuevos hallazgos.", "correct": false, "explanation": "La generación especulativa desperdicia tokens en resúmenes que el usuario quizá nunca pida, y las granularidades del caché nunca coinciden del todo con lo que se solicita."}, {"letter": "B", "text": "Que el coordinador maneje las solicitudes de resumen sencillas directamente usando su contexto existente, reservando la generación de subagentes para los análisis complejos.", "correct": true, "explanation": "Correcto. Si el coordinador ya tiene los hallazgos, generar un subagente para reingerir 80K tokens es puro sobrecosto. Deja que el coordinador responda él mismo los seguimientos simples."}, {"letter": "C", "text": "Habilitar el cacheo de prompts en el subagente de síntesis para reducir el sobrecosto de transferir repetidamente los mismos hallazgos de investigación.", "correct": false, "explanation": "El cacheo de prompts recorta el costo del prefijo repetido, pero el desperdicio arquitectónico —generar un subagente entero para un resumen— sigue ahí."}, {"letter": "D", "text": "Generar el subagente de síntesis con contexto reducido y hacer que solicite hallazgos específicos al coordinador bajo demanda.", "correct": false, "explanation": "Añade idas y vueltas y complejidad para el mismo resultado que el coordinador podría producir directamente."}], "correct": "B", "task_id": "1.2", "objective": "Orchestrate multi-agent systems with coordinator-subagent patterns", "group": "A"}, {"id": "m14", "domain": 1, "scenario": null, "situation": "Al analizar casos legales complejos que citan múltiples precedentes, el subagente de análisis de documentos procesa cada uno de forma secuencial. Un caso emblemático que cita 12 precedentes tarda más de 3 minutos en analizarse por completo.", "question": "¿Cuál es la forma más eficaz de reducir esta latencia preservando la capacidad del coordinador para monitorear y depurar el sistema?", "options": [{"letter": "A", "text": "Implementar una cola de mensajes donde las tareas de análisis de precedentes se procesen de forma asíncrona mediante un grupo de agentes trabajadores.", "correct": false, "explanation": "Las colas externas complican la observabilidad: el coordinador pierde la visibilidad directa de qué tareas tuvieron éxito y qué produjeron."}, {"letter": "B", "text": "Crear una jerarquía recursiva de agentes donde los agentes de análisis subdividan el trabajo entre agentes hijos hasta llegar a la granularidad de un solo precedente.", "correct": false, "explanation": "La recursión añade niveles de indirección que dificultan la depuración y el monitoreo, sin una aceleración real más allá del primer reparto."}, {"letter": "C", "text": "Que el coordinador genere subagentes de análisis de documentos en paralelo, cada uno encargándose de un subconjunto de precedentes, y luego agregue los resultados antes de la síntesis.", "correct": true, "explanation": "Correcto. El paralelismo gestionado por el coordinador reparte el trabajo, mantiene acotado el alcance de cada subagente y preserva un único eje para el monitoreo y la agregación."}, {"letter": "D", "text": "Permitir que el subagente de análisis de documentos genere dinámicamente sus propios subagentes especializados cuando se encuentre con casos que tengan muchas citas.", "correct": false, "explanation": "La generación anidada esconde la ejecución dentro de los subagentes y deja incompleta la vista de depuración del coordinador."}], "correct": "C", "task_id": "1.2", "objective": "Orchestrate multi-agent systems with coordinator-subagent patterns", "group": "A"}, {"id": "m15", "domain": 1, "scenario": null, "situation": "El coordinador tiene `AgentDefinitions` configuradas para los cuatro subagentes especializados, cada una con descripciones, prompts y restricciones de herramientas adecuadas. Durante las pruebas, notas que el coordinador razona correctamente sobre cuándo delegar —genera mensajes como \"le pediré al agente de búsqueda web que encuentre fuentes sobre este tema\"— pero nunca ocurre ninguna ejecución de subagente. El coordinador luego continúa como si la delegación hubiera ocurrido y prosigue con información incompleta. Los registros no muestran errores.", "question": "¿Cuál es la causa más probable?", "options": [{"letter": "A", "text": "El valor de `max_tokens` del coordinador es demasiado bajo, lo que provoca que la invocación de la herramienta Task se trunque antes de poder especificar el parámetro de tipo de subagente.", "correct": false, "explanation": "Un truncamiento aparecería en los registros y normalmente dejaría bloques `tool_use` parciales, no operaciones silenciosas sin efecto."}, {"letter": "B", "text": "Las `AgentDefinitions` están configuradas correctamente, pero el prompt de sistema del coordinador no lista explícitamente los tipos de subagente disponibles, lo que impide que el modelo sepa que pueden invocarse.", "correct": false, "explanation": "Los esquemas de herramientas/agentes se exponen al modelo automáticamente: no necesitas volver a listarlos en el prompt de sistema para que el modelo los vea."}, {"letter": "C", "text": "La configuración de allowedTools del coordinador no incluye \"Task\", así que, aunque puede razonar sobre la delegación, no puede invocar la herramienta necesaria para generar subagentes.", "correct": true, "explanation": "Correcto. Sin la herramienta Task en allowedTools, el coordinador puede hablar de delegar pero no tiene forma de llamar realmente a un subagente, lo que coincide con el síntoma de 'razona sobre ello, sin ejecución, sin errores'."}, {"letter": "D", "text": "El aislamiento de contexto de los subagentes implica que las descripciones de tareas del coordinador no llegan automáticamente a los subagentes; necesitas configurar el reenvío explícito de contexto en ClaudeAgentOptions.", "correct": false, "explanation": "El aislamiento de contexto es real, pero afecta lo que ve el subagente una vez generado, no si el coordinador puede generarlo siquiera."}], "correct": "C", "task_id": "1.3", "objective": "Configure subagent invocation, context passing, and spawning", "group": "B"}, {"id": "m21", "domain": 1, "scenario": null, "situation": "Tu herramienta de exploración de código base almacena IDs de sesión para permitir que los ingenieros continúen sus investigaciones entre sesiones de trabajo. Un ingeniero dedicó una hora ayer a analizar un módulo de autenticación heredado, acumulando contexto sobre su arquitectura y dependencias. Quiere continuar hoy. El ID de sesión es válido, pero el control de versiones muestra que 3 de los 12 archivos que el agente había leído fueron modificados durante la noche por el merge de un compañero.", "question": "¿Qué enfoque equilibra mejor la eficiencia y la precisión?", "options": [{"letter": "A", "text": "Reanudar la sesión sin informar al agente sobre los archivos modificados", "correct": false, "explanation": "Reanudar en silencio deja al agente razonando sobre contenido desactualizado en 3 de 12 archivos: justo la fuente de malas recomendaciones."}, {"letter": "B", "text": "Iniciar una sesión nueva para garantizar que el agente trabaje con el estado actual del código base, sin suposiciones desactualizadas", "correct": false, "explanation": "Desecha una hora de contexto válido sobre los 9 archivos que no cambiaron."}, {"letter": "C", "text": "Reanudar la sesión e informar al agente qué archivos específicos cambiaron, para un reanálisis dirigido", "correct": true, "explanation": "Correcto. Conserva el costoso contexto que ya construiste, a la vez que le dices al agente exactamente cuáles 3 archivos releer: mínimo desperdicio, máxima precisión."}, {"letter": "D", "text": "Reanudar la sesión y hacer que el agente relea de inmediato los 12 archivos analizados previamente", "correct": false, "explanation": "Innecesario para los 9 archivos sin cambios. Solo agrega tokens sin mejorar la precisión."}], "correct": "C", "task_id": "1.7", "objective": "Manage session state, resumption, and forking", "group": "A"}, {"id": "m22", "domain": 1, "scenario": null, "situation": "Un ingeniero usó el agente ayer para analizar un módulo de autenticación heredado e identificó dos enfoques de refactorización distintos: extraer un microservicio frente a refactorizar en el sitio. Hoy quiere explorar ambos enfoques en profundidad —haciendo que el agente proponga cambios de código específicos para cada uno— antes de decidir cuál implementar.", "question": "¿Cuál es la forma más efectiva de estructurar esta exploración?", "options": [{"letter": "A", "text": "Reanudar la sesión de ayer para explorar el primer enfoque y luego iniciar una sesión nueva para el segundo, recreando manualmente el contexto original.", "correct": false, "explanation": "La recreación manual es propensa a errores y pierde el estado de trabajo exacto del análisis de ayer."}, {"letter": "B", "text": "Iniciar dos sesiones nuevas, proporcionando manualmente un resumen de los hallazgos del análisis de ayer para establecer el contexto.", "correct": false, "explanation": "Rehace el trabajo y arriesga que las dos sesiones diverjan de la misma base que estableciste ayer."}, {"letter": "C", "text": "Reanudar la sesión de ayer y explorar ambos enfoques de forma secuencial dentro del mismo hilo de conversación.", "correct": false, "explanation": "La exploración secuencial en un solo hilo permite que cada enfoque contamine el contexto del otro."}, {"letter": "D", "text": "Usar `fork_session` para crear dos ramas a partir del análisis de ayer, explorando un enfoque en cada bifurcación.", "correct": true, "explanation": "Correcto. Bifurcar desde la sesión de ayer le da a cada enfoque su propio contexto independiente a partir de la misma base de análisis: limpio, paralelo y sin contaminación."}], "correct": "D", "task_id": "1.7", "objective": "Manage session state, resumption, and forking", "group": "A"}, {"id": "m24", "domain": 1, "scenario": null, "situation": "Un ingeniero le pide a tu agente que identifique las rutas de código sin pruebas en un módulo heredado de procesamiento de pagos que abarca 45 archivos. Tras leer los primeros 8 archivos fuente, las respuestas del agente se vuelven notablemente menos precisas: olvida patrones de código discutidos previamente y aún no ha localizado todos los archivos de prueba ni rastreado los flujos críticos de pago.", "question": "¿Cuál es el enfoque más efectivo para completar esta investigación?", "options": [{"letter": "A", "text": "Documentar todos los hallazgos actuales en un informe de resumen, borrar el contexto por completo y luego usar ese informe como única referencia para continuar la investigación.", "correct": false, "explanation": "Un único informe se convierte en la única fuente de verdad y tiende a comprimir y eliminar los patrones de código específicos que necesitarías después."}, {"letter": "B", "text": "Generar subagentes para investigar preguntas específicas (por ejemplo, \"encuentra todos los archivos de prueba para el procesamiento de pagos\", \"rastrea las dependencias del flujo de reembolso\") mientras el agente principal coordina los hallazgos y preserva la comprensión de alto nivel.", "correct": true, "explanation": "Correcto. Delega investigaciones bien acotadas a subagentes con contexto fresco, mientras el agente principal conserva la visión arquitectónica general. Este es el patrón para escalar la exploración más allá de una sola ventana de contexto."}, {"letter": "C", "text": "Borrar el contexto con /clear y luego releer selectivamente solo los archivos más críticos descubiertos hasta ahora, escribiendo los hallazgos clave en un archivo de notas (scratchpad) que persiste entre reinicios de contexto.", "correct": false, "explanation": "Los scratchpads ayudan, pero borrar y releer descarta la comprensión que ya construiste a lo largo de 8 archivos."}, {"letter": "D", "text": "Cambiar a usar Grep para buscar nombres de funciones específicos en lugar de leer archivos completos, reduciendo el contenido cargado en el contexto para la exploración restante.", "correct": false, "explanation": "No puedes identificar rutas sin pruebas con solo hacer grep de nombres: necesitas leer lo suficiente de cada ruta para saber qué ramas no cubren las pruebas."}], "correct": "B", "task_id": "5.4", "objective": "Manage context effectively in large codebase exploration", "group": "G"}, {"id": "m25", "domain": 1, "scenario": null, "situation": "Un desarrollador le pide al agente que investigue por qué un endpoint de API específico devuelve errores 500 de forma intermitente. El código base tiene más de 200 archivos y el desarrollador no sabe qué componentes están involucrados. El agente debe rastrear el error a través de las capas de enrutamiento, middleware, lógica de negocio y base de datos.", "question": "¿Qué enfoque de descomposición de tareas sería más efectivo?", "options": [{"letter": "A", "text": "Hacer que el agente primero cree un plan integral que mapee todas las rutas de código a través del endpoint, antes de comenzar cualquier exploración de archivos o lectura de código.", "correct": false, "explanation": "No puedes construir un plan correcto para un error desconocido sin ninguna exploración. Planificar a ciegas desperdicia tiempo y pasa por alto la ruta de fallo real."}, {"letter": "B", "text": "Hacer que el agente genere dinámicamente subtareas de investigación según lo que descubre en cada paso, adaptando su plan de exploración a medida que emerge nueva información sobre la ruta del error.", "correct": true, "explanation": "Correcto. La depuración es adaptativa por naturaleza: cada archivo que lees cambia cuál es el siguiente paso más útil. Deja que el agente siga la evidencia."}, {"letter": "C", "text": "Definir de antemano una secuencia fija de pasos de investigación —hacer grep de patrones de error, luego leer los manejadores de errores, luego revisar las consultas a la base de datos, luego examinar el middleware—, ejecutando cada paso sin importar los hallazgos intermedios.", "correct": false, "explanation": "Una tubería fija desperdicia trabajo en capas que no están involucradas y puede bloquear al agente de la ruta real de la causa raíz."}, {"letter": "D", "text": "Ejecutar agentes trabajadores en paralelo que investiguen simultáneamente las cuatro capas, y luego sintetizar sus hallazgos para identificar dónde se origina el error.", "correct": false, "explanation": "El despliegue en paralelo es útil una vez que tienes subtareas bien acotadas. Aquí no las tienes: pagarías 4 veces el costo para buscar en tres capas que no son el problema."}], "correct": "B", "task_id": "1.6", "objective": "Design task decomposition strategies for complex workflows", "group": "A"}, {"id": "m26", "domain": 1, "scenario": null, "situation": "El subagente de exploración de un ingeniero dedicó 30 minutos a analizar un sistema de pagos heredado, leyendo 47 archivos y documentando flujos de datos. La sesión se interrumpió cuando se cayó la conexión del ingeniero. Mientras tanto, un compañero hizo merge de un PR que renombró dos funciones de utilidad. El ingeniero quiere continuar la misma exploración.", "question": "¿Cuál es el enfoque más efectivo?", "options": [{"letter": "A", "text": "Reanudar el subagente desde su transcripción anterior sin mencionar los cambios: la comprensión de la arquitectura sigue siendo válida.", "correct": false, "explanation": "Reanudar en silencio permite que el agente siga referenciando los nombres de función antiguos en sus recomendaciones."}, {"letter": "B", "text": "Lanzar un subagente nuevo e incluir la transcripción previa en el prompt inicial como contexto.", "correct": false, "explanation": "Cargar 30 minutos de transcripción en el prompt de un subagente nuevo es un desperdicio y contamina su contexto inicial."}, {"letter": "C", "text": "Lanzar un subagente nuevo con un resumen de los hallazgos previos.", "correct": false, "explanation": "Volver a resumir descarta los flujos de datos detallados que el agente ya estaba rastreando a lo largo de 47 archivos."}, {"letter": "D", "text": "Reanudar el subagente desde su transcripción anterior e informarle sobre las funciones renombradas.", "correct": true, "explanation": "Correcto. Conserva la comprensión acumulada y dale un delta dirigido sobre los renombramientos para que pueda actualizar su modelo mental: mínimo desperdicio, máxima precisión."}], "correct": "D", "task_id": "1.7", "objective": "Manage session state, resumption, and forking", "group": "A"}, {"id": "m28", "domain": 1, "scenario": null, "situation": "Tu agente ha analizado un módulo de servicio complejo: leyó 23 archivos fuente, rastreó flujos de solicitudes e identificó patrones de manejo de errores. Un desarrollador quiere comparar dos estrategias de pruebas antes de comprometerse con una: pruebas de extremo a extremo con servicios externos simulados frente a pruebas de snapshot que capturan las salidas esperadas. Necesita desarrollar ambos enfoques de forma independiente para evaluar las compensaciones.", "question": "¿Cómo deberías gestionar las sesiones?", "options": [{"letter": "A", "text": "Exportar los hallazgos clave de la sesión de análisis a un archivo y luego crear dos sesiones nuevas que hagan referencia a ese archivo.", "correct": false, "explanation": "Un resumen exportado pierde más información que el estado vivo de la sesión que el agente construyó mientras leía 23 archivos."}, {"letter": "B", "text": "Reanudar la sesión de análisis con `fork_session` habilitado, creando una rama separada para cada estrategia de pruebas.", "correct": true, "explanation": "Correcto. Bifurcar le da a cada estrategia su propio contexto independiente a partir de la base de análisis exacta: sin contaminación cruzada, sin reanálisis."}, {"letter": "C", "text": "Iniciar dos sesiones nuevas, haciendo que cada una relea los archivos fuente relevantes antes de comenzar.", "correct": false, "explanation": "Quema tokens rehaciendo trabajo que la sesión original ya hizo, y arriesga que cada sesión nueva llegue a conclusiones distintas a partir del mismo código."}, {"letter": "D", "text": "Continuar en la sesión original, desarrollando primero las pruebas de extremo a extremo y luego las pruebas de snapshot de forma secuencial.", "correct": false, "explanation": "El desarrollo secuencial en un solo hilo permite que la implementación de la primera estrategia sesgue el razonamiento sobre la segunda."}], "correct": "B", "task_id": "1.7", "objective": "Manage session state, resumption, and forking", "group": "A"}, {"id": "m30", "domain": 1, "scenario": null, "situation": "Un ingeniero que acaba de unirse al equipo le pide al agente que lo ayude a entender la arquitectura de autenticación y autorización antes de realizar mejoras de seguridad. El código base tiene más de 800 archivos repartidos en múltiples servicios.", "question": "¿Qué estrategia de exploración construirá la comprensión de forma más efectiva, dadas las herramientas integradas de Claude y los límites de contexto?", "options": [{"letter": "A", "text": "Leer primero cualquier archivo CLAUDE.md y README, y luego pedirle al ingeniero que especifique cuáles 10-15 archivos son los más importantes para entender el sistema de autenticación.", "correct": false, "explanation": "El ingeniero acaba de unirse: probablemente no sepa qué archivos importan. Eso es exactamente con lo que se supone que el agente debe ayudar."}, {"letter": "B", "text": "Lanzar subagentes en paralelo para explorar distintos servicios simultáneamente y luego sintetizar sus hallazgos en una visión arquitectónica general.", "correct": false, "explanation": "Sin saber dónde reside la autenticación, el despliegue en paralelo explora demasiado ampliamente y los subagentes se duplican y pasan por alto los flujos entre servicios."}, {"letter": "C", "text": "Usar Grep para encontrar los puntos de entrada de autenticación, leer esos archivos y luego seguir las importaciones y llamadas a funciones para mapear el flujo de autenticación de forma incremental.", "correct": true, "explanation": "Correcto. Empieza en los puntos de entrada (login, verificación de token, middleware) y luego rastrea hacia afuera siguiendo las aristas reales del código. Incremental, fundamentado y se ajusta a los límites de contexto."}, {"letter": "D", "text": "Leer todos los archivos que contengan \"auth\", \"login\", \"permission\" o \"token\" en su contenido o nombre de archivo.", "correct": false, "explanation": "Esas palabras clave coinciden con una enorme cantidad de código no relacionado a lo largo de más de 800 archivos y ahogan el contexto en ruido."}], "correct": "C", "task_id": "5.4", "objective": "Manage context effectively in large codebase exploration", "group": "G"}, {"id": "m31", "domain": 1, "scenario": null, "situation": "Un cliente regresa 4 horas después de su sesión inicial sobre la misma disputa de facturación. La sesión anterior de 32 turnos contiene resultados de `lookup_order` que muestran \"Status: PENDING, Expected resolution: 24-48 hours.\" En las pruebas, observas que al reanudar sesiones con resultados de herramienta obsoletos, el agente a menudo hace referencia a los datos desactualizados en sus respuestas (por ejemplo, \"Veo que tu reembolso aún se está procesando\") incluso después de que llamadas frescas a la herramienta devuelven información distinta.", "question": "¿Qué enfoque maneja de forma más confiable a los clientes que regresan?", "options": [{"letter": "A", "text": "Reanudar con el historial completo, pero filtrar los mensajes previos de `tool_result` antes de reanudar, conservando solo los turnos de humano/asistente para que el agente deba volver a obtener los datos necesarios.", "correct": false, "explanation": "Eliminar los `tool_results` de en medio de una conversación puede dejar mensajes del asistente que hacen referencia a resultados inexistentes; la transcripción queda internamente inconsistente."}, {"letter": "B", "text": "Iniciar una nueva sesión, inyectar un resumen estructurado de la interacción previa (tipo de problema, acciones tomadas, estado de resolución) y luego hacer llamadas frescas a las herramientas antes de interactuar.", "correct": true, "explanation": "Correcto. Una sesión limpia con un resumen mantiene la continuidad narrativa y a la vez garantiza que el agente no razone sobre resultados de herramienta obsoletos."}, {"letter": "C", "text": "Reanudar con el historial completo y agregar una instrucción al prompt del sistema indicándole al agente que siempre prefiera los resultados de herramienta más recientes cuando existan varias llamadas a la misma herramienta en el contexto.", "correct": false, "explanation": "Las instrucciones del prompt son sugerencias. Observaste exactamente ese modo de falla en las pruebas: el modelo aún hace referencia a resultados antiguos."}, {"letter": "D", "text": "Reanudar con el historial completo y configurar el agente para que vuelva a llamar automáticamente a todas las herramientas usadas previamente al inicio de la sesión para asegurar la frescura de los datos.", "correct": false, "explanation": "Volver a llamar todo de forma indiscriminada es un desperdicio, es lento y aun así deja los resultados antiguos en el contexto, confundiendo al modelo."}], "correct": "B", "task_id": "1.4", "objective": "Implement multi-step workflows with enforcement and handoff patterns", "group": "A"}, {"id": "m32", "domain": 1, "scenario": null, "situation": "Estás implementando la lógica de escalamiento para cuando el agente deba llamar a `escalate_to_human`. Tu equipo propone cuatro enfoques distintos para disparar el escalamiento.", "question": "¿Qué enfoque identificará de forma más confiable los casos que realmente requieren intervención humana?", "options": [{"letter": "A", "text": "Indicarle al agente que escale cuando el cliente solicite un humano, cuando el problema requiera excepciones de política o cuando el agente no pueda avanzar de forma significativa.", "correct": true, "explanation": "Correcto. Las decisiones de escalamiento son juicios sobre la intención y el progreso, exactamente en lo que los LLM son buenos. Criterios claros en lenguaje natural superan a las reglas rígidas para la cola larga de casos."}, {"letter": "B", "text": "Configurar el agente para que escale tras tres llamadas consecutivas a herramientas que no logren resolver el problema declarado por el cliente, asegurando un intento razonable antes de involucrar a un humano.", "correct": false, "explanation": "Un conteo fijo de reintentos se dispara tanto demasiado pronto (reintentos legítimos) como demasiado tarde (problemas evidentes de política en la primera llamada)."}, {"letter": "C", "text": "Implementar un análisis de sentimiento que monitoree indicadores de frustración (lenguaje negativo, preguntas repetidas, signos de exclamación) y disparar el escalamiento cuando la puntuación de frustración supere un umbral configurado.", "correct": false, "explanation": "El sentimiento puede captar la frustración, pero pasa por alto a clientes tranquilos que simplemente necesitan un humano para una excepción de política, y sobre-escala ante lenguaje estilístico."}, {"letter": "D", "text": "Construir un motor de reglas que mapee tipos específicos de problemas, segmentos de clientes y categorías de productos a decisiones de escalamiento, eliminando la necesidad de juicios del modelo.", "correct": false, "explanation": "Los motores de reglas se rompen ante los casos para los que no fueron diseñados, y el soporte al cliente está lleno de esos."}], "correct": "A", "task_id": "5.2", "objective": "Design effective escalation and ambiguity resolution patterns", "group": "C"}, {"id": "m33", "domain": 1, "scenario": null, "situation": "Tras investigar una disputa de facturación durante más de 25 turnos, identificaste que los cargos duplicados ocurrieron porque un timeout de la pasarela de pago disparó la lógica de reintento. El reembolso requerido ($847) excede tu límite de autorización de $500. Necesitas llamar a `escalate_to_human`, y el agente humano no tendrá acceso a la transcripción de tu conversación.", "question": "¿Qué contexto deberías pasar para permitir una resolución efectiva?", "options": [{"letter": "A", "text": "La queja original del cliente textualmente, más los fragmentos del resultado de la herramienta que muestran las transacciones duplicadas.", "correct": false, "explanation": "Artefactos en bruto sin síntesis obligan al humano a rehacer los 25 turnos de investigación que acabas de terminar."}, {"letter": "B", "text": "Un resumen estructurado: ID del cliente, causa raíz, monto del reembolso y acción recomendada.", "correct": true, "explanation": "Correcto. Un traspaso estructurado con identificadores, causa, monto y acción recomendada es lo que un agente humano necesita para retomar el caso al instante sin volver a investigar."}, {"letter": "C", "text": "La transcripción completa de la conversación con todos los resultados de las herramientas.", "correct": false, "explanation": "Volcar toda la transcripción obliga al humano a vadear 25 turnos en lugar de leer un resumen de una pantalla."}, {"letter": "D", "text": "Solo tu diagnóstico y el monto del reembolso.", "correct": false, "explanation": "Faltan los identificadores del cliente y la acción recomendada: el humano no puede actuar sin ellos."}], "correct": "B", "task_id": "1.4", "objective": "Implement multi-step workflows with enforcement and handoff patterns", "group": "A"}, {"id": "m34", "domain": 1, "scenario": null, "situation": "El cumplimiento normativo exige que los reembolsos que superen los $500 deben escalar automáticamente a un agente humano; esta regla no puede dejarse a discreción del modelo. A pesar de instrucciones claras en el prompt del sistema, los registros de producción muestran que el agente ocasionalmente procesa reembolsos de alto valor directamente (tasa de falla del 3%).", "question": "¿Cómo deberías lograr un cumplimiento garantizado?", "options": [{"letter": "A", "text": "Modificar la herramienta de reembolso para que devuelva un error con el mensaje \"Amount exceeds policy limit—please escalate\" cuando se supere el umbral.", "correct": false, "explanation": "Esto ayuda, pero depende de que el agente interprete correctamente el error y escale; sigue siendo discreción del modelo en el punto de decisión."}, {"letter": "B", "text": "Agregar ejemplos few-shot al prompt que muestren el comportamiento de escalamiento correcto en varios montos de reembolso ($400, $500, $600).", "correct": false, "explanation": "Los few-shots desplazan la distribución, pero no eliminan la falla del 3%. El cumplimiento dice que la regla no puede dejarse a discreción del modelo."}, {"letter": "C", "text": "Implementar un hook para interceptar las llamadas a herramientas; cuando el monto a procesar por reembolso supere los $500, bloquearla e invocar el escalamiento humano.", "correct": true, "explanation": "Correcto. Las reglas de grado de cumplimiento pertenecen fuera del modelo: un hook determinista sobre la llamada a la herramienta se dispara de forma garantizada cada vez, independientemente del comportamiento del modelo."}, {"letter": "D", "text": "Reforzar el prompt del sistema con lenguaje enfático: \"CRITICAL POLICY: Refunds over $500 MUST trigger human escalation. NEVER process these directly.\"", "correct": false, "explanation": "Los prompts enfáticos reducen pero no eliminan el mal uso. La frase \"no puede dejarse a discreción del modelo\" descarta cualquier solución basada solo en el prompt."}], "correct": "C", "task_id": "1.5", "objective": "Apply Agent SDK hooks for tool call interception and data normalization", "group": "E"}, {"id": "m35", "domain": 1, "scenario": null, "situation": "Durante la resolución de una disputa de facturación, tu agente obtiene con éxito la información del cliente vía `get_customer` y los detalles del pedido vía `lookup_order`, pero al intentar llamar a `process_refund`, la herramienta devuelve un error de timeout. El agente tiene suficiente información para explicar los cargos y verificar la elegibilidad del reembolso, pero no puede procesar realmente el reembolso debido a la falla del backend.", "question": "¿Qué enfoque equilibra mejor la resolución en el primer contacto con un manejo de errores adecuado?", "options": [{"letter": "A", "text": "Escalar de inmediato a un agente humano, ya que la acción de reembolso no puede completarse.", "correct": false, "explanation": "Traslada un problema transitorio del backend a un humano cuando el agente aún podría explicar la situación y ofrecer opciones."}, {"letter": "B", "text": "Implementar reintentos automáticos con retroceso exponencial para `process_refund`, manteniendo la conversación abierta hasta que el reembolso se procese con éxito.", "correct": false, "explanation": "Obligar al cliente a esperar reintentos indefinidos es una mala experiencia y puede que nunca tenga éxito si la interrupción es prolongada."}, {"letter": "C", "text": "Explicar la facturación, confirmar la elegibilidad del reembolso, reconocer el problema del sistema que impide el procesamiento inmediato y ofrecer escalamiento o reintentar más tarde.", "correct": true, "explanation": "Correcto. Entrega el valor parcial que puedas (explicación + elegibilidad), sé honesto sobre la falla y deja que el cliente elija entre el escalamiento humano o un reintento. Degradación elegante clásica."}, {"letter": "D", "text": "Confirmar que el reembolso se procesará y cerrar la conversación, ya que el sistema tiene toda la información necesaria para completarlo automáticamente.", "correct": false, "explanation": "Comprometerse con un resultado que no ocurrió es engañar al cliente, una falla mayor que el timeout."}], "correct": "C", "task_id": "1.4", "objective": "Implement multi-step workflows with enforcement and handoff patterns", "group": "A"}, {"id": "m36", "domain": 1, "scenario": null, "situation": "Un cliente escribe: \"Llevo días yendo y viniendo con esta devolución. Solo quiero hablar con alguien que realmente pueda ayudarme.\" El agente ha confirmado vía `lookup_order` que la devolución es sencilla: dentro de la política y elegible para procesamiento inmediato.", "question": "¿Qué debería hacer el agente?", "options": [{"letter": "A", "text": "Reconocer la frustración, informarle que esto se puede resolver ahora y ofrecer completarlo o escalar.", "correct": true, "explanation": "Correcto. Honra el sentimiento, dale la vía de resolución rápida por escrito y preserva su elección. Esa es la jugada de respeto al cliente que a la vez aprovecha la capacidad del agente."}, {"letter": "B", "text": "Llamar a `escalate_to_human` de inmediato para honrar la solicitud del cliente.", "correct": false, "explanation": "Encolamiento innecesario cuando el problema está a una llamada de herramienta de distancia. Frustra aún más al cliente al añadir espera a un caso ya simple."}, {"letter": "C", "text": "Procesar el reembolso vía `process_refund` para resolver el problema de fondo y luego informarle que está completo.", "correct": false, "explanation": "Toma una acción unilateral después de que el cliente pidió explícitamente hablar con alguien; ignora su preferencia declarada."}, {"letter": "D", "text": "Preguntar qué específicamente no ha funcionado en los intentos anteriores antes de decidir si escalar o resolver automáticamente.", "correct": false, "explanation": "Interrogar a un cliente frustrado sobre fallas pasadas es lo opuesto a lo que pidió."}], "correct": "A", "task_id": "5.2", "objective": "Design effective escalation and ambiguity resolution patterns", "group": "C"}, {"id": "m39", "domain": 1, "scenario": null, "situation": null, "question": "Cuando el agente llama a `lookup_order` y recibe detalles del pedido que muestran que el artículo se compró hace 45 días, ¿cómo determina el bucle agéntico si debe llamar a `process_refund` o a `escalate_to_human` a continuación?", "options": [{"letter": "A", "text": "La capa de orquestación enruta automáticamente a la siguiente herramienta según el campo de estado del pedido.", "correct": false, "explanation": "No hay una capa de orquestación implícita que elija herramientas a partir de un campo. El modelo conduce la selección de herramientas."}, {"letter": "B", "text": "El agente sigue un árbol de decisión preconfigurado que mapea atributos del pedido a llamadas de herramienta específicas.", "correct": false, "explanation": "Los bucles agénticos son impulsados por el modelo, no por árboles de decisión. Los árboles codificados son lo opuesto a aquello para lo que sirve el patrón de agente."}, {"letter": "C", "text": "Los detalles del pedido se agregan a la conversación y el modelo razona sobre qué acción tomar.", "correct": true, "explanation": "Correcto. El bucle agéntico funciona agregando mensajes de `tool_result` a la conversación y dejando que el modelo decida el siguiente paso en cada turno. Así es como se resuelve 45 días → reembolso vs. escalar."}, {"letter": "D", "text": "El agente ejecuta los pasos restantes en una secuencia de herramientas planificada al inicio de la solicitud.", "correct": false, "explanation": "No hay un plan comprometido por adelantado; el agente elige cada siguiente paso según el contexto más reciente."}], "correct": "C", "task_id": "1.1", "objective": "Design and implement agentic loops for autonomous task execution", "group": "A"}, {"id": "m40", "domain": 1, "scenario": null, "situation": "Un cliente envía: \"Esto es frustrante. Ya expliqué mi problema dos veces y no se está resolviendo nada. Quiero hablar con una persona real AHORA.\" El agente aún no ha llamado a ninguna herramienta para investigar su cuenta.", "question": "¿Qué debería hacer el agente?", "options": [{"letter": "A", "text": "Reconocer la frustración y hacer una pregunta dirigida para entender el problema específico antes de escalar.", "correct": true, "explanation": "Correcto. El cliente dijo \"dos veces\", pero aún no tienes contexto. Una pregunta enfocada que reconozca la situación te da una oportunidad de resolución en el primer contacto sin desestimar la frustración ni retrasar un posible traspaso."}, {"letter": "B", "text": "Explicar brevemente con qué puede ayudar el agente y ofrecer resolver el problema rápidamente, escalando solo si el cliente repite su solicitud.", "correct": false, "explanation": "Lanzarse a enumerar capacidades ante un cliente frustrado que pidió un humano se percibe como desdeñoso."}, {"letter": "C", "text": "Llamar de inmediato a `escalate_to_human` con el historial de la conversación.", "correct": false, "explanation": "Escalar sin contexto de herramientas crea un traspaso en frío donde el humano también empieza desde cero."}, {"letter": "D", "text": "Primero llamar a `get_customer` y `lookup_order` para reunir contexto de la cuenta y luego escalar a un agente humano.", "correct": false, "explanation": "Investigar sin preguntar añade latencia y no respeta la solicitud del cliente. Una sola pregunta que reconozca la situación es más rápida y respetuosa."}], "correct": "A", "task_id": "5.2", "objective": "Design effective escalation and ambiguity resolution patterns", "group": "C"}, {"id": "m41", "domain": 1, "scenario": null, "situation": "Tu agente está manejando una disputa de facturación. Tras llamar a `get_customer` y `lookup_order`, identifica que la disputa involucra un error de precios promocionales que requiere aprobación de un gerente, más allá del nivel de autorización del agente.", "question": "¿Cómo debería el flujo de trabajo manejar este escalamiento a mitad del proceso?", "options": [{"letter": "A", "text": "Llamar a `escalate_to_human` pasando solo el mensaje original del cliente.", "correct": false, "explanation": "Descarta el contexto derivado de las herramientas que el agente acaba de reunir, forzando al humano a rehacer la investigación."}, {"letter": "B", "text": "Compilar un traspaso estructurado con los detalles del cliente, la información del pedido y el problema identificado antes de llamar a `escalate_to_human`.", "correct": true, "explanation": "Correcto. Un resumen estructurado (quién, qué pedido, qué problema, por qué excede la autorización) le permite al agente humano retomar al instante. Ese es el patrón de escalamiento a mitad del proceso."}, {"letter": "C", "text": "Intentar el reembolso con `process_refund` de todos modos, escalando solo si el sistema rechaza la transacción.", "correct": false, "explanation": "Exceder la autorización a sabiendas es una violación de política, no algo que se deba intentar con la esperanza de que el sistema lo detecte."}, {"letter": "D", "text": "Persistir la conversación completa y el historial de respuestas de las herramientas en una base de datos, y luego llamar a `escalate_to_human` con un ID de referencia.", "correct": false, "explanation": "Añade infraestructura y un paso de búsqueda adicional cuando un resumen estructurado en línea es más simple y rápido."}], "correct": "B", "task_id": "1.4", "objective": "Implement multi-step workflows with enforcement and handoff patterns", "group": "A"}, {"id": "g7", "domain": 2, "scenario": "Sistema de investigación multiagente", "situation": "Los registros de producción muestran un patrón persistente: solicitudes como \"analiza el informe trimestral subido\" se enrutan al agente de búsqueda web el 45% del tiempo en lugar de al agente de análisis de documentos. Revisando las definiciones de herramientas, encuentras que el agente de búsqueda web tiene una herramienta `analyze_content` descrita como \"analiza contenido y extrae información clave\", mientras que el agente de análisis de documentos tiene una herramienta `analyze_document` descrita como \"analiza documentos y extrae información clave\". ¿Cómo deberías corregir el problema de enrutamiento?", "question": "¿Cómo deberías corregir el problema de enrutamiento?", "options": [{"letter": "A", "text": "Agregar un clasificador de pre-enrutamiento que detecte si el usuario se refiere a archivos subidos o contenido web antes de que el coordinador decida la delegación.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Renombrar la herramienta de búsqueda web a `extract_web_results` y actualizar su descripción a \"procesa y devuelve información obtenida de búsqueda web y URLs\".", "correct": true, "explanation": "Renombrar la herramienta de búsqueda web a `extract_web_results` y actualizar su descripción para referenciar explícitamente la búsqueda web y las URLs elimina directamente la causa raíz al eliminar el solapamiento semántico entre los nombres y descripciones de las dos herramientas. Esto hace inequívoco el propósito de cada herramienta, permitiendo al coordinador distinguir confiablemente análisis de documentos de búsqueda web."}, {"letter": "C", "text": "Agregar ejemplos few-shot al prompt del coordinador mostrando el enrutamiento correcto: \"El usuario sube un informe trimestral → agente de análisis de documentos\" y \"El usuario pregunta sobre una página web → agente de búsqueda web\".", "correct": false, "explanation": ""}, {"letter": "D", "text": "Expandir la descripción de la herramienta de análisis de documentos con ejemplos de uso como \"Usar para PDFs subidos, documentos de Word y hojas de cálculo\", dejando la herramienta de búsqueda web sin cambios.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "2.1", "objective": "Design effective tool interfaces with clear descriptions and boundaries", "group": "J"}, {"id": "g10", "domain": 2, "scenario": "Sistema de investigación multiagente", "situation": "En tu diseño del sistema, le diste al agente de análisis de documentos acceso a una herramienta de propósito general `fetch_url` para que pudiera descargar documentos por URL. Los registros de producción muestran que este agente ahora descarga frecuentemente páginas de resultados de motores de búsqueda para realizar búsquedas web ad hoc—comportamiento que debería enrutarse a través del agente de búsqueda web—causando resultados inconsistentes. ¿Qué corrección es más efectiva?", "question": "¿Qué corrección es más efectiva?", "options": [{"letter": "A", "text": "Reemplazar `fetch_url` con una herramienta `load_document` que valide que las URLs apunten a formatos de documento.", "correct": true, "explanation": "Reemplazar una herramienta de propósito general con una herramienta específica para documentos que valida URLs contra formatos de documento corrige la causa raíz limitando la capacidad a nivel de la interfaz. Esto sigue el principio de menor privilegio, haciendo imposible el comportamiento de búsqueda no deseado en lugar de meramente desincentivarlo."}, {"letter": "B", "text": "Eliminar `fetch_url` del agente de análisis de documentos y enrutar toda obtención de URL a través del coordinador hacia el agente de búsqueda web.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Implementar un filtro que bloquee llamadas de `fetch_url` a dominios conocidos de motores de búsqueda mientras permite otras URLs.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Agregar instrucciones al prompt del agente de análisis de documentos indicando que `fetch_url` solo debe usarse para descargar URLs de documentos, no para buscar.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "2.3", "objective": "Distribute tools appropriately across agents and configure tool choice", "group": "B"}, {"id": "g15", "domain": 2, "scenario": "Sistema de investigación multiagente", "situation": "En pruebas, observas que el agente de síntesis a menudo necesita verificar afirmaciones específicas mientras fusiona resultados. Actualmente, cuando se necesita verificación, el agente de síntesis devuelve el control al coordinador, que llama al agente de búsqueda web y luego reinvoca la síntesis con los resultados. Esto añade 2–3 bucles extra por tarea y aumenta la latencia un 40%. Tu evaluación muestra que el 85% de estas verificaciones son comprobaciones simples de hechos (fechas, nombres, estadísticas) y el 15% requiere investigación más profunda. ¿Qué enfoque reduce más efectivamente la sobrecarga preservando la confiabilidad del sistema?", "question": "¿Cuál es el enfoque más efectivo?", "options": [{"letter": "A", "text": "Dar al agente de síntesis acceso a todas las herramientas de búsqueda web para que pueda manejar cualquier necesidad de verificación directamente sin bucles del coordinador.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Hacer que el agente de síntesis acumule todas las necesidades de verificación y las devuelva como un lote al coordinador al final, que las envía todas al agente de búsqueda web a la vez.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Hacer que el agente de búsqueda web cachee proactivamente contexto extra alrededor de cada fuente durante la investigación inicial en anticipación a que la síntesis necesite verificación.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Dar al agente de síntesis una herramienta `verify_fact` de alcance limitado para comprobaciones simples, mientras se enrutan las verificaciones complejas a través del coordinador al agente de búsqueda web.", "correct": true, "explanation": "Una herramienta de verificación de hechos de alcance limitado permite al agente de síntesis manejar el 85% de las comprobaciones simples directamente, eliminando la mayoría de los bucles, mientras se preserva la ruta de delegación del coordinador para el 15% de verificaciones complejas. Esto aplica el menor privilegio mientras reduce significativamente la latencia."}], "correct": "D", "task_id": "2.3", "objective": "Distribute tools appropriately across agents and configure tool choice", "group": "B"}, {"id": "g18", "domain": 2, "scenario": "Claude Code para Integración Continua", "situation": "Tu componente de revisión de código es iterativo: Claude analiza el archivo modificado, luego puede solicitar archivos relacionados (imports, clases base, pruebas) mediante llamadas a herramientas para entender el contexto antes de proporcionar la retroalimentación final. Tu aplicación define una herramienta que permite a Claude solicitar contenido de archivos; Claude llama la herramienta, obtiene resultados y continúa el análisis. Estás evaluando procesamiento en lote para reducir el costo de la API. ¿Cuál es la principal limitación técnica al considerar procesamiento en lote para este flujo?", "question": "¿Cuál es la principal limitación técnica?", "options": [{"letter": "A", "text": "El procesamiento en lote no incluye IDs de correlación para mapear las salidas de vuelta a las solicitudes de entrada.", "correct": false, "explanation": ""}, {"letter": "B", "text": "El modelo asíncrono no puede ejecutar herramientas a mitad de solicitud y devolver resultados para que Claude continúe el análisis.", "correct": true, "explanation": "Un modelo asíncrono \"fire-and-forget\" de Batch API no tiene mecanismo para interceptar una llamada a herramienta durante una solicitud, ejecutar la herramienta y devolver resultados para que Claude continúe el análisis. Esto es fundamentalmente incompatible con flujos iterativos de llamadas a herramientas que requieren múltiples rondas de solicitud/respuesta de herramientas dentro de una sola interacción lógica."}, {"letter": "C", "text": "La Batch API no soporta definiciones de herramientas en los parámetros de solicitud.", "correct": false, "explanation": ""}, {"letter": "D", "text": "La latencia de procesamiento en lote de hasta 24 horas es demasiado lenta para retroalimentación de pull requests, aunque el flujo funcionaría de otro modo.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "4.5", "objective": "Design efficient batch processing strategies", "group": "H"}, {"id": "g46", "domain": 2, "scenario": "Agente de soporte al cliente", "situation": "Mientras pruebas, notas que el agente a menudo llama a `get_customer` cuando los usuarios preguntan sobre el estado del pedido, aunque `lookup_order` sería más apropiado. ¿Qué deberías verificar primero para abordar este problema?", "question": "¿Qué deberías verificar primero?", "options": [{"letter": "A", "text": "Implementar un clasificador de preprocesamiento para detectar solicitudes relacionadas con pedidos y enrutarlas directamente a `lookup_order`.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Reducir el número de herramientas disponibles para el agente para simplificar la elección.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar ejemplos few-shot al prompt del sistema cubriendo todos los patrones posibles de solicitud de pedido para mejorar la selección de herramientas.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Verificar las descripciones de las herramientas para asegurar que diferencien claramente el propósito de cada una.", "correct": true, "explanation": "Las descripciones de herramientas son la entrada principal que el modelo usa para decidir qué herramienta llamar. Cuando un agente elige consistentemente la herramienta equivocada, el primer paso de diagnóstico es verificar que las descripciones de herramientas separen claramente el propósito y los límites de uso de cada una."}], "correct": "D", "task_id": "2.1", "objective": "Design effective tool interfaces with clear descriptions and boundaries", "group": "J"}, {"id": "g51", "domain": 2, "scenario": "Agente de soporte al cliente", "situation": "Los registros de producción muestran que en el 12% de los casos tu agente omite `get_customer` y llama a `lookup_order` directamente usando solo el nombre proporcionado por el cliente, a veces llevando a cuentas mal identificadas y reembolsos incorrectos. ¿Qué cambio corrige más efectivamente este problema de confiabilidad?", "question": "¿Qué cambio es más efectivo?", "options": [{"letter": "A", "text": "Agregar ejemplos few-shot que muestren que el agente siempre llama primero a `get_customer`, incluso cuando los clientes proporcionan voluntariamente detalles del pedido.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Implementar un clasificador de enrutamiento que analice cada solicitud y habilite solo un subconjunto de herramientas apropiadas para ese tipo de solicitud.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar una precondición programática que bloquee `lookup_order` y `process_refund` hasta que `get_customer` devuelva un identificador de cliente verificado.", "correct": true, "explanation": "Una precondición programática proporciona una garantía determinista de que se sigue la secuenciación requerida. Es el enfoque más efectivo porque elimina la posibilidad de saltarse la verificación, independientemente del comportamiento del LLM."}, {"letter": "D", "text": "Fortalecer el prompt del sistema indicando que la verificación del cliente vía `get_customer` es obligatoria antes de cualquier operación de pedido.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "1.5", "objective": "Apply Agent SDK hooks for tool call interception and data normalization", "group": "E"}, {"id": "g55", "domain": 2, "scenario": "Agente de soporte al cliente", "situation": "Tu herramienta `get_customer` devuelve todas las coincidencias al buscar por nombre. Actualmente, cuando hay múltiples resultados, Claude elige al cliente con el pedido más reciente, pero los datos de producción muestran que esto selecciona la cuenta equivocada el 15% del tiempo para coincidencias ambiguas. ¿Cómo deberías abordar esto?", "question": "¿Cómo deberías abordar esto?", "options": [{"letter": "A", "text": "Implementar un sistema de puntuación de confianza que actúe autónomamente por encima del 85% de confianza y solicite aclaración por debajo del umbral.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Instruir a Claude para solicitar un identificador adicional (email, teléfono o número de pedido) cuando `get_customer` devuelva múltiples coincidencias antes de tomar cualquier acción específica del cliente.", "correct": true, "explanation": "Pedir al usuario un identificador adicional es la forma más confiable de resolver ambigüedad porque el usuario tiene conocimiento definitivo de su identidad. Un turno conversacional extra es un precio pequeño a pagar para eliminar una tasa de error del 15% causada por elegir la cuenta equivocada."}, {"letter": "C", "text": "Modificar `get_customer` para devolver solo una sola coincidencia más probable basada en un algoritmo de ranking, eliminando la ambigüedad.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Agregar ejemplos few-shot al prompt demostrando razonamiento correcto y secuenciación de herramientas para coincidencias ambiguas.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "2.1", "objective": "Design effective tool interfaces with clear descriptions and boundaries", "group": "J"}, {"id": "g57", "domain": 2, "scenario": "Agente de soporte al cliente", "situation": "Los registros de producción muestran que el agente a menudo llama a `get_customer` cuando los usuarios preguntan sobre pedidos (por ejemplo, \"verifica mi pedido #12345\") en lugar de llamar a `lookup_order`. Ambas herramientas tienen descripciones mínimas (\"Obtiene información del cliente\" / \"Obtiene detalles del pedido\") y aceptan formatos de identificadores de aspecto similar. ¿Cuál es el primer paso más efectivo para mejorar la confiabilidad de selección de herramientas?", "question": "¿Cuál es el primer paso más efectivo?", "options": [{"letter": "A", "text": "Implementar una capa de enrutamiento que analice la entrada del usuario antes de cada turno y preseleccione la herramienta correcta basada en palabras clave detectadas y patrones de ID.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Combinar ambas herramientas en una sola `lookup_entity` que acepte cualquier identificador y decida internamente qué backend consultar.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar ejemplos few-shot al prompt del sistema demostrando patrones correctos de selección de herramientas, con 5–8 ejemplos enrutando consultas relacionadas con pedidos a `lookup_order`.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Expandir la descripción de cada herramienta para incluir formatos de entrada, consultas de ejemplo, casos límite y límites explicando cuándo usarla versus herramientas similares.", "correct": true, "explanation": "Expandir las descripciones de herramientas con formatos de entrada, consultas de ejemplo, casos límite y límites claros corrige directamente la causa raíz—descripciones mínimas que no dan al LLM suficiente información para distinguir herramientas similares. Es un primer paso de bajo esfuerzo y alto impacto que mejora el mecanismo principal que el LLM usa para selección de herramientas."}], "correct": "D", "task_id": "2.1", "objective": "Design effective tool interfaces with clear descriptions and boundaries", "group": "J"}, {"id": "g59", "domain": 2, "scenario": "Agente de soporte al cliente", "situation": "Los registros de producción muestran que el agente malinterpreta salidas de tus herramientas MCP: marcas de tiempo Unix de `get_customer`, fechas ISO 8601 de `lookup_order` y códigos de estado numéricos (1=pendiente, 2=enviado). Algunas herramientas son servidores MCP de terceros que no puedes modificar. ¿Qué enfoque para normalización de formato de datos es más mantenible?", "question": "¿Qué enfoque es más mantenible?", "options": [{"letter": "A", "text": "Usar un hook PostToolUse para interceptar las salidas de herramientas y aplicar transformaciones de formato antes de que el agente las procese.", "correct": true, "explanation": "Un hook PostToolUse proporciona un punto centralizado y determinista para interceptar y normalizar todas las salidas de herramientas—incluyendo datos de servidores MCP de terceros—antes de que el agente las procese. Es más mantenible porque las transformaciones viven en el código y aplican uniformemente, en lugar de depender de la interpretación del LLM."}, {"letter": "B", "text": "Modificar las herramientas que controlas para que devuelvan formatos legibles por humanos y crear wrappers para las herramientas de terceros.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Crear una herramienta `normalize_data` que el agente llame después de cada recuperación de datos para transformar valores.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Agregar documentación detallada de formato al prompt del sistema explicando las convenciones de datos de cada herramienta.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "1.5", "objective": "Apply Agent SDK hooks for tool call interception and data normalization", "group": "E"}, {"id": "g61", "domain": 2, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Tu herramienta `remove_team_member` usa un parámetro `dry_run: boolean` para previsualizar impactos antes de ejecutar. El monitoreo de producción muestra que el agente omite el paso de previsualización y llama directamente con `dry_run=false`. Necesitas garantizar que cada eliminación esté precedida por una previsualización que el usuario confirme explícitamente.", "question": "¿Cuál es el enfoque más confiable?", "options": [{"letter": "A", "text": "Agregar validación en el servidor que permita `dry_run=false` solo cuando una llamada con `dry_run=true` con parámetros idénticos ocurrió en los últimos 60 segundos.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Anotar la herramienta como que requiere confirmación y configurar la capa de orquestación para solicitar aprobación del usuario antes de reenviar llamadas a herramientas anotadas.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar instrucciones detalladas y ejemplos few-shot en la descripción de la herramienta exigiendo que el agente siempre llame primero con `dry_run=true` y espere la confirmación del usuario.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Reemplazar con dos herramientas: `preview_remove_member` devuelve detalles del impacto y un token de confirmación de uso único; `execute_remove_member` requiere ese token, vinculando la ejecución a la previsualización.", "correct": true, "explanation": "El enfoque de vinculación por token hace arquitectónicamente imposible ejecutar sin una previsualización previa. La herramienta de ejecución literalmente requiere un token que solo la herramienta de previsualización puede generar. Es el único enfoque que aplica la restricción a nivel de código, no dependiendo del cumplimiento de instrucciones por el LLM (C), heurísticas de tiempo (A) o infraestructura de orquestación (B)."}], "correct": "D", "task_id": "2.1", "objective": "Design effective tool interfaces with clear descriptions and boundaries", "group": "J"}, {"id": "g62", "domain": 2, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "El monitoreo de producción muestra que tu herramienta `search_catalog` falla el 12% del tiempo: el 8% son tiempos de espera de red que tienen éxito al reintentarse, y el 4% son errores de sintaxis de consulta que nunca tienen éxito. Actualmente ambos tipos de error se devuelven de forma idéntica, causando reintentos desperdiciados.", "question": "¿Cómo deberías modificar el manejo de errores de la herramienta?", "options": [{"letter": "A", "text": "Agregar ejemplos few-shot al prompt del sistema demostrando cómo distinguir errores de red de errores de sintaxis.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Aplicar lógica de reintento con retroceso exponencial uniformemente a todos los errores.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Implementar reintento automático con retroceso para tiempos de espera de red dentro de la herramienta; devolver errores de sintaxis inmediatamente con detalles de validación de parámetros.", "correct": true, "explanation": "Manejar reintentos a nivel de la herramienta para errores transitorios es la abstracción correcta—la herramienta tiene conocimiento definitivo del tipo de error y puede implementar lógica de reintento determinista sin depender del agente para interpretar un indicador (D) o seguir instrucciones del prompt (A). El retroceso uniforme (B) desperdicia tiempo en errores de sintaxis que nunca tendrán éxito."}, {"letter": "D", "text": "Devolver todos los errores con un indicador booleano `retryable` y detalles del tipo de error.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "2.2", "objective": "Implement structured error responses for MCP tools", "group": "J"}, {"id": "m3", "domain": 2, "scenario": null, "situation": "El agente de análisis de documentos tiene una única herramienta `analyze_document` que recibe un documento y un parámetro de instrucción en texto libre. Durante la evaluación, solicitudes como \"extrae las métricas financieras clave\" suelen devolver resúmenes narrativos, mientras que \"resume la metodología\" a veces devuelve tablas de datos en bruto. El agente de síntesis reporta que el 35% de los resultados de análisis requieren nuevas solicitudes con instrucciones aclaradas.", "question": "¿Cuál es la forma más eficaz de mejorar la fiabilidad?", "options": [{"letter": "A", "text": "Dividir la herramienta genérica en herramientas con propósito específico —`extract_data_points`, `summarize_content`, `verify_claim_against_source`— cada una con contratos de entrada/salida definidos.", "correct": true, "explanation": "Correcto. Las instrucciones en texto libre dejan la semántica en la prosa, que el modelo interpreta de forma inconsistente. Las herramientas con propósito específico le dan al modelo un contrato explícito y bien tipado entre el cual elegir."}, {"letter": "B", "text": "Mantener la herramienta única pero añadir un parámetro de enumeración `analysis_type` que exija elegir explícitamente entre los modos de extracción, resumen y verificación.", "correct": false, "explanation": "Mejor que el texto libre, pero sigue siendo una única herramienta con una única forma de salida. La salida aún tiene que ser una cadena genérica, y el modelo puede equivocarse de modo. Las herramientas separadas imponen contratos de entrada/salida distintos."}, {"letter": "C", "text": "Que el coordinador preclasifique cada solicitud de análisis antes de pasar las instrucciones al agente de análisis de documentos.", "correct": false, "explanation": "Traslada la ambigüedad aguas arriba sin resolverla. El contrato de la herramienta sigue siendo difuso; la clasificación del coordinador es una superficie de error más."}, {"letter": "D", "text": "Mejorar la descripción de la herramienta con ejemplos detallados que muestren cómo distintas formulaciones de las instrucciones deberían mapearse a distintos formatos de salida.", "correct": false, "explanation": "Los ejemplos ayudan, pero la fiabilidad en el uso de herramientas viene primero de límites claros y esquemas de salida, no de una ingeniería de prompts heroica sobre una herramienta genérica."}], "correct": "A", "task_id": "2.1", "objective": "Design effective tool interfaces with clear descriptions and boundaries", "group": "J"}, {"id": "m16", "domain": 2, "scenario": null, "situation": "Después de integrar un servidor MCP local que provee herramientas de análisis de código (`analyze_dependencies`, `find_dead_code`, `calculate_complexity`), verificas que el servidor está saludable y que las herramientas aparecen en la respuesta de tools/list. Sin embargo, observas que el agente usa consistentemente Grep para buscar sentencias de importación en lugar de llamar a `analyze_dependencies`, incluso cuando los usuarios preguntan explícitamente por \"dependencias de código\". Al examinar las definiciones de las herramientas se observa: MCP: `analyze_dependencies` - \"Analiza el grafo de dependencias\" Integrada: Grep - \"Busca contenido de archivos según un patrón usando expresiones regulares. Devuelve las líneas coincidentes con números de línea y contexto circundante.\"", "question": "¿Cuál es el enfoque más efectivo para mejorar la selección de herramientas MCP por parte del agente?", "options": [{"letter": "A", "text": "Eliminar Grep de las herramientas disponibles cuando el servidor MCP está conectado, para eliminar el solapamiento funcional.", "correct": false, "explanation": "Mutilar una herramienta general para forzar la adopción de una especializada perjudica otros casos de uso legítimos de Grep."}, {"letter": "B", "text": "Agregar instrucciones de enrutamiento al prompt del sistema que indiquen que las preguntas relacionadas con dependencias deben usar herramientas MCP en lugar de Grep.", "correct": false, "explanation": "El enrutamiento a nivel de prompt puede ayudar, pero la causa raíz es que la descripción de la herramienta MCP es más pobre que la de Grep. Corrige primero las descripciones de las herramientas."}, {"letter": "C", "text": "Dividir `analyze_dependencies` en herramientas granulares (`list_imports`, `resolve_transitive_deps`, `detect_circular_deps`) para que cada una tenga un propósito enfocado y menos propenso a solaparse con Grep.", "correct": false, "explanation": "Dividir a veces es lo correcto, pero aquí las herramientas hermanas seguirían teniendo descripciones débiles. El mismo error de selección reaparecería."}, {"letter": "D", "text": "Ampliar las descripciones de las herramientas MCP para detallar sus capacidades y resultados; por ejemplo, \"Construye un grafo de dependencias que muestra importaciones directas, dependencias transitivas y ciclos.\"", "correct": true, "explanation": "Correcto. La selección de herramientas se guía por las descripciones que ve el modelo. Una descripción de una línea como 'Analiza el grafo de dependencias' pierde frente a la descripción rica de Grep. Refuerza la descripción de la herramienta MCP."}], "correct": "D", "task_id": "2.1", "objective": "Design effective tool interfaces with clear descriptions and boundaries", "group": "J"}, {"id": "m17", "domain": 2, "scenario": null, "situation": "Un ingeniero le pide al agente que encuentre a todos los llamadores de una función antes de eliminarla. La función está definida en una biblioteca central, pero también se expone a través de módulos envoltorio que la renombran para usos específicos del dominio (por ejemplo, calculateTax en la biblioteca se convierte en computeOrderTax en el módulo de pedidos).", "question": "¿Qué estrategia de exploración identificará de forma más confiable a todos los llamadores?", "options": [{"letter": "A", "text": "Leer la biblioteca y los módulos envoltorio para identificar todos los nombres expuestos de la función, y luego hacer Grep de cada nombre en todo el código base.", "correct": true, "explanation": "Correcto. Hay que enumerar todos los nombres bajo los que se expone la función; de lo contrario, los envoltorios renombrados ocultan llamadores. Lee los módulos relevantes, reúne todos los alias y luego haz grep de cada uno."}, {"letter": "B", "text": "Usar Grep para encontrar todos los archivos que importan de la biblioteca o de los módulos envoltorio, y luego leer cada archivo para comprobar si usa la función.", "correct": false, "explanation": "Omite importaciones dinámicas, reexportaciones y cadenas de llamadas indirectas. Además, escala mal."}, {"letter": "C", "text": "Usar Grep para buscar el nombre original de la función en todo el código base.", "correct": false, "explanation": "El nombre original no aparecerá en ningún lugar donde un envoltorio lo haya renombrado; te perderías una clase importante de llamadores."}, {"letter": "D", "text": "Buscar el nombre de la función en la documentación del proyecto para entender los patrones de uso previstos y navegar a los puntos de integración documentados.", "correct": false, "explanation": "La documentación es incompleta y a menudo está desactualizada. No puedes eliminar una función de forma segura basándote en evidencia a nivel de documentación."}], "correct": "A", "task_id": "5.4", "objective": "Manage context effectively in large codebase exploration", "group": "G"}, {"id": "m27", "domain": 2, "scenario": null, "situation": "Después de agregar un servidor MCP con herramientas especializadas de refactorización de código (`extract_function`, `rename_variable`, `inline_function`), notas que el agente sigue usando manipulación básica de texto mediante comandos Write y sed de Bash para las tareas de refactorización. El servidor MCP está conectado y saludable. Al examinar la configuración, encuentras que cada herramienta MCP tiene una descripción mínima como \"`extract_function`: extrae una función del código.\"", "question": "¿Cuál es la forma más efectiva de mejorar la adopción de las herramientas de refactorización MCP?", "options": [{"letter": "A", "text": "Implementar un clasificador de solicitudes que detecte la intención de refactorizar y enrute automáticamente esas solicitudes al servidor MCP antes de que el agente las procese.", "correct": false, "explanation": "Un preclasificador es un sistema aparte que mantener y puede enrutar mal. El arreglo más barato es hacer que las descripciones de las herramientas sean lo bastante sólidas para que el agente las elija por su cuenta."}, {"letter": "B", "text": "Eliminar la herramienta Write de la configuración del agente durante las sesiones de refactorización para que deba usar las herramientas MCP para las modificaciones de código.", "correct": false, "explanation": "Despojar herramientas generales fuerza la adopción por sustracción y rompe casos de uso legítimos de Write."}, {"letter": "C", "text": "Aceptar esto como comportamiento esperado, dado que herramientas más simples como sed son más predecibles que las herramientas de refactorización especializadas.", "correct": false, "explanation": "Capitular anula el propósito de integrar las herramientas de refactorización. La integración está bien; el problema son las descripciones."}, {"letter": "D", "text": "Mejorar las descripciones de las herramientas MCP para explicar cuándo es preferible cada herramienta frente a la manipulación de texto y aclarar las entradas y salidas esperadas.", "correct": true, "explanation": "Correcto. La selección de herramientas se guía por las descripciones que ve Claude. Cuando las herramientas MCP dicen 'extrae una función del código' y Write/sed vienen con documentación rica, Claude elige Write/sed. Refuerza las descripciones."}], "correct": "D", "task_id": "2.1", "objective": "Design effective tool interfaces with clear descriptions and boundaries", "group": "J"}, {"id": "m29", "domain": 2, "scenario": null, "situation": "Tu agente necesita insertar una nueva función auxiliar en medio de un módulo de utilidades de 150 líneas, entre dos funciones existentes. La herramienta Edit falla porque su parámetro `old_string` no puede encontrar texto único con el cual coincidir: el archivo tiene docstrings, nombres de variables y patrones estructurales repetitivos.", "question": "¿Cuál es la forma más confiable de completar esta inserción?", "options": [{"letter": "A", "text": "Usar Edit con un `old_string` extremadamente largo que capture más de 30 líneas de contexto para garantizar la unicidad", "correct": false, "explanation": "Las cadenas de coincidencia largas y frágiles fallan con frecuencia debido a espacios en blanco o ediciones menores y producen errores confusos."}, {"letter": "B", "text": "Usar el parámetro `replace_all` de Edit para apuntar a un patrón común e incrustar la nueva función en el texto de reemplazo", "correct": false, "explanation": "`replace_all` mutaría todas las ocurrencias del patrón, corrompiendo todo el archivo."}, {"letter": "C", "text": "Usar Bash para agregar la definición de la función al final del archivo usando sintaxis heredoc", "correct": false, "explanation": "Agregar al final coloca la función en el lugar equivocado. El requisito es insertarla entre dos funciones existentes."}, {"letter": "D", "text": "Usar Read para cargar el archivo, agregar la función en la ubicación apropiada y luego usar Write para escribir el archivo actualizado", "correct": true, "explanation": "Correcto. Cuando el contrato de coincidencia única de Edit no puede satisfacerse en un archivo repetitivo, recurre a Read → modificar en memoria en la línea prevista → escribir el archivo completo de vuelta con Write."}], "correct": "D", "task_id": "2.5", "objective": "Select and apply built-in tools (Read, Write, Edit, Bash, Grep, Glob) effectively", "group": "F"}, {"id": "m38", "domain": 2, "scenario": null, "situation": "Los registros de producción revelan un manejo de errores inconsistente: cuando `lookup_order` falla, el agente a veces reintenta más de 5 veces (un desperdicio cuando el ID del pedido no existe), a veces escala de inmediato (prematuro ante problemas temporales de red) y a veces pide aclaraciones a los usuarios (inapropiado cuando el problema es un error de permisos del backend). La investigación muestra que tu herramienta MCP devuelve respuestas de error uniformes: {\"isError\": true, \"content\": [{\"type\": \"text\", \"text\": \"Operation failed\"}]}. El agente no puede distinguir entre los tipos de error.", "question": "¿Cuál es la mejora más efectiva?", "options": [{"letter": "A", "text": "Enriquecer las respuestas de error con metadatos estructurados: incluir errorCategory (transient/validation/permission), un booleano isRetryable y una descripción de qué causó la falla.", "correct": true, "explanation": "Correcto. Dale al agente la información que necesita para tomar la decisión correcta: categoría, capacidad de reintento y una causa legible. Eso reemplaza la adivinanza por una política determinista."}, {"letter": "B", "text": "Crear una herramienta MCP `analyze_error` que el agente llame tras cualquier falla para determinar la categoría del error y la acción recomendada.", "correct": false, "explanation": "Añade un viaje de ida y vuelta adicional para algo que la herramienta original ya sabe. Pon los metadatos en la respuesta original."}, {"letter": "C", "text": "Implementar lógica de reintento con retroceso exponencial en tu servidor MCP para todos los errores, devolviendo al agente solo después de agotar los reintentos.", "correct": false, "explanation": "Los reintentos indiscriminados perjudican ante errores permanentes (pedido no encontrado) y ocultan distinciones útiles al agente."}, {"letter": "D", "text": "Agregar ejemplos few-shot al prompt del sistema que demuestren cómo interpretar los patrones de los mensajes de error y seleccionar respuestas apropiadas para cada uno.", "correct": false, "explanation": "Si la herramienta devuelve \"Operation failed\" ante cada falla, ningún número de few-shots puede extraer información de categoría que no está ahí."}], "correct": "A", "task_id": "2.2", "objective": "Implement structured error responses for MCP tools", "group": "J"}, {"id": "m43", "domain": 2, "scenario": null, "situation": "Al implementar tu herramienta MCP `lookup_order`, el backend a veces devuelve errores (por ejemplo, \"Order not found\" o fallas temporales de la base de datos).", "question": "¿Cuál es el patrón correcto para comunicar estos errores de vuelta al agente?", "options": [{"letter": "A", "text": "Registrar el error del lado del servidor y devolver un resultado vacío para evitar confundir al modelo.", "correct": false, "explanation": "Devolver éxitos vacíos hace que el agente piense que no existen datos, en lugar de que algo salió mal: una confusión distinta y peor."}, {"letter": "B", "text": "Devolver el mensaje de error en el contenido del resultado de la herramienta con la bandera isError establecida en true.", "correct": true, "explanation": "Correcto. El patrón diseñado de MCP: pon el texto del error en el campo de contenido y marca isError=true. Claude ve tanto la bandera de falla como un mensaje legible sobre el cual razonar."}, {"letter": "C", "text": "Lanzar una excepción desde el manejador de la herramienta para que el framework del agente pueda capturarla y registrarla.", "correct": false, "explanation": "Las excepciones no capturadas rompen el protocolo de la herramienta y no le dan al modelo nada con qué razonar."}, {"letter": "D", "text": "Devolver una respuesta exitosa con un campo \"status\" que indique el tipo de error.", "correct": false, "explanation": "Los campos \"status\" ad hoc varían entre herramientas y el modelo no tiene una forma estándar de interpretarlos. isError es el estándar."}], "correct": "B", "task_id": "2.2", "objective": "Implement structured error responses for MCP tools", "group": "J"}, {"id": "m44", "domain": 2, "scenario": null, "situation": "Tu herramienta `process_refund` devuelve dos tipos de errores: errores técnicos (\"503 Service Unavailable\", \"Connection timeout\") que son transitorios (5% de las llamadas), y errores de negocio (\"Order exceeds 30-day return window\", \"Item already refunded\") que son permanentes (12% de las llamadas). El monitoreo muestra que el agente desperdicia entre 3 y 4 turnos reintentando errores de negocio que nunca pueden tener éxito. Actualmente, ambos tipos de error solo devuelven un mensaje de texto plano a Claude.", "question": "¿Cuál es la forma más efectiva de reducir los reintentos desperdiciados y a la vez mejorar la calidad de la respuesta hacia el cliente?", "options": [{"letter": "A", "text": "Devolver respuestas de error estructuradas con retryable: false para los errores de negocio y una explicación amigable para el cliente que Claude pueda usar.", "correct": true, "explanation": "Correcto. Una bandera retryable le dice a Claude de forma determinista \"no reintentar\", y un mensaje listo y amigable para el cliente mejora la respuesta saliente. Resuelve ambos problemas a la vez."}, {"letter": "B", "text": "Agregar ejemplos few-shot que muestren cómo distinguir errores reintentables de no reintentables analizando el texto del mensaje de error.", "correct": false, "explanation": "Depender de que el modelo analice cadenas de error como texto es frágil, y es exactamente la inestabilidad que ves hoy."}, {"letter": "C", "text": "Agregar una herramienta `check_refund_eligibility` que deba llamarse antes de `process_refund` para prevenir violaciones de reglas de negocio.", "correct": false, "explanation": "Útil en principio, pero añade un viaje de ida y vuelta a cada reembolso para protegerse del 12% de los casos, y no ayuda cuando `process_refund` aún falla por otras razones de negocio."}, {"letter": "D", "text": "Implementar lógica de reintento automático a nivel de la herramienta solo para los errores técnicos, pasando los errores de negocio a Claude sin reintentos.", "correct": false, "explanation": "Ocultar los reintentos transitorios dentro de la herramienta puede enmascarar la latencia y saca al modelo del circuito en las decisiones de recuperación. Los errores de negocio también siguen llegando como una cadena plana, por lo que la respuesta hacia el cliente no mejora."}], "correct": "A", "task_id": "2.2", "objective": "Implement structured error responses for MCP tools", "group": "J"}, {"id": "m55", "domain": 2, "scenario": null, "situation": "Tu pipeline usa una herramienta llamada `extract_metadata` con un esquema JSON para los detalles de los artículos. También has definido herramientas `lookup_citations` y `verify_doi` para enriquecimiento. Durante las pruebas, notas que cuando los usuarios incluyen solicitudes como \"extract the metadata and tell me how cited it is\", Claude a veces llama primero a `lookup_citations`, que falla porque necesita el DOI que `extract_metadata` proporcionaría.", "question": "¿Cuál es la forma más efectiva de asegurar que la extracción de metadatos estructurados ocurra primero?", "options": [{"letter": "A", "text": "Configurar `tool_choice` en \"any\" para que Claude deba usar una herramienta, combinado con instrucciones en el prompt del sistema que prioricen `extract_metadata`.", "correct": false, "explanation": "'any' fuerza una llamada a herramienta pero no fuerza la correcta. Aun verías a `lookup_citations` elegida primero."}, {"letter": "B", "text": "Configurar `tool_choice` en \"auto\" y reordenar las definiciones de herramientas para que `extract_metadata` aparezca primera en el array de herramientas, ya que Claude prioriza las herramientas listadas antes.", "correct": false, "explanation": "No hay una preferencia de orden documentada en la que confiar; esto asume un comportamiento que no es contractual."}, {"letter": "C", "text": "Configurar `tool_choice` en {\"type\": \"tool\", \"name\": \"`extract_metadata`\"} y procesar las solicitudes de enriquecimiento en turnos posteriores tras recibir los metadatos extraídos.", "correct": true, "explanation": "Correcto. `tool_choice`=herramienta-específica fuerza de forma determinista a `extract_metadata` en el primer turno. Luego devuelves el control a 'auto' para que el modelo use el enriquecimiento de citas/DOI con los metadatos en contexto."}, {"letter": "D", "text": "Configurar `tool_choice` en {\"type\": \"tool\", \"name\": \"`extract_metadata`\"} para cada llamada a la API en el pipeline, asegurando que Claude siempre extraiga metadatos antes de que pueda ocurrir cualquier enriquecimiento.", "correct": false, "explanation": "Fijar `extract_metadata` en cada llamada impide que las herramientas de enriquecimiento se usen alguna vez."}], "correct": "C", "task_id": "2.3", "objective": "Distribute tools appropriately across agents and configure tool choice", "group": "B"}, {"id": "g16", "domain": 3, "scenario": "Claude Code para Integración Continua", "situation": "Tu pipeline de CI ejecuta el CLI de Claude Code (en modo `--print`) usando CLAUDE.md para proporcionar contexto del proyecto a la revisión de código, y los desarrolladores generalmente encuentran las revisiones sustantivas. Sin embargo, reportan que integrar los hallazgos al flujo es difícil—Claude produce párrafos narrativos que deben copiarse manualmente a los comentarios del PR. El equipo quiere publicar automáticamente cada hallazgo como un comentario inline separado del PR en el lugar relevante del código, lo que requiere datos estructurados con ruta de archivo, número de línea, nivel de severidad y corrección sugerida. ¿Qué enfoque es más efectivo?", "question": "¿Cuál es el enfoque más efectivo?", "options": [{"letter": "A", "text": "Agregar una sección \"Output Format for Review\" a CLAUDE.md con ejemplos de hallazgos estructurados para que Claude aprenda el formato esperado del contexto del proyecto.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Usar las flags del CLI `--output-format json` y `--json-schema` para imponer hallazgos estructurados, luego parsear la salida para publicar comentarios inline a través de la API de GitHub.", "correct": true, "explanation": "Usar `--output-format json` con `--json-schema` impone salida estructurada a nivel del CLI, garantizando JSON bien formado con los campos requeridos (ruta de archivo, número de línea, severidad, corrección sugerida) que pueden parsearse y publicarse confiablemente como comentarios inline del PR a través de la API de GitHub. Aprovecha capacidades incorporadas del CLI diseñadas específicamente para salida estructurada."}, {"letter": "C", "text": "Incluir instrucciones de formato explícitas en el prompt de revisión que requieran que cada hallazgo siga una plantilla parseable como `[FILE:ruta] [LINE:n] [SEVERITY:nivel] ...`.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Mantener el formato de revisión narrativo pero agregar un paso de resumición que use Claude para generar un resumen JSON estructurado de los hallazgos.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "3.6", "objective": "Integrate Claude Code into CI/CD pipelines", "group": "D"}, {"id": "g26", "domain": 3, "scenario": "Claude Code para Integración Continua", "situation": "Tu script de pipeline ejecuta `claude \"Analyze this pull request for security issues\"`, pero el job se cuelga indefinidamente. Los registros muestran que Claude Code está esperando entrada interactiva. ¿Cuál es el enfoque correcto para ejecutar Claude Code en un pipeline automatizado?", "question": "¿Cuál es el enfoque correcto?", "options": [{"letter": "A", "text": "Agregar una flag `--batch`: `claude --batch \"Analyze this pull request for security issues\"`.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Agregar la flag `-p`: `claude -p \"Analyze this pull request for security issues\"`.", "correct": true, "explanation": "La flag `-p` (o `--print`) es la forma documentada de ejecutar Claude Code de forma no interactiva. Procesa el prompt, imprime el resultado a stdout y sale sin esperar entrada del usuario—ideal para pipelines de CI/CD."}, {"letter": "C", "text": "Redirigir stdin desde `/dev/null`: `claude \"Analyze this pull request for security issues\" < /dev/null`.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Establecer la variable de entorno `CLAUDE_HEADLESS=true` antes de ejecutar el comando.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "3.6", "objective": "Integrate Claude Code into CI/CD pipelines", "group": "D"}, {"id": "g32", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Necesitas agregar Slack como un nuevo canal de notificación. La base de código existente tiene patrones claros y establecidos para canales de email, SMS y push. Sin embargo, la API de Slack ofrece enfoques de integración fundamentalmente diferentes—webhooks entrantes (simple, unidireccional), bot tokens (soportan confirmación de entrega y control programático) o Slack Apps (eventos bidireccionales, requiere aprobación del workspace). Tu tarea dice \"agregar soporte para Slack\" sin especificar el método de integración ni requerir características avanzadas como seguimiento de entrega.", "question": "¿Cómo deberías abordar esta tarea?", "options": [{"letter": "A", "text": "Comenzar en modo de ejecución directa usando webhooks entrantes para coincidir con el patrón existente de notificación unidireccional.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Cambiar a modo de planificación para explorar opciones de integración e implicaciones arquitectónicas, luego presentar una recomendación antes de implementar.", "correct": true, "explanation": "La integración con Slack tiene múltiples enfoques válidos con implicaciones arquitectónicas significativamente diferentes, y los requisitos son ambiguos. El modo de planificación te permite evaluar trade-offs entre webhooks, bot tokens y Slack Apps y alinearte sobre un enfoque antes de la implementación."}, {"letter": "C", "text": "Comenzar en modo de ejecución directa esbozando una clase de canal Slack usando los patrones existentes, posponiendo la decisión del método de integración.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Comenzar en modo de ejecución directa usando un enfoque de bot token para asegurar que sea posible la confirmación de entrega.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "3.4", "objective": "Determine when to use plan mode vs direct execution", "group": "C"}, {"id": "g33", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Tu archivo CLAUDE.md ha crecido a más de 400 líneas conteniendo estándares de codificación, convenciones de pruebas, una checklist detallada de revisión de PRs, instrucciones de despliegue y procedimientos de migración de base de datos. Quieres que Claude siga siempre los estándares de codificación y convenciones de pruebas, pero que aplique la guía de revisión de PR, despliegue y migración solo cuando esté haciendo esas tareas.", "question": "¿Qué enfoque de reestructuración es más efectivo?", "options": [{"letter": "A", "text": "Mover toda la guía a archivos Skills separados organizados por tipo de flujo, dejando solo una breve descripción del proyecto en CLAUDE.md.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Mantener todo en CLAUDE.md pero usar sintaxis `@import` para organizar en archivos mantenidos por separado por categoría.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Dividir CLAUDE.md en archivos bajo `.claude/rules/` con patrones glob ligados a rutas para que cada regla cargue solo para los tipos de archivo relevantes.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Mantener los estándares universales en CLAUDE.md y crear Skills para guía específica de flujo (revisión de PR, despliegue, migraciones) con palabras clave de activación.", "correct": true, "explanation": "El contenido de CLAUDE.md se carga en cada sesión, asegurando que los estándares de codificación y las convenciones de pruebas siempre apliquen, mientras que las Skills se invocan bajo demanda cuando Claude detecta palabras clave de activación—ideal para guía específica de flujo como revisión de PR, despliegue y migraciones."}], "correct": "D", "task_id": "3.1", "objective": "Configure CLAUDE.md files with appropriate hierarchy, scoping, and modular organization", "group": "D"}, {"id": "g34", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Estás encargado de reestructurar la aplicación monolítica de tu equipo en microservicios. Esto impacta cambios en docenas de archivos y requiere decisiones sobre límites de servicio y dependencias entre módulos.", "question": "¿Qué enfoque deberías elegir?", "options": [{"letter": "A", "text": "Cambiar a modo de planificación para explorar la base de código, entender dependencias y diseñar el enfoque de implementación antes de hacer cambios.", "correct": true, "explanation": "El modo de planificación es la estrategia correcta para reestructuración arquitectónica compleja como dividir un monolito: permite exploración segura y decisiones informadas sobre límites antes de comprometerse a cambios potencialmente costosos en muchos archivos."}, {"letter": "B", "text": "Comenzar en modo de ejecución directa y cambiar a planificación solo después de encontrar complejidad inesperada durante la implementación.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Comenzar en modo de ejecución directa y hacer cambios incrementales, dejando que la implementación revele los límites naturales de servicio.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Usar ejecución directa con instrucciones detalladas previas que especifiquen la estructura de cada servicio.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "3.4", "objective": "Determine when to use plan mode vs direct execution", "group": "C"}, {"id": "g35", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Tu equipo creó un skill `/analyze-codebase` que realiza análisis profundo de código—escaneo de dependencias, conteos de cobertura de pruebas y métricas de calidad de código. Después de ejecutar el comando, los miembros del equipo reportan que Claude se vuelve menos receptivo en la sesión y pierde el contexto de la tarea original.", "question": "¿Cómo lo corriges más efectivamente manteniendo capacidades completas de análisis?", "options": [{"letter": "A", "text": "Agregar `context: fork` en el frontmatter del skill para ejecutar el análisis en un contexto de subagente aislado.", "correct": true, "explanation": "`context: fork` ejecuta el análisis en un contexto de subagente aislado para que la salida grande no contamine la ventana de contexto de la sesión principal y Claude no pierda el rastro de la tarea original. Preserva la capacidad completa de análisis manteniendo la sesión principal receptiva."}, {"letter": "B", "text": "Agregar `model: haiku` en el frontmatter para usar un modelo más rápido y económico para el análisis.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Dividir el skill en tres skills más pequeños, cada uno produciendo menos salida.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Agregar instrucciones al skill para comprimir todos los resultados en un resumen corto antes de mostrarlos.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "3.2", "objective": "Create and configure custom slash commands and skills", "group": "D"}, {"id": "g36", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Tu equipo usa un skill `/commit` en `.claude/skills/commit/SKILL.md`. Un desarrollador quiere personalizarlo para su flujo personal (formato de mensaje de commit diferente, verificaciones extra) sin afectar a sus compañeros.", "question": "¿Qué recomiendas?", "options": [{"letter": "A", "text": "Crear una versión personal bajo `~/.claude/skills/` con un nombre diferente, por ejemplo `/my-commit`.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Agregar lógica condicional basada en nombre de usuario en el frontmatter del skill del proyecto.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Crear una versión personal en `~/.claude/skills/commit/SKILL.md` con el mismo nombre.", "correct": true, "explanation": "Los skills personales tienen precedencia sobre los skills del proyecto con el mismo nombre. Un skill personal en `~/.claude/skills/commit/SKILL.md` sobreescribirá el skill del proyecto, permitiendo al desarrollador personalizar su flujo mientras mantiene el nombre familiar `/commit` para uso personal. Este enfoque es mejor que la opción A porque preserva el nombre del comando original, mejorando el flujo del desarrollador sin afectar a los compañeros."}, {"letter": "D", "text": "Establecer `override: true` en el frontmatter del skill personal para priorizarlo sobre la versión del proyecto.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "3.2", "objective": "Create and configure custom slash commands and skills", "group": "D"}, {"id": "g37", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Tu equipo ha usado Claude Code durante meses. Recientemente, tres desarrolladores reportan que Claude sigue la guía \"siempre incluir manejo de errores exhaustivo\", pero un cuarto desarrollador que acaba de unirse dice que Claude no la sigue. Los cuatro trabajan en el mismo repo y tienen código actualizado.", "question": "¿Cuál es la causa más probable y la corrección?", "options": [{"letter": "A", "text": "La guía vive en los archivos `~/.claude/CLAUDE.md` a nivel de usuario de los desarrolladores originales, no en el `.claude/CLAUDE.md` del proyecto. Mover la instrucción al archivo a nivel de proyecto para que todos los miembros del equipo la reciban.", "correct": true, "explanation": "Si la guía se agregó solo a las configuraciones a nivel de usuario de los desarrolladores originales y no al `.claude/CLAUDE.md` a nivel de proyecto, los nuevos miembros del equipo no la recibirán. Moverla a la configuración a nivel de proyecto asegura que todos los miembros del equipo actuales y futuros reciban automáticamente la guía."}, {"letter": "B", "text": "El `~/.claude/CLAUDE.md` del nuevo desarrollador contiene instrucciones conflictivas que sobrescriben la configuración del proyecto; debería eliminar la sección conflictiva.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Claude Code aprende preferencias por usuario con el tiempo; el nuevo desarrollador debe repetir el requisito hasta que Claude lo \"recuerde\".", "correct": false, "explanation": ""}, {"letter": "D", "text": "Claude Code cachea CLAUDE.md después de la primera lectura; los desarrolladores originales usan versiones cacheadas. Todos deberían limpiar el caché de Claude Code.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "3.1", "objective": "Configure CLAUDE.md files with appropriate hierarchy, scoping, and modular organization", "group": "D"}, {"id": "g38", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Encuentras que incluir 2–3 ejemplos completos de implementación de endpoints como contexto mejora significativamente la consistencia al generar nuevos endpoints de API. Sin embargo, este contexto solo es útil al crear nuevos endpoints—no al depurar, revisar código u otros trabajos en el directorio API.", "question": "¿Qué enfoque de configuración es más efectivo?", "options": [{"letter": "A", "text": "Agregar ejemplos de endpoints y documentación de patrones al CLAUDE.md del proyecto para que estén siempre disponibles.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Referenciar manualmente los ejemplos de endpoints en cada solicitud de generación copiando el código al prompt.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Configurar reglas específicas por ruta en `.claude/rules/api/` que incluyan ejemplos de endpoints y se activen al trabajar en el directorio API.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Crear un skill que referencie los ejemplos de endpoints y contenga instrucciones de seguimiento de patrones, invocado bajo demanda mediante un comando slash.", "correct": true, "explanation": "Un skill invocado bajo demanda carga el contexto de ejemplos solo al generar nuevos endpoints, no durante tareas no relacionadas como depuración o revisión. Esto mantiene el contexto principal limpio mientras preserva la generación de alta calidad cuando se necesita."}], "correct": "D", "task_id": "3.1", "objective": "Configure CLAUDE.md files with appropriate hierarchy, scoping, and modular organization", "group": "D"}, {"id": "g39", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Tu equipo creó un skill `/migration` que genera archivos de migración de base de datos. Toma el nombre de la migración vía `$ARGUMENTS`. En producción observas tres problemas: (1) los desarrolladores a menudo ejecutan el skill sin argumentos, causando archivos mal nombrados, (2) el skill a veces usa detalles de esquema de base de datos de conversaciones previas no relacionadas, y (3) un desarrollador ejecutó accidentalmente limpieza de pruebas destructiva cuando el skill tenía amplio acceso a herramientas.", "question": "¿Qué enfoque de configuración corrige los tres problemas?", "options": [{"letter": "A", "text": "Usar parámetros posicionales `$1` y `$2` en lugar de `$ARGUMENTS` para imponer entradas específicas, incluir referencias explícitas al archivo de esquema vía sintaxis `@` para control de contexto, y agregar una descripción en frontmatter advirtiendo sobre operaciones destructivas.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Agregar `argument-hint` en el frontmatter para solicitar parámetros requeridos, usar `context: fork` para aislar la ejecución y restringir `allowed-tools` a operaciones de escritura de archivos.", "correct": true, "explanation": "Esto usa tres características de configuración separadas para abordar cada problema: `argument-hint` mejora la entrada de argumentos y reduce los argumentos faltantes, `context: fork` previene fugas de contexto de conversaciones previas, y `allowed-tools` limita el skill a operaciones seguras de escritura de archivos, previniendo acciones destructivas."}, {"letter": "C", "text": "Dividir en skills `/migration-create` y `/migration-apply`, agregar instrucciones de validación para solicitar el nombre de migración si falta, y usar diferentes alcances de `allowed-tools` para cada uno.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Agregar instrucciones de validación en el SKILL.md del skill para asegurar que `$ARGUMENTS` sea un nombre válido, agregar prompts para ignorar el contexto de conversación previa, y listar operaciones prohibidas a evitar.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "3.2", "objective": "Create and configure custom slash commands and skills", "group": "D"}, {"id": "g40", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Tu base de código contiene áreas con diferentes convenciones de codificación: los componentes React usan estilo funcional con hooks, los manejadores de API usan async/await con manejo específico de errores, y los modelos de base de datos siguen el patrón repository. Los archivos de prueba están distribuidos por la base de código junto al código bajo prueba (por ejemplo, `Button.test.tsx` junto a `Button.tsx`), y quieres que todas las pruebas sigan las mismas convenciones independientemente de la ubicación.", "question": "¿Cuál es la forma más soportada de asegurar que Claude aplique automáticamente las convenciones correctas al generar código?", "options": [{"letter": "A", "text": "Poner todas las convenciones en el CLAUDE.md raíz bajo encabezados para cada área y confiar en que Claude infiera qué sección aplica.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Crear skills en `.claude/skills/` para cada tipo de código, incrustando convenciones en cada SKILL.md.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Colocar un archivo CLAUDE.md separado en cada subdirectorio que contenga las convenciones para esa área.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Crear archivos de regla bajo `.claude/rules/` con frontmatter YAML especificando patrones glob para aplicar convenciones condicionalmente según rutas de archivo.", "correct": true, "explanation": "Los archivos `.claude/rules/` con frontmatter YAML y patrones glob (por ejemplo, `**/*.test.tsx`, `src/api/**/*.ts`) habilitan aplicación de convenciones determinista basada en rutas independiente de la estructura de directorios. Este es el enfoque más soportado para patrones transversales como archivos de prueba distribuidos."}], "correct": "D", "task_id": "3.1", "objective": "Configure CLAUDE.md files with appropriate hierarchy, scoping, and modular organization", "group": "D"}, {"id": "g41", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Quieres crear un comando slash personalizado `/review` que ejecute la checklist estándar de revisión de código de tu equipo. Debe estar disponible para cada desarrollador cuando clone o actualice el repositorio.", "question": "¿Dónde deberías crear el archivo del comando?", "options": [{"letter": "A", "text": "En `~/.claude/commands/` en el directorio home de cada desarrollador.", "correct": false, "explanation": ""}, {"letter": "B", "text": "En el repositorio del proyecto bajo `.claude/commands/`.", "correct": true, "explanation": "Poner los comandos slash personalizados bajo `.claude/commands/` dentro del repositorio del proyecto asegura que estén versionados y automáticamente disponibles para cada desarrollador que clone o actualice el repo. Esta es la ubicación prevista para comandos personalizados a nivel de proyecto en Claude Code."}, {"letter": "C", "text": "En `.claude/config.json` como un array de comandos.", "correct": false, "explanation": ""}, {"letter": "D", "text": "En el CLAUDE.md raíz del proyecto.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "3.2", "objective": "Create and configure custom slash commands and skills", "group": "D"}, {"id": "g42", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "El CLAUDE.md de tu equipo creció más allá de 500 líneas mezclando convenciones de TypeScript, guía de pruebas, patrones de API y procedimientos de despliegue. Los desarrolladores encuentran difícil ubicar y actualizar las secciones correctas.", "question": "¿Qué enfoque soporta Claude Code para organizar las instrucciones a nivel de proyecto en módulos temáticos enfocados?", "options": [{"letter": "A", "text": "Definir un archivo `.claude/config.yaml` mapeando patrones de archivo a secciones específicas dentro de CLAUDE.md.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Crear archivos Markdown separados en `.claude/rules/`, cada uno cubriendo un tema (por ejemplo, `testing.md`, `api-conventions.md`).", "correct": true, "explanation": "Claude Code soporta un directorio `.claude/rules/` donde puedes crear archivos Markdown separados para guía temática (por ejemplo, `testing.md`, `api-conventions.md`), permitiendo a los equipos organizar grandes conjuntos de instrucciones en módulos enfocados y mantenibles."}, {"letter": "C", "text": "Dividir las instrucciones en archivos README.md en subdirectorios relevantes que Claude carga automáticamente como instrucciones.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Crear múltiples archivos llamados CLAUDE.md en diferentes niveles del árbol de directorios, cada uno sobrescribiendo las instrucciones del padre.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "3.1", "objective": "Configure CLAUDE.md files with appropriate hierarchy, scoping, and modular organization", "group": "D"}, {"id": "g43", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Creas un skill personalizado `/explore-alternatives` que tu equipo usa para hacer brainstorming y evaluar enfoques de implementación antes de elegir uno. Los desarrolladores reportan que después de ejecutar el skill, las respuestas posteriores de Claude son influenciadas por la discusión de alternativas—a veces referenciando enfoques rechazados o reteniendo contexto de exploración que interfiere con la implementación real.", "question": "¿Cómo deberías configurar este skill más efectivamente?", "options": [{"letter": "A", "text": "Usar el prefijo `!` en el skill para ejecutar la lógica de exploración como un subproceso bash.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Agregar `context: fork` en el frontmatter del skill.", "correct": true, "explanation": "`context: fork` ejecuta el skill en un contexto de subagente aislado para que las discusiones de exploración no contaminen el historial de conversación principal. Esto previene que enfoques rechazados y el contexto de brainstorming influyan en el trabajo de implementación posterior."}, {"letter": "C", "text": "Dividir en dos skills—`/explore-start` y `/explore-end`—para marcar límites cuando el contexto de exploración debe ser descartado.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Crear el skill en `~/.claude/skills/` en lugar de `.claude/skills/`.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "3.2", "objective": "Create and configure custom slash commands and skills", "group": "D"}, {"id": "g44", "domain": 3, "scenario": "Generación de código con Claude Code", "situation": "Tu equipo quiere agregar un servidor MCP de GitHub para buscar PRs y verificar el estado de CI vía Claude Code. Cada uno de los seis desarrolladores tiene su propio token de acceso personal de GitHub. Quieres herramientas consistentes en el equipo sin commitear credenciales al control de versiones.", "question": "¿Qué enfoque de configuración es más efectivo?", "options": [{"letter": "A", "text": "Hacer que cada desarrollador agregue el servidor en alcance de usuario vía `claude mcp add --scope user`.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Crear un wrapper de servidor MCP que lea tokens de un archivo `.env` y haga proxy de las llamadas a la API de GitHub, luego agregar el wrapper al `.mcp.json` del proyecto.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar el servidor al `.mcp.json` del proyecto usando sustitución de variables de entorno (`${GITHUB_TOKEN}`) para autenticación y documentar la variable de entorno requerida en el README del proyecto.", "correct": true, "explanation": "Un `.mcp.json` de proyecto con sustitución de variables de entorno es idiomático: proporciona una única fuente de verdad versionada para la configuración MCP mientras permite a cada desarrollador suministrar credenciales vía variables de entorno. Documentar la variable hace fácil el onboarding sin commitear secretos."}, {"letter": "D", "text": "Configurar el servidor en alcance de proyecto con un token marcador de posición, luego decir a los desarrolladores que lo sobrescriban en su configuración local.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "2.4", "objective": "Integrate MCP servers into Claude Code and agent workflows", "group": "J"}, {"id": "m19", "domain": 3, "scenario": null, "situation": "Una ingeniera usó `Claude Code` ayer para investigar los flujos de autenticación en un monolito heredado, acumulando un contexto considerable a lo largo de una sesión de 2 horas. Hoy quiere continuar esa investigación específica. Desde entonces ha trabajado en otros tres códigos base y sabe que la sesión se llamaba \"auth-deep-dive\".", "question": "¿Cómo debería retomarla?", "options": [{"letter": "A", "text": "Empezar de cero y releer los mismos archivos", "correct": false, "explanation": "Desperdicia las dos horas de contexto acumulado de ayer."}, {"letter": "B", "text": "Usar `--session-id` con el UUID del archivo de transcripción de la sesión de ayer", "correct": false, "explanation": "Es posible pero engorroso: tendría que buscar el UUID cuando ya tiene el nombre de la sesión."}, {"letter": "C", "text": "Usar `--continue` para retomar donde quedó la conversación más reciente", "correct": false, "explanation": "`--continue` reanuda la sesión más reciente en este repositorio. Desde entonces ha trabajado en otros tres códigos base, así que la más reciente no es auth-deep-dive."}, {"letter": "D", "text": "Usar `--resume` auth-deep-dive para cargar esa sesión específica por nombre", "correct": true, "explanation": "Correcto. `--resume` con el nombre de la sesión está diseñado exactamente para esto: elegir una sesión previa específica entre muchas, por el nombre que le diste."}], "correct": "D", "task_id": "1.7", "objective": "Manage session state, resumption, and forking", "group": "A"}, {"id": "g17", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Tu equipo usa Claude Code para generar sugerencias de código, pero notas un patrón: problemas no obvios—optimizaciones de rendimiento que rompen casos límite, limpiezas que cambian inesperadamente el comportamiento—solo se detectan cuando otro miembro del equipo revisa el PR. El razonamiento de Claude durante la generación muestra que consideró estos casos pero concluyó que su enfoque era correcto. ¿Qué enfoque aborda directamente la causa raíz de esta limitación de auto-revisión?", "question": "¿Qué enfoque aborda directamente la causa raíz?", "options": [{"letter": "A", "text": "Ejecutar una segunda instancia independiente de Claude Code para revisar los cambios sin acceso al razonamiento del generador.", "correct": true, "explanation": "Una segunda instancia independiente de Claude Code sin acceso al razonamiento del generador aborda directamente la causa raíz al evitar el sesgo de confirmación. Esta perspectiva de \"ojos frescos\" refleja la revisión por pares humana, donde otro revisor detecta problemas que el autor racionalizó."}, {"letter": "B", "text": "Habilitar el modo de pensamiento extendido para la etapa de generación para permitir una deliberación más exhaustiva antes de producir sugerencias.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar instrucciones explícitas de auto-revisión al prompt de generación pidiendo a Claude que critique sus propias sugerencias antes de finalizar la salida.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Incluir archivos de prueba completos y documentación en el contexto del prompt para que Claude entienda mejor el comportamiento esperado durante la generación.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "4.6", "objective": "Design multi-instance and multi-pass review architectures", "group": "F"}, {"id": "g19", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Tu sistema CI/CD ejecuta tres análisis basados en Claude: (1) verificaciones rápidas de estilo en cada PR que bloquean el merge hasta completarse, (2) auditorías exhaustivas de seguridad semanales de toda la base de código, y (3) generación nocturna de casos de prueba para módulos cambiados recientemente. La Message Batches API ofrece 50% de ahorro pero el procesamiento puede tardar hasta 24 horas. Quieres optimizar el costo de la API manteniendo una experiencia de desarrollador aceptable. ¿Qué combinación empareja correctamente cada tarea con un enfoque de API?", "question": "¿Qué combinación es correcta?", "options": [{"letter": "A", "text": "Usar la Message Batches API para las tres tareas para maximizar el 50% de ahorro, configurando el pipeline para sondear la finalización del lote.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Usar llamadas síncronas para verificaciones de estilo del PR; usar la Message Batches API para auditorías de seguridad semanales y generación nocturna de pruebas.", "correct": true, "explanation": "Las verificaciones de estilo del PR bloquean a los desarrolladores y requieren respuestas inmediatas vía llamadas síncronas, mientras que las auditorías de seguridad semanales y la generación nocturna de pruebas son tareas programadas con plazos flexibles que pueden tolerar hasta una ventana de lote de 24 horas—capturando 50% de ahorro para ambas."}, {"letter": "C", "text": "Usar llamadas síncronas para las tres tareas para tiempos de respuesta consistentes, confiando en el caching de prompts para reducir costos en todas las cargas de trabajo.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Usar llamadas síncronas para verificaciones de estilo del PR y generación nocturna de pruebas; usar la Message Batches API solo para auditorías de seguridad semanales.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "4.5", "objective": "Design efficient batch processing strategies", "group": "H"}, {"id": "g20", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Tus revisiones automatizadas encuentran problemas reales, pero los desarrolladores reportan que la retroalimentación no es accionable. Los hallazgos incluyen frases como \"lógica de enrutamiento de tickets compleja\" o \"potencial puntero nulo\" sin especificar qué cambiar exactamente. Cuando agregas instrucciones detalladas como \"siempre incluir sugerencias de corrección concretas\", el modelo aún produce salida inconsistente—a veces detallada, a veces vaga. ¿Qué técnica de prompting produce más confiablemente retroalimentación consistentemente accionable?", "question": "¿Qué técnica de prompting es más confiable?", "options": [{"letter": "A", "text": "Refinar más las instrucciones con requisitos más explícitos para cada parte del formato de retroalimentación (ubicación, problema, severidad, corrección propuesta).", "correct": false, "explanation": ""}, {"letter": "B", "text": "Expandir la ventana de contexto para incluir más código circundante para que el modelo tenga suficiente información para proponer correcciones concretas.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Implementar un enfoque de dos pasadas donde un prompt identifica problemas y un segundo genera correcciones, permitiendo especialización.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Agregar 3–4 ejemplos few-shot que muestren el formato exacto requerido: problema identificado, ubicación en el código, sugerencia de corrección concreta.", "correct": true, "explanation": "Los ejemplos few-shot son la técnica más efectiva para lograr formato de salida consistente cuando las instrucciones por sí solas producen resultados variables. Proporcionar 3–4 ejemplos que muestran la estructura exacta deseada (problema, ubicación, corrección concreta) le da al modelo un patrón concreto a seguir, lo cual es más confiable que instrucciones abstractas."}], "correct": "D", "task_id": "3.5", "objective": "Apply iterative refinement techniques for progressive improvement", "group": "I"}, {"id": "g21", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Tu pipeline de CI incluye dos modos de revisión de código basados en Claude: un hook de pre-merge-commit que bloquea el merge del PR hasta completarse, y un \"análisis profundo\" que se ejecuta de noche, sondea la finalización del lote y publica sugerencias detalladas en el PR. Quieres reducir el costo de la API usando la Message Batches API, que ofrece 50% de ahorro pero requiere sondeo y puede tardar hasta 24 horas. ¿Qué modo debería usar procesamiento en lote?", "question": "¿Qué modo debería usar procesamiento en lote?", "options": [{"letter": "A", "text": "Solo el hook de pre-merge-commit.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Solo el análisis profundo.", "correct": true, "explanation": "El análisis profundo es un candidato ideal para procesamiento en lote porque ya se ejecuta de noche, tolera retraso y usa un modelo de sondeo antes de publicar resultados—coincidiendo con la arquitectura asíncrona basada en sondeo de la Message Batches API mientras captura 50% de ahorro."}, {"letter": "C", "text": "Ambos modos.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Ninguno de los modos.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "4.5", "objective": "Design efficient batch processing strategies", "group": "H"}, {"id": "g22", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Tu revisión automatizada analiza comentarios y docstrings. El prompt actual instruye a Claude a \"verificar que los comentarios sean precisos y estén actualizados\". Los hallazgos a menudo señalan patrones aceptables (marcadores TODO, descripciones simples) mientras se pierden comentarios que describen comportamiento que el código ya no implementa. ¿Qué cambio aborda la causa raíz de este análisis inconsistente?", "question": "¿Qué cambio aborda la causa raíz?", "options": [{"letter": "A", "text": "Incluir datos de `git blame` para que Claude pueda identificar comentarios que preceden cambios de código recientes.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Agregar ejemplos few-shot de comentarios engañosos para ayudar al modelo a reconocer patrones similares en la base de código.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Filtrar patrones de comentarios TODO, FIXME y descriptivos antes del análisis para reducir el ruido.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Especificar criterios explícitos: marcar comentarios solo cuando el comportamiento que afirman contradice el comportamiento real del código.", "correct": true, "explanation": "Los criterios explícitos—marcar comentarios solo cuando el comportamiento afirmado contradice el comportamiento real del código—abordan directamente la causa raíz reemplazando una instrucción vaga con una definición precisa de qué constituye un problema. Esto reduce los falsos positivos sobre patrones aceptables y los descuidos de comentarios verdaderamente engañosos."}], "correct": "D", "task_id": "4.1", "objective": "Design prompts with explicit criteria to improve precision and reduce false positives", "group": "I"}, {"id": "g23", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Tu sistema automatizado de revisión de código muestra calificaciones de severidad inconsistentes—problemas similares como riesgos de puntero nulo se califican como \"críticos\" en algunos PRs pero solo \"medio\" en otros. Las encuestas a desarrolladores muestran creciente desconfianza—muchos comienzan a descartar hallazgos sin leer porque \"la mitad están mal\". Las categorías con altos falsos positivos erosionan la confianza en categorías precisas. ¿Qué enfoque restaura mejor la confianza del desarrollador mientras mejora el sistema?", "question": "¿Qué enfoque restaura mejor la confianza del desarrollador?", "options": [{"letter": "A", "text": "Deshabilitar temporalmente categorías con altos falsos positivos (estilo, nomenclatura, documentación) y mantener solo categorías de alta precisión mientras se mejoran los prompts.", "correct": true, "explanation": "Deshabilitar temporalmente las categorías con altos falsos positivos detiene inmediatamente la erosión de confianza al eliminar hallazgos ruidosos que hacen que los desarrolladores descarten todo, mientras se preserva el valor de las categorías de alta precisión como seguridad y corrección. También crea espacio para mejorar los prompts de las categorías problemáticas antes de rehabilitarlas."}, {"letter": "B", "text": "Mantener todas las categorías habilitadas pero mostrar puntuaciones de confianza con cada hallazgo para que los desarrolladores decidan qué investigar.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Mantener todas las categorías habilitadas y agregar ejemplos few-shot para mejorar la precisión de cada categoría durante las próximas semanas.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Aplicar una reducción uniforme de estrictez a todas las categorías para bajar la tasa general de falsos positivos.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "4.1", "objective": "Design prompts with explicit criteria to improve precision and reduce false positives", "group": "I"}, {"id": "g24", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Tu revisión automatizada genera sugerencias de casos de prueba para cada PR. Revisando un PR que agrega seguimiento de finalización de cursos, Claude sugiere 10 casos de prueba, pero la retroalimentación del desarrollador muestra que 6 duplican escenarios ya cubiertos por la suite de pruebas existente. ¿Qué cambio reduce más efectivamente las sugerencias duplicadas?", "question": "¿Qué cambio es más efectivo?", "options": [{"letter": "A", "text": "Incluir el archivo de pruebas existente en el contexto para que Claude pueda determinar qué escenarios ya están cubiertos.", "correct": true, "explanation": "Incluir el archivo de pruebas existente corrige la causa raíz de la duplicación: Claude solo puede evitar sugerir escenarios ya cubiertos si sabe qué pruebas ya existen. Esto le da a Claude la información necesaria para proponer pruebas genuinamente nuevas y valiosas."}, {"letter": "B", "text": "Reducir el número solicitado de sugerencias de 10 a 5, asumiendo que Claude prioriza primero los casos más valiosos.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar instrucciones dirigiendo a Claude a enfocarse exclusivamente en casos límite y condiciones de error en lugar de rutas de éxito.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Implementar post-procesamiento que filtre sugerencias cuyas descripciones coincidan con nombres de pruebas existentes mediante solapamiento de palabras clave.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "3.5", "objective": "Apply iterative refinement techniques for progressive improvement", "group": "I"}, {"id": "g25", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Después de que una revisión automatizada inicial identifica 12 hallazgos, un desarrollador hace commits nuevos para abordar problemas. Al volver a ejecutar la revisión se producen 8 hallazgos, pero los desarrolladores reportan que 5 duplican comentarios anteriores sobre código que ya fue corregido en los nuevos commits. ¿Cuál es la forma más efectiva de eliminar esta retroalimentación redundante manteniendo la exhaustividad?", "question": "¿Cuál es la forma más efectiva de eliminar la retroalimentación redundante?", "options": [{"letter": "A", "text": "Ejecutar la revisión solo cuando se crea el PR y en el estado final pre-merge, omitiendo commits intermedios.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Agregar un filtro de post-procesamiento que elimine hallazgos que coincidan con anteriores por rutas de archivo y descripciones de problemas antes de publicar comentarios.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Restringir el alcance de la revisión a archivos cambiados en el push más reciente, excluyendo archivos de commits anteriores.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Incluir los hallazgos de revisión anteriores en el contexto e instruir a Claude para reportar solo problemas nuevos o aún sin resolver.", "correct": true, "explanation": "Incluir los hallazgos de revisión previos en el contexto permite a Claude distinguir problemas nuevos de los ya abordados en commits recientes. Esto preserva la exhaustividad de la revisión mientras usa el razonamiento de Claude para evitar retroalimentación redundante sobre código corregido."}], "correct": "D", "task_id": "4.1", "objective": "Design prompts with explicit criteria to improve precision and reduce false positives", "group": "I"}, {"id": "g27", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Un pull request cambia 14 archivos en un módulo de seguimiento de inventario. Una revisión de una sola pasada que analiza todos los archivos juntos produce resultados inconsistentes: retroalimentación detallada en algunos archivos pero comentarios superficiales en otros, errores obvios omitidos y retroalimentación contradictoria (un patrón se marca en un archivo pero código idéntico se aprueba en otro archivo del mismo PR). ¿Cómo deberías reestructurar la revisión?", "question": "¿Cómo deberías reestructurar la revisión?", "options": [{"letter": "A", "text": "Ejecutar tres pasadas independientes de revisión completa del PR y marcar solo problemas que aparezcan en al menos dos de las tres ejecuciones.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Dividir en pasadas enfocadas: revisar cada archivo individualmente para problemas locales, luego ejecutar una pasada separada orientada a la integración para examinar flujos de datos entre archivos.", "correct": true, "explanation": "Las pasadas enfocadas por archivo abordan la causa raíz—dilución de atención—asegurando profundidad consistente y detección confiable de problemas locales. Una pasada separada orientada a la integración cubre luego preocupaciones entre archivos como dependencias e interacciones de flujo de datos."}, {"letter": "C", "text": "Requerir que los desarrolladores dividan PRs grandes en envíos más pequeños de 3–4 archivos antes de ejecutar la revisión automatizada.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Cambiar a un modelo más grande con una ventana de contexto mayor para que pueda prestar atención suficiente a los 14 archivos en una sola pasada.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "4.6", "objective": "Design multi-instance and multi-pass review architectures", "group": "F"}, {"id": "g28", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Tu revisión automatizada de código promedia 15 hallazgos por pull request, y los desarrolladores reportan una tasa de falsos positivos del 40%. El cuello de botella es el tiempo de investigación: los desarrolladores deben hacer clic en cada hallazgo para leer la justificación de Claude antes de decidir si corregir o descartar. Tu CLAUDE.md ya contiene reglas exhaustivas para patrones aceptables, y los stakeholders rechazaron cualquier enfoque que filtre hallazgos antes de que los vean los desarrolladores. ¿Qué cambio aborda mejor el tiempo de investigación?", "question": "¿Qué cambio aborda mejor el tiempo de investigación?", "options": [{"letter": "A", "text": "Requerir que Claude incluya su justificación y estimación de confianza directamente en cada hallazgo.", "correct": true, "explanation": "Incluir la justificación y la confianza directamente en cada hallazgo reduce el tiempo de investigación al permitir que los desarrolladores triien rápidamente sin abrir cada hallazgo. Satisface la restricción de \"no filtrar\" porque todos los hallazgos permanecen visibles mientras se acelera la toma de decisiones del desarrollador."}, {"letter": "B", "text": "Agregar un post-procesador que analice patrones de hallazgos y suprima automáticamente aquellos que coincidan con firmas históricas de falsos positivos.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Categorizar los hallazgos como \"problemas bloqueantes\" vs \"sugerencias\", con diferentes requisitos de revisión por nivel.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Configurar Claude para mostrar solo hallazgos de alta confianza, filtrando marcadores inciertos antes de que los vean los desarrolladores.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "4.6", "objective": "Design multi-instance and multi-pass review architectures", "group": "F"}, {"id": "g29", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "El análisis de tu revisión automatizada de código muestra grandes diferencias en las tasas de falsos positivos por categoría de hallazgo: hallazgos de seguridad/corrección tienen 8% de falsos positivos, hallazgos de rendimiento 18%, hallazgos de estilo/nomenclatura 52% y hallazgos de documentación 48%. Las encuestas a desarrolladores muestran creciente desconfianza—muchos comienzan a descartar hallazgos sin leer porque \"la mitad están mal\". Las categorías con altos falsos positivos erosionan la confianza en categorías precisas. ¿Qué enfoque restaura mejor la confianza del desarrollador mientras mejora el sistema?", "question": "¿Qué enfoque restaura mejor la confianza del desarrollador?", "options": [{"letter": "A", "text": "Deshabilitar temporalmente categorías con altos falsos positivos (estilo, nomenclatura, documentación) y mantener solo categorías de alta precisión mientras se mejoran los prompts.", "correct": true, "explanation": "Deshabilitar temporalmente las categorías con altos falsos positivos detiene inmediatamente la erosión de confianza al eliminar hallazgos ruidosos que hacen que los desarrolladores descarten todo, mientras se preserva el valor de las categorías de alta precisión como seguridad y corrección. También crea espacio para mejorar los prompts de las categorías problemáticas antes de rehabilitarlas."}, {"letter": "B", "text": "Mantener todas las categorías habilitadas pero mostrar puntuaciones de confianza con cada hallazgo para que los desarrolladores decidan qué investigar.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Mantener todas las categorías habilitadas y agregar ejemplos few-shot para mejorar la precisión de cada categoría durante las próximas semanas.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Aplicar una reducción uniforme de estrictez a todas las categorías para bajar la tasa general de falsos positivos.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "4.1", "objective": "Design prompts with explicit criteria to improve precision and reduce false positives", "group": "I"}, {"id": "g30", "domain": 4, "scenario": "Claude Code para Integración Continua", "situation": "Tu equipo quiere reducir los costos de API para análisis automatizado. Actualmente, las llamadas síncronas a Claude soportan dos flujos: (1) una verificación pre-merge bloqueante que debe completarse antes de que los desarrolladores puedan hacer merge, y (2) un informe de deuda técnica generado durante la noche para revisión a la mañana siguiente. Tu gerente propone mover ambos a la Message Batches API para ahorrar 50%. ¿Cómo deberías evaluar esta propuesta?", "question": "¿Cómo deberías evaluar esta propuesta?", "options": [{"letter": "A", "text": "Mover ambos a procesamiento en lote con respaldo a llamadas síncronas si los lotes tardan demasiado.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Mover ambos flujos a procesamiento en lote con sondeo de estado para verificar la finalización.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Usar procesamiento en lote solo para los informes de deuda técnica; mantener las llamadas síncronas para las verificaciones pre-merge.", "correct": true, "explanation": "El procesamiento de la Message Batches API puede tardar hasta 24 horas sin SLA de latencia, lo cual es aceptable para informes nocturnos de deuda técnica pero inaceptable para verificaciones pre-merge bloqueantes donde los desarrolladores esperan. Esto empareja cada flujo con la API correcta según los requisitos de latencia."}, {"letter": "D", "text": "Mantener llamadas síncronas para ambos flujos para evitar problemas con el ordenamiento de resultados de lotes.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "4.5", "objective": "Design efficient batch processing strategies", "group": "H"}, {"id": "g31", "domain": 4, "scenario": "Generación de código con Claude Code", "situation": "Le pediste a Claude Code que implementara una función que transforme respuestas de API a un formato interno normalizado. Después de dos iteraciones, la estructura de salida aún no coincide con las expectativas—algunos campos están anidados de forma diferente y las marcas de tiempo están formateadas incorrectamente. Describiste los requisitos en prosa, pero Claude los interpreta de forma diferente cada vez.", "question": "¿Qué enfoque es más efectivo para la siguiente iteración?", "options": [{"letter": "A", "text": "Escribir un esquema JSON que describa la estructura de salida esperada y validar la salida de Claude contra él después de cada iteración.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Proporcionar 2–3 ejemplos concretos de entrada-salida que muestren la transformación esperada para respuestas de API representativas.", "correct": true, "explanation": "Los ejemplos concretos de entrada-salida eliminan la ambigüedad inherente a las descripciones en prosa al mostrar a Claude los resultados exactos de transformación esperados. Esto aborda directamente la causa raíz—mala interpretación de requisitos textuales—proporcionando patrones inequívocos para anidamiento de campos y formato de marcas de tiempo."}, {"letter": "C", "text": "Reescribir los requisitos con mayor precisión técnica, especificando mapeos exactos de campos, reglas de anidamiento y cadenas de formato de marca de tiempo.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Pedir a Claude que explique su comprensión actual de los requisitos para identificar dónde divergen las interpretaciones.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "3.5", "objective": "Apply iterative refinement techniques for progressive improvement", "group": "I"}, {"id": "g49", "domain": 4, "scenario": "Agente de soporte al cliente", "situation": "Tu agente logra 55% de resolución en primer contacto, muy por debajo del objetivo del 80%. Los registros muestran que escala casos simples (reemplazos estándar para mercancía dañada con prueba fotográfica) mientras intenta manejar autónomamente situaciones complejas que requieren excepciones de política. ¿Cuál es la forma más efectiva de mejorar la calibración de escalación?", "question": "¿Cuál es la forma más efectiva de mejorar la calibración de escalación?", "options": [{"letter": "A", "text": "Requerir que el agente se autocalifique en confianza en una escala de 1–10 antes de cada respuesta y enrute automáticamente a humanos cuando la confianza caiga por debajo de un umbral.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Desplegar un modelo clasificador separado entrenado en tickets históricos para predecir qué solicitudes necesitan escalación antes de que el agente principal comience a procesarlas.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar criterios de escalación explícitos al prompt del sistema con ejemplos few-shot que muestren cuándo escalar versus resolver autónomamente.", "correct": true, "explanation": "Los criterios de escalación explícitos con ejemplos few-shot abordan directamente la causa raíz—límites de decisión poco claros entre casos simples y complejos. Es la primera intervención más proporcional y efectiva que enseña al agente cuándo escalar y cuándo resolver autónomamente sin infraestructura adicional."}, {"letter": "D", "text": "Implementar análisis de sentimiento para determinar el nivel de frustración del cliente y escalar automáticamente más allá de un umbral de sentimiento negativo.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "5.2", "objective": "Design effective escalation and ambiguity resolution patterns", "group": "C"}, {"id": "g52", "domain": 4, "scenario": "Agente de soporte al cliente", "situation": "Las métricas de producción muestran que al resolver disputas complejas de facturación o devoluciones de múltiples pedidos, los puntajes de satisfacción del cliente son 15% más bajos que para casos simples—incluso cuando la resolución es técnicamente correcta. El análisis de causa raíz muestra que el agente proporciona soluciones precisas pero explica la justificación de forma inconsistente: a veces omitiendo detalles de política relevantes, a veces perdiendo información de cronograma o próximos pasos. Las brechas de contexto específicas varían caso por caso. Quieres mejorar la calidad de las soluciones sin agregar supervisión humana. ¿Qué enfoque es más efectivo?", "question": "¿Qué enfoque es más efectivo?", "options": [{"letter": "A", "text": "Agregar una etapa de autocrítica donde el agente evalúe un borrador de respuesta para completitud—asegurando que resuelva el problema del cliente, incluya contexto relevante y anticipe preguntas de seguimiento.", "correct": true, "explanation": "Una etapa de autocrítica (el patrón evaluador-optimizador) aborda directamente la inconsistencia en completitud de explicación al forzar al agente a evaluar su propio borrador contra criterios concretos—como contexto de política, cronogramas y próximos pasos—antes de presentarlo. Esto detecta brechas específicas de caso sin supervisión humana."}, {"letter": "B", "text": "Agregar una etapa de confirmación donde el agente pregunte \"¿Esto resuelve completamente tu problema?\" antes de cerrar, permitiendo a los clientes solicitar información adicional si la necesitan.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Actualizar el modelo de Haiku a Sonnet para casos complejos, enrutando según una métrica de complejidad definida.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Implementar ejemplos few-shot en el prompt del sistema que muestren explicaciones completas para cinco tipos comunes de casos complejos, demostrando cómo incluir contexto de política, cronogramas y próximos pasos.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "3.5", "objective": "Apply iterative refinement techniques for progressive improvement", "group": "I"}, {"id": "g56", "domain": 4, "scenario": "Agente de soporte al cliente", "situation": "Los registros de producción muestran un patrón consistente: cuando los clientes incluyen la palabra \"cuenta\" en su mensaje (por ejemplo, \"Quiero verificar mi cuenta por un pedido que hice ayer\"), el agente llama a `get_customer` primero el 78% del tiempo. Cuando los clientes formulan solicitudes similares sin \"cuenta\" (por ejemplo, \"Quiero verificar un pedido que hice ayer\"), llama a `lookup_order` primero el 93% del tiempo. Las descripciones de herramientas son claras e inequívocas. ¿Cuál es la causa raíz más probable de esta discrepancia?", "question": "¿Cuál es la causa raíz más probable?", "options": [{"letter": "A", "text": "El prompt del sistema contiene instrucciones sensibles a palabras clave que dirigen el comportamiento basadas en términos como \"cuenta\", creando patrones no intencionados de selección de herramientas.", "correct": true, "explanation": "El patrón sistemático impulsado por palabras clave (78% vs 93%) indica fuertemente lógica de enrutamiento explícita en el prompt del sistema reaccionando a la palabra \"cuenta\" y dirigiendo al agente hacia herramientas relacionadas con clientes. Como las descripciones de herramientas ya son claras, la discrepancia apunta a instrucciones a nivel de prompt creando dirección de comportamiento no intencionada."}, {"letter": "B", "text": "El entrenamiento base del modelo crea asociaciones entre la terminología \"cuenta\" y operaciones relacionadas con clientes que sobrescriben las descripciones de herramientas.", "correct": false, "explanation": ""}, {"letter": "C", "text": "El modelo necesita más datos de entrenamiento sobre mensajes multi-concepto y debería ser ajustado en ejemplos que contengan terminología de cuenta y pedido.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Las descripciones de herramientas necesitan ejemplos negativos adicionales que especifiquen cuándo NO usar cada herramienta para prevenir esta confusión inducida por palabras clave.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "4.1", "objective": "Design prompts with explicit criteria to improve precision and reduce false positives", "group": "I"}, {"id": "g60", "domain": 4, "scenario": "Agente de soporte al cliente", "situation": "Los registros de producción muestran que el agente a veces elige `get_customer` cuando `lookup_order` sería más apropiado, especialmente para consultas ambiguas como \"Necesito ayuda con mi compra reciente\". Decides agregar ejemplos few-shot al prompt del sistema para mejorar la selección de herramientas. ¿Qué enfoque aborda más efectivamente el problema?", "question": "¿Qué enfoque es más efectivo?", "options": [{"letter": "A", "text": "Agregar guía explícita de \"usar cuando\" y \"no usar cuando\" en cada descripción de herramienta cubriendo casos ambiguos.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Agregar ejemplos agrupados por herramienta—todos los escenarios de `get_customer` juntos, luego todos los escenarios de `lookup_order`.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Agregar 4–6 ejemplos dirigidos a escenarios ambiguos, cada uno con justificación de por qué se eligió una herramienta sobre alternativas plausibles.", "correct": true, "explanation": "Dirigir los ejemplos few-shot a los escenarios ambiguos específicos donde ocurren los errores, con justificación explícita de por qué una herramienta es preferible a las alternativas, enseña al modelo el proceso comparativo de decisión necesario para casos límite. Esto es más efectivo que ejemplos genéricos o reglas declarativas."}, {"letter": "D", "text": "Agregar 10–15 ejemplos de solicitudes claras e inequívocas demostrando la elección correcta de herramienta para escenarios típicos para cada herramienta.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "2.1", "objective": "Design effective tool interfaces with clear descriptions and boundaries", "group": "J"}, {"id": "g69", "domain": 4, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Durante las pruebas de QA, Claude sigue las pautas del prompt del sistema durante los primeros 10–15 turnos, pero las respuestas posteriores se desvían. La conversación sigue dentro de los límites de tokens.", "question": "¿Cuál es la mejor solución?", "options": [{"letter": "A", "text": "Mover las pautas de comportamiento al primer mensaje del usuario.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Iniciar una nueva conversación después de 20 turnos.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Insertar mensajes de rol de usuario reforzando las pautas en puntos de interrupción de la conversación.", "correct": true, "explanation": "La inyección periódica de recordatorios de comportamiento combate directamente la deriva de instrucciones reestableciendo restricciones a intervalos regulares a medida que se acumula el historial. Mover las pautas al primer mensaje del usuario (A) reduce su autoridad. La validación post-respuesta (D) es correctiva en lugar de preventiva y añade latencia significativa."}, {"letter": "D", "text": "Usar validación post-respuesta para regenerar respuestas no conformes.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g71", "domain": 4, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Tu asistente debe mantener un tono entusiasta, explicar su razonamiento y hacer preguntas aclaratorias. ¿Dónde deben definirse estas pautas de comportamiento?", "question": "¿Dónde deben definirse estas pautas de comportamiento?", "options": [{"letter": "A", "text": "Antepuestas a cada mensaje del usuario.", "correct": false, "explanation": ""}, {"letter": "B", "text": "En el prompt del sistema.", "correct": true, "explanation": "El prompt del sistema está específicamente diseñado para restricciones y pautas de comportamiento persistentes que aplican a lo largo de toda la conversación. Anteponer a cada mensaje del usuario (A) es sobrecarga redundante. El primer mensaje del asistente (C) es poco confiable porque el modelo puede desviarse de sus propias declaraciones anteriores. Las variables de entorno (D) no tienen efecto en el comportamiento del modelo."}, {"letter": "C", "text": "En el primer mensaje del asistente.", "correct": false, "explanation": ""}, {"letter": "D", "text": "En variables de entorno.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g72", "domain": 4, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Los usuarios reportan aperturas de respuesta repetitivas como \"¡Claro!\" y \"¡Con gusto te ayudo!\"", "question": "¿Cuál es el enfoque más efectivo?", "options": [{"letter": "A", "text": "Anteponer un mensaje de asistente parcial con una apertura de respuesta directa.", "correct": true, "explanation": "Prellenar la respuesta del asistente con el inicio de una respuesta directa previene los patrones de saludo a nivel de generación—el modelo continúa desde el prellenado en lugar de generar nuevas frases de apertura. Las instrucciones del prompt del sistema (D) pueden ayudar pero son menos confiables. El post-procesamiento (C) es una solución frágil. La temperatura (B) controla la aleatoriedad, no patrones de frases específicos."}, {"letter": "B", "text": "Reducir la configuración de temperatura.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Post-procesar respuestas para eliminar saludos.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Agregar instrucciones al prompt del sistema para evitar esas frases.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "4.3", "objective": "Enforce structured output using tool use and JSON schemas", "group": "H"}, {"id": "g73", "domain": 4, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Un webhook notifica a tu sistema que el paquete de un usuario ha sido enviado mientras el usuario está chateando activamente. Quieres que el asistente incorpore esto naturalmente en la siguiente respuesta.", "question": "¿Cuál es el mejor enfoque?", "options": [{"letter": "A", "text": "Agregar el estado de envío al prompt del sistema.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Enviar un mensaje sintético de usuario inmediato.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Forzar al asistente a llamar a una herramienta de estado en cada turno.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Anteponer la actualización de estado como prefijo al siguiente mensaje del usuario.", "correct": true, "explanation": "Prefijar la actualización de estado al siguiente mensaje del usuario inyecta contexto en tiempo real en un límite de conversación natural sin interrumpir el flujo. Modificar el prompt del sistema (A) requiere reconstruir la sesión. Un mensaje sintético de usuario (B) puede romper el flujo natural del diálogo. Forzar una llamada de herramienta en cada turno (C) es costoso cuando los eventos son raros."}], "correct": "D", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g74", "domain": 4, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Los usuarios frecuentemente envían solicitudes como \"Reserva un lugar para la fiesta.\" El asistente hace 4+ preguntas aclaratorias, causando un 35% de abandono.", "question": "¿Qué enfoque mejora mejor el equilibrio?", "options": [{"letter": "A", "text": "Proceder con valores predeterminados ocultos.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Hacer todas las preguntas aclaratorias en un mensaje compuesto.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Declarar suposiciones explícitamente y proceder invitando correcciones.", "correct": true, "explanation": "Declarar suposiciones explícitamente y proceder le da al usuario una respuesta inmediata y útil mientras preserva su capacidad de corregir suposiciones incorrectas. Los valores predeterminados ocultos (A) dejan al usuario sin saber qué se asumió. Una lista de preguntas compuesta (B) sigue demandando esfuerzo inicial del usuario. Un formulario estructurado (D) agrega más fricción, no menos."}, {"letter": "D", "text": "Usar un formulario de admisión estructurado.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "5.2", "objective": "Design effective escalation and ambiguity resolution patterns", "group": "C"}, {"id": "g76", "domain": 4, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Los usuarios hacen solicitudes vagas como \"¿Puedes ayudar con el informe?\" El asistente responde preguntando múltiples preguntas (¿qué informe? ¿qué ayuda? ¿cuál es el plazo?), causando un 40% de abandono.", "question": "¿Cuál es la mejor solución?", "options": [{"letter": "A", "text": "Hacer suposiciones razonables, declararlas explícitamente y ofrecer ajustes.", "correct": true, "explanation": "Proceder con suposiciones declaradas razonables elimina el intercambio de ida y vuelta por completo mientras mantiene al usuario informado y en control. Las interpretaciones silenciosas predefinidas (C) confunden a los usuarios cuando la respuesta no coincide con su intención. Un límite de una pregunta (D) sigue requiriendo turnos de ida y vuelta. Un modelo de clasificación más pequeño (B) agrega latencia y complejidad de infraestructura sin resolver el problema central de UX."}, {"letter": "B", "text": "Clasificar la ambigüedad con un modelo más pequeño antes de responder.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Usar interpretaciones predefinidas sin declarar suposiciones.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Limitar al asistente a una pregunta aclaratoria por turno.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "5.2", "objective": "Design effective escalation and ambiguity resolution patterns", "group": "C"}, {"id": "m8", "domain": 4, "scenario": null, "situation": "Las revisiones en producción revelan un manejo inconsistente de la incertidumbre en los reportes finales. A veces los hallazgos contradictorios de los subagentes se sintetizan en una única afirmación contundente (perdiendo matices), mientras que otras veces los reportes se exceden en salvedades con calificativos excesivos (volviéndose poco útiles). Cuando el agente de búsqueda web devuelve \"los analistas de la industria estiman un tamaño de mercado de $50B (la metodología varía)\" y el agente de análisis de documentos devuelve \"un estudio revisado por pares estima 35B (±7B, IC del 95%)\", el coordinador o elige uno arbitrariamente o produce afirmaciones vagas como \"el mercado podría ser de 35B−50B según diversos factores\".", "question": "¿Qué enfoque sistemático aborda mejor esto?", "options": [{"letter": "A", "text": "Configurar los subagentes para que solo reporten hallazgos que superen un umbral de alta confianza, filtrando la información incierta antes de que llegue al coordinador.", "correct": false, "explanation": "Filtrar descarta evidencia útil pero incierta. No ayuda al agente de síntesis a razonar sobre los conflictos: simplemente los esconde."}, {"letter": "B", "text": "Implementar una capa de calibración de confianza que normalice las expresiones de incertidumbre de los subagentes a puntajes de probabilidad estandarizados (0.0-1.0), y luego promediar los hallazgos ponderados por su confianza calibrada.", "correct": false, "explanation": "Colapsar los IC revisados por pares y las estimaciones de analistas en un único número promediado destruye la diferencia metodológica, que es justamente el punto clave."}, {"letter": "C", "text": "Instruir al agente de síntesis para que estructure los reportes con secciones explícitas que distingan los hallazgos bien establecidos de los controvertidos, preservando las caracterizaciones originales de las fuentes y el contexto metodológico.", "correct": true, "explanation": "Correcto. Una estructura de reporte que conserva el contexto metodológico y separa las afirmaciones consolidadas de las controvertidas es la forma de lograr matices sin excederse en salvedades."}, {"letter": "D", "text": "Añadir un subagente de verificación que cruce los hallazgos entre fuentes, pasando a la síntesis solo las afirmaciones corroboradas por al menos dos fuentes independientes.", "correct": false, "explanation": "El mínimo de dos fuentes descarta hallazgos legítimos de una sola fuente y no resuelve estimaciones genuinamente conflictivas con metodologías distintas."}], "correct": "C", "task_id": "5.6", "objective": "Preserve information provenance and handle uncertainty in multi-source synthesis", "group": "B"}, {"id": "m11", "domain": 4, "scenario": null, "situation": "Un usuario está ampliando el sistema de investigación más allá de su único agente de búsqueda web añadiendo fuentes de datos especializadas. Agrega un agente de API financiera que devuelve JSON estructurado con ingresos, márgenes y tasas de crecimiento; un agente de monitoreo de noticias que devuelve resúmenes en prosa de desarrollos recientes; y un agente de análisis de patentes que devuelve listas estructuradas de áreas tecnológicas. El agente de síntesis combina todo esto en informes ejecutivos. Actualmente, convierte todo en viñetas, lo que hace que las comparaciones financieras pierdan claridad tabular y que los resúmenes de noticias pierdan su fluidez narrativa.", "question": "¿Qué cambio mejoraría más la calidad de los informes?", "options": [{"letter": "A", "text": "Estandarizar todas las salidas de los subagentes a resúmenes en prosa con citas en línea.", "correct": false, "explanation": "Aplanar los datos financieros estructurados a prosa pierde la comparabilidad que quieres en un informe ejecutivo."}, {"letter": "B", "text": "Añadir una capa de conversión de formato entre los subagentes y la síntesis que transforme todas las salidas a una representación intermedia común.", "correct": false, "explanation": "Una única representación intermedia suele resultar demasiado con pérdidas: o conserva la estructura (las noticias sufren) o conserva la prosa (las tablas sufren). La solución es un renderizado según el tipo, no la uniformidad."}, {"letter": "C", "text": "Actualizar el agente de síntesis para que renderice cada tipo de contenido de forma apropiada: los datos financieros como tablas, las noticias como prosa.", "correct": true, "explanation": "Correcto. Los informes ejecutivos necesitan un renderizado mixto: tablas para los números, prosa para la narrativa. Pedirle a la síntesis que preserve el formato nativo de cada entrada es la abstracción correcta."}, {"letter": "D", "text": "Estandarizar todas las salidas de los subagentes a JSON con campos para afirmación, evidencia, fuente y confianza.", "correct": false, "explanation": "Forzar las noticias, cargadas de prosa, a un esquema de afirmación/evidencia despoja la fluidez narrativa que los ejecutivos realmente leen."}], "correct": "C", "task_id": "5.6", "objective": "Preserve information provenance and handle uncertainty in multi-source synthesis", "group": "B"}, {"id": "m46", "domain": 4, "scenario": null, "situation": "Tu sistema de extracción procesa dos tipos de documentos: reportes mensuales estándar (que se archivan tras procesarse) y reportes de excepciones urgentes (que deben disparar alertas de negocio dentro de los 30 minutos de su recepción). Ambos usan el mismo esquema JSON. Quieres minimizar los costos de API cumpliendo a la vez los requisitos de latencia.", "question": "¿Cómo deberías diseñar la arquitectura del pipeline de procesamiento?", "options": [{"letter": "A", "text": "Enviar todos los documentos a la Messages API en tiempo real para garantizar una latencia de procesamiento consistente entre los tipos de documentos.", "correct": false, "explanation": "Consistente pero costoso. Los reportes mensuales estándar no necesitan latencia en tiempo real y no deberían pagar por ella."}, {"letter": "B", "text": "Enviar todos los documentos a la `Batch API` con `custom_ids` para su seguimiento. Cuando lleguen los resultados, procesar de inmediato los documentos urgentes y disparar alertas con retraso para las excepciones.", "correct": false, "explanation": "El batch tiene una ventana de hasta 24 horas: los SLA de alerta de 30 minutos sobre los reportes de excepciones no pueden cumplirse enrutándolos por batch."}, {"letter": "C", "text": "Encolar todos los documentos y enviar lotes cada hora, marcando los documentos urgentes para un manejo acelerado cuando regresen los resultados del lote.", "correct": false, "explanation": "Los lotes por hora siguen sujetos al SLO del batch y no garantizan la ventana de alerta de 30 minutos para las excepciones."}, {"letter": "D", "text": "Enrutar los reportes estándar a la `Batch API` para ahorrar 50% en costos, y enrutar los reportes de excepciones urgentes a la Messages API en tiempo real.", "correct": true, "explanation": "Correcto. Ajusta el perfil de latencia a la urgencia del documento: batch para el grueso (barato), tiempo real para las excepciones sensibles a la latencia (rápido). Minimiza el costo cumpliendo el SLA."}], "correct": "D", "task_id": "4.5", "objective": "Design efficient batch processing strategies", "group": "H"}, {"id": "m47", "domain": 4, "scenario": null, "situation": "Tu esquema incluye un campo skills: string[]. El monitoreo en producción revela tres problemas de consistencia: (1) frases compuestas como \"Python and SQL\" a veces se mantienen como una sola entrada y a veces se dividen; (2) ocasionalmente aparecen en las extracciones habilidades implícitas pero no declaradas; (3) documentos similares producen longitudes de array muy dispares (5-10 vs 40+ entradas). Tu prompt actualmente dice \"Extract all skills mentioned.\"", "question": "¿Cuál es la mejora más efectiva?", "options": [{"letter": "A", "text": "Agregar ejemplos few-shot que demuestren el manejo de frases compuestas, criterios explícitos de mención y la granularidad apropiada de las entradas.", "correct": true, "explanation": "Correcto. Los tres problemas tienen que ver con cómo interpreta el modelo qué cuenta como 'una habilidad'. Los ejemplos few-shot enseñan el patrón de forma concreta: dividir o no, mencionado o inferido, granularidad apropiada."}, {"letter": "B", "text": "Agregar restricciones: \"Extract 10-20 skills maximum, one skill per entry, only explicitly named skills.\"", "correct": false, "explanation": "Los topes de conteo rígidos son arbitrarios y pueden forzar al modelo a descartar habilidades reales o inventar relleno para alcanzar el rango."}, {"letter": "C", "text": "Agregar una normalización posterior a la extracción que mapee las habilidades a una taxonomía canónica y deduplique entradas similares.", "correct": false, "explanation": "El postprocesamiento no puede arreglar las habilidades inferidas-pero-no-mencionadas ni elegir la división correcta para 'Python and SQL': esa decisión debe tomarse en el momento de la extracción."}, {"letter": "D", "text": "Enriquecer el esquema a {skill: string, confidence: float, `source_quote`: string}[] para capturar metadatos de la extracción.", "correct": false, "explanation": "Es una señal útil, pero no aborda la inconsistencia subyacente en cómo se interpretan las habilidades en primer lugar."}], "correct": "A", "task_id": "4.2", "objective": "Apply few-shot prompting to improve output consistency and quality", "group": "I"}, {"id": "m48", "domain": 4, "scenario": null, "situation": null, "question": "Tu sistema ha operado con revisión humana del 100% durante 3 meses. El análisis muestra que las extracciones con confianza del modelo >90% tienen un 97% de precisión en general. Para reducir la carga de trabajo de los revisores, planeas automatizar las extracciones de alta confianza. Antes de desplegar, ¿qué paso de validación es el más crítico?", "options": [{"letter": "A", "text": "Analizar la precisión por tipo de documento y por campo para verificar que las extracciones de alta confianza se desempeñan de forma consistente en todos los segmentos, no solo en el agregado.", "correct": true, "explanation": "Correcto. La precisión agregada oculta fallos por segmento: un tipo de documento podría estar en 70% mientras otros están en 99%. Enrutar automáticamente solo por el número global arriesga errores sistémicos en los segmentos débiles."}, {"letter": "B", "text": "Comparar la precisión en distintos umbrales de confianza (85%, 90%, 95%) para encontrar el corte óptimo que maximice la automatización minimizando los errores.", "correct": false, "explanation": "Ajustar el umbral vale la pena, pero solo después de saber que la precisión se mantiene de manera uniforme entre los segmentos; de lo contrario estás optimizando un número que miente."}, {"letter": "C", "text": "Ejecutar un piloto de dos semanas enrutando el 25% de las extracciones de alta confianza directamente a los sistemas posteriores y monitorear los reportes de errores.", "correct": false, "explanation": "Un piloto es buena práctica, pero va después del análisis por segmento: si un segmento está sistemáticamente equivocado, lo descubrirás perjudicando a los usuarios."}, {"letter": "D", "text": "Verificar que el 97% de precisión cumple los requisitos de todos los sistemas posteriores que consumen los datos extraídos.", "correct": false, "explanation": "Es una pregunta importante de producto, pero asume que el 97% se mantiene en todas partes; de nuevo, eso es lo que verifica primero el análisis por segmento."}], "correct": "A", "task_id": "5.5", "objective": "Design human review workflows and confidence calibration", "group": "C"}, {"id": "m49", "domain": 4, "scenario": null, "situation": "Tu pipeline de extracción procesa contratos que con frecuencia incluyen enmiendas. Cuando un contrato contiene tanto los términos originales como enmiendas posteriores (por ejemplo, la cláusula original especifica \"30-day payment terms\" mientras que la Enmienda 1 lo cambia a \"45 days\"), el modelo extrae de forma inconsistente uno u otro valor sin indicar cuál aplica.", "question": "¿Cuál es el enfoque más efectivo para mejorar la precisión de extracción en documentos con enmiendas?", "options": [{"letter": "A", "text": "Rediseñar el esquema para que los campos enmendados capturen múltiples valores, cada uno con su ubicación de origen y fecha de entrada en vigor.", "correct": true, "explanation": "Correcto. Las enmiendas son estructuralmente valores versionados. Un esquema con valor + ubicación de origen + fecha de entrada en vigor modela el dominio correctamente y deja de forzar al modelo a elegir uno."}, {"letter": "B", "text": "Agregar instrucciones al prompt para que siempre extraiga el valor de la enmienda más reciente e ignore los términos originales que fueron reemplazados.", "correct": false, "explanation": "Los consumidores posteriores a veces también necesitan el original (por ejemplo, para resolución de disputas). Codificar 'gana el más reciente' descarta eso."}, {"letter": "C", "text": "Preprocesar los documentos con un clasificador que identifique y elimine las secciones reemplazadas antes del paso principal de extracción.", "correct": false, "explanation": "Borrar secciones con un clasificador puede eliminar accidentalmente contenido que sigue teniendo vigencia legal: las enmiendas a menudo modifican subconjuntos de cláusulas."}, {"letter": "D", "text": "Implementar una validación posterior a la extracción que use coincidencia de patrones para detectar enmiendas y marcar esas extracciones para revisión manual.", "correct": false, "explanation": "Enruta cada contrato enmendado a un humano: es costoso, y aun así no le da a los sistemas posteriores una respuesta estructurada."}], "correct": "A", "task_id": "4.3", "objective": "Enforce structured output using tool use and JSON schemas", "group": "H"}, {"id": "m50", "domain": 4, "scenario": null, "situation": "Tu sistema de extracción implementa reintentos automáticos cuando falla la validación. En cada reintento, el error de validación específico se anexa al prompt. Este enfoque de reintento con retroalimentación de error resuelve la mayoría de los fallos en 2-3 intentos.", "question": "¿Para qué patrón de fallo serían MENOS efectivos los reintentos adicionales?", "options": [{"letter": "A", "text": "El modelo extrae las palabras clave como un objeto anidado organizado por categoría cuando el esquema requiere un array plano de strings", "correct": false, "explanation": "Un desajuste estructural que el modelo definitivamente puede corregir dada la retroalimentación sobre la forma esperada."}, {"letter": "B", "text": "El modelo extrae los conteos de citas como strings con formato de localización (\"1,234\") cuando el esquema requiere enteros", "correct": false, "explanation": "El número requerido está presente en el documento: el modelo solo necesita dejar de formatearlo. Fácil de arreglar con reintento por retroalimentación."}, {"letter": "C", "text": "El modelo extrae las fechas como strings de fecha y hora ISO 8601 (\"2023-03-15T00:00:00Z\") cuando el esquema requiere solo la porción de fecha (YYYY-MM-DD)", "correct": false, "explanation": "Un arreglo puramente de formato: el valor subyacente es correcto y el modelo puede recortar la porción de hora en el reintento."}, {"letter": "D", "text": "El modelo extrae \"et al.\" para los coautores cuando la lista completa solo existe en un documento externo que no está en la entrada", "correct": true, "explanation": "Correcto. Ninguna cantidad de reintentos le enseña al modelo información que no está en la entrada. El reintento con retroalimentación de error solo corrige errores que el modelo podría haber resuelto a partir de la fuente."}], "correct": "D", "task_id": "3.5", "objective": "Apply iterative refinement techniques for progressive improvement", "group": "I"}, {"id": "m51", "domain": 4, "scenario": null, "situation": "Tu pipeline de extracción procesa menús de restaurantes y debe producir un JSON estructurado con campos para nombres de platos, descripciones, precios y etiquetas dietéticas. Algunos menús usan formatos inconsistentes: precios como \"$12\" vs \"12.00\", información dietética como íconos vs texto.", "question": "¿Cuál es el enfoque más confiable?", "options": [{"letter": "A", "text": "Usar llamadas de extracción separadas para cada campo para garantizar un manejo consistente de cada tipo.", "correct": false, "explanation": "Múltiples llamadas por menú multiplican el costo y la latencia, y pierden el contexto entre campos (por ejemplo, qué íconos dietéticos están junto a qué plato)."}, {"letter": "B", "text": "Extraer los datos tal cual y normalizar los formatos en código de postprocesamiento después de que Claude responda.", "correct": false, "explanation": "Postprocesar un blob crudo es frágil: el código determinista tiene que manejar cada permutación de formato. Es mejor dejar que el modelo normalice en el momento de la extracción."}, {"letter": "C", "text": "Solicitar múltiples intentos de extracción por documento y seleccionar el formato más común.", "correct": false, "explanation": "La votación por ensamblado es costosa y aun así puede elegir una mayoría con formato incorrecto."}, {"letter": "D", "text": "Definir un esquema de salida estricto e incluir reglas de normalización de formato en tu prompt.", "correct": true, "explanation": "Correcto. Un esquema estricto + reglas de normalización explícitas ('precios como decimal con dos posiciones', 'dietético como etiquetas enumeradas') permite al modelo extraer y normalizar en una sola pasada."}], "correct": "D", "task_id": "4.2", "objective": "Apply few-shot prompting to improve output consistency and quality", "group": "I"}, {"id": "m52", "domain": 4, "scenario": null, "situation": "Tu sistema extrae metadatos de eventos (fecha, ubicación, organizador, `attendee_count`) de artículos de noticias usando un esquema JSON con todos los campos anulables. Durante la evaluación, observas que el modelo genera con frecuencia valores plausibles pero incorrectos para campos no mencionados en el artículo; por ejemplo, produciendo \"500\" para `attendee_count` cuando la fuente no contiene información de asistencia.", "question": "¿Cuál es la forma más efectiva de reducir estas extracciones falsas?", "options": [{"letter": "A", "text": "Agregar un paso de postprocesamiento que use una segunda llamada al LLM para verificar que cada valor extraído existe en el documento fuente.", "correct": false, "explanation": "Una segunda pasada costosa para un comportamiento que puedes corregir en el origen: indícale al modelo que devuelva null cuando el campo no esté declarado."}, {"letter": "B", "text": "Agregar instrucciones al prompt para devolver null en cualquier campo cuya información no esté directamente declarada en la fuente.", "correct": true, "explanation": "Correcto. Los campos ya son anulables; el modelo solo necesita una instrucción explícita de preferir null sobre una conjetura plausible. Este es el arreglo estándar para la alucinación consciente del esquema."}, {"letter": "C", "text": "Hacer que todos los campos del esquema sean obligatorios (no anulables) con reglas de validación estrictas para asegurar que el modelo solo produzca datos verificables.", "correct": false, "explanation": "Los campos obligatorios fuerzan al modelo a inventar valores cuando falta información: lo opuesto a lo que quieres."}, {"letter": "D", "text": "Actualizar a un nivel de modelo más capaz con mejor seguimiento de instrucciones para reducir las tendencias de alucinación.", "correct": false, "explanation": "Agrega costo y aun así no le comunica al modelo tu política: devolver null en lugar de inventar."}], "correct": "B", "task_id": "4.3", "objective": "Enforce structured output using tool use and JSON schemas", "group": "H"}, {"id": "m53", "domain": 4, "scenario": null, "situation": "Tras implementar el uso de herramientas con definiciones de esquema estrictas, se eliminan los errores de sintaxis JSON, pero el 5% de las extracciones aún tienen JSON válido con arrays vacíos o valores null en campos obligatorios como citations y methodology. Una revisión puntual revela que los documentos fuente contienen esta información, pero en formatos variados: citas en línea vs. bibliografías, secciones de metodología vs. detalles incrustados en las introducciones.", "question": "¿Cuál es la forma más efectiva de abordar estos fallos?", "options": [{"letter": "A", "text": "Implementar lógica de reintento que reenvíe las solicitudes cuando la validación detecte campos obligatorios vacíos.", "correct": false, "explanation": "Reintentar con el mismo prompt no le enseñará de repente al modelo a reconocer una metodología incrustada en una introducción. La capacidad de extracción es la brecha."}, {"letter": "B", "text": "Construir una capa de postprocesamiento basada en regex que escanee los documentos fuente buscando patrones de citas y palabras clave de metodología, poblando los campos vacíos cuando el modelo falle en extraer.", "correct": false, "explanation": "Regex sobre prosa es frágil, omite los casos sutiles (metodología incrustada en la introducción) y entrega datos silenciosamente erróneos."}, {"letter": "C", "text": "Modificar tu esquema para hacer citations y methodology opcionales, y marcar los registros incompletos para revisión manual en lugar de fallar la validación.", "correct": false, "explanation": "Tapa el síntoma. Los campos realmente son obligatorios más adelante: enrutarlos a humanos cambia un problema por carga de trabajo de los revisores."}, {"letter": "D", "text": "Agregar ejemplos few-shot que demuestren extracciones de documentos con estructuras variadas, mostrando cómo identificar citas en distintos formatos y localizar detalles de metodología a través de distintos tipos de secciones.", "correct": true, "explanation": "Correcto. El modo de fallo es que el modelo no reconoce los formatos variados. Ejemplos concretos a lo largo de la distribución de formatos elevan directamente el recall sobre ese 5%."}], "correct": "D", "task_id": "4.2", "objective": "Apply few-shot prompting to improve output consistency and quality", "group": "I"}, {"id": "m54", "domain": 4, "scenario": null, "situation": "Tu pipeline de extracción procesa facturas y extrae líneas de detalle, subtotales, montos de impuestos y totales generales. Durante la evaluación, descubres que en el 18% de las extracciones la suma de los montos de las líneas extraídas no coincide con el total general extraído, a veces por errores de OCR en el documento fuente, a veces por errores de extracción del modelo. Los sistemas contables posteriores rechazan los registros con totales no coincidentes.", "question": "¿Cuál es el enfoque más efectivo para mejorar la confiabilidad de la extracción?", "options": [{"letter": "A", "text": "Agregar un campo \"`calculated_total`\" donde el modelo sume las líneas extraídas, junto con un campo \"`stated_total`\". Marcar los registros para revisión humana cuando los valores difieran.", "correct": true, "explanation": "Correcto. Capturar ambos valores convierte la discrepancia en una señal de primera clase: detectas los errores de OCR y los de extracción de manera uniforme, y puedes enrutar solo el 18% no coincidente a humanos."}, {"letter": "B", "text": "Extraer las líneas de detalle y los totales de forma independiente, y luego usar un modelo de validación separado para reconciliar las discrepancias determinando qué valores extraídos son más probablemente correctos.", "correct": false, "explanation": "Un modelo de reconciliación puede enmascarar los errores de OCR al elegir silenciosamente un número sobre otro: el sistema contable sigue recibiendo datos erróneos sin marcar."}, {"letter": "C", "text": "Agregar ejemplos few-shot que demuestren facturas donde las líneas extraídas suman correctamente al total declarado, animando al modelo a producir extracciones matemáticamente consistentes.", "correct": false, "explanation": "Puede empujar al modelo hacia la consistencia, pero cuando la fuente en sí es internamente inconsistente (errores de OCR), el modelo tiene que elegir un valor 'erróneo'."}, {"letter": "D", "text": "Implementar un postprocesamiento que ajuste automáticamente los montos de las líneas de detalle de forma proporcional cuando su suma no coincida con el total declarado.", "correct": false, "explanation": "Las reescrituras silenciosas de datos financieros son peligrosas: estarías fabricando líneas de detalle para un sistema contable posterior."}], "correct": "A", "task_id": "4.2", "objective": "Apply few-shot prompting to improve output consistency and quality", "group": "I"}, {"id": "m56", "domain": 4, "scenario": null, "situation": "Tu extracción usa el uso de herramientas con un esquema JSON donde `property_type` se define como un enum: ['house', 'apartment', 'condo', 'townhouse']. Tras el despliegue, el 8% de las extracciones falla la validación del esquema. La investigación revela que los listados mencionan muchos tipos de propiedad poco comunes —\"studio\", \"loft\", \"duplex\", \"mobile home\", \"tiny house\", \"converted warehouse\"— y siguen apareciendo nuevos tipos con regularidad.", "question": "¿Cuál es la solución más efectiva a largo plazo?", "options": [{"letter": "A", "text": "Expandir continuamente el enum para incluir los tipos de propiedad recién observados y agregar monitoreo para casos límite adicionales.", "correct": false, "explanation": "Mantenimiento del enum a lo 'topo': cada nuevo estilo de listado arriesga otro fallo de validación."}, {"letter": "B", "text": "Agregar un valor \"other\" a tu enum con un campo string `property_type_detail` separado para las especificaciones cuando se selecciona \"other\".", "correct": true, "explanation": "Correcto. Mantiene el enum sólido para los casos comunes (joins posteriores limpios) a la vez que ofrece una válvula de escape bien tipada que preserva el detalle. Estable a largo plazo."}, {"letter": "C", "text": "Cambiar `property_type` de un enum a un string de forma libre e implementar un paso de normalización en el postprocesamiento.", "correct": false, "explanation": "Pierde por completo la garantía de validación y empuja el problema de normalización hacia adelante sin un vocabulario canónico."}, {"letter": "D", "text": "Agregar ejemplos few-shot a tu prompt que demuestren cómo mapear los tipos de propiedad inesperados al valor de enum existente más cercano.", "correct": false, "explanation": "Forzar 'tiny house' a 'house' descarta distinciones reales más adelante: estás perdiendo información de forma silenciosa."}], "correct": "B", "task_id": "4.3", "objective": "Enforce structured output using tool use and JSON schemas", "group": "H"}, {"id": "m57", "domain": 4, "scenario": null, "situation": "Tu sistema de extracción analiza descripciones de productos de e-commerce para extraer especificaciones como dimensiones, peso y materiales en JSON. A pesar de tener un esquema bien definido, el modelo extrae de forma inconsistente el campo \"materials\": a veces devuelve \"cotton blend\", otras veces \"Cotton/Polyester mix\", y ocasionalmente omite el campo cuando la información del material está claramente presente en la fuente.", "question": "¿Cuál es la forma más efectiva de mejorar la consistencia de la extracción?", "options": [{"letter": "A", "text": "Hacer que el campo \"materials\" sea obligatorio en lugar de opcional en el esquema para forzar al modelo a extraer siempre un valor", "correct": false, "explanation": "La obligatoriedad no resuelve la inconsistencia de formato, y puede forzar valores inventados cuando la información del material falta genuinamente."}, {"letter": "B", "text": "Cambiar a un nivel de modelo más capaz, ya que la extracción inconsistente indica una capacidad insuficiente del modelo", "correct": false, "explanation": "Costoso, y no aborda la causa real: el modelo no conoce el formato de salida canónico que quieres."}, {"letter": "C", "text": "Establecer la temperatura en 0 para eliminar la aleatoriedad y garantizar salidas deterministas", "correct": false, "explanation": "El determinismo no define el formato correcto; solo hace que las respuestas con formato incorrecto sean consistentes."}, {"letter": "D", "text": "Agregar ejemplos few-shot que muestren 2-3 pares completos de entrada-salida con formatos estandarizados de descripción de materiales", "correct": true, "explanation": "Correcto. Los ejemplos few-shot demuestran el formato canónico exacto que quieres ('cotton/polyester' como lista normalizada), y también elevan el recall sobre la información de material que se estaba omitiendo."}], "correct": "D", "task_id": "4.2", "objective": "Apply few-shot prompting to improve output consistency and quality", "group": "I"}, {"id": "m58", "domain": 4, "scenario": null, "situation": "Los documentos llegan de forma continua a lo largo del horario laboral y requieren que se extraigan datos estructurados. Para reducir costos, quieres usar la `Message Batches API` (50% de descuento, ventana de procesamiento de hasta 24 horas). Tu SLA especifica que los resultados de extracción deben estar disponibles dentro de las 30 horas de la llegada del documento con una confiabilidad del 99.9%.", "question": "¿Qué estrategia de lotes es la más apropiada?", "options": [{"letter": "A", "text": "Enviar lotes cada 6 horas que contengan los documentos de esa ventana", "correct": false, "explanation": "En el peor caso un documento espera 6 horas para ser agrupado y luego hasta 24 horas para procesarse = 30 horas exactas. Sin margen de seguridad para un objetivo de confiabilidad del 99.9%."}, {"letter": "B", "text": "Enviar un único lote al final del día que contenga todos los documentos de ese día", "correct": false, "explanation": "Un documento que llega justo después del inicio de la mañana espera todo el día para ser agrupado más hasta 24 horas para procesarse: muy por encima de 30 horas."}, {"letter": "C", "text": "Enviar lotes cada 4 horas que contengan los documentos de esa ventana", "correct": true, "explanation": "Correcto. Espera máxima de 4 horas + SLO de batch de hasta 24 horas = 28 horas en el peor caso, dejando un colchón de 2 horas bajo el SLA de 30 horas para absorber la variabilidad del batch y alcanzar el 99.9%."}, {"letter": "D", "text": "Usar la API en tiempo real para todos los documentos en lugar del procesamiento por lotes", "correct": false, "explanation": "Cumple el SLA trivialmente pero descarta el ahorro de costos del 50% que la pregunta te pide capturar."}], "correct": "C", "task_id": "4.5", "objective": "Design efficient batch processing strategies", "group": "H"}, {"id": "m59", "domain": 4, "scenario": null, "situation": "Tras el despliegue, descubres que el 12% de las extracciones contiene errores semánticos que pasan la validación del esquema JSON (por ejemplo, una duración como \"30 minutes\" colocada incorrectamente en un campo de cantidad de ingrediente). Los revisores humanos tienen capacidad para revisar solo el 20% de las extracciones.", "question": "¿Qué enfoque asigna de forma más efectiva la atención de los revisores?", "options": [{"letter": "A", "text": "Hacer que el modelo produzca puntajes de confianza a nivel de campo, y luego calibrar los umbrales de revisión usando un conjunto de validación etiquetado.", "correct": true, "explanation": "Correcto. La confianza a nivel de campo te permite enrutar a humanos el 20% de baja confianza, que es donde se concentra el 12% de errores semánticos. La calibración hace que la elección del umbral se base en datos."}, {"letter": "B", "text": "Muestrear aleatoriamente el 20% de las extracciones para revisión, usando las correcciones para rastrear la precisión e identificar patrones de error.", "correct": false, "explanation": "Excelente para medición, pobre para cobertura: el muestreo aleatorio solo atrapa el 20% del 12% de errores (~2.4% del total). El enrutamiento basado en confianza encuentra muchos más."}, {"letter": "C", "text": "Priorizar la revisión de todas las extracciones donde los campos obligatorios estén vacíos o explícitamente marcados como no encontrados.", "correct": false, "explanation": "Los campos vacíos son un modo de error estrecho. El problema del 12% son valores erróneos en campos poblados, que este filtro pasa por alto."}, {"letter": "D", "text": "Revisar todas las extracciones de documentos con anomalías de formato, como diseños inusuales o tipos de contenido mixtos.", "correct": false, "explanation": "Una heurística útil, pero la anomalía de formato no predice de forma confiable dónde se confundieron los campos entre sí."}], "correct": "A", "task_id": "5.5", "objective": "Design human review workflows and confidence calibration", "group": "C"}, {"id": "g13", "domain": 5, "scenario": "Sistema de investigación multiagente", "situation": "El monitoreo de producción muestra calidad de síntesis inconsistente. Cuando los resultados agregados son ~75K tokens, el agente de síntesis cita confiablemente información de los primeros 15K tokens (titulares/fragmentos de búsqueda web) y los últimos 10K tokens (conclusiones del análisis de documentos), pero a menudo se pierde hallazgos críticos en los 50K tokens del medio—incluso cuando responden directamente a la pregunta de investigación. ¿Cómo deberías reestructurar la entrada agregada?", "question": "¿Cómo deberías reestructurar la entrada agregada?", "options": [{"letter": "A", "text": "Resumir todas las salidas de los subagentes a menos de 20K tokens antes de la agregación para mantener el contenido dentro del rango confiable de procesamiento del modelo.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Transmitir los resultados de los subagentes al agente de síntesis incrementalmente, procesando primero los resultados de búsqueda web por completo, luego agregando los resultados del análisis de documentos.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Colocar un resumen de hallazgos clave al inicio de la entrada agregada y organizar los resultados detallados con encabezados de sección explícitos para una navegación más fácil.", "correct": true, "explanation": "Poner un resumen de hallazgos clave al inicio aprovecha los efectos de primacía para que la información crítica esté en la posición procesada más confiablemente. Agregar encabezados de sección explícitos en todo el documento ayuda al modelo a navegar y atender el contenido del medio, mitigando directamente el fenómeno \"perdido en el medio\"."}, {"letter": "D", "text": "Implementar rotación que alterne qué resultados de subagente aparecen primero en distintas tareas de investigación para asegurar que ambas fuentes obtengan posicionamiento superior equitativo con el tiempo.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g14", "domain": 5, "scenario": "Sistema de investigación multiagente", "situation": "En pruebas, la salida combinada del agente de búsqueda web (85K tokens incluyendo contenido de página) y del agente de análisis de documentos (70K tokens incluyendo cadenas de pensamiento) totaliza 155K tokens, pero el agente de síntesis funciona mejor con entradas por debajo de 50K tokens. ¿Qué solución es más efectiva?", "question": "¿Qué solución es más efectiva?", "options": [{"letter": "A", "text": "Modificar los agentes previos para que devuelvan datos estructurados (hechos clave, citas, puntuaciones de relevancia) en lugar de contenido y razonamiento verbosos.", "correct": true, "explanation": "Modificar los agentes previos para que devuelvan datos estructurados corrige la causa raíz reduciendo el volumen de tokens en la fuente mientras preserva la información esencial. Evita pasar contenido de página voluminoso y trazas de razonamiento que inflan tokens sin mejorar el paso de síntesis."}, {"letter": "B", "text": "Agregar un agente intermedio de resumición que condense los hallazgos antes de pasarlos a la síntesis.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Hacer que el agente de síntesis procese los hallazgos en lotes secuenciales, manteniendo el estado entre llamadas.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Almacenar los hallazgos en una base de datos vectorial y dar al agente de síntesis herramientas de búsqueda para consultar durante su trabajo.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "5.6", "objective": "Preserve information provenance and handle uncertainty in multi-source synthesis", "group": "B"}, {"id": "g45", "domain": 5, "scenario": "Generación de código con Claude Code", "situation": "Estás agregando wrappers de manejo de errores alrededor de llamadas a APIs externas en una base de código de 120 archivos. El trabajo tiene tres fases: (1) descubrir todos los sitios de llamada y patrones, (2) diseñar colaborativamente el enfoque de manejo de errores, y (3) implementar wrappers de forma consistente. En la Fase 1, Claude genera salida grande listando cientos de sitios de llamada con contexto, llenando rápidamente la ventana de contexto antes de que termine el descubrimiento.", "question": "¿Qué enfoque es más efectivo para completar la tarea manteniendo la consistencia de implementación?", "options": [{"letter": "A", "text": "Usar un subagente Explore para la Fase 1 para aislar la salida verbosa de descubrimiento y devolver un resumen, luego continuar las Fases 2–3 en la conversación principal.", "correct": true, "explanation": "Un subagente Explore aísla la salida verbosa de descubrimiento en un contexto separado y devuelve solo un resumen conciso a la conversación principal. Esto preserva la ventana de contexto principal para las fases de diseño colaborativo e implementación consistente donde el contexto retenido es más valioso."}, {"letter": "B", "text": "Hacer todas las fases en la conversación principal, usando periódicamente `/compact` para reducir el uso de contexto mientras se avanza por los archivos.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Cambiar a modo headless con `--continue`, pasando resúmenes de contexto explícitos entre llamadas en lote para mantener la continuidad.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Definir el patrón de manejo de errores en CLAUDE.md, luego procesar archivos en lotes a través de múltiples sesiones confiando en el archivo de memoria compartida para la consistencia.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "5.4", "objective": "Manage context effectively in large codebase exploration", "group": "G"}, {"id": "g54", "domain": 5, "scenario": "Agente de soporte al cliente", "situation": "Los registros de producción muestran un patrón: los clientes referencian montos específicos (por ejemplo, \"el descuento del 15% que mencioné\"), pero el agente responde con valores incorrectos. La investigación muestra que estos detalles fueron mencionados 20+ turnos atrás y condensados en resúmenes vagos como \"se discutieron precios promocionales\". ¿Qué corrección es más efectiva?", "question": "¿Qué corrección es más efectiva?", "options": [{"letter": "A", "text": "Aumentar el umbral de resumición del 70% al 85% para que las conversaciones tengan más espacio antes de que se dispare la resumición.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Almacenar el historial completo de conversación en almacenamiento externo e implementar recuperación cuando el agente detecta referencias como \"como mencioné\".", "correct": false, "explanation": ""}, {"letter": "C", "text": "Extraer hechos transaccionales (montos, fechas, números de pedido) en un bloque persistente de \"hechos del caso\" incluido en cada prompt fuera del historial resumido.", "correct": true, "explanation": "La resumición pierde inherentemente detalles precisos. Extraer hechos transaccionales en un bloque estructurado de \"hechos del caso\" fuera del historial resumido preserva información crítica para que esté disponible confiablemente en cada prompt independientemente de cuántos turnos hayan sido resumidos."}, {"letter": "D", "text": "Revisar el prompt de resumición para preservar explícitamente todos los números, porcentajes, fechas y expectativas declaradas por el cliente literalmente.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g63", "domain": 5, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "En varios turnos discutiendo estrategia de inversión, un usuario declaró \"Tengo una tolerancia al riesgo muy baja\" y luego \"Quiero maximizar mis retornos.\" Ahora pregunta: \"¿En qué debería invertir?\"", "question": "¿Qué enfoque garantiza mejor que la recomendación se alinee con la prioridad real del usuario?", "options": [{"letter": "A", "text": "Sacar a la luz la contradicción y pedir al usuario que aclare qué importa más.", "correct": true, "explanation": "Cuando las preferencias del usuario se contradicen directamente, sacar a la luz el conflicto y pedir aclaración es la única forma de garantizar que la recomendación se alinee con la verdadera intención del usuario. Maximizar retornos y tolerancia al riesgo baja son objetivos fundamentalmente incompatibles que requieren una decisión humana."}, {"letter": "B", "text": "Proporcionar recomendaciones separadas para ambos escenarios.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Proceder con la preferencia declarada más recientemente.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Recomendar una cartera equilibrada sin abordar el conflicto.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g64", "domain": 5, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Los usuarios refinan preferencias de playlist a lo largo de múltiples turnos. Dos mensajes después de que un usuario dijo \"Me encanta el jazz,\" Claude pregunta \"¿Qué géneros disfrutas?\"", "question": "¿Cuál es la causa más probable?", "options": [{"letter": "A", "text": "Claude requiere una conexión a base de datos vectorial para mantener memoria de conversación.", "correct": false, "explanation": ""}, {"letter": "B", "text": "La ventana de contexto del modelo ha sido excedida.", "correct": false, "explanation": ""}, {"letter": "C", "text": "La API de Claude requiere un parámetro `session_id`.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Tu aplicación no está incluyendo mensajes anteriores en el array `messages`.", "correct": true, "explanation": "Claude no tiene memoria del lado del servidor—cada llamada a la API es sin estado. Sin incluir el historial completo de conversación en el array `messages` de cada solicitud, Claude no tiene conocimiento de turnos anteriores. Las bases de datos vectoriales (A) y `session_id` (C) no son parte de la arquitectura de Claude; el desbordamiento de ventana de contexto (B) es imposible para intercambios de dos mensajes."}], "correct": "D", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g65", "domain": 5, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Después de una sesión de cocina de 40 minutos, la conversación alcanza 78,000 tokens. El historial incluye alergias, escalado de recetas, términos de cocina aclarados y discusión general. Debes reducir tokens preservando información importante.", "question": "¿Qué enfoque equilibra mejor la preservación con la reducción de tokens?", "options": [{"letter": "A", "text": "Resumir todo el historial de conversación.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Conservar solo los 20,000 tokens más recientes.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Extraer datos estructurados críticos (alergias, cantidades, preferencias), resumir la discusión general y mantener los intercambios recientes literalmente.", "correct": true, "explanation": "El enfoque híbrido preserva la información de mayor valor al menor costo. Los hechos críticos como alergias y cantidades de recetas se extraen en un bloque estructurado compacto (previniendo la pérdida de precisión que ocurre durante la resumición), la discusión general se resume, y los intercambios recientes se mantienen literalmente para la coherencia conversacional. Las opciones A y B arriesgan perder información dietética crítica; D es excesiva para una sola sesión de cocina."}, {"letter": "D", "text": "Almacenar la conversación completa externamente y recuperar partes relevantes mediante búsqueda semántica.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g66", "domain": 5, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Los usuarios reportan que durante conversaciones extendidas el asistente pierde el rastro de temas y preferencias anteriores. Tu implementación actual conserva solo los últimos 25 pares de mensajes.", "question": "¿Cuál es la solución más efectiva?", "options": [{"letter": "A", "text": "Enfoque híbrido: resumir mensajes más antiguos mientras se mantienen los recientes literalmente.", "correct": true, "explanation": "El enfoque híbrido aborda ambas dimensiones del problema: retener contexto reciente exacto (crítico para la coherencia conversacional) mientras se mantiene una representación comprimida de preferencias anteriores. Aumentar la ventana (C) simplemente retrasa el mismo problema. La búsqueda vectorial (B) puede perder contexto importante que no es semánticamente similar a la consulta actual."}, {"letter": "B", "text": "Búsqueda de similitud vectorial sobre el historial completo de conversación.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Aumentar la ventana a 50 pares de mensajes.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Resumir mensajes eliminados en cada turno y anteponer el resumen acumulado.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g67", "domain": 5, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Los usuarios reportan que la latencia aumenta y los costos suben cuando las conversaciones superan los 50 turnos.", "question": "¿Cuál es la causa principal?", "options": [{"letter": "A", "text": "Todo el historial de conversación se incluye con cada solicitud a la API.", "correct": true, "explanation": "La API de Claude es completamente sin estado—cada solicitud debe incluir el historial completo de conversación en el array `messages`. A medida que las conversaciones crecen, cada solicitud lleva más tokens, lo que aumenta directamente tanto la latencia de procesamiento como el costo. El modelo no mantiene ningún estado interno entre llamadas (D es falso)."}, {"letter": "B", "text": "El modelo genera respuestas progresivamente más largas.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Las operaciones de base de datos se ralentizan a medida que crece el historial.", "correct": false, "explanation": ""}, {"letter": "D", "text": "El modelo construye un perfil de usuario interno que requiere más procesamiento.", "correct": false, "explanation": ""}], "correct": "A", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g68", "domain": 5, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Después de tres meses de sesiones semanales, el historial de conversación crece a 85,000 tokens. Cuando un usuario pregunta \"¿Qué concluimos sobre el tema del aislamiento?\", el asistente da respuestas genéricas en lugar de referenciar discusiones anteriores.", "question": "¿Cuál es el enfoque más efectivo?", "options": [{"letter": "A", "text": "Truncamiento de ventana deslizante.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Resumición progresiva capturando conclusiones clave.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Embeddings semánticos con recuperación de intercambios relevantes.", "correct": true, "explanation": "La búsqueda semántica sobre el historial de conversación es el único enfoque que escala a tres meses de discusión mientras puede sacar a la luz intercambios relevantes específicos a demanda. El truncamiento deslizante (A) descartaría la mayoría del historial. La resumición progresiva (B) comprime las discusiones en abstracciones que pierden las conclusiones específicas que los usuarios buscan."}, {"letter": "D", "text": "Agregar etiquetas XML estructuradas marcando conclusiones de discusión.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g70", "domain": 5, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Tu tutor de IA tiene un prompt del sistema de 2,800 tokens que define metodología de enseñanza y reglas de adaptación. Después de 12 turnos, el asistente comienza a ignorar los niveles de competencia.", "question": "¿Cuál es la corrección más efectiva?", "options": [{"letter": "A", "text": "Inyectar recordatorios cada 4–5 turnos.", "correct": false, "explanation": ""}, {"letter": "B", "text": "Reemplazar reglas verbosas con ejemplos few-shot que demuestren adaptación por nivel de competencia.", "correct": true, "explanation": "Un prompt del sistema de 2,800 tokens con reglas declarativas es vulnerable a la deriva porque las reglas abstractas requieren que el modelo razone sobre ellas en cada turno. Reemplazar reglas verbosas con ejemplos few-shot concretos que demuestran la adaptación correcta por nivel de competencia da al modelo patrones de comportamiento claros para seguir—esto se cumple más confiablemente a lo largo de muchos turnos que las instrucciones abstractas."}, {"letter": "C", "text": "Colocar las reglas críticas al final del prompt del sistema.", "correct": false, "explanation": ""}, {"letter": "D", "text": "Evaluar respuestas y regenerar si el nivel de dificultad no coincide.", "correct": false, "explanation": ""}], "correct": "B", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "g75", "domain": 5, "scenario": "Patrones de arquitectura de IA conversacional", "situation": "Tu asistente usa un prompt del sistema con persona de contratista. Los turnos iniciales siguen las reglas, pero para el turno 7 el asistente da consejos genéricos. La longitud de conversación es solo 2,500 tokens.", "question": "¿Cuál es la causa más probable?", "options": [{"letter": "A", "text": "Los prompts del sistema solo establecen el comportamiento inicial.", "correct": false, "explanation": ""}, {"letter": "B", "text": "La atención del modelo se debilita a medida que se acumulan los turnos.", "correct": false, "explanation": ""}, {"letter": "C", "text": "Las respuestas acumuladas del asistente diluyen la influencia del prompt del sistema.", "correct": true, "explanation": "A medida que las respuestas del asistente se acumulan en el historial de conversación, la proporción de texto que refleja las restricciones de comportamiento del prompt del sistema disminuye en relación al cuerpo creciente de contenido generado por el asistente. El modelo cada vez más sigue el patrón de sus propias salidas anteriores en lugar de las instrucciones del prompt del sistema, compounding la deriva incluso en longitudes de token cortas."}, {"letter": "D", "text": "El prompt del sistema solo se envía una vez.", "correct": false, "explanation": ""}], "correct": "C", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "m18", "domain": 5, "scenario": null, "situation": "Durante las pruebas, observas que en sesiones de exploración prolongadas (más de 30 minutos), el agente comienza a dar respuestas inconsistentes sobre la estructura de código que discutió antes. Los ingenieros reportan tener que repetir contexto sobre módulos que ya habían explorado.", "question": "¿Cuál es el enfoque más efectivo para abordar esto?", "options": [{"letter": "A", "text": "Hacer que el agente mantenga un archivo de notas (scratchpad) que registre los hallazgos clave, y consultarlo para las preguntas posteriores.", "correct": true, "explanation": "Correcto. Un scratchpad traslada los hallazgos a un almacenamiento duradero que el agente puede releer cuando lo necesite, dándole una 'memoria' estable independiente de qué tan saturada esté la ventana de contexto."}, {"letter": "B", "text": "Cambiar a un nivel de modelo de mayor capacidad para brindar más espacio de ventana de contexto para los datos de exploración acumulados.", "correct": false, "explanation": "Una ventana más grande retrasa el problema, pero no resuelve la degradación de la atención sobre contextos largos y ruidosos."}, {"letter": "C", "text": "Implementar un borrado automático del contexto cada 15 minutos para garantizar que el agente comience con un contexto fresco y no contaminado.", "correct": false, "explanation": "El borrado total descarta hallazgos válidos: exactamente el estado que los ingenieros se quejan de tener que reconstruir."}, {"letter": "D", "text": "Crear resúmenes de todos los archivos fuente antes de comenzar la exploración, cargando en el contexto solo estas representaciones comprimidas.", "correct": false, "explanation": "Los resúmenes previos pierden el detalle que hace útil la exploración de código y a menudo tergiversan los archivos que más le importan al ingeniero."}], "correct": "A", "task_id": "5.4", "objective": "Manage context effectively in large codebase exploration", "group": "G"}, {"id": "m20", "domain": 5, "scenario": null, "situation": "Tu agente ha dedicado 25 minutos a explorar el subsistema de renderizado de un motor de juego: leyendo código de shaders, gestión de búferes y lógica de sincronización de fotogramas. Un ingeniero ahora le pide que entienda cómo se integra el motor de física con el renderizado para las superposiciones de depuración de colisiones. Notas que las respuestas recientes hacen referencia a \"patrones de renderizado típicos\" en lugar de las clases específicas VulkanPipeline y FrameGraph que descubrió antes.", "question": "¿Cuál es el enfoque más efectivo?", "options": [{"letter": "A", "text": "Generar un subagente que explore la física de forma independiente y luego sintetizar manualmente sus hallazgos con el conocimiento de renderizado acumulado en la conversación principal.", "correct": false, "explanation": "La síntesis manual en la conversación principal mete aún más cosas en un contexto que ya se está degradando."}, {"letter": "B", "text": "Continuar en el contexto actual con prompts más dirigidos que hagan referencia a las clases específicas por su nombre.", "correct": false, "explanation": "El agente ya está perdiendo especificidad ('patrones típicos' en lugar de VulkanPipeline). Insistir más sobre el mismo contexto degradado no lo restaura."}, {"letter": "C", "text": "Resumir los hallazgos clave del renderizado y luego generar un subagente para la exploración de la física con ese resumen en su contexto inicial.", "correct": true, "explanation": "Correcto. Condensa lo que has aprendido sobre el renderizado en un resumen compacto, y luego dale a un subagente nuevo ese resumen más la tarea de física: preservas la señal importante y escapas del contexto degradado."}, {"letter": "D", "text": "Usar /clear para reiniciar por completo el contexto y luego empezar de cero la exploración de la física usando las rutas de archivo del CLAUDE.md del proyecto.", "correct": false, "explanation": "/clear borra los hallazgos de renderizado que en realidad necesitas para la pregunta transversal sobre las superposiciones de depuración de colisiones."}], "correct": "C", "task_id": "5.4", "objective": "Manage context effectively in large codebase exploration", "group": "G"}, {"id": "m23", "domain": 5, "scenario": null, "situation": "Un ingeniero le pide al agente que entienda cómo funciona la capa de caché antes de agregar un nuevo disparador de invalidación de caché. Tras las búsquedas iniciales con Grep, el agente ha identificado que la lógica de caché abarca 15 archivos, incluyendo decoradores, middleware y clases de servicio (~8000 líneas en total).", "question": "¿Cuál es el siguiente paso más efectivo para construir comprensión a la vez que se gestionan las restricciones de contexto?", "options": [{"letter": "A", "text": "Usar la herramienta Read para cargar secuencialmente los 15 archivos, construyendo una comprensión completa de toda la implementación de caché.", "correct": false, "explanation": "Cargar 8000 líneas sin estructura inunda el contexto y entierra la lógica de invalidación en código no relacionado."}, {"letter": "B", "text": "Analizar las importaciones y jerarquías de clases para identificar la clase base de caché, leer ese archivo para entender la interfaz y luego rastrear las implementaciones específicas de invalidación.", "correct": true, "explanation": "Correcto. Empieza desde la raíz arquitectónica (la interfaz) y luego navega solo las implementaciones específicas que importan para la invalidación: lectura enfocada, bajo costo de contexto."}, {"letter": "C", "text": "Usar Grep para buscar los patrones \"invalidate\" y \"expire\" en todos los archivos y luego leer únicamente esos rangos de líneas específicos con un contexto circundante mínimo.", "correct": false, "explanation": "La lectura basada solo en palabras clave despoja el contexto de clase/método que te dice qué protege realmente la invalidación."}, {"letter": "D", "text": "Usar Glob para encontrar archivos que coincidan con patrones comunes de caché (cache.py, caching/), priorizar los archivos más grandes leyéndolos primero y luego revisar los archivos más pequeños en busca de vacíos.", "correct": false, "explanation": "El tamaño es un mal indicador de importancia. Desperdiciarías contexto en grandes archivos de utilidades y te perderías los pequeños archivos estratégicos."}], "correct": "B", "task_id": "5.4", "objective": "Manage context effectively in large codebase exploration", "group": "G"}, {"id": "m37", "domain": 5, "scenario": null, "situation": "El agente verifica la identidad del cliente mediante un proceso de varios pasos antes de restablecer contraseñas. Durante las pruebas, notas que después de que el cliente responde la tercera pregunta de verificación, el agente le vuelve a pedir su nombre, como si el intercambio anterior nunca hubiera ocurrido.", "question": "¿Cuál es la causa más probable de este comportamiento?", "options": [{"letter": "A", "text": "La herramienta de verificación está borrando el estado interno del agente después de cada paso de validación exitoso.", "correct": false, "explanation": "Las herramientas no borran el estado del agente; el estado de la conversación vive en el arreglo de mensajes que envías."}, {"letter": "B", "text": "Al prompt le faltan instrucciones que le digan a Claude que recuerde la información a lo largo de múltiples intercambios.", "correct": false, "explanation": "La memoria entre turnos no se logra con una instrucción; proviene de pasar los turnos anteriores en la siguiente solicitud."}, {"letter": "C", "text": "El historial de la conversación no se está pasando en las solicitudes subsecuentes a la API.", "correct": true, "explanation": "Correcto. La API es sin estado. Cada solicitud debe incluir el arreglo completo de mensajes. Si solo envías el último turno, el modelo no tiene memoria de los anteriores: exactamente el síntoma de \"volver a pedir el nombre\"."}, {"letter": "D", "text": "La retención de memoria de Claude está limitada por defecto a dos turnos de conversación, y se requiere configuración explícita para extenderla.", "correct": false, "explanation": "No existe tal límite por defecto. El contexto está acotado por la ventana, y la longitud del historial está bajo tu control."}], "correct": "C", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "m42", "domain": 5, "scenario": null, "situation": "Un cliente plantea tres problemas separados durante una sesión: una consulta de reembolso (turnos 1-15), una pregunta sobre suscripción (turnos 16-30) y una actualización del método de pago (turnos 31-45). En el turno 48, el cliente pregunta \"¿Qué pasó con mi reembolso?\" La conversación se está acercando a los límites de contexto.", "question": "¿Qué estrategia mantiene mejor la capacidad del agente para atender todos los problemas a lo largo de la sesión?", "options": [{"letter": "A", "text": "Extraer y persistir datos estructurados de los problemas (IDs de pedido, montos, estados) en una capa de contexto separada.", "correct": false, "explanation": "Una capa de contexto paralela añade ingeniería y no preserva de forma natural la narrativa conversacional que el cliente espera."}, {"letter": "B", "text": "Confiar en las herramientas MCP para volver a obtener la información relevante bajo demanda cuando el cliente haga referencia a problemas anteriores.", "correct": false, "explanation": "Volver a obtener datos está bien para la frescura, pero no resuelve el problema de la longitud del contexto, y pierdes lo que se dijo entre el cliente y el agente."}, {"letter": "C", "text": "Resumir los turnos anteriores en una descripción narrativa, preservando el historial completo de mensajes solo para el problema activo.", "correct": true, "explanation": "Correcto. El resumen progresivo comprime los temas resueltos y estables mientras mantiene el hilo activo textualmente: el patrón clásico para conversaciones largas con múltiples problemas cerca del límite de contexto."}, {"letter": "D", "text": "Implementar un contexto de ventana deslizante que retenga los 30 turnos más recientes.", "correct": false, "explanation": "Una ventana deslizante pura descarta silenciosamente el problema del reembolso (turnos 1-15) del contexto, que es exactamente lo que el cliente está preguntando."}], "correct": "C", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "m45", "domain": 5, "scenario": null, "situation": "Tu agente ha llamado a `lookup_order` varias veces mientras investiga las solicitudes de devolución de un cliente. Cada respuesta incluye más de 40 campos (artículos, detalles de envío, información de pago, historial de estado). Las salidas de las herramientas ahora representan la mayor parte del contexto de la conversación. El cliente menciona dos pedidos más que quiere discutir.", "question": "¿Cuál es el enfoque más efectivo antes de hacer búsquedas adicionales?", "options": [{"letter": "A", "text": "Extraer solo los campos relevantes para la devolución (artículos, fecha de compra, ventana de devolución, estado) de cada respuesta de pedido existente, eliminando los detalles verbosos.", "correct": true, "explanation": "Correcto. Conserva los campos que importan para la tarea y descarta el resto. Esto aborda directamente el problema de saturación del contexto antes de agregar dos búsquedas más."}, {"letter": "B", "text": "Hacer que el modelo genere un resumen en lenguaje natural de los detalles clave de cada pedido, reemplazando las respuestas estructuradas con descripciones en prosa.", "correct": false, "explanation": "Los resúmenes en prosa pierden precisión para campos que el modelo puede necesitar después (fechas exactas, montos). El recorte estructurado es mejor que la paráfrasis."}, {"letter": "C", "text": "Mover todas las respuestas de las herramientas a una base de datos vectorial con indexación semántica, recuperando las porciones relevantes a medida que la conversación continúa.", "correct": false, "explanation": "Una base de datos vectorial es infraestructura pesada para lo que es en esencia un problema de recorte."}, {"letter": "D", "text": "Proceder con búsquedas adicionales sin modificar el contexto existente de salidas de las herramientas.", "correct": false, "explanation": "No hace nada respecto a la saturación: te diriges al agotamiento del contexto."}], "correct": "A", "task_id": "5.1", "objective": "Manage conversation context to preserve critical information across long interactions", "group": "G"}, {"id": "m60", "domain": 5, "scenario": null, "situation": "Tras completarse tu lote diario de 10,000 documentos, 300 documentos (3%) fallaron con errores \"`context_length_exceeded`\". El archivo de resultados identifica cada fallo por `custom_id`.", "question": "¿Cuál es el enfoque más rentable para procesar estos fallos?", "options": [{"letter": "A", "text": "Reprocesar el lote completo con prompt caching habilitado para reducir el costo de reintentar las solicitudes con prompts de sistema idénticos", "correct": false, "explanation": "Volver a ejecutar 10,000 documentos exitosos para resolver 300 fallos es un derroche sin importar el ahorro del caching. Y el caching no arregla el error de longitud excedida."}, {"letter": "B", "text": "Reenviar solo los 300 documentos fallidos tras dividirlos en piezas más pequeñas, y luego combinar las extracciones parciales", "correct": true, "explanation": "Correcto. Es focalizado, y aborda la causa real (entrada demasiado larga). Divide los documentos sobredimensionados, extrae por fragmento y luego fusiona: mínimo de tokens, arregla el modo de fallo específico."}, {"letter": "C", "text": "Reenviar el lote completo de 10,000 documentos usando un nivel de modelo con una ventana de contexto más grande", "correct": false, "explanation": "Costoso (reprocesar 9,700 éxitos) y aun así puede fallar con documentos verdaderamente sobredimensionados."}, {"letter": "D", "text": "Aumentar el parámetro `max_tokens` para los 300 documentos fallidos y reenviarlos en un nuevo lote", "correct": false, "explanation": "`max_tokens` controla la longitud de salida, no la de entrada. No resuelve `context_length_exceeded`, que tiene que ver con el presupuesto combinado de entrada más salida."}], "correct": "B", "task_id": "4.3", "objective": "Enforce structured output using tool use and JSON schemas", "group": "H"}]