Hallo, Agent in der Ausbildung! Emma hier, zurück auf agent101.net, und heute erkunden wir etwas, das eine Weile unter der Oberfläche gärte, aber jetzt endlich in Fahrt kommt: Wie man KI-Agenten tatsächlich dazu bringt, Dinge für dich zu tun, auch wenn du gerade erst anfängst. Genauer gesagt, werden wir darüber sprechen, wie man einen einfachen KI-Agenten einrichtet, der einen spezifischen Teil des Internets für dich überwacht und dir mitteilt, wenn sich etwas ändert. Denk daran wie an deinen persönlichen digitalen Bluthund, aber viel weniger chaotisch.
Monatelang habe ich mit verschiedenen KI-Tools experimentiert, um sie über das bloße Schreiben lustiger Gedichte oder das Zusammenfassen von Artikeln hinaus zu drängen. Ich wollte, dass sie proaktiv sind. Ich wollte, dass sie … Agenten sind! Aber jedes Mal, wenn ich mir ein Tutorial ansah, fühlte es sich an, als bräuchte ich einen Abschluss in Informatik und ein freies Wochenende, um die Umgebung einzurichten. Frustrierend, oder?
Vor ein paar Wochen versuchte ich, eine spezifische Produkteinführung zu verfolgen – ein neues Smart-Home-Gerät, das ich unbedingt in die Hände bekommen musste. Es war eines dieser Dinge, die ohne große Vorwarnung auf den Markt kamen und deren Vorräte in Minuten verschwanden. Jede fünf Minuten die Seite zu aktualisieren, machte mich verrückt. Meine Finger schmerzten, meine Augen waren verschwommen, und mein Kaffeekonsum war gefährlich hoch. Dann kam der Aha-Moment: Das ist genau die Art von sich wiederholender, aufmerksamer Aufgabe, für die ein KI-Agent perfekt geeignet ist. Und ich habe eine Möglichkeit gefunden, dies so umzusetzen, dass sogar ich, eine selbsternannte „verwirrt manchmal von YAML“ Tech-Bloggerin, es bewältigen konnte. Keine aufwendigen Frameworks, keine obskuren Bibliotheken, nur ein bisschen Python und ein gutes Verständnis dafür, was ein KI-Assistent für dich tun kann.
Heute werden wir also einen einfachen KI-Agenten bauen, der eine Webseite auf eine spezifische Änderung überwacht und dich benachrichtigt. Dabei geht es nicht darum, das nächste Skynet zu erschaffen; es geht darum, ein echtes, alltägliches Problem mit einem Hauch von KI-Magie zu lösen. Und glaub mir, wenn ich es kann, kannst du es auch.
Was ist überhaupt ein einfacher Überwachungs-KI-Agent?
Kern eines Überwachungs-KI-Agenten ist ein Programm, das etwas beobachtet und reagiert, wenn bestimmte Bedingungen erfüllt sind. In unserem Fall wird es eine Webseite überwachen. Warum “KI-Agent” und nicht nur “Skript”? Nun, der Teil “KI” kommt ins Spiel, wenn wir darüber nachdenken, wie es die Änderungen interpretiert und wie es entscheidet, was wichtig ist. Für dieses Einsteiger-Tutorial halten wir die KI recht leicht – denk daran, dass wir ein KI-Modell verwenden, um den Text zu verstehen, und nicht unbedingt komplexe Entscheidungen zu treffen. Der „Agent“-Teil ist die Schleife: beobachten, nachdenken (ein bisschen), handeln, wiederholen.
Mein Ziel mit diesem Agenten war einfach: Ich wollte *sofort* wissen, wenn sich die Produktseite für das Smart-Home-Gerät von “Nicht vorrätig” auf “Vorrätig” änderte. Ich wollte nicht mit jeder kleinen Aktualisierung überflutet werden, nur mit diesem einen entscheidenden Stück Information. Dabei geht es nicht nur um Produkteinführungen. Stell dir vor, du verfolgst Stellenangebote, Nachrichtenartikel zu einem bestimmten Thema, Änderungen in der Preisgestaltung von Wettbewerbern oder sogar Updates zu deinem Lieblings-Webcomic. Die Möglichkeiten sind ziemlich spannend, wenn du erst einmal den Dreh raus hast.
Die Tools, die wir brauchen (Keine Panik, es ist minimal)
- Python: Wenn du es nicht hast, hol es dir. Es ist kostenlos und relativ einfach zu bedienen.
- Einige Python-Bibliotheken: Wir werden
requestszum Abrufen von Webseiten,BeautifulSoupzum Parsen von HTML und eventuell eine Möglichkeit für Benachrichtigungen verwenden (wiesmtplibfür E-Mails oder einen einfachen Webhook). - Ein KI-Modell (optional, aber hilfreich): Hier gehe ich davon aus, dass du Zugriff auf etwas wie die OpenAI-API oder die Google Gemini-API hast. Wir werden es nutzen, um Änderungen intelligent zu erkennen, anstatt nur einfache Textvergleiche anzustellen. Hier kommt die “KI” wirklich über ein einfaches Skript zum Einsatz.
- Ein Texteditor: VS Code, Sublime Text, sogar Notepad, wenn du dich old-school fühlen möchtest.
Siehst du? Nichts zu befürchten. Wir starten keine Server oder konfigurieren komplizierte Cloud-Dienste. Das Ganze läuft lokal auf deinem Rechner, genau wie ich es gemacht habe.
Schritt 1: Abrufen des Webseiteninhalts
Zuerst braucht unser Agent tatsächlich die Möglichkeit, die Webseite zu “sehen”. Dafür verwenden wir die requests-Bibliothek. Sie funktioniert wie dein Browser, jedoch ohne die fancy Grafiken – sie holt sich nur das rohe HTML.
import requests
def fetch_page_content(url):
try:
response = requests.get(url)
response.raise_for_status() # Dies löst eine HTTPError für ungültige Antworten (4xx oder 5xx) aus
return response.text
except requests.exceptions.RequestException as e:
print(f"Fehler beim Abrufen der URL {url}: {e}")
return None
# Lass es uns mit einer Dummy-URL ausprobieren (ersetze sie durch dein tatsächliches Ziel)
# In diesem Beispiel verwende ich einen Platzhalter. Schabe NIEMALS, ohne die robots.txt
# und die Nutzungsbedingungen einer Seite zu prüfen. Sei respektvoll und überlastete keine Server!
target_url = "https://example.com/product-page" # ERSETZE DIES MIT DEINEM TATSÄCHLICHEN ZIEL
current_content = fetch_page_content(target_url)
if current_content:
print("Inhalt erfolgreich abgerufen. Erste 200 Zeichen:")
print(current_content[:200])
else:
print("Inhalt konnte nicht abgerufen werden.")
Als ich dies zum ersten Mal schrieb, versuchte ich tatsächlich, eine Seite abzurufen, die automatisierte Anfragen blockierte. Bekam einen 403-Fehler. Ups! Musste eine andere Zielseite finden oder herausfinden, wie ich Header hinzufügen kann, um einen Browser zu imitieren. Für dieses Tutorial nehmen wir an, dass die Seite, die du anvisierst, keine Probleme mit einfachen Anfragen hat. Überprüfe immer die robots.txt-Datei der Seite (z.B. https://example.com/robots.txt), um zu sehen, was sie für Crawler erlauben und verbieten. Ethisches Scraping ist wichtig!
Schritt 2: Parsen des HTML, um das Wichtige zu finden
Sobald wir das rohe HTML haben, ist es ein durcheinander von Tags und Text. Wir müssen den spezifischen Teil extrahieren, der “Vorrätig” oder “Nicht vorrätig” anzeigt. Hier kommt BeautifulSoup ins Spiel. Es hilft uns, die HTML-Struktur wie eine Karte zu navigieren.
Das war der kniffligste Teil für mich. Jede Webseite ist anders. Du musst die Zielseite in deinem Browser öffnen, mit der rechten Maustaste auf das Element klicken, das dich interessiert (wie den „Vorrätig“-Text), und „Untersuchen“ oder „Element untersuchen“ auswählen. Dies zeigt dir den HTML-Code für diesen spezifischen Teil. Achte auf einzigartige Identifikatoren wie IDs oder Klassennamen.
from bs4 import BeautifulSoup
def extract_relevant_info(html_content):
if not html_content:
return "Kein Inhalt zum Parsen."
soup = BeautifulSoup(html_content, 'html.parser')
# Dies ist sehr spezifisch für die Webseite, die du überwachst.
# DU WIRST DAS ÄNDERN MÜSSEN.
# Beispiel: Suche nach einem Div mit einer bestimmten Klasse oder einem Span mit spezifischem Text.
# Für meine Produktseite war der Lagerstatus oft in einem -Tag mit einer Klasse wie "product-status"
# Versuche, ein Span oder Div zu finden, das den Lagerstatus enthält
stock_element = soup.find('span', class_='product-status') # Passe den Klassennamen basierend auf deiner Untersuchung an
if not stock_element:
stock_element = soup.find('div', id='stock-indicator') # Passe die ID basierend auf deiner Untersuchung an
if stock_element:
return stock_element.get_text(strip=True)
else:
# Wenn wir das spezifische Element nicht finden können, gib ein größeres Stück oder sogar den gesamten Body zurück
# und lass das KI-Modell es herausfinden. Das ist eine gute Rückfalloption.
body_content = soup.find('body')
if body_content:
return body_content.get_text(separator=' ', strip=True)
return "Spezifisches Element nicht gefunden, vollständiger Seitentext wird bereitgestellt (könnte unübersichtlich sein)."
# Angenommen, `current_content` ist aus dem vorherigen Schritt
relevant_text = extract_relevant_info(current_content)
print(f"Extrahierter relevanter Text: {relevant_text[:200]}...") # Erste 200 Zeichen ausgeben
Meine ersten Versuche hier waren lustige Misserfolge. Ich versuchte einfach, die gesamte Seite abzurufen und sie der KI zu füttern, was manchmal funktionierte, aber wirklich langsam und teuer war (API-Aufrufe sind nicht kostenlos!). Dann versuchte ich, zu spezifisch zu sein und verfehlte das Element, weil sich der Klassenname leicht änderte. Der Schlüssel ist, ein Gleichgewicht zu finden: spezifisch genug, um Lärm zu reduzieren, allgemein genug, um mit geringfügigen Layoutänderungen umzugehen.
Schritt 3: Die KI-Magie – Erkennen bedeutungsvoller Änderungen
Jetzt kommt der spaßige Teil! Anstatt nur einen einfachen Textvergleich durchzuführen (der bei jeder kleinen Werbeänderung auslösen würde), verwenden wir ein KI-Modell, um uns mitzuteilen, ob sich die *Bedeutung* des relevanten Textes in signifikanter Weise geändert hat, bezüglich unseres Interesses (dem Lagerstatus).
Dafür benötigst du einen API-Schlüssel für dein gewähltes KI-Modell (OpenAI, Gemini usw.). Bewahre ihn sicher auf, nicht direkt in deinem Code!
import os
from openai import OpenAI # Oder `google.generativeai`, wenn Sie Gemini verwenden
# Richten Sie Ihren OpenAI API-Schlüssel ein
# NIE API-Schlüssel hardkodieren! Verwenden Sie Umgebungsvariablen oder eine Konfigurationsdatei.
# os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY_HERE" # DAS IN PRODUKTIONSCODE NICHT MACHEN
# Stattdessen setzen Sie es in Ihrer Shell: export OPENAI_API_KEY="sk-..."
client = OpenAI() # Geht davon aus, dass OPENAI_API_KEY in Umgebungsvariablen gesetzt ist
def ask_ai_about_change(old_text, new_text, target_keyword="in stock"):
prompt = f"""
Sie sind ein intelligenter Assistent, der eine Webseite auf Änderungen bezüglich der Produktverfügbarkeit überwacht.
Ich werde Ihnen zwei Versionen von Texten geben, die von einer Produktseite extrahiert wurden.
Ihre Aufgabe ist es festzustellen, ob sich der Status der Produktverfügbarkeit erheblich geändert hat,
insbesondere ob er jetzt '{target_keyword}' geworden ist, als es zuvor nicht der Fall war,
oder ob es sich von '{target_keyword}' entfernt hat.
Alter Text:
"{old_text}"
Neuer Text:
"{new_text}"
Hat sich der Status der Produktverfügbarkeit zu oder von '{target_keyword}' geändert?
Wenn ja, erklären Sie kurz die Änderung. Wenn nein, sagen Sie einfach 'Keine wesentliche Änderung.'
Konzentrieren Sie sich nur auf die Verfügbarkeit, ignorieren Sie geringfügige Wort- oder Formatierungsänderungen.
"""
try:
completion = client.chat.completions.create(
model="gpt-3.5-turbo", # Oder "gpt-4", "gemini-pro" usw.
messages=[
{"role": "system", "content": "Sie sind ein hilfreicher Assistent."},
{"role": "user", "content": prompt}
],
max_tokens=150
)
return completion.choices[0].message.content
except Exception as e:
print(f"Fehler beim Aufrufen des KI-Modells: {e}")
return "AI-Analyse fehlgeschlagen."
# Beispielverwendung (normalerweise würden Sie dies in einer Schleife tun)
# Vorläufig simulieren wir eine Änderung
# Angenommen, 'previous_relevant_text' stammt von einem früheren Abruf
previous_relevant_text = "Nicht auf Lager. Erwartete Nachlieferung in 2 Wochen."
new_relevant_text = "Auf Lager! Begrenzte Menge verfügbar."
ai_response = ask_ai_about_change(previous_relevant_text, new_relevant_text, "Auf Lager")
print(f"Bewertung der KI: {ai_response}")
# Simulieren Sie keine Änderung
new_relevant_text_no_change = "Nicht auf Lager. Erwartete Nachlieferung in 3 Wochen."
ai_response_no_change = ask_ai_about_change(previous_relevant_text, new_relevant_text_no_change, "Auf Lager")
print(f"Bewertung der KI (Simulation keine Änderung): {ai_response_no_change}")
Hier wird der Agent wirklich zu “KI.” Anstatt komplexe Regex-Muster oder brüchige String-Vergleiche zu erstellen, sage ich der KI einfach, welche Art von Änderung ich suche. Es ist, als hätte man einen kleinen Praktikanten, der den Kontext versteht! Als ich das erste Mal ausprobierte, hatte ich Sorge, dass die KI durch leichte Wortvariationen verwirrt werden könnte. Aber mit einem guten Prompt war es überraschend stabil. Sie identifizierte korrekt, wann “Bald verfügbar” zu “Jetzt vorbestellen” wurde, als signifikante Änderung, obwohl die genauen Worte “Auf Lager” nicht vorhanden waren.
Schritt 4: Alles Zusammenfügen – Die Agentenschleife und Benachrichtigung
Ein Agent muss kontinuierlich laufen. Daher werden wir unsere Abruf- und Prüflogik in eine Schleife einwickeln. Und wenn er etwas findet, muss er uns darüber informieren!
import time
# ... (importiere requests, BeautifulSoup, os, OpenAI aus vorherigen Schritten) ...
# Globale Variable zum Speichern des zuletzt bekannten Status
last_known_status_text = ""
def send_notification(message):
print(f"\n!!! AGENTEN ALARM !!!\n{message}\n")
# Hier würden Sie mit einem echten Benachrichtigungsdienst integrieren:
# - E-Mail (mit smtplib)
# - Push-Benachrichtigungsdienst (Pushover, IFTTT-Webhooks, Telegram-Bot)
# - SMS-Gateway
# Zur Vereinfachung drucken wir einfach auf die Konsole.
# Beispiel für E-Mail (benötigt Konfiguration):
# import smtplib
# from email.mime.text import MIMEText
# msg = MIMEText(message)
# msg['Subject'] = 'Änderung der Webseite erkannt!'
# 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("E-Mail-Benachrichtigung gesendet.")
# except Exception as e:
# print(f"E-Mail senden fehlgeschlagen: {e}")
def run_agent(url, interval_seconds=300, target_keyword="Auf Lager"):
global last_known_status_text
print(f"Agent beginnt mit der Überwachung von {url} alle {interval_seconds} Sekunden.")
print("Erster Abruf...")
# Erster Abruf, um die Basislinie festzulegen
html_content = fetch_page_content(url)
if html_content:
last_known_status_text = extract_relevant_info(html_content)
print(f"Anfangsstatus festgelegt: {last_known_status_text[:100]}...")
else:
print("Konnte den initialen Inhalt nicht abrufen. Agent startet mit leerer Basislinie.")
# Wenn der erste Abruf fehlschlägt, wird der Agent im ersten Schleifeniteration erneut versuchen
while True:
print(f"\n[{time.strftime('%Y-%m-%d %H:%M:%S')}] Überprüfe {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: # Umgang mit dem Fall, dass der erste Abruf fehlgeschlagen ist
last_known_status_text = new_relevant_text
print(f"Basislinie nach anfänglichem Fehler festgelegt: {last_known_status_text[:100]}...")
if new_relevant_text != last_known_status_text:
print("Potenzielle Änderung erkannt. Frage KI...")
ai_analysis = ask_ai_about_change(last_known_status_text, new_relevant_text, target_keyword)
if "Keine wesentliche Änderung." not in ai_analysis:
send_notification(f"Webseitenaktualisierung für {url}:\n{ai_analysis}\nNeuer Text: {new_relevant_text[:200]}...")
last_known_status_text = new_relevant_text # Basislinie nur bei wesentlicher Änderung aktualisieren
else:
print(f"KI bestimmt: {ai_analysis} (geringfügig, ignoriert)")
# Auch wenn die KI sagt, dass es keine wesentliche Änderung gibt, möchten wir möglicherweise die Basislinie aktualisieren
# um wiederholte "potenzielle Änderungs"-Benachrichtigungen für denselben geringfügigen Unterschied zu verhindern.
# Oder, lassen Sie es wie es ist, wenn Sie möchten, dass die KI jedes Mal neu bewertet.
# Für dieses Beispiel werden wir aktualisieren, um zu verhindern, dass die KI für statische geringfügige Änderungen gespammt wird.
last_known_status_text = new_relevant_text
else:
print("Kein textueller Wechsel im relevanten Abschnitt erkannt.")
else:
print(f"In dieser Iteration konnte der Inhalt von {url} nicht abgerufen werden.")
time.sleep(interval_seconds) # Warten, bevor erneut überprüft wird
# --- Hauptausführung ---
if __name__ == "__main__":
# Konfigurieren Sie Ihre Ziel-URL und das gewünschte Intervall
# Achten Sie auf die Richtlinien der Website und senden Sie keine Anfragen zu häufig!
my_target_url = "https://www.ein-shop.com/neues-widget-X" # <<< DAS ERSETZEN!
monitoring_interval = 600 # Alle 10 Minuten prüfen (600 Sekunden)
desired_status = "Auf Lager" # Nach welchem Schlüsselwort suchen wir?
# WICHTIG: Stellen Sie sicher, dass Ihr OpenAI API-Schlüssel als Umgebungsvariable gesetzt ist!
# export OPENAI_API_KEY="sk-..." in Ihrem Terminal, bevor Sie ausführen.
run_agent(my_target_url, monitoring_interval, desired_status)
Ich habe mein Intervall auf 5 Minuten für dieses schwer fassbare Smart-Home-Gerät eingestellt. Jedes Mal, wenn ich die Nachricht "Überprüfung..." aufblitzen sah, hatte ich einen kleinen Anflug von Aufregung. Als die Benachrichtigung schließlich kam – "Auf Lager! Begrenzte Menge verfügbar." – Ich schwöre, ich hörte Engel singen. Ich klickte auf den Link, legte es in meinen Warenkorb und schloss innerhalb von Sekunden ab. Erfolg! Mein kleiner KI-Agent hatte mich vor endlosem Aktualisieren bewahrt und mir geholfen, dieses Gadget zu ergattern.
Handlungsrelevante Erkenntnisse für Ihren ersten KI-Agenten
- Klein anfangen: Versuchen Sie nicht, sofort einen komplexen Konversationsagenten zu bauen. Eine einfache Überwachungsaufgabe ist perfekt, um die Grundlagen zu lernen.
- Überprüfen Sie Ihr Ziel: Das Verständnis der HTML-Struktur der Webseite, die Sie überwachen, ist entscheidend. Verwenden Sie die Entwicklertools Ihres Browsers.
- Prompt Engineering ist der Schlüssel: Je besser Sie beschreiben, nach welcher Art von Änderung Sie beim KI-Modell suchen, desto genauer und nützlicher sind seine Antworten. Experimentieren Sie mit Ihren Prompts!
- Seien Sie respektvoll: Überlasten Sie Webseiten nicht mit Anfragen. Verwenden Sie angemessene Intervalle, überprüfen Sie
robots.txtund verstehen Sie die Nutzungsbedingungen einer Website hinsichtlich automatisierten Zugriffs. - Schützen Sie Ihre Schlüssel: Hardcodieren Sie API-Schlüssel niemals direkt in Ihr Skript. Verwenden Sie Umgebungsvariablen.
- Iterieren: Ihr erster Versuch könnte nicht perfekt sein. Meiner war es sicherlich nicht! Passen Sie Ihre `BeautifulSoup`-Selektoren an, verfeinern Sie Ihren KI-Prompt und optimieren Sie Ihre Benachrichtigungsmethode, bis es für Sie funktioniert.
Den kleinen Agenten zu bauen, war ein großer Vertrauensschub für mich. Es zeigte mir, dass KI nicht nur für große Unternehmen oder akademische Forschung ist. Es ist ein Werkzeug, das wir als Einzelbenutzer und kleine Entwickler verwenden können, um unsere eigenen Probleme zu lösen und unser digitales Leben ein wenig einfacher zu gestalten. Also gehen Sie voran, wählen Sie eine Webseite aus, die Sie nicht mehr manuell überprüfen möchten, und bauen Sie Ihren eigenen digitalen Bluthund. Sie werden erstaunt sein, was Sie erreichen können!
Verwandte Artikel
- Wenn Ihr Agent sich auflehnt: Kill-Switches meistern
- KI-Agenten im Immobilienwesen: Die Branche transformieren
- OpenAI API im Jahr 2026: 7 Dinge nach 3 Monaten Nutzung
🕒 Published: