Fabrice AI: il viaggio tecnico

Come ho detto nel post precedente, lo sviluppo di Fabrice AI si è rivelato molto più complesso del previsto, costringendomi a esplorare molti approcci diversi.

L’approccio iniziale: Indice dei lama – Ricerca vettoriale

Il mio primo tentativo di migliorare le capacità di ricerca di Fabrice AI ha riguardato l’utilizzo dell’indice Llama per la ricerca vettoriale. Il concetto era semplice: prendere i contenuti del mio blog, convertirli in documenti Langchain e poi trasformarli in documenti Llama. Questi documenti Llama sarebbero poi stati memorizzati in un indice vettoriale, consentendomi di interrogare questo indice per ottenere informazioni rilevanti.

Tuttavia, quando ho iniziato a testare il sistema, è diventato evidente che questo approccio non stava dando i risultati sperati. In particolare, quando interrogavo il sistema con domande contestualizzate come “Quali sono i più grandi errori commessi dai fondatori di mercati?”, l’intelligenza artificiale non riusciva a fornire risposte significative. Invece di recuperare il contenuto ricco di sfumature che sapevo essere incorporato nei dati, forniva risposte irrilevanti o incomplete.

Questo fallimento iniziale mi ha portato a riconsiderare il mio approccio. Mi resi conto che la semplice memorizzazione dei contenuti in un indice vettoriale non era sufficiente; il meccanismo di recupero doveva comprendere il contesto e le sfumature delle domande poste. Questa consapevolezza è stata la prima di molte lezioni che hanno segnato l’evoluzione di Fabrice AI.

Memorizzare la conoscenza: Archiviazione e recupero di documenti con MongoDB

Tenendo conto delle limitazioni dell’approccio dell’indice Llama, ho poi valutato la possibilità di archiviare i documenti Llama in MongoDB. Lo schema flessibile e la struttura orientata ai documenti di MongoDB sembravano una soluzione promettente per gestire i diversi tipi di contenuti che avevo accumulato nel corso degli anni.

Il piano era quello di creare un’esperienza di ricerca più dinamica e reattiva. Tuttavia, questo approccio ha incontrato rapidamente dei problemi. La funzionalità di ricerca, che avevo previsto più robusta, non ha funzionato come previsto. Le query che avrebbero dovuto restituire documenti rilevanti non davano alcun risultato o producevano contenuti irrilevanti.

Questa battuta d’arresto è stata frustrante, ma ha anche sottolineato una lezione fondamentale: il metodo di archiviazione è importante quanto la strategia di recupero. Ho iniziato a considerare altre opzioni, come l’utilizzo di MongoDB Atlas per le ricerche vettoriali, che potenzialmente potrebbe fornire la precisione e la scalabilità di cui avevo bisogno. Tuttavia, prima di scegliere questa alternativa, ho voluto esplorare altri approcci per capire se esistesse una soluzione più efficace.

Metadata Retriever e Vector Store: Alla ricerca della specificità

Una delle strade successive che ho esplorato è stata l’utilizzo di un recuperatore di metadati combinato con un archivio vettoriale. L’idea alla base di questo approccio era quella di categorizzare la vasta gamma di informazioni presenti in Fabrice AI e di recuperare le risposte in base a queste categorie. Strutturando i dati con i metadati, speravo di migliorare la capacità dell’intelligenza artificiale di fornire risposte specifiche e mirate.

Tuttavia, anche questo metodo aveva i suoi limiti. Sebbene all’apparenza sembrasse promettente, l’intelligenza artificiale faticava a fornire risposte accurate a tutti i tipi di domande. Ad esempio, quando ho chiesto: “L’autore è ottimista?”. Il sistema non è riuscito a interpretare la domanda nel contesto del contenuto pertinente. Invece di fornire un’analisi approfondita basata sui metadati, ha fornito risposte vaghe o nessuna.

Questo approccio mi ha insegnato una lezione preziosa sull’importanza del contesto nell’IA. Non è sufficiente categorizzare le informazioni; l’IA deve anche capire come queste categorie interagiscono e si sovrappongono per formare una comprensione coesa del contenuto. Senza questa profondità di comprensione, anche i metodi di recupero più sofisticati possono fallire.

Strutturare la conoscenza: L’indice SummaryTree

Mentre continuavo a perfezionare Fabrice AI, ho sperimentato la creazione di un SummaryTreeIndex. Questo approccio mirava a riassumere tutti i documenti in un formato ad albero, consentendo all’IA di navigare attraverso questi riassunti e di recuperare le informazioni rilevanti in base alla struttura del contenuto.

