Creare agenti AI di intelligenza artificiale/Meteorologo
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"¤t_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».