1. Cos'è un Agente AI e Come Funziona [0]

thumbnail Un agente AI combina un modello linguistico di grandi dimensioni (LLM) con la capacità di utilizzare strumenti esterni per recuperare informazioni in tempo reale, prendendo decisioni intelligenti su come rispondere alle richieste.

1.1. Definizione di Agente AI [1]

  1. Un agente AI è un sistema che integra un LLM con la capacità di chiamare strumenti esterni per ottenere dati in tempo reale, come le previsioni del tempo. [1]
  2. Questo permette all'agente di elaborare input in modo intelligente e decidere autonomamente se rispondere direttamente o utilizzare uno strumento. [7]
  3. Ad esempio, un agente meteo può recuperare dati aggiornati sul tempo, ma può anche rispondere a domande semplici come "2 + 2" senza bisogno di strumenti esterni. [8]
  4. L'LLM possiede una propria "mente", e il tool calling espande le sue capacità, trasformandolo in un assistente più potente. [11]

2. Creazione di un Agente Meteo AI da Zero [13]

thumbnail La costruzione di un agente AI comporta la configurazione del progetto, l'installazione delle dipendenze, l'inizializzazione del client OpenAI, la definizione di funzioni per il recupero dati e l'interazione con l'utente, e la configurazione degli strumenti che l'AI può utilizzare.

2.1. Configurazione del Progetto e delle Dipendenze [13]

  1. Il progetto inizia con la creazione di una cartella e l'inizializzazione di un nuovo progetto Node.js eseguendo npm init -y per generare un file package.json. [13]
  2. Viene creato un file index.js per contenere il codice principale dell'agente. [23]
  3. Sono necessarie le seguenti librerie Node.js:
    • dotenv per gestire le chiavi API in modo sicuro. [25]
    • axios per effettuare chiamate API esterne (tool calling). [25]
    • readline (integrato in Node.js) per acquisire input dall'utente tramite la riga di comando. [25]
  4. Le dipendenze vengono installate eseguendo npm install dotenv axios. [28]

2.2. Inizializzazione del Client OpenAI [32]

  1. Per interagire con OpenAI, è necessario inizializzare il client OpenAI passando la propria chiave API. [33]
  2. La chiave API OpenAI viene memorizzata in un file .env per motivi di sicurezza. [24]
  3. Le chiavi API possono essere generate accedendo alla piattaforma API di OpenAI, creando una nuova chiave segreta e copiandola. [38]
  4. È importante notare che l'utilizzo dell'API OpenAI non è gratuito e richiede un saldo disponibile. [55]

2.3. Definizione della Funzione per il Recupero Dati Meteo [57]

  1. Viene creata una funzione chiamata get_current_weather_data che accetta una location come parametro. [58]
  2. Questa funzione utilizza axios per effettuare una chiamata API a un servizio meteo esterno, recuperando i dati meteorologici per la località specificata. [59]
  3. È incluso un blocco catch per gestire eventuali errori durante la chiamata API e registrarli. [61]

2.4. Gestione dell'Interazione con l'Utente (Chat Loop) [63]

  1. Viene definita una funzione chat_loop che utilizza il modulo readline per acquisire l'input dell'utente dalla riga di comando. [63]
  2. Se l'input dell'utente, convertito in minuscolo, è "exit", il loop viene interrotto, viene stampato "goodbye" e la lettura da riga di comando viene chiusa. [67]
  3. In caso contrario, l'input dell'utente viene passato alla funzione run_conversation insieme alla cronologia delle conversazioni. [68]
  4. La risposta ricevuta dall'agente viene stampata come output dell'assistente e aggiunta alla cronologia della conversazione. [69]
  5. La cronologia della conversazione è un array che memorizza sia gli input dell'utente (role: user) sia le risposte dell'assistente (role: assistant). [71]
  6. In caso di errore durante l'elaborazione, viene visualizzato un messaggio di scuse e il chat_loop viene richiamato per continuare l'interazione. [75]

