{"id":16,"date":"2025-10-23T19:17:14","date_gmt":"2025-10-23T19:17:14","guid":{"rendered":"http:\/\/portfolio.local\/?p=16"},"modified":"2025-11-01T00:18:37","modified_gmt":"2025-10-31T23:18:37","slug":"oliver-voss-ki-chatbot","status":"publish","type":"post","link":"https:\/\/content.doppel-t.com\/index.php\/2025\/10\/23\/oliver-voss-ki-chatbot\/","title":{"rendered":"Einen Marketing-Kritiker in die Hosentasche packen: Wie ich Oliver Voss als KI-Chatbot klonte"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u00dcberblick<\/h2>\n\n\n\n<p>Jeder in der Marketing-Bubble kommt irgendwann an Oliver Voss nicht vorbei. Auf Instagram bewertet er Plakate und Werbung auf eine Art und Weise, die einzigartig ist \u2013 direkt, fachkundig und mit einer Prise Humor, die Marketer entweder lieben oder hassen.<\/p>\n\n\n\n<p>Genau diese unique Art und Weise in einem Spa\u00dfprojekt synthetisch mit KI herzustellen, war die Idee dahinter. Das Ergebnis ist ein hyperpersonalisierter Chatbot, der auf den gesamten Instagram-Content von Oliver Voss zur\u00fcckgreifen kann und sowohl auf Fragen antwortet als auch proaktiv Werbematerialien bewertet \u2013 als h\u00e4tte man einen pers\u00f6nlichen Marketing-Kritiker in der Hosentasche.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was der Chatbot kann<\/h2>\n\n\n\n<p>Der Bot arbeitet intelligent kontextabh\u00e4ngig: Je nachdem, welchen Input der User liefert, trifft das System selbstst\u00e4ndig die Entscheidung, wie es agieren soll. Stellt man eine Frage wie &#8222;Was hat dir am letzten DM-Plakat nicht gefallen?&#8220;, zieht es relevante Transkripte aus der Vektordatenbank heran und antwortet basierend auf tats\u00e4chlichen Bewertungen. L\u00e4dt man hingegen ein Plakat-Layout hoch, wechselt es in den Bewertungsmodus und gibt direktes Feedback zu Headline, Bildaufteilung, Farbwahl \u2013 mit genau der Tonalit\u00e4t, die Oliver Voss ausmacht.<\/p>\n\n\n\n<p>Diese Entscheidungslogik wird \u00fcbrigens in Langfuse getrackt, sodass nachvollziehbar ist, welche Aktionen das Modell wann und warum ausf\u00fchrt. Das Ganze funktioniert sowohl f\u00fcr Text als auch f\u00fcr Bilder. Werbetexte, Social-Media-Posts, komplette Kampagnen \u2013 alles kann bewertet werden. Und nat\u00fcrlich mit der gewissen Humorfarbe, die das Original auszeichnet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Technische Architektur<\/h2>\n\n\n\n<p>Die Plattform ist eine Next.js-App, die API-Anfragen an OpenAI schickt. Im Hintergrund arbeitet GPT-4o als Hauptmodell. Die eigentliche Magie liegt aber nicht im LLM selbst, sondern in der Datenpipeline, die daf\u00fcr sorgt, dass der Bot tats\u00e4chlich wie Oliver Voss denkt und argumentiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Data Scraping und mehrstufige Aufbereitung<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Phase 1: Content-Extraktion mit n8n<\/h3>\n\n\n\n<p>Der erste Schritt war die Extraktion aller relevanten Daten vom Instagram-Account. \u00dcber einen Scraper wurden Videos, Bilder, Captions und alle verf\u00fcgbaren Metadaten geladen. Diese Rohdaten mussten dann in eine Form gebracht werden, die f\u00fcr die Vektorisierung geeignet ist.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Phase 2: Intelligente Content-Verarbeitung<\/h3>\n\n\n\n<p>Die Aufbereitung erfolgte mehrstufig \u00fcber n8n-Workflows. Im ersten Schritt wurden Videos transkribiert \u2013 Oliver Voss\\&#8216; Content ist prim\u00e4r video-basiert, und die gesprochenen Worte sind das Herzst\u00fcck seiner Bewertungen. Aus diesen Transkripten wurden im zweiten Schritt Zusammenfassungen mit Key Takeaways erstellt. Das reduziert nicht nur die Datenmenge, sondern destilliert die wichtigsten Aussagen heraus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Phase 3: Marken- und Tag-Erkennung<\/h3>\n\n\n\n<p>Ein kritischer Aspekt f\u00fcr sp\u00e4tere Suchanfragen: Welche Marke wird im Video bewertet? Es wurde gepr\u00fcft, ob ein Markenname im Transkript oder in der Zusammenfassung erkennbar war. Sollte kein Name genannt worden sein, wurden Screenshots aus dem Video analysiert, um Logos oder Markennamen visuell zu identifizieren. Erst wenn auch das fehlschlug, wurde einfach keine Marke hinterlegt.<\/p>\n\n\n\n<p>Zus\u00e4tzlich wurde ein Tag-System implementiert, das sich aus Beschreibungen und Zusammenfassungen automatisch Tags extrahiert hat \u2013 etwa &#8222;Plakat&#8220;, &#8222;Social Media&#8220;, &#8222;Print&#8220;, &#8222;Headline&#8220;, &#8222;Bildsprache&#8220; etc. Diese Tags erm\u00f6glichen sp\u00e4ter pr\u00e4zisere Suchen in der Vektordatenbank.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Phase 4: Strukturierte Datentabelle<\/h3>\n\n\n\n<p>Am Ende dieser Pipeline stand eine umfassende Datentabelle mit Transkripten, Zusammenfassungen, Marken, Tags und Metadaten. Diese strukturierte Grundlage war entscheidend f\u00fcr die n\u00e4chste Phase: die Vektorisierung.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vektorisierung mit semantischer Segmentierung<\/h2>\n\n\n\n<p>Die Transkripte und Zusammenfassungen wurden in eine selbst gehostete Open-Source-Vektordatenbank \u00fcberf\u00fchrt. Dabei wurde nicht einfach nach fixen Token-L\u00e4ngen abgeschnitten \u2013 ein h\u00e4ufiger Fehler bei RAG-Systemen. Stattdessen erfolgte eine semantische Segmentierung: Abs\u00e4tze wurden logisch getrennt, sodass zusammenh\u00e4ngende Gedankeng\u00e4nge nicht mittendrin abgeschnitten werden.<\/p>\n\n\n\n<p>Die Metadaten \u2013 Marken, Tags, Video-IDs \u2013 wurden direkt in die Vektorisierung integriert. Das erm\u00f6glicht sp\u00e4ter hybride Suchen: Man kann sowohl semantisch suchen (&#8222;Wie bewertet er Headlines?&#8220;) als auch strukturiert filtern (&#8222;Zeig mir alle Bewertungen zu McDonald\\&#8217;s&#8220;).<\/p>\n\n\n\n<p>Diese Vektordatenbank wurde dann als Tool dem LLM \u00fcber die OpenAI API zur Verf\u00fcgung gestellt. Das bedeutet: GPT-4o kann bei Bedarf eigenst\u00e4ndig entscheiden, ob es Suchen in der Vektordatenbank durchf\u00fchren muss, und die relevantesten Inhalte f\u00fcr seine Antwort heranziehen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prompt Engineering und Iterative Optimierung<\/h2>\n\n\n\n<p>Ein hyperpersonalisierter Chatbot steht und f\u00e4llt mit dem Prompt. Es reicht nicht, einfach zu schreiben &#8222;Antworte wie Oliver Voss&#8220; \u2013 die Tonalit\u00e4t, der Humor, die fachlichen Schwerpunkte m\u00fcssen pr\u00e4zise definiert werden.<\/p>\n\n\n\n<p>Das Prompt Engineering lief \u00fcber Langfuse, das zentrale Prompt-Management erm\u00f6glicht. Versionierte Prompts mit vollst\u00e4ndiger Historie machten es m\u00f6glich, verschiedene Formulierungen zu testen und iterativ zu optimieren. Welche Systemprompt-Variante f\u00fchrt zu den authentischsten Antworten? Wie viel Kontext braucht das Modell? Wann sollte es proaktiv nachfragen?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">LLM as a Judge: Automatisierte Qualit\u00e4tssicherung<\/h2>\n\n\n\n<p>Hier wird es besonders interessant: Um die Antwortqualit\u00e4t systematisch zu bewerten, wurde ein &#8222;LLM as a Judge&#8220;-Prinzip implementiert. Ein kleineres, spezialisiertes Modell pr\u00fcft die Antworten des Chatbots anhand konkreter Kriterien:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Entspricht die Tonalit\u00e4t dem Original?<\/li>\n\n\n\n<li>Sind die fachlichen Aussagen korrekt und relevant?<\/li>\n\n\n\n<li>Wird auf die Nutzerfrage pr\u00e4zise eingegangen?<\/li>\n\n\n\n<li>Ist die Antwort weder zu kurz noch zu ausschweifend?<\/li>\n<\/ul>\n\n\n\n<p>Jede Antwort erh\u00e4lt einen Score. Die besten Antworten wurden herausgefiltert und dienten als Benchmark f\u00fcr weitere Optimierungen. Dieses automatisierte Feedback-System ist deutlich skalierbarer als manuelle Reviews und erm\u00f6glicht kontinuierliche Verbesserung.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Performance-Monitoring mit Langfuse<\/h2>\n\n\n\n<p>Jede Chatnachricht, die vom Nutzer abgeschickt wird, wird in Langfuse erfasst. Das schafft vollst\u00e4ndige Transparenz dar\u00fcber, wie die KI sich verh\u00e4lt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wie lange dauert eine Antwort insgesamt?<\/li>\n\n\n\n<li>Wie lange dauert ein Tool Call zur Vektordatenbank?<\/li>\n\n\n\n<li>Welche Metadaten wurden f\u00fcr die Suche verwendet?<\/li>\n\n\n\n<li>Wie viele Tokens wurden verbraucht?<\/li>\n\n\n\n<li>Welche Prompt-Version wurde verwendet?<\/li>\n<\/ul>\n\n\n\n<p>Diese Metriken sind nicht nur f\u00fcr Debugging wertvoll, sondern auch f\u00fcr strategische Optimierungen. Wenn Vektorsuchen zu lange dauern, liegt das am Query-Embedding oder an der Datenbank-Konfiguration? Wenn Antworten zu lang sind, liegt es am Modell oder am Prompt?<\/p>\n\n\n\n<p>Das Performance-Monitoring erm\u00f6glicht datengetriebene Entscheidungen statt Bauchgef\u00fchl.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deployment auf Vercel<\/h2>\n\n\n\n<p>Die gesamte App wurde auf Vercel deployed, was nahtlose Integration mit dem Next.js-Framework bietet. Automatische Deployments bei jedem Push, Edge Functions f\u00fcr niedrige Latenz und einfaches Umgebungsvariablen-Management machen Vercel zur idealen Plattform f\u00fcr diesen Use Case.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was das Projekt zeigt<\/h2>\n\n\n\n<p>Auf den ersten Blick ist es ein Spa\u00dfprojekt. Auf den zweiten Blick ist es ein vollst\u00e4ndiges RAG-System mit mehrstufiger Datenpipeline, semantischer Vektorisierung, automatisierter Qualit\u00e4tssicherung und umfassendem Performance-Monitoring.<\/p>\n\n\n\n<p>Die Herausforderung lag nicht darin, einen generischen Chatbot zu bauen \u2013 das kann jeder mit der OpenAI API in einer Stunde. Die Herausforderung lag darin, einen Chatbot zu bauen, der tats\u00e4chlich wie eine spezifische Person denkt, argumentiert und bewertet. Das erfordert sorgf\u00e4ltige Datenaufbereitung, intelligente Vektorisierung und pr\u00e4zises Prompt Engineering.<\/p>\n\n\n\n<p>Und genau das macht das Projekt zu einem spannenden Showcase f\u00fcr hyperpersonalisierte KI-Systeme.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hyperpersonalisierter Chatbot mit RAG-System zur Bewertung von Werbematerialien im Stil von Oliver Voss<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[4,15,6,16,7,8,9,17,11,12,18],"class_list":["post-16","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-automation","tag-gpt-4-1","tag-langfuse","tag-llm-observability","tag-n8n","tag-next-js","tag-prompt-engineering","tag-rag","tag-supabase","tag-token-tracking","tag-vector-database"],"_links":{"self":[{"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/posts\/16","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/comments?post=16"}],"version-history":[{"count":3,"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/posts\/16\/revisions"}],"predecessor-version":[{"id":80,"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/posts\/16\/revisions\/80"}],"wp:attachment":[{"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/media?parent=16"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/categories?post=16"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/content.doppel-t.com\/index.php\/wp-json\/wp\/v2\/tags?post=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}