MV ← tutti i progetti
motore: three.js — versione 2d

Progetto · pipeline editoriale

ResGestae

sintesi — rev. 1

Una catena di agenti che ricerca un tema storico, ne pianifica il racconto, lo scrive, lo verifica, lo illustra e lo monta in video — con il controllo di qualità dentro la catena, non dopo.

In produzione — alimenta @res_gestae.ita

Il problema

Non «generare testo con l'AI». Far sì che una catena di passaggi inaffidabili produca qualcosa di pubblicabile senza sorvegliarli uno per uno.

Un canale di divulgazione storica vive di ritmo: se pubblichi quando capita, non esiste. Ma ogni contenuto è un lavoro lungo — documentarsi, decidere che storia raccontare, scrivere dieci schede, verificare che i fatti reggano, procurarsi le immagini, comporle, scrivere il parlato, montare il video. Fatto a mano è mezza giornata a uscita, ed è il motivo per cui quasi tutti questi progetti muoiono dopo tre post.

La tentazione è chiedere tutto a un modello linguistico in una volta sola. Non funziona, e non per la qualità della scrittura: funziona male perché una risposta sola non si può controllare a pezzi. Se il testo contiene un errore storico, un anacronismo nell'immagine e una struttura narrativa piatta, non c'è modo di correggere il secondo senza rigenerare anche gli altri due.

Il problema vero è quindi di architettura: spezzare il lavoro in passaggi che producano ciascuno un artefatto ispezionabile, e mettere i controlli dentro la catena — dove un errore si può ancora correggere a costo quasi zero — invece che alla fine, dove correggere significa rifare tutto.

vincoli di progetto
  • L'accuratezza storica non è negoziabile. Un canale divulgativo perde credibilità con un solo prefetto inventato, e non la recupera.
  • Un solo operatore. Qualunque passaggio che richieda di stare davanti allo schermo ad aspettare è, di fatto, un fallimento del progetto.
  • Costo per contenuto trascurabile. Se un carosello costa quanto un caffè, il progetto si ferma da solo dopo un mese.
  • Deve poter fallire a metà. Le API vanno in errore: ripartire da capo dopo venti minuti di lavorazione non è accettabile.

Come è fatta

Un orchestratore, agenti specializzati, e un artefatto su disco a ogni passaggio.

fig. 1 — il giro completo, in otto passaggi
calendario ricerca scrittura controllo immagini composizione video pubblicazione se un fatto non torna, si riscrive solo quando il testo è verificato
fig. 2 — gli stessi passaggi, con gli artefatti che producono
tema dal calendario ricerca piano narrativo scrittura delle schede controllo del testo prompt delle immagini generazione immagini controllo visivo composizione schede montaggio video pubblicazione brief.json story_arc.json slides_ita.json image_prompts.json immagini grezze .png schede finali .jpg reel .mp4 riscrive rigenera veloce creativo creativo creativo veloce visione

I riquadri tratteggiati della seconda vista sono file veri su disco. È la proprietà da cui dipende tutto il resto: ogni passaggio controlla se il proprio file esiste già prima di chiamare l'API, quindi una lavorazione interrotta riparte da dove era rimasta, e per rifare un solo passaggio basta cancellare il file corrispondente.

La pipeline è una sequenza di agenti, ciascuno con un compito solo e un file di output. L'orchestratore non sa nulla di storia romana: sa solo in che ordine chiamare gli agenti e dove ciascuno scrive il proprio risultato.

  1. 1 · ricerca

    Dal tema a un dossier

    Dal titolo — «Battaglia di Canne» — l'agente di ricerca produce un dossier strutturato: fatti chiave, luoghi comuni da smontare, fonti primarie suggerite. È il primo artefatto ispezionabile: se il dossier è sbagliato, si vede subito, e correggerlo lì costa una frazione di quanto costerebbe dopo.

  2. 2 · racconto

    Prima cosa raccontare, poi come scriverlo

    L'agente di scrittura lavora in due fasi separate: prima pianifica l'arco narrativo — l'angolo, la tensione, le cerniere tra una scheda e l'altra — e solo dopo scrive le dieci schede seguendo quel piano.

    È la scelta di cui vado più fiero, perché risolve un difetto preciso: un modello a cui chiedi «racconta questa storia in dieci schede» produce un elenco travestito da racconto. Dieci fatti veri, messi in fila, senza che il quinto abbia bisogno del quarto. Separando la pianificazione dalla scrittura, la struttura diventa un artefatto a sé, che si può leggere e correggere prima che una sola riga di testo esista.

  3. 3 · verifica

    Il controllo qualità è un agente, non un passaggio finale

    Un agente rilegge le schede e le confronta con la storia documentata: cronologia, attribuzione delle azioni alla persona giusta, passaggi omessi. Le correzioni rientrano nella scrittura prima che si generi una sola immagine — che è il momento in cui rifare costa davvero.

  4. 4 · immagini

    Generate, ma non solo

    Per ogni scheda il sistema decide se serve un'immagine generata o un'immagine reale di pubblico dominio presa dagli archivi museali aperti: per una mappa, un reperto o un ritratto documentato, il reperto vero batte sempre la ricostruzione. Poi un secondo controllo di qualità — questa volta visivo — guarda le immagini prodotte e boccia anacronismi, simboli moderni finiti nell'inquadratura e soggetti ripetuti tra una scheda e l'altra.

  5. 5 · montaggio

    Composizione e video

    Le schede finali vengono composte a misura di Instagram — testo, font, filigrana — e in parallelo un ramo separato produce il video: parlato sintetico, sottotitoli sincronizzati e montaggio. Il motore di sintesi vocale è intercambiabile, incluso uno che gira in locale senza rete.

