Lavori in corso

I lavori in corso non sono tanto quelli dell’immagine, non che spostare quindici quintali di legna per prepararsi al verno non sia un lavoro, anche faticoso, ma quello di cui voglio parlare ora: le modifiche al Blog, è stato più impegnativo.

Se siete iscritti alla mailing list avrete notato qualche mail piuttosto incoerente, partita per sbaglio (non avevo ancora capito che wordpress ha modo di disabilitare l’invio di notifiche durante le fasi di manutenzione), me ne scuso.

Perchè

Il motivo per cui ho messo in moto questi cambiamenti non lo so nemmeno io. Faccio una fatica tremenda a ricostruire il perché delle decisioni che prendo. Ci sono, però, alcuni elementi di cui ho preso nota.

soldi

Come avevo scritto nel primo post del blog, Chautauqua, l’idea di metterlo su era nata da un’offerta di Aruba che per pochi euro all’anno ti permetteva di avere un sito. Mi ero detto: “Perchè no?”. Ho poi capito che era una di quelle fregature con cui oggi giorno tentano di venderti di tutto. Dopo il primo anno il prezzo è salito, e negli anni successivi ancora. L’ultima fattura era di 85 euro, per cui era un po’ che mi chiedevo, “ma non è che per quella cifra si trova di meglio?” (Ho poi capito che la risposta era “No”, ma che per una cifra non troppo superiore si trovavano davvero cose più interessanti).

visual programming

Un altro stimolo a fare cambiamenti è stato vedere un post, su qualche news list tecnologica, che parlava di N8N. Poi vi dico cos’è, ma dovete sapere che, durante la mia vita lavorativa da tecnico informatico, ho sempre avuto il pallino del Visual Programming. Come suppongo sappiate, un programma per computer è un testo scritto secondo regole molto rigide, abbastanza confuso da leggere, almeno ad un colpo d’occhio iniziale. Succede quindi, da quando esiste la programmazione, che chi scrive programmi si aiuti con dei disegni, dei diagrammi che evidenziano cosa fa un particolare programma, mostrando i punti principali con scatolette di varie forme, collegate da linee. Anche qui si seguono regole precise, ci sono varie scuole di pensiero e la cosa ha avuto, nell’ultimo mezzo secolo, parecchie evoluzioni. In genere il passaggio da questi disegni al programma in versione “testo” è manuale: il poveretto che ha fatto il disegno, o uno ancora più poveretto, si mette lì, cerca di capire cosa deve fare ogni scatoletta e scrive del codice che cerca di fare la stessa cosa. Va da se che sin da quando sono nati questi diagrammi ci sia stato qualcuno che ha tentato di creare dei traduttori, dei programmi che leggessero direttamente i disegni e producessero il codice. Bene, questo è il Visual Programming. Oggi penso che nessuno lo chiami nemmeno più così, chi lo scopre ora pensa che sia la cosa più naturale del mondo, ma è il bello del nascere quando esistono le automobili e l’acqua esce dal rubinetto e non devi ogni mattina andare a piedi ad una sorgente con una brocca in testa, ti sembra appunto la cosa più naturale del mondo. Comunque ho visto delle immagini di programmi scritti in N8N e mi son trovato a chiedere a ChatGPT di cosa si trattava, dieci minuti dopo gli ho chiesto come facevo ad installarlo e imparare a usarlo, il giorno dopo ho scoperto che la maggior parte degli usi era legata a integrare qualche modello di AI (intelligenza artificiale, per quelli del secolo scorso) e mi son trovato a dirmi: “Magari aggiungo una Chat intelligente al mio Blog”. Per farlo avevo bisogno di un server su cui installarlo, l’offerta di Aruba non lo prevedeva, e così ho preso due picconi con una fava e il Blog è ora ospitato su un server in Germania e risponde al nome di “limbarazzodellasceta.com” (un .it in Germania costa tre volte quanto un .com e quest’ultimo mi sembrava anche più professionale).

Quello che trovate di nuovo, a parte l’indirizzo cambiato, è un iconcina in basso a destra che apre una Chat a cui potete chiedere cose sul blog, sostanzialmente link ad articoli precedenti su un certo tema. In più ho messo un sistema di registrazione utenti e login un po’ più umano.

