Bau Der Ultimativen Ai Web Scraping Maschine Bau Der Ultimativen Ai Web Scraping Maschine

Bau der ultimativen AI-Web-Scraping-Maschine

Eines der Projekte, die ich unbedingt ausprobieren wollte, seitdem GPT4 veröffentlicht wurde, war der Versuch, einen Web-Scraper zu bauen, der Daten von jeder Website extrahieren kann. Nach einigen Wochen harter Arbeit ist die erste Version endlich bereit!

Tatsächlich habe ich versucht, dieses Projekt bereits im Januar um die Veröffentlichung von ChatGPT herum zu realisieren, aber die kleine Kontextfenstergröße und die damals noch nicht so fortschrittliche GPT3 API machten die Umsetzung fast unmöglich.

Seitdem hat sich jedoch einiges getan! GPT-4 Turbo unterstützt nun 128K TOKENS und GPT-4–32k ist auf einem Intelligenzniveau, das man durchaus mit dem von Einstein vergleichen kann. Mit diesen beiden Giganten können wir etwas wirklich MAGISCHES erschaffen.

Das Ziel ist, dass ich dem Scraper eine Frage zu einer Website stelle, und er mir direkt die Informationen liefert oder rekursiv das Internet (d.h. die Links auf der Seite) durchsucht, bis er die Antwort auf meine ursprüngliche Frage gefunden hat.

Lasst uns eintauchen!

Was ich verwenden werde

  • GPT-4-Turbo API
  • GPT-4–32k API
  • Crawlee (eine Web-Scraping-Bibliothek, die auf Playwright basiert, die Stealth-Funktionen für den Web-Scraping-Bot verbessert, um ihn wie einen menschlichen Nutzer erscheinen zu lassen, und eine Menge anderer nützlicher Funktionen)

Einer der ersten Gedanken, die mir beim Bau dieses Scrapers kamen, war, einfach den gesamten HTML-Code der Seite in den Kontext eines LLMs (Large Language Models) einzufügen und das Modell zu bitten, die Antwort auf die Anfrage des Nutzers auf der Seite zu finden. Das Modell hatte manchmal Erfolg, wenn der HTML-Code der Seite nicht zu lang war, aber dieser Ansatz brach häufig zusammen, wenn es um kompliziertere Seitenstrukturen ging.

Wie würdest du etwas auf einer Website suchen? Du würdest wahrscheinlich STRG+F drücken, um eine schnelle Suche nach dem gewünschten Begriff auf der Seite durchzuführen. Wir können diesen Schritt als ersten Teil unseres Algorithmus verwenden, um die Teile des HTML-Codes, die wir an GPT4 senden, einzugrenzen. GPT4 wird die Suchbegriffe vorschlagen, die wir für die STRG+F-Suche auf der Seite verwenden sollten.

Nehmen wir zum Beispiel an, du befindest dich auf der Wikipedia-Seite von Minecraft und möchtest das Veröffentlichungsdatum des Spiels herausfinden. Einige Begriffe, die du vielleicht ausprobieren würdest (von wahrscheinlich bis unwahrscheinlich):

  • Veröffentlichungsdatum, Veröffentlichung, veröffentlicht, Datum, Start, usw.

Anschließend würden wir diese Begriffe nehmen und eine einfache Regex-Suche auf der Seite durchführen, um die HTML-Elemente zu finden, die übereinstimmen. Anstelle dieser einfachen Suchmethode könnten wir auch einen Vektor-Suchalgorithmus verwenden. Dabei würden wir den gesamten Inhalt der Seite in Chunks aufteilen und einbetten, eine Vektor-Suche mit einer Suchanfrage und den Einbettungen durchführen und die K HTML-Elemente zurückgeben, die am besten zur Suchanfrage passen. Ich habe diesen Ansatz noch nicht ausprobiert, da ich faul bin und es mehr Arbeit erfordert, aber ich denke, dass er je nach Umsetzung gut funktionieren könnte.

Auswahl des besten einzelnen Elements

Jetzt, da wir unsere Suche durchgeführt haben, haben wir wahrscheinlich eine Menge HTML-Elemente, die wir durchgehen müssen. Wir setzen eine Token-Grenze für die Anzahl der HTML-Elemente, die wir verarbeiten wollen, um die Grenze von GPT4 nicht zu überschreiten, und laden unsere Liste von Elementen. Nun wollen wir diese Liste auf ein einziges Element reduzieren, das entweder die direkte Antwort auf das Ziel der Suche („Veröffentlichungsdatum von Minecraft?“) ist oder ein Link zu einer anderen Seite, die wahrscheinlich die Antwort enthält.

Um dies zu erreichen, nutzen wir einen weiteren GPT4-Aufruf, um das Element auszuwählen. Hier ist der Code:

Bau der ultimativen AI-Web-Scraping-Maschine

