Configurare Rivet per utilizzare LLM in locale con Ollama
Recentemente mi è stato chiesto come configurare Rivet per l’utilizzo con Ollama (qui trovi il video che ho fatto presentando Rivet).
Ho deciso di fare un video in cui lo spiego (che trovi qui sotto) ma l’amico Lucio mi ha suggerito anche di fare un articolo per chi preferisce leggere piuttosto che vedere … ed eccomi qui.
1. Rivet
Rivet, come scrivono sul sito, è un ambiente di programmazione visiva per la costruzione di agenti di intelligenza artificiale con LLM. Puoi iterare usando i grafici di prompt in Rivet, quindi eseguili direttamente nella tua applicazione. Con Rivet, i team possono progettare, eseguire il debug e collaborare efficacemente su complessi grafici di prompt LLM e distribuirli nel proprio ambiente.
Per chi non è un programmatore, come il sottoscritto, Rivet permette di sperimentare gli LLM in modo intuitivo e creare flussi più complessi di quelli base (ad esempio con sistemi a chat come chatGPT e suoi emuli o da riga di comando come ti ho già mostrato).
La cosa che mi ha sempre interessato di questo programma è la possibilità di interfacciarlo con LLM locali come, ad esempio, Ollama che posso far girare sul mio MacStudio M1.
2. Estendere il sistema con i plugin
Rivet, nativamente, non permette di integrare Ollama ma gli sviluppatori del progetto hanno ampliato le sue funzionalità a mezzo di un sistema di plug-in.
Vediamo quindi come installare ed utilizzare Ollama con Rivet.
Partiamo da un progetto vuoto.
Progetto vuoto di Rivet
3. Il plugin per Ollama
Andiamo quindi nel tab dei plugin.
tab plugin
Scorriamo la lista dei plug-in fino a trovare quello di Ollama. Premi il tasto Add (ovvero aggiungi).
Installazione plugin di Ollama
Attendi che il plug-in sia installato.
Nota bene: per come è stato progettato Rivet occorre installare i plug-in per ogni singolo progetto.
3.1 Configurare il collegamento ad Ollama
Ora dobbiamo configurare nei setting l’integrazione di Rivet con Ollama. In particolare dobbiamo indicare dove si trova il server di Ollama.
Vai quindi sul lato destro dell’interfaccia di Rivet a lato del pulsante Run i 3 puntini verticali (punto 1 dell’immagine sottostante).
Seleziona la modalità “Node” alla voce Executor (punto 2). Infine premi il pulsante settings (ovvero impostazioni - punto 3).
Accedere ai Settings di Rivet
Si aprirà quindi la finestra delle impostazioni di Rivet (ovvero Settings) come mostrato nell’immagine sottostante.
Seleziona la voce Plugins sulla colonna di sinistra (punto 1 immagine sottostante).
Finestra dei Settings di Rivet
Ora è possibile indicare l’indirizzo IP del tuo server di Ollama.
Abitualmente, se hai installato sia Ollama che Rivet sul medesimo Mac, dovrai inserire: http://localhost:11434
(come mostrato al punto 2 dell’immagine sottostante). Questo è l’indirizzo IP interno del tuo computer.
Io ho una configurazione un pelino più complessa. Nel mio caso infatti il server di Ollama è su un Mac differente da quello su cui ho installato Rivet. Ho quindi inserito l’indirizzo IP del Mac su cui ho installato Ollama.
A prescindere quindi dall’approccio che hai utilizzato, inserisci l’indirizzo IP corretto nel campo come mostrato al punto 1 dell’immagine sottostante.
Abitualmente la porta aperta dal server di Ollama è la 11434
.
Configurazione del server di Ollama
3.2 Aggiungere il nodo di Ollama in Rivet
Per aggiungere un nodo in Rivet occorre premere la barra spaziatrice.
Dal menù contestuale che compare a video (punto 1) scegli la voce Add (aggiungi) e dal menù successivo la voce Ollama (che prima dell’installazione era assente - punto 2). Infine dall’ulteriore menù che si apre scegli la voce Ollama Generate (ovvero Crea con Ollama – punto 3).
Aggiungere il nodo di Ollama
In Rivet comparirà il nodo come mostrato nell’immagine sottostante.
Procedi quindi a premere l’icona con la rotella (punto 1 dell’immagine sottostante). Per ogni nodo in Rivet è presente questa icona che permette di configurare le impostazioni del singolo nodo.
Nodo Ollama Generate
3.3 Configurazione del nodo
Per motivi di spazio non posso esaminare qui tutte le opzioni di questo nodo, mi soffermerò quindi solo sulle impostazioni principali che ti permetteranno di utilizzarlo correttamente.
Le impostazioni più importanti sono quelle relative alla scelta del modello LLM da utilizzare ed il formato del prompt.
La prima voce da inserire è quella relativa al punto 1 ovvero la voce Model. Qui dovrai inserire il nome del modello che hai installato in Ollama.
Alla voce Prompts Format (ovvero formato del prompt) che si vede al punto 2, se utilizzo un modello standard (come ad esempio Llama2, Mistral o Mixtral) dovrai scegliere la voce Llama 2 Instruct.
Impostazioni del nodo Ollama Generate
Come si vede dall’immagine sottostante il nodo di Rivet prevede 3 opzioni:
- Auto
- Raw
- Llama 2 Instruct
Approfondiremo queste opzioni nel proseguo dell‘articolo.
Prompt format
Di seguito si vede la configurazione finale del nodo.
Configurazione finale del nodo
3.4 Creare un semplice flusso di lavoro
Con il semplice nodo di Ollama, tuttavia, non abbiamo creato un vero flusso di lavoro in Rivet. Vediamo quindi come creare un semplice flusso di esempio.
Crea un nuovo nodo di testo (Text in inglese) come mostrato nell’immagine sottostante. Ora unisci l’Output del nodo testo alla voce Messages (messaggio) del nodo di Ollama. Come si vede nell’immagine sottostante.
Unire i nodi
Come si vede nell’immagine sottostante ora i due nodi sono uniti ed hai creato il tuo primo flusso con Rivet.
Nodi uniti
3.5 Lanciare il flusso di lavoro
Sei pronto, finalmente, a lanciare il flusso di lavoro con Ollama.
Ricordati, ovviamente, di inserire un qualche tipo di prompt nel nodo di testo. Nel mio esempio ho usato il prompt di esempio di Ollama ovvero: Perché il cielo è blu? Rispondi in italiano.
Premi il tasto verde Run, ovvero lancia il flusso, e vedrai qualcosa di simile a quanto mostrato nell’immagine sottostante.
Una volta premuto il tasto questo si convertirà in un tasto rosso: Abort, ovvero ferma il flusso (come mostrato al punto 1 dell’immagine sottostante).
Come si vede al punto 2, poi, nel nodo di Ollama al posto dell’immagine dell”aereo di carta comparirà una animazione girandola di colore arancio. Questo mostra che l’LLM sta lavorando
Esempio di flusso di lavoro con Rivet in esecuzione
In dipendenza dalla potenza del tuo Mac e del modello, riceverai una risposta. Nel mio esempio, usando una versione di Mixtral quantizzata a 3bit sul MacStudio M1 con 32Gb di memoria unificata, ci sono voluti 22 secondi (come si vede nell’angolo in basso a destra dell’immagine che segue).
Come si vede al punto 1, premendo il pulsante della raccoglitore di carta è possibile copiare negli appunti del computer il testo generato da Ollama. Se invece si premono le doppie frecce divergenti (punto 2) si aprirà una nuova finestra.
Esempio di risposta dall’LLM in Rivet
La finestra è quella raffigurata nella immagine che segue e mostra a tutto schermo il risultato del prompt passato all’LLM.
Esempio di finestra esame della risposta
Per quanto ci interessa in questo articolo voglio soffermarmi su due aspetti di questa finestra.
Come si vede nell’immagine sottostante (riquadro verde) la prima parte è l’output ovvero la risposta dell’LLM.
La seconda (riquadro rosso) è il prompt passato all’LLM, ovvero la domanda.
Come potrai notare, rispetto al testo che io ho inserito nell’esempio di prompt questo è leggermente differente. Il testo infatti è racchiuso all’interno di segni.
Non entrerò troppo nel dettaglio ma questi “segni” sono i delimitatori del prompt per l’LLM e sono specifici e differente per ogni LLM.
Tieni a mente questa cosa perché è importante e la approfondiremo nel punto che segue.
Risposta evidenziata
3.6 Prompt di sistema
In conclusione di questo punto, ti voglio parlare di una altro aspetto importante per gli LLM ovvero il c.d prompt di sistema (ovvero System Prompt) che, abitualmente, indirizza e da una “personalità” all’LLM.
Come si vede nell’immagine sottostante è possibile agganciare un secondo nodo di testo allo specifico collegamento.
Nel mio caso ho spostato la richiesta di rispondere solo in italiano e reso più specifico il risultato che voglio ottenere dall’LLM. In gergo tecnico solitamente è la persona che si vuol far interpretare all’LLM.
Come si vede la risposta dell’LLM, alla medesima domanda iniziale, è differente anche se di contenuto simile. La personalizzazione del prompt di sistema è potenzialmente critico per alcuni compiti complessi e specifici e per ottenere i risultati voluti dall'utente.
Esempio di prompt di sistema
4. Modelli differenti da quelli Llama
Veniamo all’ultimo argomento di questo articolo.
Fino ad ora abbiamo usato il modello base di prompt di Llama che oltre a Llama2 è compatibile con Mistral e Mixtral, ma se tu volessi usare un modello differente?
Per rispondere alla tua domando mi occorre fare un passo indietro.
4.1 I modelli presenti sul sito di Ollama
Andando sul sito del progetto di Ollama, come si vede nell’immagine sottostante è presente una voce denominata Models ovvero modelli (punto 1 immagine sottostante).
Voce modelli presente sul sito di Ollama
Cliccando su tale voce si va alla pagina dei modelli pre-pacchettizzati dagli sviluppatori di Ollama.
Una delle caratteristiche più interessanti di tale progetto è infatti quello di semplificare grandemente la possibilità di installare ed utilizzare un enorme numero di modelli LLM open-source.
Pagina dei modelli pre-pacchettizzati di Ollama
Visto che fino ad ora ho usato Mixtral come esempio, andiamo a vedere la pagina del modello.
Come mostrato nell’immagine sottostante voglio che ti soffermi su due punti:
- 1. la “famiglia” del modello, che nel caso si Mixtral è llama;
- 2. il template che, non dovrebbe stupirti, è proprio quello che abbiamo visto al punto 3.5.
Famiglia del modello e suo template
4.2 Modelli di LLM differenti dalla famiglia Llama
Vediamo quindi un modello differente da quello della famiglia llama ad esempio il modello qwen; modello cinese ma multi-lingua che, da test che ho fatto, mi ha dato buoni risultati con la lingua italiana.
Trovi la pagina del modello qui e la vedi raffigurata nell’immagine sottostante.
Pagina di Ollama del modello Qwen
Se clicchi sulla voce template si aprirà una nuova pagina, come mostrato nell’immagine sottostante.
Esempio di template differente dalla famiglia llama
Come si vede dall’immagine soprastante il template del prompt del modello è il seguente:
{{ if .System }}<|im_start|>system
{ }<|im_end|>{ }<|im_start|>user
{ }<|im_end|>
<|im_start|>assistant
Anche se sembra strano è facilmente comprensibile: alla voce { }
va sostituito il testo del prompt di sistema e alla voce { }
la domanda che si vuole inviare all’LLM.
4.3 Utilizzo del formato RAW ed AUTO in Rivet per modelli differenti dalla famiglia llama
Di seguito vedi un esempio di prompt modificato. Come si vede nell’immagine sottostante, infatti, ho impostato il “Prompt” in RAW ed aggiunto un nodo con il prompt dell’LLM.
Esempio di prompt usando il formato RAW
Segnalo che puoi anche sempre provare la soluzione automatica, scegliendo l’opzione auto. Nell’immagine sottostante ti mostro un risultato ottimo con tale opzione.
Esempio di utilizzo del parametro AUTO
In conclusione
Spero che questo articolo ti abbia dato un’idea complessiva delle basi di Rivet e, soprattutto, di come usarlo in combinazione con Ollama.
Come sempre, se ti è piaciuto quel che hai letto o visto e non l’hai già fatto, ti suggerisco di iscriverti alla mia newsletter. Ti avvertirò dei nuovi articoli che pubblico (oltre ai podcast e video su YouTube) e, mensilmente, ti segnalerò articoli che ho raccolto nel corso del mese ed ho ritenuto interessanti.