proprietà dell'insieme

Ogni agente controlla se il proprio file esiste già prima di chiamare l'API. Una lavorazione interrotta a metà riparte da dove era rimasta senza rispendere nulla, e per rigenerare un singolo passaggio basta cancellare il file corrispondente. È una riga di logica per agente, ed è ciò che rende il sistema usabile davvero: senza, ogni errore all'ottavo passaggio costerebbe i sette precedenti.

Le scelte, e perché

Quasi tutte hanno la stessa forma: togliere decisioni al modello dove il modello non serve.

  1. costo

    Due modelli, divisi per ruolo

    Il modello piccolo e veloce fa i passaggi strutturati — ricerca, controllo, preparazione dei prompt — e quello grande solo i passaggi creativi: piano narrativo, testo delle schede, parlato. Non è una micro-ottimizzazione: è la differenza tra un costo per contenuto di pochi centesimi e uno che scoraggia dall'usare il sistema. Misurato: circa 13 centesimi a carosello, immagini e video compresi.

  2. determinismo

    Ciò che è deterministico si scrive in codice

    Il descrittore di stile grafico, i prompt negativi, la riga con la fonte storica in fondo alla didascalia: tutte cose che il modello saprebbe fare, e che vengono invece composte in Python dopo la sua risposta.

    Il criterio è semplice: se una cosa deve uscire identica tutte le volte, chiederla a un modello linguistico è un errore di progettazione — non perché sbagli spesso, ma perché quando sbaglia lo fa in modo silenzioso e in un caso su cinquanta, che è il tipo di guasto più costoso da scoprire.

  3. robustezza

    Assumere che la risposta sia sporca

    I modelli restituiscono JSON avvolto in blocchi di codice, preceduto da una frase di cortesia o seguito da una spiegazione non richiesta. Un unico estrattore condiviso tira fuori il primo oggetto JSON completo da qualunque risposta, ed è usato da tutti i passaggi. Vale lo stesso per gli errori di rete: ritentativi automatici con attesa crescente sui sovraccarichi e sui limiti di frequenza, e se i tentativi si esauriscono l'errore viene tradotto in un messaggio leggibile con l'azione consigliata, invece di una traccia di stack.

  4. governo

    Un cruscotto, non una riga di comando

    Tutto è pilotabile da riga di comando, ma sopra c'è un'interfaccia web: avvio della pipeline con log in tempo reale, editor delle schede con ricomposizione, galleria, calendario editoriale, e la possibilità di riscrivere le istruzioni di ogni singolo passaggio senza toccare il codice. Quest'ultima è la funzione che uso di più: gran parte del lavoro su un sistema del genere è aggiustare le istruzioni, e doverlo fare modificando sorgenti rallenta il ciclo al punto da scoraggiare gli esperimenti.

Cosa non ha funzionato

