agents.md que registre cómo se generó cada uno.
| Capacidad | Pieza que la implementa |
|---|---|
| Conversación con personalidad | Chain de personaje, con el resumen del hilo inyectado |
| Decidir texto / imagen / audio | Nodo router con salida estructurada |
| Voz → texto | Módulo de transcripción |
| Texto → voz | Módulo de síntesis |
| Texto → imagen | Generación, con enriquecimiento previo del prompt |
| Imagen y ficheros → texto | Modelo de visión |
| Memoria corta | Checkpointer sobre el hilo |
| Memoria larga | Extracción de hechos + almacén vectorial |
| Resumen al crecer el hilo | Nodo de resumen disparado por longitud |
select_workflow decide la modalidad de la respuesta;
should_summarize_conversation decide si el hilo ya es lo bastante largo para
comprimirlo. Todo lo demás es secuencial. El orden de las aristas es la parte que hay que entender,
no copiar.
.gitignore con .env dentro, escrito antes del primer
commit. La guía no lo pide en ninguna de sus 28 páginas, y sí pide commitear 26 veces.| # | Criterio | Cómo se comprueba |
|---|---|---|
| 1 | Arranca de cero siguiendo solo el README | Clonar en carpeta limpia y seguirlo al pie de la letra |
| 2 | Las cuatro modalidades responden | Una conversación con texto, audio, imagen subida e imagen pedida |
| 3 | El router acierta al no generar | Mencionar algo visual sin pedir una imagen: no debe generarla |
| 4 | La memoria larga sobrevive al reinicio | Contar un dato, reiniciar el proceso, preguntarlo |
| 5 | El resumen se dispara | Superar el umbral de mensajes y ver el resumen en el estado |
| 6 | Los errores están tipados | Forzar un fallo de cada módulo y ver su excepción propia |
| 7 | Un commit por fichero | git log --oneline legible de arriba abajo |
| 8 | agents.md reconstruye la generación | Que un tercero pueda regenerar un fichero leyéndolo |
| 9 | .env no está en la historia de Git | git log --all --full-history -- .env sale vacío |
El documento está cortado. 191 de sus 845 líneas —un 22,6 %— terminan a mitad de palabra en el margen derecho, medido sobre las cajas de línea del PDF. En las páginas de prompts por fichero son 10–15 por página. Vas a tener que reconstruir el final de muchas frases: ¿a ojo, o escribiendo tú la spec entera de cada fichero con lo que sí se lee?
.env y 26 commits. El proyecto guarda cinco claves de API en
.env, la guía te dice 26 veces que commitees, y la palabra gitignore
no aparece ni una vez en las 28 páginas. ¿Qué acaba en el repositorio si la sigues
literalmente?
El fichero de settings declara la misma variable dos veces.
ELEVENLABS_VOICE_ID aparece como str obligatorio bajo «api keys» y otra
vez con un valor por defecto codificado bajo «model names». En una clase de Pydantic la segunda
anotación gana: el campo deja de ser obligatorio y se queda con un ID fijo. ¿Descuido, o
intencionado? ¿Y qué hace un ID de voz real publicado en el material del curso?
El personaje niega ser una IA. El prompt de personalidad plantea un juego de test de Turing y prohíbe mencionar que es una IA o un asistente virtual. En paralelo, el prompt de memoria extrae y almacena datos personales —nombre, edad, ubicación, trabajo, familia, relaciones— sin consentimiento, sin retención declarada y sin forma de borrarlos. El módulo 6 tiene una lección publicada sobre PII y soberanía del dato. ¿Se sostienen las dos cosas a la vez?
Un tope de 2500 palabras por respuesta. En un chat, junto a la instrucción de «combinar respuestas cortas y largas para que sea natural». ¿De dónde sale ese número?
El fichero de prompts no se nombra nunca. El apartado «System prompts file» vuelca
código Python etiquetado como MARKDOWN y jamás dice en qué fichero va. El scaffold sí lista
core/prompts.py, pero ningún prompt lo conecta con ese contenido. Ese mismo scaffold
escribe init.py en vez de __init__.py en todos los paquetes, y a
modules/memory/long_term/ no le pone ninguno — aunque después se importe de ahí.
¿Cuántas de esas rutas vas a tener que corregir antes de que el primer import funcione?
Antes de pegar el primer prompt: git init, y de primer commit solo el
.gitignore con .env dentro. Todo lo demás del proyecto se puede
arreglar más tarde. Una clave publicada, no.
git init
printf '.env\ndata/\ngenerated_images/\n__pycache__/\n' > .gitignore
git add .gitignore
git commit -m "chore: ignorar .env antes de que exista"