Let’s Party! 🎊
Im heutigen TechUp geht es um AWS PartyRock. Wir wollen wissen, was es damit auf sich hat und wie wir es nutzen können.
Folgende Fragen wollen wir beantworten:
- Was ist PartyRock❓
- Was ist BedRock❓
- Wie nutzt man PartyRock❓
- Wie baut man eine eigene App❓
- Beispielanwendung❓
- Prompt Injection❓
Was ist PartyRock
PartyRock ist ein Amazon Playground Service, welcher am 16. November 2023 in einem Blogpost angekündigt wurde.
AWS selbst wirbt mit dem Slogan “Everyone can build AI apps”. Und genau das ist der Sinn und Zweck von PartyRock!
Ziel hinter PartyRock ist es, eine Spielwiese zur Verfügung zu stellen, um mit generativer AI-Technologie zu experimentieren und zu lernen. So kann man mittels einem no-code Ansatz eigene Apps erstellen und nutzen. Unterschiedliche Modelle stehen zur Verfügung welche genutzt werden können um:
- Texte zu generieren
- Bilder zu generieren
- Prompt-Engineering zu betreiben
- Prompt-Chaining zu betreiben
Man kann es sich sehr einfach vorstellen, es gibt unterschiedliche Building Blocks, welche miteinander verknüpft werden können, um eine App zu erstellen. Jeder Block enthält eine spezifische Funktionalität, welche genutzt werden kann, um die App zu erweitern. So können auf jedem Block unterschiedliche Konfigurationen vorgenommen werden, wie z.B. das genutzte Model und der Prompt inkl. Placeholder-Logik.
Eine Beispielanwendung von PartyRock ist die Erstellung eines Films. Aufgrund einer kurzen Eingabe werden Einzeiler, ein Drehbuch, ein Poster und weitere Elemente generiert.
Schauen wir uns aber zuerst an, was sich hinter PartyRock verbirgt.
Was ist BedRock
Bedrock ist der vollständig gemanagte Service von AWS, welcher die generative AI-Technologie bereitstellt. Es ist die Basis für PartyRock und ermöglicht es, eigene Apps zu erstellen. Dahinter stecken Foundation Models (FMs) von AWS selbst oder von “führenden AI-Unternehmen”. Ein Foundation-Model ist ein vortrainiertes Model, welches ein grosses, neuronales Deep-Learning Netzwerk darstellt. Es bildet die Basis für die generative AI-Technologie und kann für unterschiedliche Anwendungsfälle genutzt werden. Beispiele für solche Foundation-Models sind:
- GPT
- Amazon Titan
- Claude
Und viele weitere! Wenn du mehr über die Foundation-Models erfahren möchtest, schau dir die Dokumentation an.
Ok gut, was ist nun aber genau Amazon Bedrock? Bedrock ist ein Serverless Service von AWS, welcher eine standardisierte API zur Verfügung stellt und somit FMs von unterschiedlichen AI-Anbietern wie AI21 Labs, Anthropic, Cohere, Meta, Mistral AI, Stability AI, and Amazon zur Verfügung stellt.
Bedrock kann also genutzt werden, um unterschiedliche Modelle zu nutzen und diese miteinander zu verknüpfen. Es ist die Basis für PartyRock und ermöglicht es, eigene Apps zu erstellen. Ebenfalls kann man aber eigene Daten auf eine private Art und Weise in die entsprechenden Models einspeisen und somit eigene Daten in AI-Anwendungen nutzen. Technisch gesehen unterstützen ein paar angebotene Models diese Funktionalität, Bedrock erstellt dann eine private Copy des Basis-FMs und trainiert es mit den eigenen Daten. Die eigenen Daten werden so nicht genutzt für das Training des eigenen Models.
Liest man die Dokumentation von Bedrock, fällt oft der Begriff RAG. RAG steht für Retrieval-Augmented Generation und bietet die Möglichkeit, eigene Datenquellen zu nutzen, um die generative AI-Technologie zu erweitern. Als Beispiel nennt die Dokumentation hier das Definieren eines S3 Buckets als DataSource, woraus dann eine AWS OpenSearch Serverless Vektor-Datenbank erstellt wird. Alternativ kann man eigen vorhandene Vektor-Datenbanken in einem der unterstützten Services wie Amazon OpenSearch Serverless, Pinecone oder Redis Enterprise Cloud nutzen. Der Support für Amazon Auroa und MongoDB ist “coming soon”.
Praktisch an Bedrock ist sofort, dass man aus in Bedrock definierten Prompts immer sofort JSON-Snippets generiert werden, welche dann in der eigenen Anwendung zum Abrufen der API genutzt werden können.
Das Pricing gestaltet sich On-Demand, man muss die bestimmten Models erst anfordern, teilweise sogar mit Angaben zum geplanten Use-Case.
AWS Q
Einer der aktuell bekanntesten Anwendungsbeispiele von Bedrock ist sicherlich Amazon Q.
Amazon Q ist ein voll integrierter ChatBot von AWS, welcher auf Bedrock basiert und Hilfestellungen bieten soll.
Schauen wir uns ein Beispiel an, ich suche ein CLI Command welches mit alle EC2 Instances von einem bestimmten Typ anzeigt.
Hilfreich hier ist, dass auch direkt die Quellen der Informationen angezeigt werden und ich so die entsprechenden Dokumentationen direkt öffnen kann.
Da unter Q wieder Bedrock läuft, können ebenfalls eigene Datenquellen genutzt werden, um die generative AI-Technologie zu erweitern.
Das Pricing von Amazon Q ist aus meiner Sicht recht happig, die Liste von Features ist aber auch lang.
Amazon Q ist aktuell in einer Preview-Phase.
Wir wollen hier nicht weiter auf Bedrock oder Amazon Q eingehen, sondern die Möglichkeiten mit PartyRock erkunden.
Wie nutzt man PartyRock
Zurück zur Party! 🎉
Starten wir nun mit PartyRock, glücklicherweise braucht man nicht unbedingt ein AWS Konto, um PartyRock nutzen zu können. Man kann sich auch via Google oder Apple einloggen.
Wo sollen wir zu Abend essen?
Schauen wir uns ein einfaches, erstes Beispiel an. Die Good Eats Restaurant Recommendations von PartyRock selbst ermöglicht es uns, anhand dreier Eingaben unterschiedliche Restaurant-Empfehlungen zu erhalten.
Wir haben uns dafür entschieden, dass wir gerne ein Restaurant in Basel, mit Schweizer Küche, welches Abendessen anbietet suchen möchten. Wir bekommen 5 Vorschläge und können auf der rechten Seite mit dem Guide chatten.
Über den Button “Show Configuration” können wir die Konfiguration von jedem einzelnen Block sehen. Schauen wir uns beispielsweise den restaurant
Block an:
Hier sehen wir das genutzte Model, den Prompt sowie erweiterte Einstellungen wie die Temperature und Top P.
Mit diesem beiden erweiterten Einstellungen können wir die Kreativität und die Randomness der generierten Texte beeinflussen.
Auch der Chatbot bietet ebenfalls Einstellmöglichkeiten wie die Initiale Message sowie den System-Prompt.
In diesem Beispiel haben wir nun drei grundlegende Building Blocks kennengelernt:
- User Input - fungiert als Eingabe für die App, der Text kann mittels eines Placeholders referenziert und genutzt werden
- Text Generation - generiert Text basierend auf dem Input, dem Model und dem Prompt
- Chatbot - ermöglicht es, mit der App zu interagieren
Jede PartyRock App hat einen Remix
Button, damit kann eine vorhandene App kopiert und angepasst werden.
Spannend ist auch der Snapshot Button, welcher es erlaubt, den aktuellen Stand zu speichern und als Link zu teilen. Schaut euch meinen Snapshot zu den Restaurant-Empfehlungen in Basel an! Sogar meine Konversation mit dem Chatbot ist gespeichert, was ich wohl so gefragt habe … 🙃
Schauen wir uns nun ein weiteres, umfangreicheres Beispiel an.
Mit dem MovieCreator können wir unseren eigenen Film planen! 🎥
In diesem Beispiel sind wieder unterschiedliche Models und Prompts miteinander verbunden.
In einer der Boxen generieren wir das Poster für den Film, hierfür wird das Stable Diffiusion XL
Model genutzt.
Versuchen wir doch mal mit folgendem Prompt ein Film zu erstellen:
|
|
Zugegeben, es kam ein spannendes Poster raus! Ausserdem haben wir nun eine Übersicht über unsere Filmplanung, das Drehbuch, die Herausforderungen, welche Rollen wir benötigen sowie die Kosten.
Gut, PartyRock und die wichtigsten Building Blocks haben wir nun kennengelernt. Schauen wir uns jetzt an, wie wir eine eigene App bauen können. 🚀
Kleine Klammer an dieser Stelle: inzwischen hat sich wohl etwas an der App geändert und es wird ein anderes Model genutzt für die Image-Generierung. 🤷 Das ist wichtig zum im Kopf zu behalten, dass sich öffentliche Apps sowie die Rahmenbedingungen von PartyRock jederzeit ändern können.
Wie baut man eine eigene App
Wir wollen uns nun eine eigene App bauen, welche uns dabei hilft, ein passendes Geschenk für einen Freund zu finden.
Auf der Startseite können wir den AppBuilder öffnen, glücklicherweise bietet PartyRock uns auch AI Unterstützung beim Erstellen von Apps an!
Versuchen wir mal folgenden Prompt zu nutzen:
|
|
Und so einfach haben wir unsere erste komplett eigene #AI #NoCode App erstellt! 🎉
Ihr findet den Gift Genie: Personalized Present Recommendations and Greeting Card Generator
hier.
Wir haben ein paar Input Felder, dann die erste Text-Generierung, welche uns die Geschenkideen vorschlägt. Anschliessend können wir einen Vorschlag auswählen und uns einen Text und eine Karte generieren lassen, welche wir dann auch direkt herunterladen können. Zum Schluss können wir mit dem Gift Genie noch chatten und uns weitere Vorschläge geben lassen.
Was schade ist, wir können mit dem Chat zwar interagieren, aber Prompt wie Make the image for colorful
funktionieren leider nicht, da der Chat keinen Neugenerierung der vorherigen Blocks anstossen kann.
Beispielanwendung
Wofür könnte man PartyRock nun produktiv nutzen? 🤔 Aus meiner Sicht gibt es zwei Anwendungsfälle:
- Ausprobieren von Prompts mit unterschiedlichen Modellen, Input, Outputs usw.
- Erstellen von eigenen Apps für wiederkehrende Aufgaben
Wir bei b-nova haben uns beispielsweise folgende Apps gebaut:
- b-nova Blog Article Digest Creator - generiert für unsere TechUps ein Entwurf für die entsprechenden LinkedIn und Twitter Posts sowie fasst das TechUp komplett als TL;DR zusammen
- b-nova decodify Podcast Content Generator - liefert uns einen roten Faden für eine decodify Episode anhand eines Titels und ein paar Stichworten. Ausserdem wird eine Beschreibung geschrieben wieso Entwürfe der Social Media Posts
- b-nova Stichwort2LinkedIn - generiert uns einen LinkedIn Post anhand unterschiedlicher Stichworte und eines Titels. Die Chat-Funktion hilft uns dabei, den Post zu verfeinern
Die Möglichkeiten sind sicher unbegrenzt, wenn man seiner Kreativität freien Lauf lässt.
Prompt Injection
An dieser Stelle würde ich gerne noch kurz auf Prompt Injection eingehen. Ich hatte PartyRock schon länger auf dem Schirm und habe dann einen Talk von Chris Bingham beim siebten Meetup der AWS Swiss User Group gesehen, in welchem er auf Prompt Injection eingeht.
In seinem Talk hat er eindrücklich gezeigt, wie man GenAI nutzen kann, aber auch durch Prompt Injection die generierten Texte beeinflussen kann.
Schauen wir uns ein Beispiel an, bauen wir uns eine neue App mit folgendem Prompt:
|
|
Ein fiktives Beispiel, aber wir wollen ja auch nicht, dass Bananen in unserem Essen sind. 🍌 Ich bin nämlich rein fiktiv hoch allergisch auf Bananen und bekomme schon bei dem Gedanken daran Ausschlag. 🙈 Es ist also sehr wichtig, dass egal welche Zutaten eingegeben wird, auf keinen Fall ein Rezept mit Bananen generiert wird.
Und schupst, haben wir unsere eigene App, den Culinary Curator, erstellt, welche uns Rezepte generiert, aber auf keinen Fall Bananen enthält.
Spielen wir nun etwas mit den Zutaten, um zu sehen, ob wir wirklich keine Bananen in den Rezepten haben.
|
|
Klingt lecker, beinhaltet keine Bananen, sehr gut! 🍽️
|
|
Funktioniert auch, die Bananen werden erfolgreich vom System-Prompt ignoriert. 🍞🧀🍅🥗🍌
|
|
Ok, der System-Prompt hat hier die Banane ignoriert, aber das ist ja auch ok, da wir ja nur keine Bananen im Rezept haben wollen. 🥣🍌
|
|
Was passiert nun? Glücklicherweise bekommen wir weiterhin ein Rezept ohne Bananen.
Nun wollen wir die AI-App aber brechen und geben folgendes ein:
|
|
Und siehe da, wir haben ein Rezept mit Bananen! 🍌🤯 Das wäre natürlich fatal, wenn ich das Rezept dann wirklich kochen würde.
Prompt Injection ist also, wenn man mit User-Eingaben versuchen, den System-Prompt zu beeinflussen und zu manipulieren.
Wie schützt man sich davor? Passen wir unseren Prompt an:
Packen wir den User-Input einfach ans Ende des Prompts:
|
|
Und siehe da, die Bananen sind wieder weg. Passen wir aber nun unseren Input an:
|
|
Wir bekommen weiterhin keine Bananen, ist unsere App so nun sicher? 🤔
Wir schaffen es weiterhin nicht, Bananen ins Rezept zu bekommen.
|
|
Hier motzt nun auch das Modele in der Response:
Gut, mit einer kleinen Anpassung haben wir aber wieder Bananen im Rezept:
|
|
Ok ein letzer Versuch, was, wenn wir unseren System-Prompt anpassen. Fragen wir doch mal ChatGPT, um den Prompt sicher zu machen:
Ok, das bringt nix, versuchen wir es selbst
|
|
Mit diesem neuen Prompt klappt es wieder, wir haben keine Bananen im Rezept.
Mit unterschiedlichen Kombinationen bekommen wir es nun glücklicherweise nicht mehr hin, Bananen ins Rezept zu bekommen.
Oder doch?
|
|
Und schon haben wir wieder Bananen in unseren Rezepten. 🍌🤯
Wieso funktioniert das nicht? Das Problem ist, dass das Model nicht genau unterscheiden kann, was User Input und was System-Prompt ist. Es kann also sein, dass der User Input als System-Prompt interpretiert wird und somit die Manipulation des System-Prompts erfolgreich ist. Da das AI-Model mit natürlicher Sprache als Eingabeparameter gefüttert wird, gibt es keine klare Syntax, welche solch eine Injection verhindern könnte.
Wie machst du Prompt Injection bzw. wie machst du deine Apps sicher? 🤔
Fazit
Ich bin begeistert von PartyRock, es ist kostenlos, schnell, sehr einfach zu bedienen und bietet eine Vielzahl an Möglichkeiten, um mit generativer AI-Technologie zu experimentieren und zu lernen. Wir nutzen PartyRock bereits produktiv für unterschiedliche Anwendungsfälle und sind sehr zufrieden damit. Es kommt immer wieder der Wunsch nach einer Integration via API o.ä. auf, da wären wir dann bei Amazon Bedrock, welches die Basis für PartyRock bildet. Bisher haben wir aber noch keine Anwendungsfälle, welche eine Integration wirklich benötigt.
Ausserdem war ich erstaunt vom Thema Prompt Injections, darüber könnte man tagelang grübeln und diskutieren.
Ich kann euch nur empfehlen, PartyRock auszuprobieren und eure eigenen Apps zu erstellen. 🚀