Questo è il diagramma che implementa la nuova Chat AI in N8N
Questo è il diagramma che implementa la nuova Chat AI in N8N

Come

Mi piacerebbe ora raccontarvi, cercando di tenere al minimo i dettagli tecnici, quello che, con un grosso aiuto da parte di ChatGPT, ho messo in piedi, e soprattutto alcune cose che ho scoperto su queste nuove tecnologie che ci stanno crescendo sotto i piedi, magari a qualcuno di voi può interessare.

Quella che vedete come “Chat intelligente” in realtà poggia su un’architettura chiamata RAG (Retrieval Augmented Generation). In soldoni: l’AI di per sé non conosce il contenuto del mio Blog. È stata addestrata su grandi quantità di testi presi da internet, libri e articoli (in maniera un po’ misteriosa e non sempre trasparente), quindi ha una cultura generale enorme, ma non sa nulla dei miei post. Il RAG serve appunto a colmare questo vuoto: quando fate una domanda, il sistema cerca i post più pertinenti dentro un archivio speciale, creato facendogli leggere e digerire tutti gli articoli del Blog, e li passa all’AI, che poi costruisce la risposta.

Questo “archivio speciale” non è un semplice motore di ricerca, ma un Vector Database. Invece di catalogare le parole come un dizionario, traduce frasi e concetti in numeri — dei vettori nello spazio matematico — così che due testi “simili” finiscano vicini e sia facile recuperarli. È un po’ come avere una mappa invisibile dove gli articoli del Blog si raggruppano per tema.

linguaggi

E qui viene la parte divertente: per cucire insieme tutte queste cose non basta un solo linguaggio, ma un piccolo coro di linguaggi diversi, ognuno con la sua voce.

  • Python è quello che oggi domina quando si parla di AI. Ha una quantità enorme di librerie già pronte, e scrivere in Python è un po’ come avere sotto mano un coltellino svizzero: non sarà il più elegante, ma fa quasi tutto, e lo fa in fretta. L’abbiamo usato per la parte che riguarda l’intelligenza artificiale e il Vector Database, perché è qui che le comunità di ricerca e sviluppo si muovono di più.
  • PHP, invece, è il vecchio pilastro di WordPress. Non è amato dagli accademici, non vince i concorsi di bellezza, ma fa bene il suo lavoro da vent’anni: generare pagine web dinamiche. Se voglio che WordPress capisca cosa succede “fuori” (nella Chat, nel database vettoriale, ecc.), devo parlarci in PHP, perché è la sua lingua madre.
  • JavaScript è il linguaggio dei browser: è quello che permette alle pagine di non essere solo “testo fermo” ma di reagire, cambiare, aggiornarsi da sole. È la voce che arriva direttamente al lettore, quindi serve quando vogliamo che l’esperienza sul Blog sia più interattiva.

Accanto a questi linguaggi “che fanno cose” (programmare azioni), ci sono quelli che servono a descrivere dati:

  • JSON è una specie di foglio di appunti molto ordinato: una lista di coppie chiave/valore, che può contenere anche liste o tabelle. Quasi tutte le applicazioni moderne se lo scambiano quando devono parlarsi, perché è semplice da leggere sia per le macchine che per gli umani.
  • YAML ha la stessa funzione, ma in versione più “umana”: usa rientri e trattini al posto delle parentesi, ed è spesso usato per descrivere configurazioni (esempio: dire a Docker (vedi sotto) come deve costruire un contenitore).

Quando ci si scambia questi dati, però, spesso si tratta di file molto lunghi e complicati. Qui entra in gioco JT (un linguaggio di query per JSON), che è come una pinzetta: serve a estrarre con precisione solo il pezzetto che ti interessa e ignorare tutto il resto.

tools

Poi ci sono gli strumenti più “a basso livello”:

  • Il Bash, cioè la shell di Linux, che è come avere un martello sempre a portata di mano: rozzo ma indispensabile, perfetto per collegare comandi diversi in sequenza.
  • E sopra tutto Docker. Prima che esistesse, la vita degli informatici era piena di guai: due programmi installati sullo stesso server potevano litigare perché usavano la stessa libreria, ma in versioni diverse e incompatibili. Aggiornavo un software, e l’altro smetteva di funzionare. Una continua guerra di convivenza.

