Last chance! 50% off DataCamp Premium
Sale ends in
Dify è una piattaforma intuitiva che ti aiuta a creare applicazioni AI con poco o nessun codice. Funziona trascinando e rilasciando blocchi con funzioni diverse. Le informazioni scorrono tra i blocchi e vengono elaborate e combinate per generare risposte.
In questo articolo, spiegherò i fondamenti di Dify guidandoti passo dopo passo nella creazione di un agente di viaggio AI.
Teniamo i nostri lettori aggiornati sulle ultime novità dell'AI con The Median, la nostra newsletter gratuita del venerdì che spiega le notizie chiave della settimana. Iscriviti e resta sul pezzo in pochi minuti a settimana:
Dify è una piattaforma progettata per semplificare lo sviluppo di applicazioni AI senza richiedere competenze di programmazione approfondite. Offre un ambiente low-code e user-friendly in cui puoi creare app trascinando e rilasciando diversi componenti.
Immagina Dify come una cassetta degli attrezzi digitale piena di blocchi pronti all'uso che puoi assemblare per creare software funzionante. Questo approccio rende la tecnologia più accessibile, permettendo anche a chi ha poca esperienza di programmazione di dare vita alle proprie idee.
Ogni tipo di blocco ha degli input e li trasforma in output diversi, a seconda del tipo di blocco. Le informazioni vengono passate e trasformate da un blocco all'altro, producendo il risultato finale.
Abbiamo due modi per usare Dify:
In questo tutorial, usiamo la versione cloud. La versione cloud di Dify offre un piano gratuito, quindi puoi seguire il tutorial senza abbonarti a un piano a pagamento.
Se ti interessa l'installazione locale, il modo più semplice è:
Dify offre diversi tipi di app. Ci concentreremo sulla creazione di un'app Chatflow, cioè un flusso AI in cui gli utenti interagiscono con l'agente tramite un'interfaccia di chat.
Per creare una nuova app Chatflow, fai prima clic su "Create from blank" e seleziona l'opzione "Chatflow".

Per creare il flusso, impostiamo un nome e poi clicchiamo sul pulsante “Create”:

Questo creerà il seguente flusso predefinito:

Questo flusso ha tre blocchi:
gpt-4.Questi tre nodi insieme creano di fatto una chat AI simile a ChatGPT. Prima di eseguire l'app, dobbiamo installare e configurare il plugin OpenAI.
Per installare il plugin OpenAI, procedi così:



Poi dobbiamo configurare la chiave API di OpenAI. Se non ne hai ancora una, creala qui. Tieni presente che l'uso dell'API di OpenAI non è gratuito, quindi dovrai associare un metodo di pagamento alla chiave.
Una volta ottenuta la chiave, possiamo configurarla così:






Ora possiamo eseguire l'app cliccando il pulsante di anteprima:

Al momento non è molto interessante perché è solo un chatbot AI. Ricorda che non farà nulla finché l'utente non invia un messaggio.

Dify permette di memorizzare lo stato dell'applicazione assegnando valori a variabili accessibili a tutti i blocchi.
Per creare una variabile, clicca il pulsante delle variabili:

Creiamo una variabile per memorizzare il nome dell'utente:

Questa configurazione ha creato una variabile chiamata name che memorizza una stringa (testo). Abbiamo lasciato il valore predefinito vuoto, quindi inizialmente la variabile sarà una stringa vuota.
Ci sono diversi modi per popolarla, ma il più comune è usare un blocco AI per ricavarla automaticamente dalla conversazione. Lo vedremo tra poco. Prima impariamo come controllare il valore di una variabile per gestire il flusso dell'applicazione.
Per verificare il valore di una variabile, possiamo usare un blocco IF/ELSE. Questo blocco serve a eseguire azioni diverse a seconda del valore di una variabile.
Per aggiungere un nuovo blocco, clicca il pulsante "+" in basso:

Poi seleziona il blocco che vuoi aggiungere. In questo caso, selezioniamo "IF/ELSE":

Poi clicchiamo sul blocco per configurarlo selezionando la variabile name che abbiamo creato prima.
Per provarlo, aggiungiamo due blocchi Answer. Questi blocchi servono per mostrare un messaggio in chat. Ne colleghiamo uno all'uscita IF (che viene eseguita quando la condizione è vera) e l'altro all'uscita ELSE (che viene eseguita quando la condizione è falsa).

