PPT Builder (breve → presentación)
Genera una presentación en dos artefactos: una especificación de contenido por diapositiva (JSON) y, cuando python-pptx esté disponible, un .pptx real renderizado a partir de ella. La especificación es la fuente de verdad; el renderizado es mecánico.
Entradas
| Entrada | Obligatorio | Por defecto | Notas |
|---|---|---|---|
| topic | sí | — | lo que la presentación argumenta o explica |
| audience | no | 通用商务 | define el tono y la profundidad |
| slide_count | no | 10 | incluye portada y cierre |
| style | no | 简洁商务 | ej. 学术答辩 / 融资路演 / 教学课件 |
Si falta topic, preguntar UNA VEZ:
Por favor, indique el tema y propósito de la presentación (a quién va dirigida). Opcional: número de diapositivas (por defecto 10), estilo (por defecto 简洁商务), y si ya dispone de un esquema o archivos de contenido.
Autocomprobación previa
python -c "import pptx; print('pptx-ok')"
- Si imprime
pptx-ok→ exportación .pptx habilitada (Paso 3a). - ModuleNotFoundError → ruta de fallback (Paso 3b). Informe al usuario con una línea:
pip install python-pptxhabilita la exportación directa .pptx la próxima vez. NO lo instale usted mismo a menos que el usuario lo solicite explícitamente.
Flujo de trabajo
Paso 1: Esquema
Estructurar el argumento (no solo temas) en este orden: Apertura con gancho (una pregunta o un hecho contraintuitivo) → Mapa global → 2–3 argumentos centrales (cada uno con evidencia/ejemplo) → Refutación o límites → Llamada a la acción. Esperado: esquema numerado donde cada diapositiva exponga UNA afirmación.
Paso 2: Especificación por diapositiva
Escribir slides_spec.json:
{
"deck_title": "...",
"slides": [
{"title": "...", "bullets": ["<=18 caracteres/cada, máximo 5"], "notes": "Texto del discurso, versión oral", "visual": "Indicación de gráfico/captura/espacio en blanco"}
]
}
Reglas: título ≤ 16 caracteres y debe contener una idea (no palabras vacías como "Introducción"); notes deben ser oraciones completas que se puedan leer directamente.
Paso 3a: Renderizar .pptx (si pptx disponible)
python "<skill-dir>/scripts/make_pptx.py" slides_spec.json deck.pptx
Esperado: código de salida 0 más wrote deck.pptx (N slides). Código 3 significa que falta python-pptx → volver al paso 3b e informar al usuario por qué. Código 2 significa especificación inválida — leer el error impreso, corregir slides_spec.json, volver a ejecutar.
Paso 3b: Artefacto de respaldo
Emitir deck_outline.md: Título H1 del deck, H2 por diapositiva con viñetas y la nota del orador debajo de cada una. El usuario lo copia en cualquier herramienta.
Paso 4: Autorevisión antes de entregar
Verificar: cada diapositiva expone un solo argumento; no más de 5 viñetas; cada diapositiva tiene una indicación visual concreta; las notas tienen un total de palabras que soporte la duración objetivo (aproximadamente 1 minuto/diapositiva). Corregir las violaciones en la especificación y volver a renderizar, no parchear el texto.
Manejo de fallos
| Síntoma | Causa probable | Acción |
|---|---|---|
| script sale con código 2 listando diapositiva N | violación del esquema de la especificación | corregir los campos de esa diapositiva según la forma del Paso 2 |
| script sale con código 3 | falta python-pptx | cambiar al Paso 3b, ofrecer la sugerencia pip |
| las viñetas siguen superando los 18 caracteres | esquema demasiado denso | dividir la diapositiva en dos, volver a renderizar |
| el usuario quiere su plantilla de empresa | el estilo queda fuera del alcance de v1 | entregar especificación + deck_outline.md para reestilizado manual |
Estándar de entrega
Éxito = deck.pptx (abrible, N diapositivas coincidiendo con la especificación) o deck_outline.md, MÁS slides_spec.json, informando las tres rutas con el número de diapositivas. Cualquier otra cosa no está hecho — decirlo claramente.
Referencias
scripts/make_pptx.py— ejecutarlo (ejecutar, no leer); valida la especificación y luego renderiza.