Docker risolve proprio questo: crea tanti piccoli computer virtuali dentro a uno solo (tecnicamente non è proprio così, ma rende l’idea). Su un unico server fisico abbiamo creato più contenitori, ciascuno con un compito preciso e isolato dagli altri:

  • uno ospita WordPress, cioè il Blog vero e proprio, quello che vedete quando lo aprite;
  • uno contiene il database (tra l’altro si chiama “MariaDB”, perfetto per un Blog che parla di spiritualità) con tutti i post e i commenti (il cervello che ricorda tutto);
  • uno fa girare N8N, il direttore d’orchestra che coordina la Chat e decide a chi passare la palla;
  • uno ospita le API (Application Programming Interface), che sono le “porte di servizio” attraverso cui N8N parla con gli altri contenitori, senza bisogno di sapere come funzionano al loro interno.

In pratica, è come se avessimo trasformato un solo server in un piccolo quartiere: ogni casa ha le sue stanze e regole, ma la strada che li collega è comune (la rete interna di Docker). Questo permette di lavorare meglio, aggiornare un pezzo senza rompere gli altri, e soprattutto capire chi fa cosa.

Insieme, tutti questi linguaggi e strumenti fanno girare la giostra. Nessuno da solo basterebbe, ma tutti insieme riescono a tenere in piedi il dialogo tra il vecchio WordPress e la nuova intelligenza artificiale.

Fine lavori

Ci ho lavorato un paio di settimane, quasi a tempo pieno. Ora funziona, sembra. Magari si rompe subito, vedremo. Comunque è stata un’esperienza interessante soprattutto per l’interazione con ChatGPT. Quando son partito avevo giusto sentito parlare di “RAG”, senza sapere cosa significasse e non immaginando che potesse servire a fare questo tipo di applicazioni. Tantomeno avrei saputo da dove cominciare per farlo. Lo stesso per quanto riguarda i Vector Database. Docker sapevo cos’era, ma non l’avevo mai usato. Conoscevo bene quasi tutti i linguaggi che abbiamo usato, tranne PHP che è veramente orrendo e mi son sempre rifiutato di impararlo. Insomma, la proposta architetturale arriva tutta da ChatGPT, come anche la scelta dei tool da usare e l’implementazione del 99.99% del codice. A questo punto, direte, che cosa ci hai messo tu? E qui viene la cosa interessante: lavorare con un LLM su un progetto complesso è un delirio: è come lavorare con un pazzoide geniale che sa tutto e non ricorda niente. Ti propone pagine e pagine di codice che “quasi” funzionano, ma quel “quasi” spezza completamente la magia. Il quasi è dovuto sostanzialmente a due cose:

  1. Per quanto ti sforzi è impossibile che tu riesca a fargli capire al primo colpo cosa vuoi. Perché non lo sai neanche tu: se non conosci le potenzialità di queste tecnologie non sai cosa possono fare. Quando vedi i primi prototipi raffini le richieste e orienti il progetto verso quello che ti serve, ma all’inizio è probabile che ti proponga una soluzione che ha bisogno di modifiche.
  2. La sua conoscenza dei vari tool e linguaggi e ambienti e librerie è immensa, ma non totale. Tutto il mondo Open Source si muove ad una velocità troppo elevata perché ,tra quando è stato addestrato lui e oggi, non siano cambiate molte cose. Per dirne una: la versione di N8N che aveva in mente lui era più obsoleta di quella che ho installato, per cui i suoi suggerimenti erano sempre un po’ da aggiustare (e se aggiustarli tocca a uno che non conosce quasi niente dello strumento i disastri sono garantiti).

