Integrazione di My Ghost Writer con lite.koboldai.net, Un'Analisi Tecnica Approfondita
Tempo fa ho iniziato a scrivere la bozza di un testo. Un po' per curiosità professionale, un po' per semplice noia, ho deciso di pensare a quale tipo di applicazione dell'intelligenza artificiale fosse fattibile, a parte l'ovvi generazione di testo tramite un prompt ad un LLM.
In particolare ho notato specialmente i LLM (Large Language Models) "piccoli" abbiano la tendenza a ripetersi ed a inserire parole duplicate. Per questo motivo ho cercato un progetto open source che potessi eseguire sul mio pc e tramite cui individuare parole duplicate: non ho trovato niente di utile o che comunque facesse quel che volevo io.
Questo ha portato alla creazione di My Ghost Writer, un progetto open source che sta ora sto integrando in lite.koboldai.net — un'interfaccia web scritta in JS ed HTML senza dipendenze per KoboldCpp.
lite.koboldai.net
lite.koboldai.net è un'interfaccia web senza dipendenze progettata per l'uso come backend per modelli linguistici di grandi dimensioni (LLM) come KoboldCpp. Funziona interamente nel browser (non richiede installazione) ed è confezionata come un singolo file HTML statico:
- Modalità multiple: Modalità Storia, Modalità Chat, Modalità Istruttoria e Modalità Avventura per diversi tipi di interazione con l'IA.
- Ampia compatibilità: Funziona con KoboldAI Client, KoboldCpp e AI Horde; supporta sia modelli locali che remoti.
- Strumenti creativi: Include un editor di testo, la generazione di immagini tramite Stable Diffusion e il supporto per le schede dei personaggi e gli scenari.
- Facile da usare: Facile da usare, stili dell'interfaccia utente personalizzabili e funzioni come il salvataggio automatico, il text-to-speech e le opzioni di ripetizione/modifica.
È una buona opzione se si desidera un'interfaccia leggera e flessibile per la narrazione, il gioco di ruolo o la scrittura assistita dall'intelligenza artificiale. La struttura del codice è un po' disordinata:
- Index.html monolitico con oltre 26000 righe di codice js, css e html.
- Solo JS, nessun dattiloscritto ovviamente.
- Il codice JS incorporato di terze parti è obsoleto.
- Mancano test E2E.
Il Problema con WordSearch in lite.koboldai.net
WordSearch
(basata sulla mia prima implementazione) in lite.koboldai.net fa semplicemente una ricerca testuale per rilevare duplicati avendo però limitazioni significative:
- Identifica anche parti di testo non rilevanti (es. la singola lettera "a", anche dove presente dentro ad altre parole).
- Non distingue tra parole semanticamente diverse (es. "the" e "they").
La Soluzione: Stemming NLP con My Ghost Writer
Per risolvere questo problema, ho reimplementato la logica di rilevazione dei duplicati utilizzando lo stemming NLP (tramite l'algoritmo Porter Stemming, già incluso dentro a lite.koboldai.net), che riduce le parole alla loro forma radice (es. "running" → "run"). Questo approccio:
- Raggruppa parole semanticamente correlate (es. "run", "running", "ran").
- Riduce i falsi positivi concentrandosi su veri duplicati.
- Supporta sia l'input manuale che l'upload di file per flessibilità.
Funzionalità Attuali e Limitazioni
Funzionalità Principali
- Ricerca delle parole duplicate, tramite stemming.
- Thesaurus (work in progress):
- Alimentato da chiamate ad WordsAPI.
- Persistenza dei dati opzionale con un database MongoDB locale.
- Limitato a termini comuni ⚠️, non supporta (per ora) nomi propri o espressioni con parole multiple.
Tecnologie Utilizzate
- Backend:
- Python 3.10+ con FastAPI per eseguire l'applicazione web.
- Structlog per il logging e la gestione degli errori.
- Poetry per la gestione delle dipendenze.
- Docker per la containerizzazione.
- Frontend:
- JavaScript vanilla (nessun framework a causa dell'integrazione con lite.koboldai.net).
- Playwright per i test end-to-end (E2E).