Vai al contenuto principale

Flowise AI: una guida con progetto demo

Impara a creare un agente AI che risponde alle domande basandosi su un dataset CSV con Flowise, uno strumento low-code basato su workflow.
· 12 min leggi

Scopri con l'IA

In questo articolo ti spiego passo dopo passo come usare Flowise per creare un agente AI in grado di rispondere a domande basandosi su un dataset CSV.

Flowise è uno strumento utile per chi vuole costruire agenti AI senza perdersi in codice complesso. Adotta un approccio low-code e ci permette di concentrarci più sul compito da svolgere che sui dettagli tecnici.

Di recente ho visto un aumento di strumenti pensati per creare agenti AI. Sono diventati più accessibili e facili da usare, consentendo a chiunque di sviluppare sistemi intelligenti senza grandi competenze tecniche. Se vuoi esplorare altri strumenti, dai un'occhiata anche a questi tutorial:

Che cos'è Flowise?

Flowise è uno strumento progettato per aiutarci a creare agenti AI tramite un'interfaccia semplice di drag-and-drop. Funziona permettendoci di collegare diversi blocchi, che rappresentano varie funzioni, per costruire un workflow personalizzato. Ogni blocco può essere configurato per eseguire un'azione specifica.

Per esempio, esistono blocchi chiamati LLM che servono a inviare un messaggio a un large language model. Ci sono anche blocchi funzione che ci permettono di eseguire funzioni JavaScript personalizzate, abilitando operazioni ancora più su misura.

Collegando questi blocchi tra loro, le informazioni scorrono da un blocco al successivo, elaborando e trasformando i dati passo dopo passo. Questo approccio modulare rende facile costruire agenti AI senza una profonda conoscenza di programmazione, perché possiamo concentrarci sulla progettazione del workflow e sulla configurazione delle azioni necessarie.

Creare un agente AI da data analyst con Flowise

Vediamo come creare un agente AI da data analyst usando Flowise. Questa guida copre la registrazione a Flowise, la costruzione di un workflow personalizzato e l'uso di vari blocchi per creare un agente interattivo in grado di analizzare dataset.

Passo 1: Crea un account su Flowise

Inizia visitando questa pagina di registrazione a Flowise e creando un account. Compila i dati richiesti e segui le istruzioni inviate via email per verificare e attivare l'account.

Passo 2: Configurazione del database

Ora che il nostro account Flowise è pronto, è il momento di configurare il database che useremo. Ci serve un database dove archiviare i dati che vogliamo analizzare.

Useremo SingleStore, un provider SQL popolare e facile da usare, per gestire i nostri dati. Segui questi passaggi:

  1. Vai sul sito di SingleStore.
  2. Registrati per un nuovo account su SingleStore. 
  3. Con un account SingleStore attivo, il passo successivo è caricare il dataset con cui lavoreremo. In questo esempio usiamo un dataset sulle abitudini social dei/studenti, disponibile su Kaggle. Assicurati di scaricare il file del dataset da Kaggle e caricarlo su SingleStore.

Caricamento di un file in SingleStore

  1. Una volta caricato il dataset, SingleStore genererà automaticamente una tabella del database. Questa tabella sarà la base della nostra analisi, rendendo le informazioni pronte per l'interazione con l'agente AI su Flowise.

Passo 3: Vai alla sezione chatflows

Dopo l'accesso, vai alla dashboard e trova la sezione "Chatflows". Clicca su "Add New" per iniziare a creare un nuovo workflow.

Creazione di un nuovo chatflow in Flowise

Passo 4: Crea una funzione personalizzata per caricare le informazioni sulla tabella

In questo passaggio scriviamo una funzione personalizzata per recuperare informazioni sulla tabella, come descrizione e nomi delle colonne. Questi dati sono fondamentali perché il nostro agente AI capisca la struttura del dataset su cui eseguirà le query.

  1. Crea un blocco funzione personalizzata.

Aggiunta di un blocco funzione personalizzata

  1. Incolla il seguente codice nell'editor del blocco funzione:
const mysql = require('mysql2/promise');

const tableName = $tableName;
const tableDescription = $tableDescription;
const connectionUrl = "<PASTE_YOUR_CONNECTION_STRING_HERE>" 