2.5. Funzione di Esecuzione della Conversazione con OpenAI [77]

  1. La funzione run_conversation riceve il messaggio dell'utente e la cronologia della conversazione. [77]
  2. Viene preparato un array di messaggi da inviare a OpenAI, includendo la cronologia e il nuovo input dell'utente con il ruolo di "user". [78]
  3. Viene definita una struttura per il tool calling, che è un array di oggetti, poiché possono esserci più strumenti disponibili. [80]
  4. Ogni strumento ha un type (funzione), un name (che deve corrispondere esattamente al nome della funzione JavaScript che esegue l'azione), una description (spiega all'AI quando usare lo strumento e cosa fa) e parameters (descrive gli argomenti richiesti dallo strumento, come la location per il meteo). [83]
  5. Viene effettuata una chiamata a openai.completions.create passando:
    • Il model (es. gpt-4o). [99]
    • I messages preparati in precedenza. [104]
    • Gli tools definiti. [105]
    • tool_choice: "auto" per permettere all'AI di decidere se e quale strumento chiamare. [106]
  6. Dopo la chiamata, si controlla se la risposta contiene tool_calls (ovvero, se l'AI ha deciso di usare uno strumento). [113]
  7. Se vengono rilevate tool_calls:
    • Si itera attraverso le chiamate allo strumento. [117]
    • Si verifica se il nome della funzione dello strumento corrisponde a get_current_weather_data. [119]
    • Viene eseguita la funzione JavaScript get_weather_data passando gli argomenti estratti dalla risposta dell'AI (es. la location, che potrebbe richiedere JSON.parse se è una stringa JSON). [123]
    • L'output dello strumento viene aggiunto alla cronologia dei messaggi come una risposta dell'assistente, includendo tool_call_id, tool, function_name e content (l'output dell'API meteo). [127]
    • Questa nuova sequenza di messaggi viene inviata nuovamente a OpenAI per consentire all'AI di formulare la risposta finale all'utente. [128]
    • Viene restituito il messaggio finale generato da OpenAI. [129]
  8. Se non ci sono tool_calls (l'AI risponde direttamente), viene restituito il messaggio originale della risposta di OpenAI. [130]
  9. In caso di errori durante l'interazione con OpenAI, viene registrato l'errore e restituito un messaggio di scuse all'utente. [136]
  10. Sia le risposte dirette che quelle derivanti dal tool calling vengono aggiunte alla cronologia della conversazione. [140]

2.6. Esecuzione e Test dell'Agente AI [144]

  1. Per eseguire lo script, viene aggiunto uno script dev nel package.json (node index.js). [145]
  2. Durante l'esecuzione, potrebbero verificarsi errori comuni come la necessità di specificare "type": "module" nel package.json se si utilizzano importazioni ES6, o errori di variabili non definite come RL se l'interfaccia readline non è stata creata correttamente. [152]
  3. Dopo aver corretto gli errori, l'agente viene testato con diverse domande:
    • "What is the weather in Delhi?" (Qual è il tempo a Delhi?) -> L'agente rileva la necessità di una chiamata allo strumento, esegue get_weather_data per Delhi e risponde con la temperatura attuale (es. 31°C). [173]
    • "What is 2 + 2?" (Quanto fa 2 + 2?) -> L'agente risponde direttamente "4" senza utilizzare strumenti, dimostrando la sua capacità decisionale. [182]
    • "And in Paris?" (E a Parigi?) -> L'agente recupera e fornisce la temperatura attuale a Parigi (es. 20°C). [184]
  4. Il codice sorgente completo è disponibile su GitHub per consentire ad altri di provare a creare i propri agenti AI. [188]

2.7. Riepilogo del Processo di Costruzione [193]

  1. Il processo inizia con la configurazione di un file .env per la chiave API OpenAI. [194]
  2. Segue l'inizializzazione del client OpenAI e la definizione di funzioni per le chiamate API (come il recupero dati meteo) all'interno di blocchi try-catch. [195]
  3. Viene creata un'interfaccia readline per gestire l'input dell'utente dalla riga di comando, passando l'input a una funzione che gestisce la conversazione e mantiene la cronologia. [197]
  4. Gli strumenti che l'AI può utilizzare vengono definiti con nome, descrizione e parametri. [198]
  5. L'AI viene chiamata due volte: la prima volta per decidere se rispondere direttamente o usare uno strumento, e la seconda volta (dopo l'esecuzione dello strumento, se necessario) per formulare la risposta finale all'utente. [199]
  6. La gestione degli errori è implementata per fornire feedback all'utente in caso di problemi. [201]

2.8. Risorse Aggiuntive e Conclusione [202]

  1. È possibile connettersi con l'autore per interviste simulate o discussioni tramite un link fornito (es. top.gg). [202]
  2. Il video incoraggia gli spettatori a mettere "mi piace" e iscriversi se hanno imparato qualcosa di nuovo. [204]