Abbiamo già conosciuto sulle pagine di questo sito il progetto Cheshire Cat AI, lo Stregatto come è ormai noto ai più. Ne abbiamo presentato infatti le funzionalità principali, le potenzialità ed abbiamo apprezzato con una sperimentazione pratica due suoi aspetti salienti:

  • la facilità di avvio sfruttando la tecnologia a container di Docker;
  • la rapidità con cui è in grado di acquisire documenti sia per caricamento diretto sia con l’indicazione di un URL, un indirizzo web, da parte nostra.

Il secondo punto, in particolare, ha mostrato come Cheshire Cat AI possa dare vita, istantaneamente, ad una RAG (Retrieval Augmented Generation) sfruttando la base di conoscenza che noi forniamo mediante documenti. In questo articolo, trattiamo un altro aspetto fondamentale, in grado davvero di sprigionare le potenzialità dello Stregatto e di metterlo a disposizione dei nostri progetti aziendali e di ricerca: la creazione di plugin.

Come vedremo, questo è un procedimento assai comodo in quanto, in primis, può essere svolto in linguaggio Python, formalismo estremamente versatile, facile da imparare e tipicamente già ampiamente noto agli esperti di Intelligenza Artificiale, ma soprattutto l’architettura interna dello Stregatto offre già tutti i punti di appoggio necessari per rendere lo sviluppo di plugin estremamente veloce ed efficace.
Mettiamoci subito al lavoro!

I plugin dello Stregatto: cosa sono?

I plugin sono delle funzionalità che possiamo inserire nella nostra installazione dello Stregatto, scritte in linguaggio Python, e che vengono direttamente attivate dal pannello di controllo di Cheshire Cat AI stesso quando opportuno.
I plugin si basano essenzialmente su due costrutti:

  • hook che vengono attivati in risposta a un evento. In pratica, scriveremo del codice che si attiverà al verificarsi di una circostanza definita;
  • tool che consistono in una funzione che può essere selezionata direttamente dall’LLM, il Large Language Model.

Ciò che rende molto comodo il loro utilizzo è l’approccio adottato a livello di programmazione, che permette di scrivere del codice in linguaggio Python etichettato mediante decorator.

Tra l’altro, l’importanza centrale dei plugin nel progetto Cheshire Cat è facilmente individuabile sin dal primo utilizzo, in quanto il menù dell’interfaccia di amministrazione dedica loro una sezione apposita come si vede nella figura che segue.

stregatto_plugin_img_01

Come si può vedere, esiste un plugin principale, il core, che è già presente e inamovibile, mentre gli altri, forniti da una community di sviluppatori estremamente attiva, possono essere installati secondo le proprie necessità.

Come si crea un plugin

Senza dilungarci troppo su aspetti tecnici, considerando che la documentazione del progetto è ben fatta e i tutorial in merito circolano sempre di più, creiamo un plugin fatto di un solo hook tanto per vedere quanto sia semplice impostare il lavoro.

Per prima cosa dobbiamo sapere dove collocare il codice. All’interno della cartella core del progetto, ne esiste una di nome cat che a sua volta ne contiene una di nome plugins: ecco, proprio qui andrà posizionato il nostro lavoro.

Nel percorso core/cat/plugins creeremo un’ulteriore cartella che nel nostro caso prenderà nome mionuovoplugin.
All’interno di questa, scriviamo un file di nome plugin.json che conterrà la descrizione del plugin così come apparirà nella scheda Plugin della nostra installazione del “gatto”. Per esempio, ecco un file plugin.json che potrebbe fare al caso nostro:

{
    "name": "Mio nuovo plugin aziendale",
    "version": "1.0.0",
    "description": "Stiamo realizzando un plugin che sarà molto utile ai nostri progetti",
    "author_name": "il nostro esperto di AI",
    "tags": "business, services"
}

All’interno, della cartella, dove abbiamo collocato plugin.json andiamo a inserire un ulteriore file, questa volta basato su codice Python. La sua prima riga innesterà le funzionalità degli hook messe a disposizione dallo Stregatto:

from cat.mad_hatter.decorators import hook

Di seguito, andremo a inserire il nostro primo hook, che consiste in un esempio piuttosto didascalico ma evidenzia la rapidità con cui una nuova funzionalità viene integrata nella piattaforma.

Definiremo una nuova personalità che lo Stregatto interpreterà durante la chat con l’utente:

@hook # default priority is 1
def agent_prompt_prefix(prefix, cat):
    prefix = """Sei il nostro consulente aziendale, ti chiami Giorgio, e sarai in grado di illustrare 
ai clienti che si collegheranno tutti i servizi che la nostra azienda 
è in grado di offrire con competenza e celerità"""
    return prefix

Attraverso l’elemento prefix spieghiamo allo Stregatto come dovrà presentarsi all’utente che gli chiederà chi è e di cosa si occupa. Noteremo che subito il nostro plugin sarà subito disponibile nella nostra installazione:

stregatto_plugin_img_02

inoltre se torneremo nella nostra pagina principale e gli chiederemo di presentarsi avremo queste risposte:

stregatto_plugin_img_03

Notiamo come tutto ciò che dice è fortemente ispirato a quanto inserito nel codice dell’hook ma non è puramente una semplice stampa del testo, bensì una sua rielaborazione intelligente in cui il framework è in grado di esprimersi in maniera sciolta, pur attenendosi alla sua missione.

Come sfruttare i plugin a livello aziendale?

Come possiamo utilizzare tutto ciò per la nostra azienda? Innanzitutto, dobbiamo considerare che parliamo di un framework animato da Intelligenza Artificiale Generativa quindi dobbiamo chiederci dove la nostra azienda può beneficiare di funzionalità che non si limitino alla pure lettura di informazioni da un database, ma sia in grado di interagire con l’utenza, sfruttare una base di conoscenze da rielaborare e su cui costruire risposte. L’aspetto interessante è che lo Stregatto offre tutto ciò che ci serve per personalizzare le risposte in termini di forma e di contenuto dei testi generati.

Inoltre, stando a quanto detto sulle differenze tra hook e tool, gli sviluppatori che se ne occuperanno dovranno chiedersi se la funzionalità dovrà attivarsi in base a eventi (nel nostro esempio, abbiamo visto solo un evento degli hook ma ne esistono tanti altri ben illustrati nella documentazione), o se dovrà invece sapersi innestare nel flusso di interazione con l’utente.

In base ai processi specifici della propria azienda potranno venire molte idee da sviluppare, ma alcuni casi generici di personalizzazioni potrebbero riguardare:

  • consigli di acquisto in base alla profilazione di un utente
  • scelta del servizio o della proposta migliore in base alla richiesta che il cliente inoltra
  • consigli su come risolvere un problema
  • tante altre situazioni in cui servirebbe un essere umano con la sua elasticità associata a una conoscenza dei documenti aziendali che è proprio ciò che fondamentalmente una RAG offre

Non ci fermiamo qui!

A questo punto, è arrivato il momento di raccogliere un po’ di idee e iniziare a sperimentare in proprio mettendo al lavoro i propri team. Strumenti di questo tipo sono ben sfruttabili quando i tecnici incontrano le persone che in azienda seguono direttamente i processi produttivi o di servizio, in modo da trasformare in realtà quello che gli utenti cercano.

A tutto il resto penserà Cheshire Cat AI!