DEV Community

Alessandro T.
Alessandro T.

Posted on • Originally published at trinca.tornidor.com

My Ghost Writer e lite.koboldai.net, una panoramica

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).

Risorse

Top comments (0)