Nel corso di questa guida abbiamo parlato di Shell GPT. Una libreria che consente di generare codice e comandi da Terminale Linux grazie all'interazione con le API di OpenAI. Queste ultime permettono infatti di connettersi al modello generativo GPT e di interrogarlo come se si stesse colloquiando con ChatGPT. In questa parte della nostra trattazione introdurremo invece un'alternativa, Shell Genie, che funziona in modo simile ma con alcune funzionalità e caratteristiche differenti.
Cos'è Shell Genie
Shell Genie è un progetto Open Source scritto in linguaggio Python il cui codice è ospitato in un repository su GitHub. Si tratta sostanzialmente di un tool da linea di comando che permette di chattare con il Terminale. Anche se concepito nativamente per le interazioni in lingua inglese, esso funziona egregiamente anche in Italiano.
Grazie a Shell Genie si possono inviare richieste inerenti i comandi da Shell, ad esempio: "Crea una cartella chiamata HTMLIT". Contestualmente è possibile visualizzare la sintassi del comando generato in risposta all'input, consultarne una descrizione e decidere se eseguirlo o meno.
Tra i suoi principali vantaggi vi è anche il fatto che esso può funzionare sia tramite le API di OpenAI (engine gpt3.5-turbo) che collegandosi al back-end free-genie. Le prime vengono fornite da una grande azienda e, almeno in teoria, dovrebbero essere più stabili. L'utilizzo delle API di OpenAI non è però gratuito e tutti i token consumati utilizzando Shell Genie vengono scalati dal credito disponibile.
free-genie
è invece offerto dallo stesso sviluppatore di Shell Genie con lo scopo di migliorare il proprio modello generativo. Questo significa che potrebbe non essere sempre disponibile né esente da instabilità e latenze. Personalmente ho testato il progetto con quest'ultimo senza registrare comportamenti anomali o ritardi rilevanti nei tempi di risposta.
Installare Shell Genie
Per l'installazione di Shell Genie abbiamo bisogno di un ambiente dotato di Python 3.10 o versione superiore. Per questo motivo controlliamo innanzitutto la release del linguaggio presente nel nostro sistema:
python3 --version
È possibile integrarlo nel sistema tramite pip avendo cura di attivare un ambiente virtuale isolato tramite venv, come fatto nel caso del nostro articolo su Shell GPT, per evitare conflitti tra dipendenze.
Per variare approccio, nel caso di questa lezione, che mostra un'installazione operata su Linux Mint, è stata preferita l'alternativa rappresentata da pipx
. Esso consente infatti di installare e eseguire applicazioni Python in ambienti isolati in modo simile a venv
.
Procediamo quindi con l'installazione di pipx
(tramite pip
) attraverso l'istruzione:
python3 -m pip install --user pipx
Fatto questo si deve lanciare il comando:
python3 -m pipx ensurepath
per registrare la directory dove pipx
archivia le applicazioni nella variabile d'ambiente PATH
. Quest'ultima infatti contiene la lista delle directory utilizzate per reperire i comandi inviati da Terminale.
Una volta completata l'installazione di pipx
si può quindi procedere con quella di Shell Genie digitando il comando proposto di seguito:
pipx install shell-genie
Inizializzare Shell Genie
Per poter utilizzare Shell Genie lo dobbiamo innanzitutto inizializzare tramite l'istruzione:
shell-genie init
Fatto questo il sistema richiede l'engine, o back-end, da utilizzare proponendo due scelte tra openai-gpt3.5-turbo
e free-genie
. Come anticipato, nel nostro caso abbiamo optato per il secondo:
Questo passaggio è particolarmente importante perché, una volta selezionato il back-end, il sistema ci avverte che le informazioni come i comandi richiesti a Shell Genie, il sistema operativo utilizzato e la versione corrente della Shell vengono impiegate per il miglioramento del modello generativo. Volendo proseguire non si deve fare altro che premere su "y", "n" corrisponde invece ad un rifiuto delle condizioni d'uso.
Come mostrato nell'immagine precedente, Shell Genie prova ad identificare l'OS in cui è installato, numero di versione compreso. Ne chiede quindi conferma all'utente per poi salvare questo dato insieme agli altri raccolti in questo fase in un file di configurazione in formato JSON chiamato config.json
.
Utilizzare Shell Genie per eseguire comandi
Ora che Shell Genie è stato inizializzato è possibile interloquire con esso ponendo delle richieste. La sintassi delle query si basa sul comando shell-genie ask
seguito dal prompt che si desidera formulare delimitato tramite doppi apici. Ad esempio:
shell-genie ask "Trova tutti i file zip più grandi di 1MB"
Nell'esempio raffigurato dall'immagine proposta di seguito abbiamo chiesto a Shell Genie di elencare tutti i file e le cartelle presenti nella directory corrente:
Si noti come per tutta risposta il sistema non abbia risposto fornendoci l'elenco richiesto ma il comando per ottenerlo: ls
. Il compito di lanciare o meno il comando indicato spetta infatti all'utilizzatore: premendo "y" esso viene eseguito, con "n" Shell Genie rimane in attesa di nuove istruzioni o del termine della sessione in corso. Optando per l'esecuzione del comando si dovrebbe ottenere un risultato come il seguente:
Una volta che il Terminale ha generato l'output atteso Shell Genie richiede un feedback per sapere se la risposta fornita dal suo back-end è stata corretta.
Shell Genie e descrizioni dei comandi
Un'ulteriore opzione di Shell Genie è data dal parametro --explain
, da digitare subito dopo di un prompt. Grazie ad esso il sistema fornisce una descrizione del comando da Terminale che deve essere utilizzato per soddisfare la richiesta dell'utilizzatore. Se ad esempio volessimo usare Shell Genie per creare una nuova cartella e conoscere il funzionamento del comando necessario a questo scopo potremmo digitare quanto segue:
shell-genie ask "Crea una cartella chiamata Genie" --explain
Dopo l'elaborazione della richiesta, il Terminale propone il comando mkdir Genie
e spiega quali sono gli effetti della sua esecuzione. Fatto questo Shell Genie ci chiede se vogliamo procedere con l'istruzione descritta in precedenza e, in caso di risposta affermativa, determina l'esecuzione del comando e avvia la richiesta del feedback. Un semplice controllo sull'effettiva creazione della nuova cartella è sufficiente per esprimere un feedback positivo.
Shell Genie supporta le richieste riguardanti comandi anche molto più articolati di quelli analizzati fino ad ora. Ciò appare evidente dall'immagine seguente, dove risulta chiaro che il sistema è stato in grado di fornirci l'istruzione necessaria per visualizzare le cartelle create nel corso dell'ultimo quarto d'ora.
Conclusioni
Shell Genie è un progetto Open Source che consente di chattare con il Terminale di Linux richiedendo comandi tramite dei semplici input colloquiali. Il sistema è inoltre in grado di descrivere i comandi stessi e di eseguirli. Uno dei suoi vantaggi riguarda il fatto che esso può essere utilizzato sia con le API di OpenAI che, gratuitamente, tramite il back-end free-genie
.