Insomma sulla sua prima versione bisogna fare modifiche. A questo punto, pensi, è facile: gli dico cosa non va e lui mi dà le differenze. Purtroppo lui le differenze te le dà con un’altra soluzione che intanto si è inventato e non ti ha detto. Un programma che faccia una certa cosa si può scrivere in mille modi diversi, purtroppo lui non si ricorda quale versione mi ha proposto un momento prima (è un problema di lunghezza di contesto, non so se con la versione dell’abbonamento da 200 euro al mese le cose sarebbero andate meglio). Per cui, alla fine ho dovuto metterci la testa anch’io: capire cosa voleva fare, capire qualche dettaglio in più e aiutarlo a capire quale soluzione mi aveva dato in precedenza e fargli correggere quella. Gli do un anno di tempo e sono convinto che l’apporto umano si ridurrà semplicemente a dovergli spiegare il risultato voluto.

Ma, in qualche modo, siamo arrivati alla fine, ed è una bella soddisfazione, quasi come accatastare quindici quintali di legna (winter is coming).

11 pensieri su “Lavori in corso”

  1. Questa intelligenza artificiale…una sconosciuta!
    Le manca il dato di base: le ho chiesto “chi scrive questo blog?” e ha fatto un gran pasticcio.
    “AI: Sembra che tu stia cercando di comprendere meglio il significato e l’intento dietro il blog. Questo spazio è stato creato per condividere riflessioni su temi come la spiritualità, la religione e la tecnologia, con l’obiettivo di stimolare una conversazione profonda e significativa. L’autore, attraverso il suo percorso personale, desidera mettere in circolo idee che possano contribuire a un cambiamento, anche se piccolo, nella vita di chi legge. In particolare, il blog si distingue per il suo approccio informale e per la volontà di esplorare argomenti complessi in modo accessibile. L’autore stesso ha affermato che la sua scrittura nasce dall’intento di “provare a spostare qualcosa” nel lettore, un obiettivo che si riflette anche nella scelta di raccontare storie, come nel suo romanzo “Non tutti nella Capitale” (https://limbarazzodellasceta.com/intervista-numero-2/). Inoltre, il blog affronta temi di attualità e riflessioni personali, come evidenziato in vari post, rendendolo un luogo di confronto e crescita. Fonti: – Non tutti nella capitale — https://limbarazzodellasceta.com/intervista-numero-2/ – Senza tempo, come in un quadro — https://limbarazzodellasceta.com/senza-tempo-come-in-un-quadro/ – Lavori in corso — https://limbarazzodellasceta.com/lavori-in-corso/ – Comunicazione di servizio — https://limbarazzodellasceta.com/1677/ – Chautauqua — https://limbarazzodellasceta.com/39/

  2. A una domanda più precisa in effetti risponde, ma ma non sa trattenersi dallo spaziare un po’’: Tu: Puoi dirmi nome e cognome dell’autore di questo blog?
    AI: Ciao, grazie per la tua domanda. Il blog di Vincenzo Piombo nasce dall’esigenza di riflessione e condivisione su temi di spiritualità, religione e democrazia. L’autore, dopo una lunga carriera nel settore informatico, ha deciso di dedicarsi a scrivere per stimolare un dialogo costruttivo e per mettere in circolo idee che possano arricchire il pensiero collettivo. Il blog si propone di affrontare questioni importanti, come la necessità di istituzioni globali più partecipative e il rifiuto dei dogmi, in favore di una spiritualità che si adatti al sentire moderno. Vincenzo invita i lettori a guardare il mondo con curiosità, piuttosto che con paura, e a riflettere su come la razionalità possa coesistere con l’intuizione e la meditazione. Inoltre, il blog è un luogo di lavoro in corso, dove l’autore sperimenta e modifica il formato e i contenuti, cercando di migliorare l’esperienza per i lettori. Se sei interessato a esplorare ulteriormente questi temi, ti consiglio di leggere i seguenti articoli. Fonti: – Non tutti nella capitale — https://limbarazzodellasceta.com/intervista-numero-2/ – Lavori in corso — https://limbarazzodellasceta.com/lavori-in-corso/ – Democrazia Assistita — https://limbarazzodellasceta.com/democrazia-assistita/ – Deve comandare lui o noi ? — https://limbarazzodellasceta.com/deve-comandare-lui-o-noi/ – Fonti — https://limbarazzodellasceta.com/fonti/

  3. Molto tecnicioso.
    Troppo. Anche per un ingegnere la cui massima esperienza di informatica è …una macro in excel! Come me 😅

    Ma è comunque bello leggerti. Quasi come quando vedo un film in inglese di cui non colgo tutte le parole, ma seguo la storia e mi piace ascoltare la voce originale degli attori.

    1. Sì, forse ho un po’ esagerato con la parte tecnica, ma per me è stata una vera scoperta il concetto di RAG, il fatto che le AI si potessero “educare” dall’esterno a parlare di quello che vuoi e mi è piaciuto discettare della cosa.

  4. Dopo qualche tentativo di applicarmi e seguire, in modo più o meno adeguato, quanto di tecnologico hai scritto, ho deciso, con sollievo, di … rinunciare! il motivo è banale: di tutti i tool, gli algoritmi, i linguaggi e i marchiostati vari, l’unico argomento su cui avevo ed ho un minimo di competenza è l’approccio generale al Visual Programming (per approfondire, se mai fossi interessato, chiedi a Lorella!). Tutto il resto, per quanto risulti interessante e mi incuriosisca, va in contrasto con la mia obsolescenza di ex ingegnere nel campo dell’informatica. Come Vic, riesco ancor oggi a cimentarmi, forse, nel programmare le Macro di Excel in Visual Basic (come ultimo impegno, anni addietro, ne ho scritta una per risolvere i sudoku 9×9) ma per il resto mi mancano la competenza e, soprattutto, voglia di approfondire. Tant’è che, se da una parte ammiro il tuo impegno, gli obiettivi, gli sforzi ed i risultati che hai raggiunto, dall’altra mi domando: rispetto al tuo blog, ai contenuti che abbiamo condiviso, alle discussioni a cui abbiamo partecipato e quant’altro, le nuove funzionalità che hai aggiunto a cosa … mi servono? Ho affrontato il tema dell’IA secoli addietro, in senso pratico e non solo teorico, in Olivetti con risultati da … dimenticare! Già allora ero convinto, e lo sono ancora, che qualificare il termine “intelligenza” con l’aggettivo “artificiale” sia un azzardo, se non, addirittura, un ossimoro. Probabilmente sto sbagliando ma sarei contento se mi suggerissi un qualche approccio che mi invogli ad utilizzare le evoluzioni che hai apportato ricevendo in cambio una qualche gratificazione individuale. Che mi dici, in proposito? P.S. il tempo che mi servirebbe per capire (?!?) come funziona il tutto lo dedico molto più volentieri alla lettura di un libro in più …

  5. Dimenticavo: una funzionalità di base che informi (via email, WA o come ti pare) che sono presenti nuovi commenti sul blog non sarebbe più semplice da implementare e più interessante da utilizzare?

    1. Beh, non chiamiamola intelligenza, ma una funzionalità di ricerca più evoluta, che permettesse, anzitutto a me, di sapere se avevo parlato di alcuni argomenti serviva anzitutto a me per non ripetere sempre le stesse cose. Vedremo se avrà affetto. È comunque um mondo affascinante, come sicuramente lo è, lo ammetto, leggere un libro in più.
      Quanto alla funzionalità di notifica dei commenti … chiedo a ChatGPT 😏

      1. Io la chiamerei “conoscenza artificiale” ma, ammetto, si tratta di un sostantivo opinabile. Ho notato con piacere una significativa regressione funzionale dopo le modifiche di tecnologia avanzata apportate al blog: prima ricevevo una mail che mi informava della presenza di un nuovo articolo mentre oggi ho scoperto “Indignarsi” solo perché ho effettuato un accesso al sito. Un notevole passo avanti per facilitare la condivisione!!!

    2. Appoggio la mozione di PiGreco!
      E rilancio: Vins, come ti dissi già nella scorsa modifica del sito, si era persa anche la possibilità di vedere in un box a destra gli ultimi commenti. Cioè chi aveva commentato per le più recenti 5 volte.
      Ce la possiamo fare a ripristinarlo ora?

      PìGì, che dici riusciamo a conoscerci sabato prossimo a Fiorano per la presentazione del libro di Vins?
      Mi riconoscerai da un berretto rosso e …dal collarino bianco sul clergyman! 😄

Lascia un commento