Wir erstellen einfach eine nummerierte Liste als String und hängen jedes Element an die Liste an, um sie GPT4 zu präsentieren, das dann das Element zurückgibt, das am besten zur ursprünglichen Frage passt.

Bau der ultimativen AI-Web-Scraping-Maschine

Wir geben das einzelne Element, das GPT4 ausgewählt hat, zusammen mit der Anzahl der Elemente zurück, die in der Regex-Suche gefunden wurden, um unserem Agenten zusätzliche Informationen zur Entscheidungsfindung zu geben.

Der Agent

Dies ist ein guter Zeitpunkt, um den Agenten, oder Entscheidungsträger, zu erwähnen, der im Falle eines Fehlschlags der Suche, d.h. wenn keine übereinstimmenden Elemente gefunden werden, diesen gesamten Schritt mit unterschiedlichen Begriffen wiederholen würde. Dieser Agent wäre auch derjenige, der entscheidet, ob die Ausgabe, die durch die Nutzung seiner Werkzeuge (d.h. das Durchsuchen der Seite nach den übereinstimmenden Elementen) erzielt wird, eine zufriedenstellende Antwort auf die ursprüngliche Eingabefrage des Nutzers ist.

Ich habe LangChain für den Agenten verwendet, da sie Startercode für verschiedene Arten von Agenten haben. In unserem Fall verwenden wir den OpenAIFunctionsAgent, da wir unseren Scraper als ein Werkzeug einrichten wollen, das der Agent nutzen kann.

Bau der ultimativen AI-Web-Scraping-Maschine

Mit diesem einen Werkzeug kann der Agent nun die ersten Schritte meines Plans ausführen: eine Webseite betrachten und das wichtigste Element finden, das die ursprüngliche Suchanfrage beantwortet. Wenn wir zum Beispiel nur die Regeln in Minecraft wissen wollen und unser Werkzeug die Informationen von der Seite erhält, kann der Agent uns einfach den gefundenen Text geben und den Job beenden.

Andererseits, wenn wir etwas wie „Die Größe einer IPV4-Adresse“ auf der Wikipedia-Seite von Minecraft suchen, findet der Agent möglicherweise nur einen Link zu der Seite über IP-Adressen in der Nähe eines Abschnitts, der sich mit Multiplayer-Spielen befasst, und er wird die Unterseite rekursiv mit dem Scraper durchsuchen, um die mögliche Antwort zu finden:

Bau der ultimativen AI-Web-Scraping-Maschine

Und schließlich findet er die richtige Antwort!

Bau der ultimativen AI-Web-Scraping-Maschine

LETS GOOO!!! Es war so aufregend, das funktionieren zu sehen.

Was haben wir gelernt?

Ich musste einiges an der Aufforderung des Agenten herumprobieren, um ihn dazu zu bringen, das Web-Scraping-Werkzeug auf die richtige Weise zu verwenden.

Bau der ultimativen AI-Web-Scraping-Maschine

Eine riesige Erkenntnis für mich (und eine, die ich schon einmal gewonnen, aber immer wieder vergesse…) ist, dass die Qualität von GPT erheblich nachlässt, je mehr Informationen man ihm gibt, insbesondere bei der Funktionsaufrufung. Ich habe ihm eine riesige Aufforderung mit verschiedenen Fällen für verschiedene Szenarien gegeben und mich gewundert, warum er immer wieder auf dumme Entscheidungen zurückgriff.

Grundsätzlich solltest du deine Agenten-Aufforderungen so kurz und prägnant wie möglich halten, wenn du die besten Ergebnisse erzielen willst. Das mag offensichtlich klingen, aber ich habe den Fehler schon viel zu oft gemacht und mich dann darüber beschwert, dass Agenten nutzlos sind. 😉

Ich hoffe, dass dieser Artikel interessant und hilfreich war und freue mich über dein Feedback.

Teil 2 kommt bald! Ich werde den Code teilen, sobald er etwas ausgereifter ist. Einige Funktionen, die ich hinzufügen werde, also bleib dran:

  • Interaktion mit der Seite mithilfe von GPT-4 Vision, um Dinge wie Cookie-Popups zu umgehen
  • Erhöhung der Tarnung des Crawlers (und zuverlässigerer Zugriff auf von Cloudflare geschützte Seiten)
  • Aktualisierung der Aufforderung des Agenten, um zu vorherigen Seiten zurückzukehren, wenn er bei der Navigation durch Links in der Suche nach einer Antwort auf eine Sackgasse stößt (Rückwärtsgang)
  • Ausprobieren von Vektor-Einbettungen anstelle einer einfachen Keyword-Suche

Credit geht an Tim Connors (https://timconnors.co/), der sich viele Teile dieses großartigen Algorithmus ausgedacht hat, und an dieses Projekt (https://github.com/dirkjbreeuwer/gpt-automated-web-scraper, das von beiden Lösungen inspiriert ist und das du dir unbedingt ansehen solltest.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert