Prompt Intelligence
Prompt Intelligence es la herramienta de Antropus para crear, gestionar y editar sets metodológicos de prompts. Un prompt set es una colección de preguntas —las que los usuarios escriben en ChatGPT, Claude, Gemini, Perplexity y Google AI— distribuidas según categorías, intenciones y fases del funnel de compra. Los sets generados son reutilizables en cualquier herramienta de visibilidad GEO (Prompt Tracker, Competitor Intelligence, GEO Audit).
A diferencia de escribir prompts a mano o al azar, Prompt Intelligence garantiza que tu set sea metodológicamente equilibrado: cada prompt representa un tipo de pregunta real, clasificado según seis categorías rigurosas (A–F: marca directa, descubrimiento, comparación, decisión comercial, producto y confianza), para que tu medición de visibilidad GEO sea representativa y no sesgada.
Qué es y para qué sirve
La medición de visibilidad en motores de IA depende enteramente de los prompts que lances. Unos prompts buenos miden bien; unos prompts malos (todos sobre tu marca, o todos genéricos) miden mal. Prompt Intelligence resuelve eso de tres maneras:
-
Generar automáticamente sets equilibrados en base a tu sector, marca, país y objetivo comercial. El generador asigna los prompts a seis categorías fijas (A–F) respetando proporciones metodológicas.
-
Importar prompts desde archivos Excel o CSV, para reutilizar sets externos, plantillas ajenas, o tus propios históricos.
-
Editar y versionar sets existentes sin sobrescribir los originales, permitiendo evolución controlada de tu metodología.
El resultado es un conjunto reproducible y defendible de preguntas que usarás en múltiples herramientas de medición GEO, asegurando consistencia y metodología rigurosa.
Cómo funciona, paso a paso
Fase 1: Entrada (formulario "Crear set")
Defines tu caso de uso:
| Campo | Obligatorio | Descripción |
|---|---|---|
| Marca | Sí | Nombre de tu marca / negocio. |
| Sector | Sí | Ej. "Agencia GEO", "E-commerce de moda", "SaaS de IA". |
| País | Sí | País objetivo para el análisis (default: España). |
| Descripción negocio | No | Qué hacéis, diferenciadores clave. Hasta 500 caracteres. |
| ICP | No | Cliente ideal (ej. "CMOs de agencias B2B", "Startups de tecnología"). |
| Objetivo | Sí | Qué intentas medir: "Visibilidad general", "Queries de compra", "Autoridad de marca", "Competencia", etc. Predefinidos + opción custom. |
| Cantidad de prompts | Sí | Rango 5–60. Puedes usar un slider (automático) o 3 inputs separados (manual). |
Campos avanzados (opcionales):
- Audiencia objetivo: Refina más allá de ICP (≤300 caracteres). Describe comportamientos, preferencias, contextos.
- Énfasis en fases del funnel: Awareness, Consideration, Decision, o Balanced (default). Redistribuye peso entre intenciones.
- Términos obligatorios: Palabras o frases que DEBEN aparecer en los prompts, separadas por coma.
- Términos a evitar: Temas que el generador debe EVITAR mencionar.
- Ambigüedades a desambiguar: Formato "término => significado correcto" (línea por línea). Ej. "GEO => Generative Engine Optimization, no Geographic Information".
- Instrucciones manuales: Campo de texto libre (≤2000 caracteres) para casos muy específicos. Ejemplo: "Genera prompts que suenen como preguntas que harían startups de marketing, no agencias big".
Fase 2: Estimación de coste (pre-ejecución)
Antes de disparar la generación, Antropus calcula el coste en créditos:
Cálculo de base:
- Modelo principal input: ~1500 tokens base + ~10 tokens por prompt solicitado.
- Modelo principal output: ~1500 tokens base + ~100 tokens por prompt solicitado.
- Multiplicador de regeneración: ×2 (cubre 90% de casos donde falla local validation).
- Modelo validador: ~2500 tokens input + ~1500 tokens output (si aplica).
Fórmula:
modeloPrincipalCredits = (inputTokens + outputTokens) × multiplicador modeloValidadorCredits = 4000 (fijo, si se ejecuta) totalCredits = convertToCredits(modeloPrincipalCredits + modeloValidadorCredits)
Ejemplos orientativos:
- 5 prompts → ~1.6 créditos.
- 25 prompts → ~5.0 créditos.
- 60 prompts → ~8.5 créditos.
Si tu saldo es insuficiente, el botón "Generar" cambia a "Comprar créditos →". El estimador es conservador (asume regeneración parcial en un ~10% de casos).
Fase 3: Orquestación de generación
El proceso interno (generateBaselinePrompts()) sigue estos pasos:
1. Distribución inicial por categoría (A–F)
Se dividen los prompts solicitados entre seis categorías metodológicas fijas:
| Categoría | Descripción | % default | Ejemplo |
|---|---|---|---|
| A | Marca directa: preguntas sobre tu marca explícitamente. | 12.5% | "¿Qué es [Marca]?" |
| B | Descubrimiento genérico: qué hace / cómo funciona el sector, nunca mencionando tu marca. | 27.5% | "¿Qué es GEO?" "Cómo mejorar visibilidad en IA". |
| C | Comparación competitiva: alternativas o comparativas donde tu marca es una opción más, no la principal. | 22.5% | "Mejores herramientas de GEO", "[Marca] vs [Competidor]". |
| D | Decisión comercial: queries donde otro sector es protagonista, tu marca marginal. | 17.5% | "Plataformas de IA", "Marketing automation". |
| E | Producto y categoría: búsquedas técnicas o de catálogo / intención de compra / acción. | 12.5% | "Dónde contratar GEO", "Pricing de herramientas". |
| F | Confianza y objeciones: preguntas muy específicas, reviews, dudas, riesgos, edge cases. | 7.5% | "GEO para SaaS", "GEO en fintech". |
Si el total de prompts es < 6, se usa un fallback de orden de prioridad: B → D → C → A → E → F (asegura mínimo representativo).
2. Generación primaria (Claude)
El LLM recibe:
- Descripción de marca + sector + país.
- Formulario completo (audience, funnel emphasis, must-include, must-avoid, ambiguities, manual instructions).
- Distribución objetivo por categoría.
- System prompt experto en GEO.
Output: Array JSON de prompts con metadata (intent, funnelStage, category, relevanceScore, etc.).
3. Validación local (síncrona, gratis)
Checks automáticos sin LLM:
- Longitud mínima: cada prompt ≥ 6 palabras. Falla → rechazo crítico.
- Categoría presente: se genera al menos 1 prompt de cada A–F. Falla → rechazo crítico.
- Policy de marca por categoría:
- A (siempre branded): 100% deben mencionar tu marca.
- B (nunca branded): 0% pueden mencionar tu marca.
- C (moderado): ≤ 40% branded permitido.
- D, E (raro): ≤ 15% branded.
- F (raro): ≤ 25% branded. Falla → rechazo crítico.
- Marca global: suma de prompts branded ÷ total. Máximo 30% permitido (evita sesgo hacia reputación). Falla → rechazo crítico.
- Core ratio: (B + C + D prompts) / total ≥ 51%. El núcleo metodológico debe ser mayoritario. Falla → rechazo crítico.
- Duplicados: post-normalización (minúsculas, sin puntuación), rechaza exactas.
Score de validación local:
score = 100 - (critical_issues × 18) - (warning_issues × 6) Rango [0, 100]. ≥ 82 = alta calidad.
Escalation hint (decide si llamar a modelo en tier mejorado):
escalation = (critical_count × 0.15) + (rejection% > 25% ? 0.4 : 0) + (rejection% > 40% ? 0.3 : 0) Rango [0, 1]. ≥ 0.5 = escalar a tier mejorado.
4. Regeneración parcial (hasta 2 intentos)
Si la validación local falla:
- Extrae los prompts rechazados.
- Vuelve a llamar al modelo solo para rellenar los huecos, manteniendo la distribución proporcional.
- En el intento 2 O si escalation_hint ≥ 0.5, se usa un tier mejorado (ligero overhead de tokens).
Máximo 2 intentos de regen; si sigue fallando, se devuelve el mejor set logrado + warnings.
5. Validación LLM (Claude, opcional)
Se ejecuta si:
- Validación local pasó (score ≥ 82), O
- Score está en zona dudosa [65–88], O
- Total de prompts ≥ 24, O
- Sector contiene keywords YMYL (finanzas, salud, legal).
Modelo validador busca:
- Duplicados semánticos (mismo significado, palabras distintas).
- Ambigüedad lingüística (término polisémico confuso en contexto).
- Incoherencias de metadata (ej. category X pero comportamiento de Y).
Si rechaza: se repite regen parcial una vez más (máximo escalation).
6. Resultado final
Devuelve al cliente:
{
"prompts": [{
"id": "uuid",
"text": "¿Qué herramientas de GEO recomendáis?",
"category": "C",
"intent": "comparacion",
"funnelStage": "consideracion",
"group": "comparativo",
"brandMentioned": false,
"commercialValue": 0.75,
"measurementValue": 0.85,
"neutralityScore": 0.9,
"realismScore": 0.92,
"relevanceScore": 0.75
}, ...],
"distribution": {
"total": 25,
"perCategory": { "A": 3, "B": 7, "C": 5, "D": 5, "E": 3, "F": 2 },
"warning": null
},
"validation": {
"pass": true,
"score": 94,
"issues": [],
"rejectedIds": []
},
"summary": { ... },
"escalated": false,
"usage": {
"inputTokens": 4500,
"outputTokens": 3200,
"llmCalls": 2,
"model": "claude"
}
}
Fase 4: Presentación (pantalla "Ver set")
Header:
- Nombre del set, versión, total de prompts, país, objetivo.
- Botones: Editar, Duplicar, → Herramienta (Baseline/Competitor/Visibility), Exportar CSV, Copiar, Eliminar.
Resumen metodológico:
- Gráfico de distribución intent (informacional / comparación / decisión).
- Gráfico de distribución funnel (awareness / consideration / decision).
- Gráfico de distribución categoría (A–F).
- Relevancia media (promedio de relevanceScore).
Calidad metodológica:
- 4 checks visuales: ✓ decision presente, ✓ comparison presente, ✓ prompts no-branded ≥ 40%, ✓ ≥ 5 prompts.
- Score de validación (0–100) con color: rojo < 60, amarillo 60–80, verde ≥ 80.
Lista de prompts:
- Tabla de 1–N filas. Cada fila: #, intent (badge color), funnel (tag), group, relevanceScore, texto (clicable).
- Filtros: por intent + búsqueda full-text.
- Expansión: clic en fila → slide-over con texto completo, metadata, puntuaciones individuales.
Qué necesitas antes de empezar
| Requisito | Para qué sirve |
|---|---|
| Un proyecto en Antropus | Define tu marca, sector, dominio y país. Sin proyecto, no puedes ahorcar un set a nada. |
| Nombre de marca claro | El generador y validador lo usan como línea base. Si es ambiguo o muy común, la metodología falla. |
| Objetivo de análisis definido | Qué intentas medir (visibilidad general, queries de compra, reputación, competencia). Afecta a los prompts generados. |
| Prompts o Excel importado | Generados automáticamente, importados de CSV/XLSX, o escritos manualmente. Sin prompts, el set está vacío. |
Funciones / vías de uso
Generar set (ruta principal)
Entrada:
{
"brand": "Mi Agencia GEO",
"sector": "Agencia de marketing digital",
"country": "ES",
"description": "Agencia especializada en visibilidad en motores de IA",
"icp": "CMOs de agencias B2B",
"objective": "Visibilidad",
"count": 25,
"customWeights": { "A": 3, "B": 7, "C": 5, "D": 5, "E": 3, "F": 2 },
"audience": "Startups de tech y agencias de marketing",
"funnelEmphasis": "balanced",
"mustInclude": ["GEO", "visibilidad IA"],
"mustAvoid": ["dark SEO"],
"ambiguities": [{"term": "GEO", "meaning": "Generative Engine Optimization"}],
"manualInstructions": "Genera prompts que harían startups de marketing, no agencias big"
}
Salida: Array de prompts, distribución, validation summary, usage.
Responsable: generateBaselinePrompts() en lib/baseline/promptGenerator.ts
Importar desde CSV / Excel
Ruta: Cliente-side (parsePromptsXlsx / parsePromptsCsv)
Archivo esperado:
text,intent,funnel,category,group,rationale
"¿Qué es GEO?",informacional,awareness,B,educativo,Pregunta foundacional
"¿Mejor herramienta GEO?",comparacion,consideration,C,comparativo,Búsqueda activa
Cabecera requerida: text es obligatorio. El resto opcionales.
Responsable: lib/prompts/xlsx.ts / lib/prompts/csv.ts
Acción: Crea PromptSet sin generar; es parsing + almacenamiento local.
Descarga plantilla: Botón en la UI con estructura correcta.
Editar set (crear versión nueva)
Ruta: Cliente-side → IndexedDB storage
Entrada: Label + array de prompts modificados (text, intent, category, canonicalUrl).
Salida: PromptSet v(n+1) con parentSetId = ID original.
Responsable: onSaveEditedSet() → storage.put()
Política: Nunca sobrescribe original; siempre crea versión nueva. Así mantienes histórico y puedes revertir.
Duplicar set
Ruta: Cliente-side
Entrada: PromptSet existente.
Salida: PromptSet v(n+1) con parentSetId = original ID.
Responsable: onDuplicateAsNewVersion()
Exportar a herramienta (Baseline / Competitor / Visibility)
Ruta: sessionStorage + router.push()
Acción: Abre la herramienta de destino con el prompt set pre-cargado en sesión.
Responsable: openInTool() → sessionStorage
Descargar como CSV
Ruta: Cliente-side
Entrada: PromptSet
Salida: Archivo .csv con columnas: text, intent, funnelStage, group, relevanceScore.
Responsable: exportCSV()
Copiar prompts al portapapeles
Ruta: Cliente-side
Entrada: PromptSet
Salida: Texto en clipboard: 1 prompt por línea.
Responsable: copyAllPrompts()
Modos u opciones
| Modo | Descripción | Impacto |
|---|---|---|
| Cantidad: Automático | Slider 5–60 prompts. Default 30% info, 35% comp, 35% decision. | Simple; para usuarios que confían en default. |
| Cantidad: Manual | 3 sliders separados (informacional, comparación, decisión). Suma = total. | Mayor control; auditoría explícita de distribución. |
| Generación LLM | Claude (decisión interna; usuario NO elige). | Consistente, escalable, no expone proveedor. |
| Validación local | Gratis, síncrona. Reglas duras (longitud, categoría, marca). | Siempre ejecutada; filtro de calidad instantáneo. |
| Validación LLM (Claude) | Opcional. Detecta duplicados semánticos + ambigüedad. | Zona dudosa o sets grandes: ~2 créditos adicionales si ejecuta. |
| Regeneración parcial | Modelo mejorado según escalation hint. Máx. 2 intentos. | Cubre fallos sin re-generar todo. |
| Import CSV / XLSX | Parse nativo cliente-side; sin LLM. | Reutilización rápida de sets externos. |
| Edit | Crea nueva versión sin pisar original. | Safe; versionado. |
| Version linking | parentSetId enlaza raíz + derivadas. | Genealogía clara. |
| Énfasis funnel | Awareness, Consideration, Decision, Balanced. | Redistribuye peso de intenciones. |
Motores de IA / datos que usa
Modelos LLM
-
Claude (generación y decisiones):
- Generación inicial de prompts.
- Regeneraciones parciales (hasta 2 intentos).
- Escalación a tier mejorado si fallos altos.
-
Claude (validación opcional):
- Detecta duplicados semánticos en respuestas.
- Diagnostica ambigüedad lingüística.
- Se ejecuta si set entra en zona de riesgo (score 65–88, ≥ 24 prompts, o sector YMYL).
Datos de entrada (contexto para LLM)
- Marca + sector + país (obligatorios).
- Descripción negocio, ICP, audiencia (contexto).
- Objetivo del análisis (dirección).
- Campos avanzados: términos obligatorios/a evitar, ambigüedades, instrucciones manuales.
No usa
- Datos en vivo de motores (búsqueda, posiciones, SERP).
- APIs de terceros para generación.
- Histórico de prompts anteriores (cada set independiente).
Métricas / cálculos que produce
Métricas por prompt (IntelligentPrompt)
| Métrica | Rango | Significado |
|---|---|---|
| commercialValue (alias relevanceScore) | 0–1 | Cuánto mueve negocio. Asignado por generador (default 0.5). |
| measurementValue | 0–1 | Qué tan bien mide visibilidad GEO real (vs reputación marca). |
| neutralityScore | 0–1 | Ausencia de marca (1 = totalmente blind). |
| realismScore | 0–1 | Cuánto suena como pregunta humana real. |
| brandMentioned | boolean | ¿Menciona la marca explícitamente? |
Origen: Generador LLM asigna; validador puede ajustar brandMentioned si hay incoherencia.
Métricas agregadas por set
| Métrica | Cálculo |
|---|---|
| Distribución intent | Conteo de prompts por: Informacional, Comparación, Decisión. |
| Distribución funnel | Conteo por: Awareness, Consideration, Decision. |
| Distribución categoría | Conteo por: A, B, C, D, E, F. |
| Relevancia media | mean(relevanceScore) de todos los prompts. |
| Brand ratio global | (prompts con brandMentioned=true) / total × 100. |
| Brand ratio por categoría | Ídem, segregado por A–F. |
| Core ratio | (prompts de B+C+D) / total × 100. Mínimo 51% requerido. |
Scores de validación
| Score | Fórmula | Interpretación |
|---|---|---|
| Local score | 100 − (critical×18) − (warning×6) | Rango 0–100. ≥ 82 = high quality. |
| Pass/fail | critical_count == 0 | False = regeneración requerida. |
| Escalation hint | critical×0.15 + (reject%>25%?0.4:0) + (reject%>40%?0.3:0) | 0–1. ≥ 0.5 = escalar a tier mejorado. |
Issues encontrados:
- Critical (bloqueador): Mínimo palabras, marca en B, ausencia de categoría, marca global > 30%, core < 51%.
- Warning (aviso): brandMentioned incoherente, brand ratio por categoría exceeded, duplicados.
- Info (informativo): Sin bloqueo.
Cómo leer el informe / resultado
Pantalla de detalle (GET en UI)
Cabecera:
- Nombre set + versión + country + objetivo + prompts count.
- Botones de acción.
Resumen metodológico (2 columnas):
Izquierda (distribución):
- Barras de intent (informacional / comparación / decisión) con porcentajes.
- Barras de funnel (awareness / consideration / decision) con porcentajes.
- Tabla de categorías A–F con conteos.
- Relevancia media (gauge 0–100).
Derecha (calidad):
- Validation score (0–100, coloreado).
- 4 checks: ✓ decision presente, ✓ comparison presente, ✓ non-branded ≥ 40%, ✓ ≥ 5 prompts.
- Síntesis: "Metodología validada" o "Requiere revisión + warnings específicos".
Lista de prompts:
- Tabla: #, intent (badge), funnel (tag), group, relevanceScore, texto (clicable).
- Filtros: por intent + búsqueda full-text.
- Clic en fila → slide-over con texto completo, todos los scores, copy-to-clipboard.
Exportaciones:
- CSV: text, intent, funnelStage, group, relevanceScore.
- Copiar: todos los textos al portapapeles, 1 línea por prompt.
Cuánto suele tardar
| Operación | Tiempo típico | Rango | Factores |
|---|---|---|---|
| Generación 25 prompts | 20–40 s | 15–60 s | LLM latency + validación local. |
| Generación 60 prompts | 40–90 s | 30–120 s | + posible validación LLM + regen. |
| Validación local | < 1 s | < 1 s | Síncrona, O(n). |
| Validación LLM | 3–8 s | 2–12 s | Network latency + inference. |
| Regeneración parcial | 10–25 s | 8–40 s | Según % rechazados. |
| Importar CSV/XLSX | < 1 s | < 1 s | Parse cliente-side. |
| Editar + guardar versión | < 1 s | < 1 s | Storage local (IndexedDB). |
| Exportar CSV | < 1 s | < 1 s | Generación + download. |
End-to-end peor caso: 20–60 segundos (UI muestra spinner + progreso).
Cuánto consume (créditos)
Factor principal: COUNT (número de prompts)
Fórmula de coste base:
Modelo principal input tokens: 1500 + (count × 10) Modelo principal output tokens: 1500 + (count × 100) Modelo principal cost USD: convert(input, output) × 2 (multiplicador regeneración)
Modelo validador input: 2500 Modelo validador output: 1500 Modelo validador cost USD: convert(2500, 1500)
Total credits = round((mainUSD + validatorUSD) × 10) / 10
Tabla de estimados:
| Prompts | Créditos estimados | Validador (si aplica) | Total |
|---|---|---|---|
| 5 | 1.2 | 0 | 1.2 |
| 10 | 2.0 | 0.2 | 2.2 |
| 25 | 4.8 | 0.2 | 5.0 |
| 40 | 7.0 | 0.2 | 7.2 |
| 60 | 8.3 | 0.2 | 8.5 |
Factores secundarios
-
Regeneración: Si validación local falla → 1–2 regen adicionales.
- Mitigación: Multiplicador 2× ya bakeado en estimate (cubre 90% de runs).
- Worst case: 4 generaciones + 1 validación = ~1.4× estimado.
-
Escalación a tier mejorado: Si escalation_hint ≥ 0.5 → tier mejorado.
- Overhead ligero: +5–10% tokens.
- Raro en sets bien formados.
-
Validación LLM: Se ejecuta si:
- Score validación local 65–88, O
- Total ≥ 24 prompts, O
- Sector YMYL (finanzas, salud, legal).
- Coste fijo ~2 créditos si se ejecuta.
-
Tamaño set: Lineal con count.
No afecta al coste
- Campos avanzados (audience, ambiguities, must-include) → inyectados en system prompt, no tokens significativos.
- Import CSV → 0 créditos (parse cliente-side).
- Edit/versioning → 0 créditos (storage local).
- Export CSV → 0 créditos.
Disponibilidad y límites por plan
Acceso a herramienta
| Plan | Acceso | maxPromptsPerSet | Notas |
|---|---|---|---|
| Free | ✗ | N/A | No incluye herramienta de producción. |
| Lite | ✓ | 8 | Tier básico. |
| Starter | ✓ | 10 | Freelancers. |
| Pro | ✓ | 20 | Agencias pequeñas. |
| Agency | ✓ | 25 | Agencias medianas. |
| Enterprise | ✓ | −1 (ilimitado) | Custom SLA. |
Cuotas de prompts por ventana (workspace-wide)
| Plan | Per Day | Per Week | Per Month | Sets/Week | Sets/Month |
|---|---|---|---|---|---|
| Lite | 15 | 45 | 150 | 3 | 12 |
| Starter | 20 | 60 | 200 | 4 | 16 |
| Pro | 50 | 200 | 700 | 8 | 32 |
| Agency | 100 | 400 | 1500 | 12 | 48 |
| Enterprise | −1 | −1 | −1 | −1 | −1 |
Validación: Server-side pre-ejecución. Bloquea si excede CUALQUIERA.
Otros límites
- maxProjects: Free=1, Lite=1, Starter=3, Pro=15, Agency=−1.
- Créditos mensuales totales: Free=50, Lite=200, Starter=500, Pro=1800, Agency=5500, Enterprise=custom.
Errores y casos frecuentes
Errores de validación local
| Error | Acción | Severidad |
|---|---|---|
| "Prompt demasiado corto" (< 6 palabras) | Regenera ese prompt. | Critical |
| "Categoría X ausente" (falta A–F) | Regen parcial para llenar hueco. | Critical |
| "Categoría B menciona marca" (violación hard rule) | Rechaza y regenera. | Critical |
| "Brand ratio global > 30%" (sesgado a reputación) | Rechaza algunos branded, regenera. | Critical |
| "B+C+D < 51%" (core es minoría) | Reequilibra distribución. | Critical |
| "Marca incoherente" (brandMentioned=true pero no aparece) | Auto-corrige el flag. | Warning |
| "Duplicado post-normalización" (mismo prompt, caps/puntuación distinta) | Rechaza duplicado. | Warning |
Errores de validación LLM
| Error | Acción | Severidad |
|---|---|---|
| "Duplicado semántico" (Claude detecta mismo significado) | Regenera. | Warning |
| "Ambigüedad lingüística" (término polisémico confuso) | Alert info; no regenera (user puede refinar con campos avanzados). | Info |
Errores de capacidad
| Error | Código | Acción |
|---|---|---|
| "Insufficient credits" | 402 | Botón cambia a "Comprar créditos →". Bloquea POST. |
| "Quota exceeded" (promptsPerDay/Week/Month) | 422 | Modal de upgrade. |
| "maxPromptsPerSet exceeded" (plan cap, ej. count=25 pero plan=Lite cap 8) | 403 | Aviso "Plan Lite permite máximo 8 prompts". |
Errores de input
| Error | Validación | Acción |
|---|---|---|
| "Brand es obligatorio" | Zod | Campo rojo. Bloquea submit. |
| "Count fuera de rango" (< 5 o > 60) | Zod | Clamp automático a [5, 60]. |
| "Ambigüedades mal formateadas" (sin " => ") | Backend filter() | Silencioso; descarta las inválidas. |
Errores de importación CSV/XLSX
| Error | Acción |
|---|---|
| "Archivo no es XLSX ni CSV" | Toast error "Error leyendo archivo". |
| "Cabecera ausente o malformada" | Parser intenta inferir; si no puede, error por línea. |
| "Fila sin campo 'text'" (obligatorio) | Parser descarta fila. Suma al conteo de errores. |
| "Text muy corto" (< 5 chars) | Parser descarta. Validación de import. |
Errores de edición / versionado
| Error | Acción |
|---|---|
| "Label vacío" al guardar versión | Toast "El nombre no puede estar vacío". Bloquea. |
| "Prompts válidos = 0" (todas mal) | Toast "No hay prompts válidos". Bloquea. |
Errores de network
| Error | Código | Acción |
|---|---|---|
| POST timeout (> 120s) | 504 | Retry manual. Potencialmente cobrados 2× (billing async). |
| Tracking usage falla post-generación | n/a | Endpoint devolvió prompts al cliente (ok). Backend logs a Sentry pero NO repite. Cliente NO ve error. |
Edge cases notables
| Caso | Comportamiento |
|---|---|
| Set muy pequeño (< 6 prompts) | buildDistribution() entra en fallback order. Warning: "Recomendado ≥ 12 prompts". Funciona pero metodología comprometida. |
| Sector YMYL (fintech, salud, legal) | Validador LLM SIEMPRE se ejecuta (heurística). Coste +2 créditos garantizado. Warnings extra en UI. |
| Brand = "de" o "el" (palabra muy común) | Regex genera falsos positivos en brandMentioned. No es blocking (metadata incoherente). User puede corregir en editor. |
| customWeights con zeros | buildDistribution() lo respeta; puede resultar en categoría vacía. ValidationResult marca crítico → regeneración. User debe rellenar sensatamente. |
Documento preparado para clientes de pago. Técnico, sin marketing, enfocado en capacidades, límites e integración.