La parte utile. Sono tutti errori veri, con la diagnosi che è costata più della correzione.

  1. imprevisto 1

    Il vocabolario del prompt batte l'istruzione di stile

    Volevo un carosello interamente illustrato invece che fotorealistico. Ho preso i prompt esistenti — scritti per lo stile realistico, quindi pieni di linguaggio cinematografico: «luce drammatica», «cinematico», «ora dorata» — e ho aggiunto in fondo il descrittore del nuovo stile. Il risultato è rimasto fotorealistico su quasi tutte le schede.

    Diagnosi: il vocabolario fotografico presente nel resto del prompt pesa più dell'etichetta di stile appiccicata in coda. Non è un problema di priorità tra istruzioni, è che quelle parole sono un'istruzione di stile, solo implicita. La correzione è stata riscrivere i prompt da zero in un registro coerente, con il descrittore sia in testa sia in coda.

    fig. 3 — perché il primo tentativo falliva
    tentativo 1 — prompt riusato, stile aggiunto in fondo tentativo 2 — prompt riscritto, stile in testa e in coda «luce drammatica, cinematico, ora dorata» stile → foto quelle parole sono già un'istruzione di stile: vincono per massa stile scena descritta in parole neutre stile → disegno niente compete con l'istruzione, e l'istruzione è alle due estremità
  2. imprevisto 2

    Più sottile: non è il vocabolario, è la scena

    Anche con i prompt riscritti, alcune schede continuavano a tornare fotorealistiche. Sempre le stesse: quelle in cui la scena descritta era un quadro corale e drammatico — ricercatori chini nella penombra su un reperto, senatori inorriditi davanti a una minaccia.

    Diagnosi: quel tipo di composizione ha un richiamo pittorico troppo forte perché un'etichetta di stile lo sovrasti; la scena stessa evoca la pittura accademica. La correzione non è stata sul come si scrive, ma su cosa si chiede: un solo soggetto, un'azione sola, luce piatta, poche figure. Semplificare la scena, non il linguaggio.

  3. imprevisto 3

    La stessa correzione andava applicata in due posti

    Il percorso di rigenerazione — quello che riscrive un'immagine bocciata dal controllo visivo — aveva istruzioni proprie, indipendenti da quelle del passaggio principale. Risultato: un'immagine bocciata e rigenerata tornava fotorealistica pur avendo lo stile corretto nei metadati. È successo due volte prima che collegassi le due cose.

    Lezione: duplicare le istruzioni di un modello è duplicare del codice, con l'aggravante che i due rami divergono in silenzio — nessun compilatore ti avvisa che hai corretto solo metà del sistema.

  4. imprevisto 4

    Trovare l'errore e saperlo correggere sono capacità diverse

    Il controllo sui testi è stato rinforzato facendolo verificare contro la storia documentata e non solo contro il dossier di partenza — perché il dossier stesso può essere incompleto. Ha funzionato: ha intercettato un funzionario inventato di sana pianta e un imperatore saltato in una successione, errori che il controllo precedente, ancorato al dossier, non poteva vedere.

    Ma la riparazione automatica no. Chiedere di reinserire un imperatore mancante rimaneggiando il testo esistente produce risultati incoerenti: è un intervento strutturale, non una correzione locale. La conclusione operativa è che l'individuazione è affidabile, la riscrittura no: per quel tipo di errore conviene correggere il dossier a monte e rigenerare le schede.

  5. imprevisto 5

    Un'ipotesi smentita dai dati, e tenuta lo stesso — ma al guinzaglio

    Avevo ipotizzato che uno stile illustrato più leggero aumentasse la presa sul pubblico. Guardando come sono fatti gli account di storia che funzionano davvero, l'ipotesi è risultata falsa: nessuno di quelli seri lo usa.

    L'ho introdotto comunque, in via sperimentale, ma ammesso su una sola scheda — quella della curiosità finale — e forzato allo stile documentaristico ovunque il modello provi a sceglierlo altrove. Copertina e invito all'azione restano sempre sobri. Volevo poterlo misurare senza rischiare la credibilità del canale sulle schede che la costruiscono.

Esito, e cosa manca

Il canale è attivo e pubblica. Il costo misurato è di circa tredici centesimi a carosello, video compreso, e una lavorazione interrotta non costa nulla perché riparte da dove si era fermata. La parte che ha retto meglio nel tempo non è nessuno dei singoli agenti: è la decisione di far scrivere a ognuno un file leggibile su disco. Ogni errore diagnosticato in questi mesi è stato diagnosticato aprendo uno di quei file.

Se dovessi indicare la lezione trasferibile, non è sul dominio: è che in un sistema a più agenti il costo dominante non è la generazione, è la diagnosi. Quasi tutto il lavoro di architettura qui dentro serve a rendere osservabile un processo che altrimenti sarebbe una scatola nera con un video in fondo.

prossimo passo — non ancora fatto

La pubblicazione programmata oggi è il punto debole: il piano viene calcolato, ma la messa in coda vera e propria è ancora rudimentale. È il posto giusto per una coda di messaggi gestita — pubblicazione differita, ritentativi quando la piattaforma limita le richieste, lavorazione a lotti — e la valuterò lì, dove il problema esiste davvero, non nel sito che state leggendo, dove sarebbe un'architettura in cerca di un problema.

Vedi il canale su Instagram ↗ ↑ Tutti i progetti

Il codice non è pubblico. Se il progetto ti interessa e vuoi parlarne, scrivimi.