Ciao, agente in formazione! Emma qui, di ritorno su agent101.net, e oggi esploreremo qualcosa che bolle in pentola da un po’ ma che sta finalmente decollando: fare in modo che gli agenti AI agiscano per te, anche se sei un principiante. Più specificamente, parleremo di come ottenere un agente AI semplice per monitorare una parte specifica di internet per te e avvisarti quando qualcosa cambia. Pensa a questo come al tuo personale cane da caccia digitale, ma molto meno ingombrante.
Da mesi, ho sperimentato vari strumenti AI, cercando di spingerli oltre la semplice scrittura di poesie divertenti o il riassunto di articoli. Volevo che fossero proattivi. Volevo che fossero… agenti! Ma ogni volta che guardavo un tutorial, avevo l’impressione di aver bisogno di una laurea in informatica e di un weekend libero solo per configurare l’ambiente. Frustrante, vero?
Poi, alcune settimane fa, stavo cercando di seguire il lancio di un prodotto specifico – un nuovo dispositivo per la casa intelligente che dovevo assolutamente avere. Era uno di quei gadget che spuntano senza troppi avvisi e gli stock svaniscono in pochi minuti. Aggiornare la pagina ogni cinque minuti mi stava facendo impazzire. Le dita mi facevano male, gli occhi erano appannati e il mio consumo di caffè era pericolosamente alto. È stato allora che ho avuto un’illuminazione: questa è esattamente il tipo di compito ripetitivo, che richiede attenzione, per cui un agente AI è perfetto. E ho trovato un modo per farlo che, anche io, come blogger tech auto-proclamata “si perde a volte in YAML”, potevo gestire. Niente framework sofisticati, nessuna libreria oscura, solo un po’ di Python e una buona comprensione di cosa un assistente AI può fare per te.
Oggi, quindi, creeremo un agente AI semplice che monitora una pagina web per un cambiamento specifico e ti informa. Non si tratta di costruire il prossimo Skynet; si tratta di risolvere un vero problema quotidiano con un pizzico di magia AI. E credimi, se posso farlo io, puoi farlo anche tu.
Che cos’è un agente AI di monitoraggio semplice?
In sostanza, un agente AI di monitoraggio è semplicemente un programma che osserva qualcosa e reagisce quando vengono soddisfatte certe condizioni. Nel nostro caso, monitorerà una pagina web. Perché “agente AI” e non semplicemente “script”? Bene, la parte “AI” entra in gioco quando iniziamo a pensare a come interpreta i cambiamenti e a come decide cosa è importante. Per questo tutorial pensato per principianti, manterremo l’AI piuttosto leggera – pensa a questo come all’utilizzo di un modello AI per aiutarci a comprendere il testo, senza necessariamente prendere decisioni complesse. La parte “agente” è il ciclo: osservare, riflettere (un po’), agire, ripetere.
Il mio obiettivo con questo agente era semplice: volevo sapere l’*istante* in cui la pagina del prodotto di questo dispositivo per la casa intelligente passava da “Esaurito” a “Disponibile.” Non volevo ricevere notifiche per ogni piccolo aggiornamento, solo questa informazione cruciale. Tuttavia, questo non è solo per il lancio di prodotti. Immagina di seguire offerte di lavoro, articoli di stampa su un argomento specifico, cambiamenti di prezzo dai concorrenti, o anche aggiornamenti del tuo webcomic preferito. Le possibilità sono piuttosto interessanti una volta che hai capito il principio.
Gli strumenti di cui avremo bisogno (non preoccuparti, è minimo)
- Python: Se non ce l’hai, scaricalo. È gratuito e relativamente facile da usare.
- Alcune librerie Python: Useremo
requestsper recuperare le pagine web,BeautifulSoupper analizzare l’HTML, e potenzialmente un modo per inviare notifiche (comesmtplibper l’email o un semplice webhook). - Un modello AI (opzionale ma utile): Per questo, supporrò che tu abbia accesso a qualcosa come l’API di OpenAI o l’API Gemini di Google. Lo utilizzeremo per rilevare i cambiamenti in modo intelligente piuttosto che semplicemente fare una corrispondenza testuale semplice. È qui che l’“AI” entra veramente in gioco oltre a un semplice script.
- Un editor di testo: VS Code, Sublime Text, anche Notepad se ti senti old-school.
Vedi? Niente di troppo intimidatorio. Non stiamo impostando server o configurando servizi cloud complicati. Tutto questo si fa localmente, sulla tua macchina, proprio come l’ho fatto io.
Passo 1: Recupero del contenuto della pagina web
Prima di tutto, il nostro agente deve davvero “vedere” la pagina web. Useremo la libreria requests per questo. È come il tuo browser, ma senza i grafici raffinati: recupera semplicemente l’HTML grezzo.
import requests
def fetch_page_content(url):
try:
response = requests.get(url)
response.raise_for_status() # Questo genererà un HTTPError per le risposte errate (4xx o 5xx)
return response.text
except requests.exceptions.RequestException as e:
print(f"Errore durante il recupero dell'URL {url} : {e}")
return None
# Proviamo con un URL fittizio (sostituisci con la tua meta reale)
# Per questo esempio, userò un segnaposto. NON FARE MAI scraping senza controllare il robots.txt di un sito
# e i termini di utilizzo. Sii rispettoso e non sovraccaricare i server!
target_url = "https://example.com/product-page" # SOSTITUISCI QUESTO CON LA TUA META REALE
current_content = fetch_page_content(target_url)
if current_content:
print("Contenuto recuperato con successo. Prime 200 caratteri:")
print(current_content[:200])
else:
print("Fallimento nel recupero del contenuto.")
Quando ho scritto questo per la prima volta, in realtà ho provato a recuperare una pagina che bloccava le richieste automatizzate. Ho ricevuto un errore 403. Oops! Ho dovuto trovare un altro sito target o capire come aggiungere intestazioni per imitare un browser. Per questo tutorial, supponiamo che il sito che stai prendendo di mira sia d’accordo con le richieste di base. Controlla sempre il file robots.txt del sito (ad esempio, https://example.com/robots.txt) per vedere cosa consentono e non consentono ai robot. Lo scraping etico è importante!
Passo 2: Analisi dell’HTML per trovare ciò che è importante
Una volta che abbiamo l’HTML grezzo, è un groviglio di tag e testo. Dobbiamo estrarre la parte specifica che indica “Disponibile” o “Esaurito.” È qui che BeautifulSoup entra in gioco. Ci aiuta a navigare nella struttura HTML come una mappa.
Questa è stata la parte più complicata per me. Ogni sito web è diverso. Devi aprire la pagina target nel tuo browser, cliccare con il tasto destro sull’elemento che ti interessa (come il testo “Disponibile”), e selezionare “Ispeziona” o “Ispeziona elemento.” Questo ti mostrerà il codice HTML per quella parte specifica. Cerca identificatori unici come ID o nomi di classe.
from bs4 import BeautifulSoup
def extract_relevant_info(html_content):
if not html_content:
return "Nessun contenuto da analizzare."
soup = BeautifulSoup(html_content, 'html.parser')
# Questo è molto specifico alla pagina web che stai monitorando.
# DEVI CAMBIARE QUESTO.
# Esempio: Cerca un div con una classe specifica, o uno span con testo specifico.
# Per la mia pagina prodotto, lo stato dello stock era spesso in un tag con una classe come "product-status"
# Prova a trovare uno span o un div contenente lo stato dello stock
stock_element = soup.find('span', class_='product-status') # Regola il nome della classe secondo la tua ispezione
if not stock_element:
stock_element = soup.find('div', id='stock-indicator') # Regola l'ID secondo la tua ispezione
if stock_element:
return stock_element.get_text(strip=True)
else:
# Se non possiamo trovare l'elemento specifico, restituiamo un estratto più ampio o addirittura l'intero corpo
# e lasciamo che il modello AI se ne occupi. È un buon piano B.
body_content = soup.find('body')
if body_content:
return body_content.get_text(separator=' ', strip=True)
return "Elemento specifico non trovato, fornendo il testo completo della pagina (potrebbe essere rumoroso)."
# Supponendo che `current_content` provenga dal passo precedente
relevant_text = extract_relevant_info(current_content)
print(f"Testo pertinente estratto: {relevant_text[:200]}...") # Mostra i primi 200 caratteri
Le mie tentativi iniziali qui erano fallimenti esilaranti. Ho provato a prendere l’intera pagina e darla all’AI, il che funzionava a volte ma era davvero lento e costoso (le chiamate all’API non sono gratuite!). Poi ho cercato di essere troppo specifico e ho perso l’elemento perché il nome della classe era cambiato leggermente. La chiave è trovare un equilibrio: abbastanza specifico per ridurre il rumore, abbastanza generale per gestire cambiamenti minori di layout.
Passo 3: La magia AI – Rilevare un cambiamento significativo
Ecco la parte divertente! Invece di limitarsi a fare un semplice confronto di testo (che si attiverebbe a ogni minimo cambiamento pubblicitario), utilizzeremo un modello di AI per dirci se il *significato* del testo rilevante è cambiato in modo significativo rispetto al nostro interesse (lo stato di disponibilità).
Per questo, avrai bisogno di una chiave API per il tuo modello di AI scelto (OpenAI, Gemini, ecc.). Conservala in modo sicuro, non direttamente nel tuo codice!
import os
from openai import OpenAI # O `google.generativeai` se usi Gemini
# Configura la tua chiave API OpenAI
# NON CODIFICARE MAI IN MODO INSICURO LE CHIAVI API! Usa variabili d'ambiente o un file di configurazione.
# os.environ["OPENAI_API_KEY"] = "LA_TUA_CHIAVE_API_QUI" # NON FARLO NEL CODICE DI PRODUZIONE
# Invece, definiscila nel tuo terminale: export OPENAI_API_KEY="sk-..."
client = OpenAI() # Supponiamo che OPENAI_API_KEY sia definito nelle variabili d'ambiente
def ask_ai_about_change(old_text, new_text, target_keyword="in stock"):
prompt = f"""
Sei un assistente intelligente che monitora una pagina web per cambiamenti relativi alla disponibilità dei prodotti.
Ti fornirò due versioni di testo tratte da una pagina prodotto.
Il tuo compito è determinare se lo stato di disponibilità del prodotto è cambiato in modo significativo,
specificamente se è diventato '{target_keyword}' mentre prima non lo era,
o se è cambiato da '{target_keyword}'.
Testo precedente:
"{old_text}"
Nuovo testo:
"{new_text}"
La disponibilità del prodotto è cambiata verso o da '{target_keyword}'?
Se sì, spiega brevemente il cambiamento. Altrimenti, dì semplicemente 'Nessun cambiamento significativo.'
Concentrati solo sulla disponibilità, ignora i cambiamenti minori di formulazione o di formattazione.
"""
try:
completion = client.chat.completions.create(
model="gpt-3.5-turbo", # O "gpt-4", "gemini-pro", ecc.
messages=[
{"role": "system", "content": "Sei un assistente utile."},
{"role": "user", "content": prompt}
],
max_tokens=150
)
return completion.choices[0].message.content
except Exception as e:
print(f"Errore durante la chiamata al modello AI: {e}")
return "L'analisi AI è fallita."
# Esempio di utilizzo (normalmente faresti questo in un ciclo)
# Per ora, simuliamo un cambiamento
# Supponiamo che 'previous_relevant_text' provenga da un fetch precedente
previous_relevant_text = "Esaurito. Riassortimento previsto in 2 settimane."
new_relevant_text = "Disponibile! Quantità limitata disponibile."
ai_response = ask_ai_about_change(previous_relevant_text, new_relevant_text, "Disponibile")
print(f"Valutazione AI: {ai_response}")
# Simulare nessun cambiamento
new_relevant_text_no_change = "Esaurito. Riassortimento previsto in 3 settimane."
ai_response_no_change = ask_ai_about_change(previous_relevant_text, new_relevant_text_no_change, "Disponibile")
print(f"Valutazione AI (simulazione senza cambiamento): {ai_response_no_change}")
È qui che l’agente diventa davvero “AI.” Invece di scrivere espressioni regolari complesse o comparazioni di stringhe fragili, dico semplicemente all’AI che tipo di cambiamento sto cercando. È come avere un piccolo stagista che comprende il contesto! Quando ho provato questo per la prima volta, temevo che l’AI si perdesse in leggere variazioni di formulazione. Ma con un buon prompt, è stato sorprendentemente solido. Ha identificato correttamente quando “Disponibile a breve” è diventato “Preordina ora” come un cambiamento significativo, anche se le parole esatte “Disponibile” non erano presenti.
Passo 4: Mettere tutto insieme – Il ciclo dell’agente e la notifica
Un agente deve funzionare continuamente. Quindi, incapsuleremo la nostra logica di recupero e verifica in un ciclo. E quando trova qualcosa, deve farcelo sapere!
import time
# ... (import requests, BeautifulSoup, os, OpenAI dalle fasi precedenti) ...
# Variabile globale per memorizzare l'ultimo stato conosciuto
last_known_status_text = ""
def send_notification(message):
print(f"\n!!! Avviso AGENTE !!!\n{message}\n")
# Qui, integreresti con un vero servizio di notifica:
# - Email (usando smtplib)
# - Servizio di notifica push (Pushover, webhook IFTTT, bot Telegram)
# - Gateway SMS
# Per semplificare, stamperemo solo nella console.
# Esempio per l'email (richiede configurazione) :
# import smtplib
# from email.mime.text import MIMEText
# msg = MIMEText(message)
# msg['Subject'] = 'Cambiamento di pagina web rilevato!'
# msg['From'] = '[email protected]'
# msg['To'] = '[email protected]'
# try:
# with smtplib.SMTP_SSL('smtp.example.com', 465) as smtp:
# smtp.login('[email protected]', 'tuo_mot_de_passe')
# smtp.send_message(msg)
# print("Notifica via email inviata.")
# except Exception as e:
# print(f"Invio email fallito: {e}")
def run_agent(url, interval_seconds=300, target_keyword="Disponibile"):
global last_known_status_text
print(f"L'agente inizia a monitorare {url} ogni {interval_seconds} secondi.")
print("Recupero iniziale...")
# Recupero iniziale per impostare il valore di riferimento
html_content = fetch_page_content(url)
if html_content:
last_known_status_text = extract_relevant_info(html_content)
print(f"Stato iniziale impostato: {last_known_status_text[:100]}...")
else:
print("Impossibile recuperare il contenuto iniziale. L'agente inizia con un valore di riferimento vuoto.")
# Se il recupero iniziale fallisce, l'agente riproverà nel primo ciclo
while True:
print(f"\n[{time.strftime('%Y-%m-%d %H:%M:%S')}] Verifica di {url}...")
current_html_content = fetch_page_content(url)
if current_html_content:
new_relevant_text = extract_relevant_info(current_html_content)
if not last_known_status_text: # Gestire il caso in cui il recupero iniziale ha fallito
last_known_status_text = new_relevant_text
print(f"Valore di riferimento impostato dopo il fallimento iniziale: {last_known_status_text[:100]}...")
if new_relevant_text != last_known_status_text:
print("Cambiamento potenziale rilevato. Richiesta all'AI...")
ai_analysis = ask_ai_about_change(last_known_status_text, new_relevant_text, target_keyword)
if "Nessun cambiamento significativo." not in ai_analysis:
send_notification(f"Aggiornamento della pagina web per {url}:\n{ai_analysis}\nNuovo testo: {new_relevant_text[:200]}...")
last_known_status_text = new_relevant_text # Aggiorna il valore di riferimento solo in caso di cambiamento significativo
else:
print(f"L'AI ha determinato: {ai_analysis} (minore, ignorato)")
# Anche se l'AI dice che non c'è stato un cambiamento significativo, potremmo voler aggiornare il valore di riferimento
# per evitare avvisi ripetuti di "cambiamento potenziale" per la stessa differenza minore.
# Oppure, lasciarlo così com'è se vuoi che l'AI rivaluti ogni volta.
# Per questo esempio, aggiorneremo per evitare di spammare l'AI per cambiamenti minori statici.
last_known_status_text = new_relevant_text
else:
print("Nessun cambiamento testuale rilevato nella sezione pertinente.")
else:
print(f"Fallimento nel recupero del contenuto da {url} durante questa iterazione.")
time.sleep(interval_seconds) # Aspetta prima di controllare di nuovo
# --- Esecuzione principale ---
if __name__ == "__main__":
# Configura il tuo URL target e l'intervallo desiderato
# Fai attenzione alle politiche del sito web e non fare richieste troppo frequenti!
my_target_url = "https://www.some-store.com/new-widget-X" # <<< SOSTITUISCI QUESTO!
monitoring_interval = 600 # Controlla ogni 10 minuti (600 secondi)
desired_status = "Disponibile" # Quale parola chiave stiamo cercando?
# IMPORTANTE: Assicurati che la tua chiave API OpenAI sia definita come variabile d'ambiente!
# export OPENAI_API_KEY="sk-..." nel tuo terminale prima di eseguire.
run_agent(my_target_url, monitoring_interval, desired_status)
Ho impostato il mio intervallo a 5 minuti per questo dispositivo di casa intelligente sfuggente. Ogni volta che vedevo il messaggio "Verifica...", provavo una piccola emozione. Quando la notifica è finalmente arrivata – "Disponibile! Quantità limitata disponibile." – giuro che ho sentito cantare gli angeli. Ho cliccato sul link, l'ho aggiunto al mio carrello e ho pagato in pochi secondi. Successo! Il mio piccolo agente AI mi aveva salvato da un aggiornamento infinito e mi aveva aiutato a ottenere questo gadget.
Lezioni concrete per il tuo primo agente AI
- Inizia in piccolo: Non cercare di costruire un agente conversazionale complesso fin dall'inizio. Un compito semplice di monitoraggio è perfetto per imparare le basi.
- Ispeziona il tuo obiettivo: Comprendere la struttura HTML della pagina web che stai monitorando è fondamentale. Usa gli strumenti di sviluppo del tuo browser.
- La progettazione del prompt è fondamentale: Più descrivi in modo preciso il tipo di cambiamento che stai cercando al modello IA, più le sue risposte saranno precise e utili. Sperimenta con i tuoi prompt!
- Sii rispettoso: Non bombardare i siti web con richieste. Usa intervalli ragionevoli, controlla
robots.txt, e comprendi i termini di utilizzo di un sito riguardo all'accesso automatizzato. - Proteggi le tue chiavi: Non codificare mai le chiavi API direttamente nel tuo script. Usa variabili d'ambiente.
- Itera: Il tuo primo tentativo potrebbe non essere perfetto. Il mio certamente non lo era! Regola i tuoi selettori `BeautifulSoup`, affina il tuo prompt IA, e modifica il tuo metodo di notifica finché non funziona per te.
Costruire questo agente è stato un enorme incremento di fiducia per me. Mi ha dimostrato che l'IA non è solo per le grandi aziende o la ricerca accademica. È uno strumento che noi, come utenti singoli e sviluppatori occasionali, possiamo usare per risolvere i nostri problemi e rendere le nostre vite digitali un po' più semplici. Quindi vai avanti, scegli una pagina web che sei stanco di controllare manualmente, e costruisci il tuo cane da caccia digitale. Sarai sorpreso di ciò che puoi raggiungere!
Articoli correlati
- Quando il tuo agente si ribella: padroneggiare gli interruttori d'emergenza
- Agenti IA nel settore immobiliare: trasformare l'industria
- API OpenAI nel 2026: 7 cose dopo 3 mesi di utilizzo
🕒 Published: