Come creare una chat AI da linea di comando con Node.js e Google Gemini

La tecnologia è in continua evoluzione e progresso, e raramente questo è stato più evidente che dal lancio di ChatGPT nel novembre 2022.

Da allora, l’Intelligenza Artificiale ha dominato il settore tecnologico, con alcune aziende che hanno creato servizi simili a ChatGPT, mentre molte altre hanno sfruttato la potenza dell’apprendimento automatico e dei grandi modelli linguistici per migliorare i loro prodotti.

È un momento emozionante, ma può anche essere un po’ intimidatorio per uno sviluppatore. L’IA ha un potenziale enorme ed è chiaramente destinata ad avere un ruolo chiave nel futuro della tecnologia. Può sembrare scoraggiante doverla aggiungere alla già lunga lista di cose nuove da imparare come programmatore.

Così ho deciso di fare un po’ di lavoro preliminare esplorando un LLM (Large Language Model), in questo caso Google Gemini, e ho messo insieme una semplice applicazione che ti permette di chattare con un’IA tramite linea di comando in un’app Node. Google ha un’ampia documentazione per la sua API Gemini, e da qui si aprono molte possibilità di sviluppo, ma questo dovrebbe aiutarti a iniziare!

 

Configurazione del progetto

Per prima cosa, è necessario installare un paio di pacchetti. Apri una nuova directory ed esegui

npm init per creare un file package.json

nel tuo progetto. Vanno bene le opzioni predefinite.

Quindi, dovrai installare alcuni pacchetti. Questo comando farà al caso tuo:

npm i @google/generative-ai dotenv readline

Una volta ottenuti i pacchetti necessari, dovrai consultare la documentazione di Gemini e creare una chiave API.

Dopo aver ottenuto la chiave, crea un file .env nella root del tuo progetto e salva la chiave come API_KEY

API_KEY=[KEY]

Assicurati di non includere le parentesi quadre.

 

Costruzione dell’app

Ora siamo pronti a scrivere il codice! Crea un file main.js nel tuo progetto e copia il seguente codice al suo interno:

const { GoogleGenerativeAI } = require("@google/generative-ai"); 
const readline = require('readline');
const dotenv = require('dotenv');
dotenv.config();
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
let model;
let chat;
function connectToGemini() {
model = genAI.getGenerativeModel({ model: "gemini-pro"});
chat = model.startChat({});
}
connectToGemini();

Questo codice crea un’istanza del modulo GoogleGenerativeAI, gestendo tutte le nostre connessioni all’API Gemini. Successivamente, importiamo readline, che useremo per richiedere l’input di testo da linea di comando. Infine, dotenv ci permette di leggere la tua API_KEY dal file di ambiente.

A questo punto, creiamo una nuova istanza dell’oggetto GoogleGenerativeAI usando la nostra chiave API e istanziamo un paio di variabili, che useremo tra poco. Ora passiamo a creare l’effettiva connessione!

Aggiungi questo codice sotto quello che abbiamo già:

async function sendMessage(msg) {
  const result = await chat.sendMessageStream(msg);
  let text = '';
  for await (const chunk of result.stream) {
    const chunkText = chunk.text();
    console.log(chunkText);
    text += chunkText;
  }
  askQuestion();
}
function askQuestion() {
rl.question('Inserisci il tuo prompt: ', (prompt) => {
if (prompt === 'exit') {
rl.close();
} else {
sendMessage(prompt);
}
});
}

Questo metodo prende una stringa msg in input e usa sendMessageStream per inviare il messaggio a Gemini, quindi attende una risposta. Usiamo sendMessageStream nello specifico per ridurre il tempo di attesa della risposta, poiché i messaggi arriveranno riga per riga con uno stream, invece di aspettare che l’intera risposta sia pronta.

 

A questo punto, prendiamo singoli blocchi dallo stream risultante e li logghiamo nella console. Stiamo anche memorizzando l’intera risposta nella variabile text.

L’ultima cosa che dobbiamo fare è modificare il metodo sendMessage per assicurarci che, una volta che Gemini ha risposto, l’applicazione chieda all’utente un altro input. 

 

Ora, quando il metodo ha finito di elaborare una risposta, chiederà automaticamente all’utente un altro prompt, permettendo alla conversazione di continuare!

Ecco come costruire una semplice app di chat usando Google Gemini con Node.js. Tutto ciò che resta da fare è eseguire node main.js e iniziare a chattare

Gabriele Ferrari

Via Cesare Costa,88
41123 – Modena
Nato il 10/06/1968
Tel. +39 3357682392
P.IVA 03615520362
E-mail: gabriele@gabrieleferrari.net

Web Designer, Digital Project Manager, Esperto di WordPress, Sviluppatore Web, Esperto Certificato di Google Ads, Social Media Manager e Graphic Designer attualmente lavora come libero professionista. Fornisce servizi quali consulenza, sviluppo di siti web, SEO e pubblicità online, marketing sui social media, grafica e sviluppo di app mobile per aziende e privati. Precedente esperienza come Web Project Manager e Social Marketing Manager in importanti agenzie web, nonché Family Banker e Team Manager nel settore dei giochi. Laureato presso la facoltà di Ingegneria Elettronica dell’Università di Bologna.