async function main() {
  try {
    const pool = mysql.createPool(connectionUrl);
    const q = 
    DESCRIBE ${tableName};
    ;
    const [rows] = await pool.query(q);
    const fields = rows.map((row) => ${row.Field} of type ${row.Type}).join("\n");
    const tableInformation = Table name: ${tableName}\nTable description:\n${tableDescription.trim()}\nColumns:\n${fields.trim()};
    return tableInformation;
  } catch(error) {
    return String(error);
  }  
}

return main();

All'inizio della funzione, dobbiamo impostare il valore di connectionUrl. Lo trovi su SingleStore, nella scheda Deployments.

Recupero delle informazioni di connessione al database

La stringa di connessione è simile a questa:

françois-19ecc:<françois-19ecc Password>@svc-3482219c-a389-4079-b18b-d50662524e8a-shared-dml.aws-virginia-6.svc.SingleStore.com:3333/db_franois_88ec0

La prima parte, françois-19ecc nel mio caso, è lo username. Subito dopo c'è un segnaposto per la password, <françois-19ecc Password>, che dobbiamo sostituire.

Questa funzione si connette al database SingleStore e ottiene le informazioni sulle colonne della tabella. Ha due input:

  • tableName: il nome della tabella
  • tableDescription: la descrizione della tabella.

Vanno configurati cliccando il pulsante “Input Variables” nel nodo di codice personalizzato. Le variabili sono accessibili nel codice anteponendo un $ al loro nome.

Accesso alle variabili.

Nel mio caso, la tabella è stata chiamata dataset quando è stata creata su SingleStore. Usa il nome impostato quando hai caricato il file CSV.

Verifica del nome della tabella in SingleStore.

Passo 5: Crea un nodo prompt template

Qui prepariamo le istruzioni che guideranno il nostro agente AI. Collega questo nodo alla tua funzione personalizzata.

  1. Crea un nodo prompt template.

Creazione di un nodo prompt template in Flowise

  1. Inserisci questo prompt:
Based on the SQL table information and the user's questions, return a SQL query that answers that question.
TABLE INFORMATION: {tableInformation}
QUESTION: {question}

Collegamento della funzione personalizzata al prompt template in Flowise

Il prompt ha due segnaposto: {tableInformation} e {question}. La question è il prompt inviato dall'utente, mentre tableInformation è l'output della funzione definita al passaggio precedente.

Questi valori vanno configurati cliccando il pulsante “Format Prompt Values” nel nodo del prompt template.

Configurazione delle variabili del prompt in Flowise

Passo 6: Collega a un blocco LLM chain

Ora colleghiamo il nodo prompt template a un blocco LLM chain, che interpreterà il prompt e genererà da esso una query SQL. Ecco i passaggi da seguire:

  1. Aggiungi un blocco LLM chain.
  2. Includi un blocco modello configurato per usare OpenAI e collegalo al blocco LLM chain all'input “Language Model”.
  3. Per configurare il modello OpenAI, dovrai impostare una chiave API di OpenAI. Se non ne hai una, puoi crearla qui.
  4. Collega il blocco prompt template all'input “Prompt”.

Configurazione del nodo LLM Chain in Flowise

Passo 7: Usa un blocco set variable

Per salvare la query SQL generata e riutilizzarla, crea un blocco set variable e collegalo all'output del blocco LLM chain.

Salvataggio di valori usando il blocco set variable in Flowise

Passo 8: Esegui la query SQL

Invia la query SQL a un nuovo blocco di codice personalizzato per eseguirla sul database.

  1. Crea un altro blocco di codice personalizzato.
  2. Inserisci il seguente codice:
const mysql = require('mysql2/promise');

const connectionUrl = "<PASTE_THE_SAME_URL_USED_BEFORE>";

function formatQuery() {
  // This function is used to clean the query provided by ChatGPT 
  // by removing markdown quotes
  const q = $query;
  let lines = q.trim().split(/\r\n|\r|\n/);
  if(lines[0].startsWith("")) {
    lines = lines.slice(1, lines.length - 1);
  }
  return lines.join("\n").trim()
}

const q = formatQuery();
try {
  const pool = mysql.createPool(connectionUrl);
  const [rows] = await pool.query(q);
  return rows;
} catch(error) {
  return Query: ${q}\nError:${String(error)}`
}

Ricordati di impostare il valore di connectionUrl. È lo stesso usato prima.

Questa funzione ha un input, cioè la query che vogliamo eseguire, a cui si accede nel codice usando $query.  

Accesso alle variabili in un nodo di funzione personalizzata

Passo 9: Crea un altro prompt template

Questo template serve a formattare la risposta che l'agente AI mostrerà all'utente in base ai risultati della query.

  1. Crea un nuovo prompt template.
  2. Usa questo prompt:
Based on the question and the query result, provide an answer to the user's question. Always show the query to the user.
QUERY: {query}
QUERY RESULT: {queryResult}
QUESTION: {question}

Questo prompt ha tre segnaposto:

  • query: la query SQL generata dall'LLM, ottenuta collegando il nodo delle variabili.
  • queryResult: il risultato della query, calcolato dal precedente nodo di funzione personalizzata.
  • question: il prompt iniziale dell'utente.

Collegamenti al secondo prompt template per generare la query SQL in Flowise

Passo 10: Blocco LLM chain finale

Infine, collega questo prompt template a un nuovo blocco LLM chain, che userà il prompt per formulare la risposta. Puoi collegarlo allo stesso blocco modello OpenAI usato prima.

Ecco il flusso finale dell'agente:

Il flusso finale in Flowise

Completati questi passaggi, il nostro agente AI è pronto. Può ricevere domande, generare query SQL per recuperare i dati rilevanti e fornire risposte chiare e concise.

Chattare con l'agente Data Analyst

L'agente è ora pronto all'uso. Per chattare, fai clic sul pulsante viola in alto a destra:

Chattare con l'agente AI

Proviamolo chiedendo quante risposte ha ricevuto il sondaggio:

Esempio di agente AI che usa Flowise

Nota che l'agente include la query nella risposta per via di come è stato progettato l'ultimo prompt. Chiediamo qualche statistica sui dati:

Esempio di agente AI che usa Flowise

Ecco un altro esempio:

Esempio di agente AI che usa Flowise

Le mie impressioni su Flowise

Dopo aver provato diversi strumenti per creare agenti AI, la mia esperienza con Flowise è stata in parte frustrante. Un problema ricorrente è stato cancellare per sbaglio alcune configurazioni di variabili, cosa che portava l'agente a comportarsi in modo anomalo senza una chiara spiegazione del perché. Questo rendeva spesso la diagnosi dei problemi piuttosto tediosa.

Inoltre, Flowise non ha un punto di partenza chiaro per i flussi degli agenti, il che rende difficile seguire e capire come funziona l'agente. Può risultare particolarmente scoraggiante per chi è alle prime armi nella costruzione di sistemi AI. Flowise, inoltre, è carente nella visualizzazione semplice dei risultati intermedi o nel testare i nodi in isolamento. Questo rende complicato individuare i problemi o perfezionare il workflow in modo efficace.

Ho anche trovato difficile vedere a colpo d'occhio le configurazioni dei nodi. Ad esempio, i nodi di codice personalizzato che abbiamo usato definiscono variabili di input, ma non è visibile che sia così. Bisogna cliccare su quella sezione del nodo per vederle. Questo rende complicato comprendere il flusso solo guardandolo.

Conclusione

Pur offrendo un'interfaccia low-code promettente per creare agenti AI, Flowise presenta alcuni problemi di usabilità che lo rendono più difficile da usare rispetto a strumenti simili, soprattutto per chi cerca un'esperienza più fluida e intuitiva. Nonostante queste difficoltà, il concept di Flowise ha potenziale e, con alcuni miglioramenti, potrebbe diventare un ottimo strumento per costruire soluzioni AI.

François Aubry

Autore

François Aubry

Ingegnere full‑stack e fondatore di CheapGPT. Insegnare è sempre stata la mia passione. Fin dai primi anni da studente, cercavo con entusiasmo occasioni per fare da tutor e aiutare altri studenti. Questa passione mi ha portato a intraprendere un dottorato, durante il quale ho anche svolto il ruolo di assistente alla didattica a supporto del mio percorso accademico. In quegli anni ho trovato enorme soddisfazione nell'ambiente tradizionale dell'aula, creando connessioni e facilitando l'apprendimento. Con l'avvento delle piattaforme di apprendimento online, però, ho riconosciuto il potenziale trasformativo dell'educazione digitale. Di fatto, ho partecipato attivamente allo sviluppo di una di queste piattaforme nella nostra università. Sono profondamente impegnato a integrare i principi dell'insegnamento tradizionale con metodologie digitali innovative. La mia passione è creare corsi non solo coinvolgenti e informativi, ma anche accessibili a chi apprende in questa era digitale.

Argomenti

Correlato