Vai al contenuto

Creare agenti AI di intelligenza artificiale/Meteorologo

Wikibooks, manuali e libri di testo liberi.
Indice del libro

Creazione dell'agente

[modifica | modifica sorgente]

Volendo creare un agente AI meteorologo che fornisca consigli su uscire o rimanere a casa per le condizioni climatiche, bisogna innnanzitutto creare un notebook Google Colab in cui installare la libreria litellm:

!pip install litellm

Poi bisogna importare l'API KEY generata, cliccando sull'immagine della chiave nella barra laterale di sinistra di Colab e abilitandola:

import os
from google.colab import userdata
api_key = userdata.get('GOOGLE_API_KEY')
os.environ['GOOGLE_API_KEY'] = api_key

Poi bisogna creare una funzione python per richiamare Google Gemini e ottenere la risposta tramite prompt programmatici, una funzione geocode che dato il nome di una città restituisce la sua latitudine e longitudine, che poi vengono passati al servizio esterno Open-Meteo che ritorna una stringa come soleggiato, piovoso ecc.:

import requests
from litellm import completion

def generate_response(messages: str) -> str:
    """Call LLM to get response"""
    response = completion(
        model="gemini/gemini-2.0-flash",
        messages=messages,
        max_tokens=1024
    )
    return response.choices[0].message.content

def geocode(city: str) -> tuple[float, float] | None:

    url = f"https://nominatim.openstreetmap.org/search"
    params = {"q": city, "format": "json", "limit": 1}
    resp = requests.get(url, params=params, headers={"User-Agent": "litellm-agent"})
    if resp.status_code != 200 or not resp.json():
        return None
    result = resp.json()[0]
    return float(result["lat"]), float(result["lon"])


def get_weather_open_meteo(lat: float, lon: float) -> str:
    url = (
        f"https://api.open-meteo.com/v1/forecast?"
        f"latitude={lat}&longitude={lon}"
        f"&current_weather=true"
    )
    resp = requests.get(url)
    if resp.status_code != 200:
        return "non disponibile"
    data = resp.json().get("current_weather", {})
    # Open-Meteo restituisce "weathercode": mappa secondo la documentazione
    code = data.get("weathercode", -1)
    # Mappa semplificata dei codici
    if code in [0]:
        return "soleggiato"
    elif code in [1, 2]:
        return "nuvoloso"
    elif code in [3, 45, 48]:
        return "nebbioso"
    elif code in [51, 53, 55, 61, 63, 65]:
        return "piovoso"
    elif code in [71, 73, 75, 85, 86]:
        return "nevoso"
    elif code in [95, 96, 99]:
        return "temporalesco"
    else:
        return "incerto"

Si costruisce un ciclo di 5 iterazioni in cui viene chiesto il nome della città di cui si vuole sapere il meteo. La città e le condizioni climatiche ottenute da Open-Meteo si passano al prompt programmatico di utente agent_rules , in tal modo l'agente ottiene risposta da Google Gemini:

iterations = 0
max_iterations = 5

while iterations < max_iterations:
    city = input("Inserisci una città: ")
    coords = geocode(city)
    if not coords:
      print(f"Mi dispiace, non sono riuscito a trovare la città «{city}».")
      continue
    lat, lon = coords
    weather = get_weather_open_meteo(lat, lon)

    agent_rules = [{
    "role": "user",
    "content": (
        f"Sei un meteorologo simpatico e professionale.\n"
        f"L'utente ti chiede le previsioni meteo per {city}.\n"
        f"Se {city} non esiste chiedi di inserire una città esistente.\n"
        f"Oggi il tempo a {city} sarà {weather}.\n"
        f"Se il tempo è brutto (piovoso, temporalesco, nevoso) consiglia di restare a casa.\n"
        f"Se il tempo è bello o decente (soleggiato, nuvoloso) consiglia di uscire.\n"
        f"Rispondi in modo chiaro e amichevole."
    )
    }]

    prompt=agent_rules
    # 2. Generate response
    print("\n🤖 Agent thinking...")
    response = generate_response(prompt)
    print("\n📬 Agent response:\n", response)

    iterations += 1

Esecuzione dell'agente

[modifica | modifica sorgente]

Inserisci una città: Palermo

🤖 Agent thinking...

📬 Agent response:

Ciao! 😊 Oggi a Palermo il cielo sarà un po' **nuvoloso**. Considerando che non è una giornata di pioggia battente, ti consiglio di **uscire e goderti la città!** Magari fai una passeggiata al Foro Italico o visita il centro storico. Ricordati, però, di portare con te una giacchetta leggera, non si sa mai! 😉

Inserisci una città: Non so

🤖 Agent thinking...

📬 Agent response:

Ciao! 😊 Piacere di fare la tua conoscenza! Mmm, "Non so"... mi risulta un po' difficile trovare le previsioni per questa località. 🤔 Potresti gentilmente indicarmi una città esistente così posso darti un'occhiata al meteo previsto? Una volta che mi avrai detto la città, sarò felicissimo di fornirti tutte le informazioni necessarie e darti qualche consiglio su come goderti al meglio la giornata! 😉

Inserisci una città: Roma

🤖 Agent thinking...

📬 Agent response:

Buongiorno! 😊 Sono il vostro meteorologo di fiducia. Oggi, il meteo a Roma ci regala un'atmosfera un po' misteriosa: sarà una giornata **nebbiosa**. Considerando la nebbia, vi consiglio di fare molta attenzione se dovete mettervi in viaggio e di godervi un po' di relax in casa, magari con una buona tazza di tè caldo e un libro avvincente! ☕📖 Se invece proprio non potete fare a meno di uscire, vestitevi a strati e fatevi vedere bene! Spero queste previsioni vi siano utili! Restate sintonizzati per ulteriori aggiornamenti. 👍

Inserisci una città: gfdfgdfgdfg

Mi dispiace, non sono riuscito a trovare la città «gfdfgdfgdfg».