L’idea era che, riassumendo i documenti, l’intelligenza artificiale potesse identificare rapidamente i punti chiave e rispondere alle domande con informazioni concise e precise. Tuttavia, anche questo metodo ha dovuto affrontare sfide significative. L’intelligenza artificiale faticava a fornire risposte significative a domande complesse, come “Come prendere decisioni importanti nella vita?”. Invece di attingere ai contenuti ricchi e ricchi di sfumature contenuti nei riassunti, le risposte dell’IA erano spesso superficiali o incomplete.

Questa esperienza ha sottolineato la difficoltà di bilanciare ampiezza e profondità nell’IA. Sebbene i riassunti possano fornire una panoramica di alto livello, spesso mancano del contesto dettagliato necessario per rispondere a domande più complesse. Mi sono reso conto che una soluzione efficace avrebbe dovuto integrare sia i contenuti dettagliati che i riassunti di alto livello, permettendo all’IA di attingere a entrambi secondo le necessità.

Per questo motivo, nella versione dell’IA di Fabrice attualmente in funzione, faccio in modo che l’IA dia prima un riassunto della risposta, prima di entrare nei dettagli.

Espandere gli orizzonti: Indice del grafico della conoscenza

Riconoscendo i limiti dei metodi precedenti, ho scelto un approccio più sofisticato: il Knowledge Graph Index. Questo approccio prevede la costruzione di un grafo della conoscenza a partire da un testo non strutturato, consentendo all’intelligenza artificiale di effettuare interrogazioni basate su entità. L’obiettivo era quello di creare una comprensione più dinamica e interconnessa dei contenuti, consentendo all’intelligenza artificiale di Fabrice di rispondere in modo più efficace a domande complesse e contestualizzate.

Nonostante le sue promesse, il Knowledge Graph Index ha dovuto affrontare ostacoli significativi. L’intelligenza artificiale ha faticato a produrre risultati accurati, in particolare per le query che richiedevano una profonda comprensione del contesto. Ad esempio, alla domanda “Quali sono le valutazioni corrette di Seed e Series A?”, l’IA non è riuscita a fornire una risposta pertinente, evidenziando la difficoltà di integrare un testo non strutturato in un Knowledge Graph coerente.

Questo approccio, sebbene alla fine non abbia avuto successo, ha fornito importanti spunti di riflessione sulle sfide dell’utilizzo dei grafi di conoscenza nell’IA. La complessità dei dati e la necessità di un contesto preciso hanno fatto sì che anche un grafico della conoscenza ben costruito potesse faticare a fornire i risultati desiderati. Un altro inconveniente del Knowledge Graph Index era la sua lentezza. Il tempo di risposta per ottenere documenti correlati era molto elevato rispetto a un indice vettoriale.

Rivalutazione dei dati: Gemelli

Dopo diversi insuccessi, ho deciso di adottare un approccio diverso sfruttando l’intelligenza artificiale di Google, Gemini. L’idea era quella di creare set di dati da file JSON-CSV e di addestrare un modello personalizzato LLM utilizzando questi dati. Speravo che utilizzando dati strutturati e un modello di addestramento robusto, avrei potuto superare alcune delle difficoltà che avevano afflitto i precedenti tentativi.

Tuttavia, anche questo approccio ha incontrato delle difficoltà. Il processo di formazione è stato interrotto a causa di una formattazione errata dei dati, che ha impedito al modello di essere addestrato in modo efficace. Questa battuta d’arresto ha sottolineato l’importanza dell’integrità dei dati nella formazione dell’intelligenza artificiale. Senza dati correttamente formattati e strutturati, anche i modelli più avanzati possono non funzionare come previsto.

Questa esperienza mi ha portato a considerare il potenziale dell’utilizzo di BigQuery per archiviare i dati JSON, fornendo una piattaforma più scalabile e affidabile per gestire i grandi set di dati necessari per addestrare efficacemente l’intelligenza artificiale di Fabrice.

Combinare i punti di forza: Documenti Langchain con Pinecone

Nonostante le sfide affrontate finora, ero determinato a trovare una soluzione che permettesse a Fabrice AI di memorizzare e recuperare efficacemente la conoscenza. Questa determinazione mi ha portato a sperimentare i documenti Langchain e Pinecone. L’approccio prevedeva la creazione di un archivio vettoriale Pinecone utilizzando i documenti Langchain e gli embeddings OpenAI, per poi recuperare i documenti più simili in base alla query.

Questo metodo si è rivelato promettente, soprattutto quando la query includeva il titolo del documento. Ad esempio, alla domanda “Qual è la chiave della felicità?”, l’IA è stata in grado di recuperare e riassumere accuratamente i contenuti rilevanti. Tuttavia, c’erano ancora dei limiti, in particolare quando la query non conteneva parole chiave o titoli specifici.

Questo approccio ha dimostrato il potenziale della combinazione di diverse tecnologie per migliorare le prestazioni dell’IA. Integrando i documenti di Langchain con l’archivio vettoriale di Pinecone, sono riuscito a migliorare la pertinenza e l’accuratezza delle risposte dell’IA, anche se con alcune limitazioni.

Raggiungere la coerenza: Costruttore GPT OpenAI

Dopo aver esplorato vari metodi e tecnologie, mi sono rivolto al GPT Builder di Open AI per consolidare e perfezionare le conoscenze archiviate in Fabrice AI. Caricando tutti i contenuti in una base di conoscenza GPT, ho voluto creare una piattaforma più coerente e affidabile per recuperare e interagire con le mie conoscenze.

Questo approccio si è rivelato uno dei più efficaci: l’IA è stata in grado di fornire risultati migliori in una serie di interrogazioni. La chiave di questo successo è stata l’integrazione di tutte le conoscenze in un unico sistema coeso, che ha permesso all’IA di attingere all’intera gamma di contenuti per rispondere alle domande.

Come ho detto nel mio post precedente, non riuscivo a farlo funzionare sul mio sito web ed era disponibile solo per gli abbonati a pagamento di Chat GPT, il che mi sembrava troppo limitante. Inoltre, anche se era migliore, non mi piaceva la qualità delle risposte e non mi sentivo a mio agio nel rilasciarlo al pubblico.

Perfezionamento finale: Assistenti GPT con il modello 4o

L’ultimo pezzo del puzzle nello sviluppo di Fabrice AI è arrivato con l’introduzione degli assistenti GPT utilizzando il Modello 4o. Questo approccio ha rappresentato il culmine di tutto ciò che avevo imparato nel corso del progetto. Utilizzando un database vettoriale e perfezionando i suggerimenti, ho cercato di raggiungere il massimo livello possibile di accuratezza e di comprensione del contesto nelle risposte dell’IA.

Questo metodo prevedeva il caricamento di tutte le conoscenze che avevo accumulato in un database vettoriale, che veniva poi utilizzato come base per le interazioni dell’IA. Il database vettoriale ha permesso all’IA di eseguire ricerche più sofisticate, recuperando informazioni basate sul significato semantico delle query anziché affidarsi esclusivamente alla corrispondenza delle parole chiave. Questo ha rappresentato un progresso significativo rispetto agli approcci precedenti, consentendo all’IA di comprendere meglio e rispondere a domande complesse e ricche di sfumature.

Una delle innovazioni principali di questo approccio è stato l’attento perfezionamento dei suggerimenti. Creando e testando meticolosamente diverse richieste, sono stato in grado di guidare l’intelligenza artificiale verso risposte più accurate e pertinenti. Ciò ha comportato non solo la modifica della formulazione dei messaggi, ma anche la sperimentazione di diversi modi di strutturare le domande per ottenere le migliori risposte possibili.

I risultati sono stati impressionanti. L’intelligenza artificiale era ora in grado di gestire un’ampia gamma di interrogazioni con un’elevata precisione, anche quando le domande erano aperte o richiedevano una profonda comprensione del contesto. Ad esempio, alla domanda “Come prendere le decisioni più importanti della tua vita?”. L’IA ha fornito una risposta completa e approfondita, attingendo a una serie di fonti e prospettive per fornire una risposta completa.

Questo successo è stato il culmine di centinaia di ore di lavoro e di innumerevoli esperimenti. Ha dimostrato che, con la giusta combinazione di tecnologia e perfezionamento, era possibile creare un’IA in grado non solo di memorizzare e recuperare le informazioni in modo efficace, ma anche di interagire con esse in modo significativo. Lo sviluppo di GPT Assistants con il Modello 4o ha segnato il momento in cui Fabrice AI ha raggiunto il livello di sofisticazione e precisione che avevo immaginato fin dall’inizio. L’API di GPT Assistants è stata poi integrata nel mio blog per consentire agli utenti finali di interagire con Fabrice AI nel modo in cui la vedi ora sul blog.

Riflettere sul viaggio

Il processo di sviluppo di Fabrice AI ha messo in luce le complessità del lavoro con l’AI, in particolare quando si tratta di comprendere e contestualizzare le informazioni. Mi ha insegnato che non esistono scorciatoie nello sviluppo dell’IA: ogni passo, ogni iterazione e ogni esperimento è una parte necessaria del viaggio verso la creazione di qualcosa di veramente efficace.

Guardando al futuro, sono entusiasta di continuare a perfezionare e ampliare Fabrice AI. Come accennato nell’ultimo post, rivedrò le domande poste per completare la base di conoscenze dove ci sono delle lacune. Spero anche di rilasciare una versione interattiva che abbia il mio aspetto e la mia voce e con cui tu possa parlare.