Per l'uscita IF, ho impostato la stringa "Sorry, I don't know your name." mentre per l'ELSE ho impostato "Hello, {name}!" Possiamo usare le parentesi graffe per inserire una variabile in una stringa. Questo sarà utile anche dopo per costruire i prompt.
Possiamo provare questo Chatflow cliccando il pulsante "Preview". Nota che un Chatflow viene attivato da un messaggio dell'utente, quindi dobbiamo prima inviare un messaggio, ad esempio "Hi". Ecco i risultati a seconda che il nome sia impostato o meno (nel secondo esempio l'ho impostato manualmente nell'interfaccia delle variabili):

Possiamo usare l'AI per identificare ed estrarre i valori delle variabili tramite un blocco Parameter Extractor. Questo blocco usa un LLM per estrarre informazioni dalla conversazione.

Aggiungiamo prima un blocco Parameter Extractor collegato al ramo IF. Ecco la configurazione del blocco:

INPUT VARIABLE è impostata su sys.query, che corrisponde al messaggio dell'utente. Significa che il blocco Parameter Extractor proverà a estrarre il valore dal messaggio dell'utente.EXTRACTION PARAMETERS definiamo le informazioni che stiamo cercando di estrarre. Purtroppo qui non possiamo specificare direttamente una variabile, quindi dobbiamo ridefinire quell'informazione cliccando il pulsante “+”.
INSTRUCTION è il prompt che guida l'LLM su cosa fare.name.
Assicurati di assegnare il name estratto alla variabile name.

Dopo questo passaggio, la variabile name potrebbe essere ancora non definita perché l'utente potrebbe non aver fornito il nome. Quindi aggiungiamo un altro blocco IF/ELSE per controllare. Se il nome è impostato, salutiamo l'utente. Altrimenti, lo chiediamo.

Ecco un esempio di interazione:

Questo flusso illustra i fondamenti dei workflow in Dify. Indipendentemente dal messaggio dell'utente, se il nome non è definito, prova a estrarlo dal messaggio. Se fallisce, lo chiede. Altrimenti, saluta semplicemente l'utente per nome.
A questo punto non c'è alcun blocco LLM, quindi l'agente non farà altro.
I blocchi Code possono essere usati per eseguire codice Python personalizzato. Modifichiamo il flusso precedente per estrarre la località dell'utente invece del nome. Poi useremo un blocco Code per fare una richiesta a un'API meteo e inviare all'utente le previsioni.
location.location invece di name.location.Dopo questi passaggi, il flusso dovrebbe apparire così:

Ecco un'interazione di esempio:

Il passo successivo è aggiungere un blocco Code dopo aver ottenuto la località. Questo blocco effettua una richiesta alla OpenWeather API per chiedere le previsioni meteo per quella località.
Questa API è gratuita da usare, a patto di non effettuare troppe richieste.
Sostituisci il secondo blocco Answer con un blocco Code.

Configuralo per ricevere un singolo parametro con il valore di location.

Per il codice Python, ecco come possiamo usare il pacchetto requests per ottenere il meteo dall'OpenWeather API:
import requests
API_KEY = "PASTE_YOUR_API_KEY_HERE"
def main(location: str) -> str:
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"q": location,
"appid": API_KEY,
"units": "metric",
}
response = requests.get(base_url, params=params)
data = response.json()
if response.status_code == 200:
weather_desc = data["weather"][0]["description"]
temp = data["main"]["temp"]
return {
"result": f"Current weather in {location}: {weather_desc}, Temperature: {temp}°C"
}
else:
return {
"result": "Could not retrieve weather data",
}
Infine, colleghiamo l'output del nodo Code a un nodo Answer per mostrarlo all'utente.

Ora abbiamo un Chatflow che può dirci le previsioni del tempo:

Ora abbiamo tutti gli strumenti per costruire un agente di viaggio AI. Le possibilità sono infinite, ma per non complicare troppo questo tutorial lo terremo semplice.
L'agente si concentrerà sulla pianificazione di un singolo giorno di viaggio. Inizierà raccogliendo la località dell'utente e i tipi di attività che gli piace fare. Per farlo, usiamo due variabili:
location: Memorizza la località in cui l'utente sta viaggiando.activities: Un array di stringhe che memorizza le attività che l'utente vuole fare.
Ecco come possiamo creare un flusso per estrarre entrambe le variabili:

In questo esempio, iniziamo con un blocco di estrazione dei parametri per estrarre sia la location sia l'elenco di activities.

Poi usiamo blocchi IF/ELSE per verificare se ciascuno di questi parametri è stato estratto e aggiornare le variabili, se lo sono. A differenza dei nostri esempi precedenti, questo permette all'utente di aggiornare i valori.
Al termine dell'estrazione dei valori e dell'assegnazione delle variabili, aggiungiamo un altro blocco IF/ELSE per controllare se mancano valori. Se manca qualcosa, chiediamo esplicitamente all'utente di fornirlo.

Se sia location che activities sono definite, usiamo il blocco Code creato prima per ottenere il meteo della località indicata. Infine, forniamo meteo, località e attività a un blocco LLM per pianificare la giornata dell'utente.

Il blocco LLM è configurato con un prompt di sistema che dice al modello cosa fare. Località, attività e meteo vengono inseriti al suo interno. Ecco la parte finale del flusso:

Ecco un'interazione di esempio con l'agente:

Dalla risposta vediamo che, grazie al nodo Code, l'agente può fornire il meteo all'utente e tenerne conto nella pianificazione delle attività.
Per come è stato impostato il flusso, se l'utente fornisce subito le informazioni nel primo messaggio, l'agente proporrà direttamente un piano per la giornata.

Potresti notare che l'agente ha iniziato salutando l'utente con un messaggio:

Per abilitarlo, dobbiamo attivare la funzione Conversation Opener.


In questo tutorial abbiamo imparato i blocchi fondamentali di Dify. Un aspetto che non abbiamo trattato sono gli strumenti.
In Dify, gli strumenti sono potenti estensioni che permettono ai tuoi agenti AI di interagire con il mondo esterno oltre i limiti di un modello linguistico. Mentre un LLM può ragionare e generare risposte in base ai suoi dati di addestramento e al contesto del prompt, non ha accesso in tempo reale a dati live o servizi esterni.
Gli strumenti risolvono questo problema consentendo al tuo agente di effettuare chiamate API, interrogare database, eseguire calcoli, recuperare documenti e altro ancora, fungendo di fatto da ponte tra la tua AI e le fonti di informazione esterne.

Puoi configurare gli strumenti in Dify tramite l'interfaccia visiva della piattaforma specificando il tipo di strumento (come richieste HTTP, interpreti di codice o plugin di terze parti), lo schema di input/output e gli eventuali requisiti di autenticazione. Una volta configurati, questi strumenti possono essere utilizzati nel flusso del tuo agente tramite i blocchi Tool, che ti consentono di passare dati da e verso lo strumento e di fornire i risultati ai nodi LLM o ad altri blocchi logici.

Questo rende i tuoi agenti non solo più intelligenti, ma anche orientati all'azione, in grado di fornire risposte aggiornate e pertinenti al contesto interagendo con servizi reali.
Nel nostro esempio, abbiamo usato un blocco code per effettuare una richiesta all'API meteo. Un'alternativa sarebbe stata creare uno strumento e fornirlo all'LLM.
In questo tutorial, abbiamo esplorato alcuni dei blocchi fondamentali di cui avrai bisogno per iniziare a lavorare con Dify. Tuttavia, Dify offre molte altre funzionalità e capacità da scoprire.
Per consolidare la comprensione, un ottimo esercizio sarebbe migliorare l'agente di viaggio che abbiamo creato. Valuta di aggiungere funzionalità come la ricerca su internet per trovare attività locali online, così da arricchire le capacità dell'agente e fornire suggerimenti più dinamici.
Se ti interessano i builder di agenti AI come Dify, ti consiglio di consultare i nostri altri tutorial per continuare a imparare:
Impara l'AI con questi corsi!
{count, plural, one {Corso} other {Corsi}}
{count, plural, one {Programma} other {Programmi}}
{count, plural, one {Corso} other {Corsi}}

{count, plural, one {blog} other {blogs}}
Abid Ali Awan
15 min

{count, plural, one {blog} other {blogs}}
Abid Ali Awan
10 min
{count, plural, one {blog} other {blogs}}
Tim Lu
12 min