Lo Stregatto – un progetto AI Open Source Made in Italy

Forse il più conosciuto tra i progetti italiani opensource per la creazione di RAG e Agenti basati su LLM. Seguo e, per quello che posso, supporto lo Stregatto (cheshirecat.ai) da quando ancora non aveva un nome, anzi, da quando Piero Savastano aveva chiesto sui suoi canali social di votare per il nome. Io ho votato Stregatto, ovviamente.

Cheshire Cat AI è stato sviluppato come un framework hackable e pronto per l’uso, il progetto è distribuito sotto licenza GPL-3.0, un impegno esplicito a garantire che il core del software rimanga sempre libero di essere utilizzato, studiato, modificato e distribuito.

Cheshire Cat non si limita a fornire un codice sorgente aperto, ma promuove attivamente la costruzione di un ecosistema commerciale sostenibile incoraggiando esplicitamente la creazione di attività commerciali basate sul framework, pur mantenendo il core gratuito e garantendo che tutti i miglioramenti, bug fix e aggiornamenti di sicurezza siano disponibili per tutti. Questa strategia garantisce sia la vitalità a lungo termine del progetto, sia un percorso chiaro per le aziende che vogliono creare soluzioni a valore aggiunto (come plugin o integrazioni).

La capacità di un framework di operare indipendentemente dai modelli specifici che utilizza (Agnosticismo) non è un semplice dettaglio tecnico, ma un requisito architetturale cruciale per la resilienza e l’adattabilità strategica a lungo termine.

Agnosticismo:

Un imperativo strategico contro il Vendor Lock-in

Essere agnostici significa che il sistema di orchestrazione può interagire con modelli linguistici multipli senza essere vincolato a un singolo fornitore o a una specifica tecnologia. Il mondo dell’AI è in rapida evoluzione, con nuovi modelli che vengono rilasciati e modelli esistenti che vengono deprecati quasi mensilmente. Un sistema rigido, legato a un unico modello, rischia di innescare costosi e faticosi lavori di adeguamento ogni volta che il modello sottostante cambia o viene interrotto.

La gestione di questa flessibilità richiede uno strato di astrazione unificato, che in Cheshire Cat permette di standardizzare il modo in cui i diversi LLM e Embedder sono integrati e testati. Un sistema agnostico è la chiave per rimanere agili e garantire la coerenza dei risultati anche in caso di variazioni del fornitore o di aggiornamenti tecnologici forzati.

Cheshire Cat dimostra la sua natura agnostica fornendo opzioni granulari per la configurazione sia dei Modelli di Completamento (LLM) che dei Modelli di Embedding (Embedder).

L’Embedder è il componente critico che trasforma il testo in vettori (embedding), che sono una rappresentazione condensata delle informazioni semantiche utilizzata per le operazioni geometriche di similarità, fondamentali per il RAG. CC consente di configurare questo “Encoder” separatamente dal LLM principale.

Gli sviluppatori possono scegliere Embedder esterni o utilizzare soluzioni locali ad alte prestazioni come FastEmbed. La configurazione tramite il pannello di amministrazione permette la selezione del modello (es. bge-base-en per FastEmbed) e la specificazione di parametri essenziali come la lunghezza massima dei token e il tipo di embedding (query o passage). La gestione separata e locale dell’Embedder è un pilastro fondamentale per l’ottimizzazione del Retrieval-Augmented Generation (RAG) e per garantire che l’intero processo di vettorializzazione della conoscenza proprietaria avvenga all’interno del perimetro aziendale, rafforzando ulteriormente la strategia di conformità.

L’estensibilità è il tratto distintivo di Cheshire Cat, realizzata attraverso un vasto ecosistema di plugin scritti in Python. La vera potenza risiede nell’implementazione di due meccanismi di estensione avanzati: Hooks (callback di evento) e Tools (Function Calling).

Un esempio pratico è l’uso del Hook agent_prompt_prefix per sovrascrivere il prompt di sistema e definire la personalità dell’AI (ad esempio, renderla curiosa e divertente come il Gatto del Cheshire). Altri Hooks consentono di ispezionare o modificare i messaggi in entrata e in uscita, o di personalizzare completamente l’Agente e le pipeline di gestione della memoria.

I Tools permettono all’LLM di interagire con il mondo esterno, trasformando l’Agente da mero generatore di testo a esecutore di azioni. Un Tool è definito semplicemente come una funzione Python decorata con @tool e una descrizione che l’LLM può interpretare.

Componenti Centrali del Framework Cheshire Cat per l’Estensione

ComponenteFunzione PrincipaleMeccanismo di ImplementazioneBeneficio Chiave (Agent Engineering)
RAG/Rabbit HoleIngestione, chunking e creazione di memoria vettoriale.Integrazione con Qdrant , Supporto file multipli.Agente “che sa”: risposte basate su conoscenza proprietaria.
HOOKSIntercettazione e manipolazione del flusso di esecuzione.Decoratori Python (@hook), Chaining e Priorità.Personalizzazione granulare del comportamento e pre-elaborazione del dato.
TOOLSAbilitazione del Function Calling.Decoratori Python (@tool), Codifica risposta LLM.Agente “che agisce”: esecuzione di codice esterno (API, DB).
Architettura CoreContainerizzazione, API HTTP/WebSocket.Docker, Microservice API-First.Scalabilità, integrazione immediata e basso Time-to-Market.

Il caso d’uso fondamentale per Cheshire Cat è la creazione di assistenti AI che utilizzano la tecnica RAG per rispondere con accuratezza su dati aziendali o personali. Una delle prime operazioni richieste è l’upload di documenti (come PDF o web pages) nella memoria vettoriale del Gatto.

Un pattern di implementazione avanzato prevede l’uso ibrido della conoscenza. Un agente AI può essere configurato per dare priorità alla sua base di conoscenza proprietaria (ad esempio, le policy interne di un’azienda) e ricorrere a strumenti esterni, come una ricerca web, solo per le richieste che esulano dalla sua memoria privata (ad esempio, l’indirizzo attuale di un partner, come in un esempio di ricerca esterna tramite Tool). Il sistema di RAG integrato con Qdrant e l’Embedder configurabile (locale come FastEmbed ) garantiscono che il recupero delle informazioni sia rapido, pertinente e che i dati sensibili non debbano mai uscire dall’ambiente di hosting.