Ciao, agente in formazione! Emma qui, di nuovo su agent101.net, e oggi stiamo esplorando qualcosa che è rimasto in attesa per un po’ ma che finalmente sta decollando: fare in modo che gli agenti AI effettivamente facciano cose per te, anche se sei appena agli inizi. In particolare, parleremo di come ottenere un semplice agente AI che monitori una parte specifica di internet per te e ti avvisi quando qualcosa cambia. Pensalo come il tuo bloodhound digitale personale, ma molto meno disordinato.
Per mesi, ho provato vari strumenti AI, cercando di spingerli oltre il semplice scrivere poemi divertenti o riassumere articoli. Volevo che fossero proattivi. Volevo che fossero… agenti! Ma ogni volta che guardavo un tutorial, sembrava che avessi 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 tenere traccia del rilascio di un prodotto specifico – un nuovo dispositivo per la casa intelligente che dovevo assolutamente avere. Era uno di quei prodotti che venivano lanciati senza preavviso, e le scorte svanivano 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 apporto di caffè era pericolosamente alto. È allora che ho capito: questo è esattamente il tipo di compito ripetitivo, che richiede vigilanza, per il quale un agente AI è perfetto. E ho trovato un modo per farlo che anche io, un blogger tecnologico che si autodefinisce “a volte si confonde con YAML”, potessi gestire. Niente framework complicati, niente librerie oscure, solo un po’ di Python e una buona comprensione di cosa può fare un assistente AI per te.
Quindi oggi, costruiremo un semplice agente AI che monitora una pagina web per un cambiamento specifico e ti notifica. Non si tratta di costruire il prossimo Skynet; si tratta di risolvere un problema reale e quotidiano con un tocco di magia AI. E fidati, se posso farlo io, puoi farlo anche tu.
Cosa è un semplice agente AI di monitoraggio?
Alla base, un agente AI di monitoraggio è semplicemente un programma che osserva qualcosa e reagisce quando vengono soddisfatte determinate condizioni. Nel nostro caso, osserverà una pagina web. Perché “agente AI” e non solo “script”? Bene, la parte “AI” entra in gioco quando iniziamo a pensare a come interpreta i cambiamenti e come decide cosa è importante. Per questo tutorial per principianti, manteniamo l’AI piuttosto leggera: pensala come l’uso di un modello AI per aiutarci a comprendere il testo, non necessariamente per prendere decisioni complesse. La parte “agente” è il ciclo: osserva, pensa (un po’), agisce, ripeti.
Il mio obiettivo con questo agente era semplice: volevo sapere l’*istante* in cui la pagina del prodotto per quel dispositivo per la casa intelligente cambiasse da “Esaurito” a “Disponibile”. Non volevo essere sommerso da ogni piccola aggiornamento, solo quel pezzo cruciale di informazione. Questo non riguarda solo i rilasci di prodotti, però. Immagina di monitorare le offerte di lavoro, articoli di notizie su un argomento specifico, cambiamenti nei prezzi dei concorrenti, o persino aggiornamenti alla tua webcomic preferita. Le possibilità sono piuttosto interessanti una volta che ci prendi la mano.
Gli strumenti di cui avremo bisogno (non preoccuparti, è minimale)
- Python: Se non lo hai, vai a prenderlo. È 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 le 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 di Gemini di Google. Lo useremo per rilevare in modo intelligente i cambiamenti piuttosto che limitarsi al semplice confronto di testo. Qui è dove l’“AI” entra davvero in gioco oltre al semplice script.
- Un editor di testo: VS Code, Sublime Text, anche Notepad se ti senti old-school.
Vedi? Niente di troppo intimidatorio. Non stiamo avviando server o configurando servizi cloud intricati. Questo è tutto locale, sulla tua macchina, proprio come l’ho fatto io.
Passo 1: Recuperare il contenuto della pagina web
Per prima cosa, il nostro agente ha bisogno di “vedere” effettivamente la pagina web. Useremo la libreria requests per questo. È come il tuo browser, ma senza le grafiche fancy – recupera solo l’HTML grezzo.
import requests
def fetch_page_content(url):
try:
response = requests.get(url)
response.raise_for_status() # Questo solleverà un HTTPError per risposte sbagliate (4xx o 5xx)
return response.text
except requests.exceptions.RequestException as e:
print(f"Errore nel recuperare l'URL {url}: {e}")
return None
# Proviamo con un URL fittizio (sostituisci con il tuo target reale)
# Per questo esempio, userò un segnaposto. NON fare scraping senza controllare il robots.txt di un sito
# e i termini di servizio. Sii rispettoso e non sovraccaricare i server!
target_url = "https://example.com/product-page" # SOSTITUISCI QUESTO CON IL TUO TARGET 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("Recupero del contenuto fallito.")
Quando ho scritto questo per la prima volta, in realtà ho cercato di recuperare una pagina che bloccava le richieste automatizzate. Ho ricevuto un errore 403. Ops! Ho dovuto trovare un sito target diverso o capire come aggiungere intestazioni per simulare un browser. Per questo tutorial, assumiamo che il sito che stai monitorando vada bene con richieste di base. Controlla sempre il file robots.txt del sito (ad esempio, https://example.com/robots.txt) per vedere cosa permettono e cosa non permettono per i crawler. Lo scraping etico è importante!
Passo 2: Analizzare l’HTML per trovare ciò che conta
Una volta che abbiamo l’HTML grezzo, è un mix confuso di tag e testo. Dobbiamo estrarre la parte specifica che indica “Disponibile” o “Esaurito”. Qui entra in gioco BeautifulSoup. 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, fare clic 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 è altamente specifico per la pagina web che stai monitorando.
# DOVRAI CAMBIARE QUESTO.
# Esempio: cercare un div con una classe specifica, o uno span con un testo specifico.
# Per la mia pagina prodotto, lo stato delle scorte era spesso in un tag con una classe come "product-status"
# Prova a trovare uno span o un div che contiene lo stato delle scorte
stock_element = soup.find('span', class_='product-status') # Modifica il nome della classe in base alla tua ispezione
if not stock_element:
stock_element = soup.find('div', id='stock-indicator') # Modifica l'ID in base alla tua ispezione
if stock_element:
return stock_element.get_text(strip=True)
else:
# Se non troviamo l'elemento specifico, restituiamo un pezzo più grande o addirittura l'intero corpo
# e lasciamo che il modello AI lo comprenda. Questo è un buon fallback.
body_content = soup.find('body')
if body_content:
return body_content.get_text(separator=' ', strip=True)
return "Elemento specifico non trovato, fornendo il testo dell'intera pagina (potrebbe essere rumoroso)."
# Supponendo che `current_content` provenga dal passo precedente
relevant_text = extract_relevant_info(current_content)
print(f"Testo rilevante estratto: {relevant_text[:200]}...") # Stampa i primi 200 caratteri
I miei tentativi iniziali qui sono stati fallimenti esilaranti. Cercavo di prendere semplicemente l’intera pagina e darla all’AI, il che a volte funzionava ma era davvero lento e costoso (le chiamate 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 da ridurre il rumore, abbastanza generale da gestire piccoli cambiamenti di layout.
Passo 3: La magia AI – Rilevare un cambiamento significativo
Ora arriva la parte divertente! Invece di fare un semplice confronto testuale (che si attiverebbe a ogni minimo cambiamento di annuncio), utilizzeremo un modello AI per dirci se il *significato* del testo rilevante è cambiato in modo significativo rispetto al nostro interesse (lo stato delle scorte).
Per questo, avrai bisogno di una chiave API per il modello AI scelto (OpenAI, Gemini, ecc.). Conservala in sicurezza, non direttamente nel tuo codice!
import os
from openai import OpenAI # O `google.generativeai` se stai usando Gemini
# Imposta la tua chiave API OpenAI
# NON hardcodare le chiavi API! Usa variabili d'ambiente o un file di configurazione.
# os.environ["OPENAI_API_KEY"] = "LA_TUA_CHIAVE_API_QUI" # NON FARE QUESTO NEL CODICE DI PRODUZIONE
# Invece, impostala nel tuo shell: export OPENAI_API_KEY="sk-..."
client = OpenAI() # Presuppone che OPENAI_API_KEY sia impostato 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 estratte da una pagina di prodotto.
Il tuo compito è determinare se lo stato di disponibilità del prodotto è cambiato in modo significativo,
specificamente se è diventato '{target_keyword}' quando precedentemente non lo era,
o se è cambiato lontano 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. Se no, dici semplicemente 'Nessun cambiamento significativo.'
Concentrati solo sulla disponibilità, ignora piccole variazioni di parole o 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 nella chiamata al modello AI: {e}")
return "Analisi AI fallita."
# Esempio di utilizzo (normalmente faresti questo in un ciclo)
# Per ora, simuleremo un cambiamento
# Supponiamo che 'previous_relevant_text' fosse da un recupero precedente
previous_relevant_text = "Esaurito. Ristock 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 dell'AI: {ai_response}")
# Simula nessun cambiamento
new_relevant_text_no_change = "Esaurito. Ristock previsto in 3 settimane."
ai_response_no_change = ask_ai_about_change(previous_relevant_text, new_relevant_text_no_change, "Disponibile")
print(f"Valutazione dell'AI (simulazione senza cambiamento): {ai_response_no_change}")
Questo è il momento in cui l’agente diventa realmente “AI.” Invece di scrivere complesse espressioni regex o confronti di stringhe fragili, dico semplicemente all’AI che tipo di cambiamento sto cercando. È come avere un piccolo stagista che comprende il contesto! Quando l’ho provato per la prima volta, ero preoccupato che l’AI si confondesse per leggere leggere variazioni di parole. Ma con un buon prompt, è stato sorprendentemente solido. Ha correttamente identificato quando “Prossimamente” è diventato “Pre-ordina 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 controllo in un ciclo. E quando trova qualcosa, deve dircelo!
import time
# ... (importare requests, BeautifulSoup, os, OpenAI dai passaggi precedenti) ...
# Variabile globale per memorizzare l'ultimo stato noto
last_known_status_text = ""
def send_notification(message):
print(f"\n!!! ALLERTA DELL'AGENTE !!!\n{message}\n")
# Qui dovresti integrarti con un reale servizio di notifiche:
# - Email (utilizzando smtplib)
# - Servizio di notifica push (Pushover, webhook IFTTT, bot Telegram)
# - Gateway SMS
# Per semplicità, stamperemo solo sulla console.
# Esempio per l'email (richiede configurazione):
# import smtplib
# from email.mime.text import MIMEText
# msg = MIMEText(message)
# msg['Subject'] = 'Cambiamento della 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]', 'your_password')
# smtp.send_message(msg)
# print("Email di notifica 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 baseline
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 baseline vuoto.")
# Se il recupero iniziale fallisce, l'agente proverà di nuovo alla prima iterazione del ciclo
while True:
print(f"\n[{time.strftime('%Y-%m-%d %H:%M:%S')}] Controllando {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: # Gestisci il caso in cui il recupero iniziale fallisce
last_known_status_text = new_relevant_text
print(f"Baseline impostata dopo il fallimento iniziale: {last_known_status_text[:100]}...")
if new_relevant_text != last_known_status_text:
print("Cambiamento potenziale rilevato. Chiedendo 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 baseline solo in caso di cambiamento significativo
else:
print(f"L'AI ha determinato: {ai_analysis} (minore, ignorato)")
# Anche se l'AI dice che non ci sono cambiamenti significativi, potremmo voler aggiornare il baseline
# per prevenire ripetuti avvisi di "cambiamento potenziale" per la stessa piccola differenza.
# Oppure, mantienilo così com'è se vuoi che l'AI ri-valuti ogni volta.
# Per questo esempio, aggiorneremo per prevenire lo spam dell'AI per cambiamenti statici minori.
last_known_status_text = new_relevant_text
else:
print("Nessun cambiamento testuale rilevato nella sezione rilevante.")
else:
print(f"Impossibile recuperare il contenuto da {url} in questa iterazione.")
time.sleep(interval_seconds) # Attendi 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 frequentemente!
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 impostata 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 quel misterioso dispositivo per la casa intelligente. Ogni volta che vedevo lampeggiare il messaggio "Controllando...", provavo una piccola emozione. Quando finalmente la notifica è arrivata – "Disponibile! Quantità limitata disponibile." – giuro di aver sentito cantare gli angeli. Ho cliccato sul link, l'ho aggiunto al mio carrello e completato l'acquisto in pochi secondi. Successo! Il mio piccolo agente AI mi aveva salvato da un continuo aggiornamento e mi aveva aiutato a prendere quel gadget.
Indicazioni pratiche per il tuo primo agente AI
- Inizia in piccolo: Non cercare di costruire un agente conversazionale complesso fin da subito. Un semplice compito di monitoraggio è perfetto per imparare.
- Ispeziona il tuo obiettivo: Comprendere la struttura HTML della pagina web che stai monitorando è fondamentale. Usa gli strumenti di sviluppo del tuo browser.
- Lo sviluppo del prompt è fondamentale: Più descrivi bene quale tipo di cambiamento stai cercando al modello AI, più accurate e utili saranno le sue risposte. Sperimenta con i tuoi prompt!
- Rispetta: Non fare pressioni sui siti web con richieste. Usa intervalli ragionevoli, controlla
robots.txt, e comprendi i termini di servizio di un sito riguardo l'accesso automatizzato. - Metti al sicuro le tue chiavi: Non hardcodare mai direttamente le chiavi API 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 AI e modifica il tuo metodo di notifica finché non funziona per te.
Costruire questo piccolo agente è stato un enorme incentivo per me. Mi ha mostrato che l'AI non è solo per grandi aziende o ricerche accademiche. È uno strumento che noi, come utenti singoli e sviluppatori alle prime armi, possiamo utilizzare per risolvere i nostri problemi e semplificare un po' le nostre vite digitali. Quindi vai avanti, scegli una pagina web che sei stanco di controllare manualmente e costruisci il tuo segugio digitale. Rimarrai sorpreso da cosa puoi ottenere!
Articoli correlati
- Quando il tuo agente si ribella: padroneggiare gli interruttori di emergenza
- Agenti AI nel settore immobiliare: trasformare l'industria
- API OpenAI nel 2026: 7 cose dopo 3 mesi di utilizzo
🕒 Published: