Blog
Selbstgeführte Meditationen mit KI auf Azure

Wie Sie mit großen Sprachmodellen einzigartige Inhalte erstellen
Fällt es Ihnen manchmal schwer, Inhalte zu erstellen? Werden Sie Opfer von Wiederholungen? Ganz gleich, ob es sich um einen Blog, ein Handbuch oder einen Podcast handelt, den Sie zu produzieren versuchen, Large Language Models können Ihnen helfen, einzigartige Inhalte zu erstellen, wenn Sie sie richtig einsetzen. In diesem Beitrag kombiniere ich GPT-4, GPT-3.5, DALL-E, Azure Machine Learning und Azure AI Speech (früher Cognitive Services), um täglich neue Inhalte zu erstellen.
Eine selbstgeführte Meditation ist in der Regel eine Audiodatei, bei der ein Sprecher Ihnen hilft, sich auf ein Thema zu konzentrieren. Wenn Sie schon einmal meditiert haben, haben Sie wahrscheinlich eine mobile App wie Calm oder Headspace verwendet. Diese Apps bieten großartige Inhalte für selbstgeführte Meditationen, aber ihr Angebot ist begrenzt. Diese Einschränkung wird besonders deutlich, wenn Sie einen bestimmten Meditationsstil bevorzugen. Ich habe nichts gegen Wiederholungen, aber wenn dieselbe Audiodatei zweimal abgespielt wird, wird sie mir zu bewusst, um effektiv zu sein. Im Zeitalter der Künstlichen Intelligenz bin ich bei der Erstellung meiner geführten Meditation sicher nicht mehr auf Menschen angewiesen. Also machte ich mich daran, eine Anwendung zu entwickeln, die jeden Tag eine neue Sitzung erstellt und auf YouTube hochlädt. Ich hatte nur zwei Regeln für mich aufgestellt: 1. Keine manuellen Schritte. Ich möchte, dass alles automatisiert wird. 2. Jeden Tag wird eine einzigartige Meditation auf YouTube hochgeladen.
Die Erstellung dieser Art von Inhalten besteht aus mehreren Schritten, vielleicht mehr, als Sie sich vorstellen können. Die meisten dieser Schritte verwenden künstliche Intelligenz und nehmen normalerweise einige Zeit in Anspruch. Ich baue dies in einer Azure Durable Function auf, um mit diesen langwierigen Prozessen umzugehen. Den Code für diese Anwendung finden Sie in meinem GitHub-Repository.
Abbildung 1: Fluss
Vom Thema zur Eingabeaufforderung
Als erstes brauchen wir einen Meditationslehrer, der das Skript erstellt. Anstatt uns auf einen Menschen zu verlassen, können wir ein Large Language Model (LLM) bitten, unser Lehrer zu sein. Für unser LLM habe ich GPT-4 ausgewählt. Während wir mit GPT-3.5 anständige Ergebnisse erzielen würden (und das auch noch viel schneller!), scheint GPT-4 bei den Inhalten, die es erzeugt, "kreativer" zu sein, was perfekt ist, wenn ich lange, einzigartige Skripte mit wenig Input erstellen muss. Später in diesem Projekt werde ich GPT-3.5 für einfachere Aufgaben verwenden. Es ist immer wichtig, dass Sie sich einen Moment Zeit nehmen, um zu überlegen, welches Modell Sie verwenden möchten. Kreativität ist toll, aber GPT-4 kostet etwa 20 Mal mehr als GPT-3.5! Um unser Skript zu erhalten, habe ich eine Eingabeaufforderung erstellt, die erklärt, was ich vom LLM erwarte. Dieser Text wird als Systemprompt bezeichnet und bildet die Grundlage für den Rest unserer Konversation mit dem Modell. Hier sehen Sie ein Beispiel für die Eingabeaufforderung. Die vollständige Version finden Sie im Repository:
You are a friendly meditation instructor. You're going to write a script for our next guided meditation.
You can advise your student to sit, with their hands folded in their lap. They could sit on the ground, on a chair or a pillow. Maybe they want to lie down.
Make sure to add breaks often, which can be between 5 and 40 seconds, depending on what feels natural. Indicate a break in this format: <BREAK10> for 10 seconds, <BREAK40> for 40 seconds.
The students love it when you start them out focusing on their breath. Help them breathe in through their nose and out through their mouth. Repeat this exercise a few times. Add a few-second break between the breaths.
After a few repetitions, we can focus on something else. The user will supply you with the topic.
Please don't use the word "namaste". Don't add a break at the end of the script. Address the student as friend, student, but not plural. You can use the word "you" to address the student. We're aiming for a 10 minute session, but don't mention that to the student. Aim for around 1000 words.
Meine Systemaufforderung umfasst einige wichtige Dinge: 1. Der KI eine Rolle und etwas Persönlichkeit geben (z.B. einen freundlichen Meditationslehrer). 2. Sie gibt ein paar Hinweise auf das Format der Meditation. 3. Anweisungen zum Einfügen von Pausen. 4. Bereitet die KI darauf vor, auf die Benutzeraufforderung zu reagieren. 5. Dinge, die Sie vermeiden sollten.
Die obige Aufforderung ist sehr kurz. Aus Erfahrung habe ich gelernt, dass Sie ungefähr genauso viel Text benötigen, um dem LLM mitzuteilen, was er nicht tun soll, wie das, was er tun soll. Und diese Fälle (z.B. "erwähnen Sie dem Benutzer gegenüber nicht die Meditationszeit") kommen erst zum Vorschein, wenn Sie schon weiter im Prozess sind. Scheuen Sie sich nicht, mit Ihren Eingabeaufforderungen zu experimentieren. Es ist jedoch gut, professionelle Tools zu verwenden, denn Prompt-Engineering ist mehr als nur das Aneinanderreihen einiger Wörter. Ich habe eine neue Azure Machine Learning-Funktion namens Prompt Flow verwendet, um meinen Prompt zu erstellen. Prompt Flow ist ein Tool, mit dem Sie Prompts iterativ durchgehen und ihre Effektivität einfach messen können. Es befindet sich derzeit in der Vorschau, ist aber einen Blick wert. Sie können damit nicht nur Varianten von Prompts für manuelle Tests erstellen, sondern auch die Ergebnisse eines LLMs automatisch auswerten lassen. Sie können die Ergebnisse danach bewerten, wie gut sie die Aufforderung, die Benutzereingabe oder jede andere Metrik, die Sie sich vorstellen können, beantworten. Ich habe mich darauf konzentriert, wie viele Wörter das LLM produziert, um meine Aufforderung zu bewerten. Ich ziehe eine längere Meditationssitzung mit mehr Raum zum Entspannen einer schnellen Meditation vor, die nicht auf den Punkt kommt.
Erstellen des Skripts
Wenn wir unsere Eingabeaufforderung in der Hand haben, können wir GPT-4 bitten, unser Skript zu erstellen. Sie können GPT-4 über die OpenAI-APIs oder den Azure OpenAI Service verwenden. Die API-Spezifikation ist die gleiche, aber da der Rest meiner Anwendung auf Azure läuft, bevorzuge ich Azure OpenAI. Es hält die gesamte Abrechnung an einem Ort und bietet zusätzliche Funktionen wie die Feinabstimmung von Modellen, die Einstellung von benutzerdefinierten Inhaltsfilteroptionen und mehr. Ich habe bereits erwähnt, dass unser System den Rest der Konversation abfragt. In diesem Fall wird das Gespräch kurz sein. Ich gebe einen Systemprompt ein und schließe dann mit einer Benutzernachricht an. Die Benutzernachricht enthält das Thema der Meditation. Wenn wir diesen "Chat" an die API übermitteln, antwortet der LLM mit unserem Meditationsskript. Es mag seltsam erscheinen, dass wir dies als Chat übermitteln müssen, aber GPT-4 ist nicht über die Completion API zugänglich (die 2024 veraltet sein wird). Der folgende Codeschnipsel zeigt, wie ein typischer Chat in C# aufgebaut ist. Jede Nachricht hat eine Rolle: System, Benutzer oder Assistent. Die Systemnachricht enthält unsere Systemaufforderung, die Benutzernachricht enthält das Thema und der LLM antwortet mit der Assistentennachricht. Da wir in unserem Systemprompt nur sehr wenige Einschränkungen gemacht haben, kann unser Thema ein einzelnes Wort oder ein ganzer Absatz sein.
var prompt = await File.ReadAllTextAsync("Prompts/script-prompt.txt");
Response response = await this.openAiClient.GetChatCompletionsAsync(
“gpt-4”,
new ChatCompletionsOptions
{
Messages =
{
// Add the system prompt.
new ChatMessage(ChatRole.System, prompt),
// Add the user prompt containing the topic.
new ChatMessage(ChatRole.User, createScriptContext.Topic)
},
Temperature = 0.8f,
MaxTokens = 5000
});
Wenn Sie mit der Chat-API interagieren, können Sie verschiedene Einstellungen vornehmen. Die wichtigsten Einstellungen für mein Szenario sind die maximale Anzahl der Token und die "Temperatur". Die maximale Tokenmenge gibt dem LLM vor, wie viel Text zurückgegeben werden kann. Die Tokenisierung könnte ein ganz eigener Artikel sein, also halten wir es einfach: 1 Token ist keine feste Länge und kann ein einzelnes Zeichen, eine Silbe oder ein Wort sein. Das kann es schwierig machen, wenn Sie eine bestimmte Länge für Ihren Inhalt benötigen. Die Einstellung Temperatur sorgt für mehr Zufälligkeit in der Antwort. Setzen Sie den Wert auf 0 und das Modell reagiert nur mit den wahrscheinlichsten Token. Es wird mit fast identischen Meldungen auf dieselbe Eingabe reagieren, wenn Sie es mehrmals ausführen. Setzen Sie die Temperatur auf 1 und die Antworten werden sehr unterschiedlich bis hin zu unvorhersehbar sein. Da ich einzigartige Inhalte erzeugen möchte, ohne jedes Mal die Eingabeaufforderung des Systems zu ändern, habe ich eine relativ hohe Temperatur von 0,8 eingestellt. Eine hohe Temperatur ermöglicht es dem LLM, jedes von uns vorgegebene Thema, das von aufmerksam bis sehr albern reicht, in eine perfekt beruhigende Meditation zu verwandeln.
Text in Sprache
Wir müssen diesen Text in Audio umwandeln, damit dies eine echte selbstgeführte Meditation wird. Es gibt viele Text-to-Speech-Anwendungen und ich wollte eine, die realistisch genug klingt, um damit zu meditieren, ohne von einer Computerstimme belästigt zu werden. Ich entschied mich für Azure AI Speech (kürzlich umbenannt in Azure Cognitive Speech). Azure AI Speech bietet viele sprachbezogene Funktionen, einschließlich Text-to-Speech. Die beiden Hauptgründe, warum ich mich für diesen Dienst entschieden habe, sind die Tatsache, dass er Teil von Azure ist, so dass ich alle meine Ressourcen, Rechnungen und Zugriffsrechte an einem Ort verwalten kann, und dass er die Speech Synthesis Markup Language (SSML) unterstützt. Dieser W3C-Standard für Text-to-Speech ist für unsere Art von Inhalten von Vorteil. Sie haben vielleicht bemerkt, dass wir in der Aufforderung an GPT-4 darum gebeten haben, Pausen einzufügen. SSML unterstützt das Einfügen von Pausen in Text-to-Speech, was sich hervorragend für Meditationen eignet. Sie möchten nicht, dass Ihnen jemand ununterbrochen ins Ohr brummt. SSML ermöglicht es Ihnen, die Stimme zu definieren und verschiedene Sprachen und Akzente sowie den Stil der Stimme auszuwählen. Nicht alle Stimmen unterstützen verschiedene Stile. Ich habe mich für eine amerikanisch-englische Stimme entschieden, die den "hoffnungsvollen" Stil unterstützt, was dem Stil entspricht, den ich bei dieser Art von Inhalten mag. Da SSML ein weit verbreiteter Standard ist, können Sie GPT-4 sogar bitten, ein Skript in SSML zu erstellen! Das zeigt, wie vielseitig GPT-4 ist. Die Ergebnisse waren zwar gut, aber bei meinen Tests mit Prompt Flow habe ich festgestellt, dass es die Gesamtdauer der Meditation verkürzt, selbst wenn Sie ihm erlauben, die maximale Anzahl von Token zu erzeugen. Also habe ich stattdessen die LLM Pausen anders anzeigen lassen und sie in SSML mit einigen grundlegenden String-Formatierungen umgewandelt. Jetzt, da ich SSML habe, kann ich Azure AI Speech damit füttern, um mein Audio zu erhalten!
var speechConfig = SpeechConfig.FromSubscription(this.key, this.region);
speechConfig.SetSpeechSynthesisOutputFormat(SpeechSynthesisOutputFormat.Riff16Khz16BitMonoPcm);
// Set the audio config to null. otherwise it will try to use the default audio device.
// Pretty sure Azure data centers don’t have a default audio device.
using var speechSynthesizer = new SpeechSynthesizer(speechConfig, null);
var result = await speechSynthesizer.SpeakSsmlAsync(createNarrationContext.Script);
Fügen Sie etwas Hintergrundmusik hinzu
An diesem Punkt dachte ich, ich sei fertig. Ich habe ein Skript erstellt und es in Audio umgewandelt. Aber als ich mir die Audiodatei anhörte, fehlte etwas. Die Pausen dauern sehr lange (alles über 5 Sekunden ist lang), und ich fragte mich, ob die Sitzung vorbei war oder ob die Software kein gutes Ergebnis geliefert hatte. Aber bald wurde mir klar, dass die Stille einfach zu sehr ablenkte. Um dem entgegenzuwirken, wollte ich ein paar Hintergrundgeräusche hinzufügen. Ich fand online einige lizenzfreie Naturgeräusche, die perfekt zu mir passten. Nachdem ich mich ein wenig mit dem hervorragenden NuGet-Paket NAudio beschäftigt und mich eingehend mit Wave-Formaten befasst hatte, konnte ich die Erzählung mit den Hintergrundgeräuschen zusammenführen. Das Ergebnis ist eine perfekte Mischung aus einer hoffnungsvollen Stimme, die Sie durch die Meditation führt, und beruhigenden Naturgeräuschen, die die Lücken füllen.
Video erstellen
Eines der Ziele, die ich mir gesetzt hatte, war, die Ergebnisse auf YouTube hochzuladen. Ich war mir nicht ganz sicher, ob YouTube das Hochladen einer Audiodatei oder zumindest einer komplett schwarzen Videodatei zulassen würde, also habe ich mir vorgenommen, der Videospur ein Bild hinzuzufügen. Natürlich möchte ich weder manuell ein Bild auswählen noch für jedes Video, das ich hochlade, dasselbe alte Bild verwenden, also ist es Zeit für mehr künstliche Intelligenz. Gerade noch rechtzeitig hat Microsoft DALL-E als Teil des Azure OpenAI Service veröffentlicht. DALL-E nimmt eine Texteingabe und verwandelt sie in ein Bild. Wie bei den meisten KI-Tools ist es einfach, ein gutes Ergebnis zu erzielen, aber schwierig, ein großartiges Ergebnis zu erzielen. Anstatt also eine allgemeine Eingabeaufforderung zu erstellen, habe ich GPT-4 gebeten, stattdessen die Eingabeaufforderung für DALL-E zu erstellen. Ich gebe das Thema der Meditation sowie diese neue System-Eingabeaufforderung an, genauso wie ich es bei der Erstellung des Skripts getan habe, und heraus kommt eine Eingabeaufforderung für DALL-E. Ich versuche, die Antwort nicht zu sehr einzuschränken. Stattdessen füge ich einige Tipps und Tricks zur Verwendung von DALL-E hinzu.
Create a prompt for a square image. The prompt will be sent to an AI algorithm that creates an image. Only reply with the prompt.
The prompt should be for a colourful and calming image for a meditation session. The user will supply you with the topic. Here’s some tips:
- Start with the character before the landscape, if there are characters involved, so you can get the body morphology right before filling the rest.
- The prompt should mention what’s shown, as well as the colours and the mood.
- Adding an adjective like “gorgeous”, “stunning” or “breathtaking” can make a big difference.
Abbildung 1: DALL-E Aufforderung: Ein gelassener Mönch, der unter einem uralten, ausladenden Baum meditiert. Seine Gedanken materialisieren sich als lebhafte Schmetterlinge, die davonflattern, vor dem Hintergrund eines atemberaubenden Sonnenuntergangs, im Stil des Surrealismus.
Auf YouTube veröffentlichen
Ich werde nicht im Detail darauf eingehen, wie man Videos über eine Cloud-Anwendung auf YouTube hochlädt, aber jedes Video braucht einen Videotitel und eine Beschreibung. Das ursprüngliche Thema einer Meditationssitzung eignet sich vielleicht nicht für einen Titel und ist normalerweise auch nicht sehr beschreibend. Um die Erstellung dieser Metadaten zu automatisieren, habe ich mich für GPT-3.5 Turbo entschieden. Wir brauchen nicht die Kreativität des fortschrittlicheren GPT-4, und mit seinen geringen Kosten und der höheren Generierungsgeschwindigkeit ist GPT-3.5 Turbo eine willkommene Ergänzung für diese Anwendung. Ich habe zwei einfache Aufforderungen zum Erstellen eines Titels und einer Beschreibung erstellt. Wenn ich Videos in großem Umfang generieren würde, würde ich mehr Zeit investieren, um Titel und Beschreibung in einem Aufruf der API zu kombinieren, um Kosten zu sparen. Die Eingabe für das LLM ist meine Eingabeaufforderung plus das Thema der Meditationssitzung; ich habe auch das gesamte Meditationsskript hinzugefügt, das wir von GPT-4 erhalten haben. Alle Large Language Models profitieren von mehr Kontext, und GPT-3.5 kann dieses Skript verwenden, um eine umfassende Beschreibung zu erstellen. In diesem Schritt fordere ich das Modell auch auf, die Beschreibung immer mit der gleichen Zeile zu beenden: "Dieser Inhalt wurde von Künstlicher Intelligenz erstellt und von Menschen überprüft." Lassen Sie uns darüber sprechen, warum das notwendig ist.
Zeit für ein menschliches Eingreifen
Ich habe mich auf den Weg gemacht, um alle manuellen Handlungen zu beseitigen, aber ich habe bei fast jedem Schritt des Prozesses künstliche Intelligenz eingesetzt, um Inhalte zu erstellen, die Menschen genießen können. LLMs sind außergewöhnlich begabt darin, unerwartete oder sogar beängstigende Ergebnisse zu produzieren. Es ist also Zeit für einen Haftungsausschluss: Sie sind für die Ergebnisse verantwortlich. Große Sprachmodelle sind erstaunlich und wirken manchmal sogar wie Magie. Sie "wissen" jedoch nichts. Sie generieren lediglich den wahrscheinlichsten Text, den Sie als Kontext eingegeben haben. Aus diesem Grund ist es die Aufgabe eines Menschen (das sind Sie, lieber Leser), die Ausgabe der von Ihnen verwendeten Modelle zu überprüfen. In Azure Durable Functions können Sie diesen Schritt als Aktivität einbauen, die erst dann abgeschlossen ist, wenn Sie die Entwarnung gegeben haben. Aber in meinem Fall lade ich das Video als privat auf YouTube hoch und höre mir jedes einzelne an, bevor ich auf die Schaltfläche "Veröffentlichen" drücke. Der Vorteil: Ich kann jetzt jeden Tag meditieren.
Zusammenfassend
Die Kombination von großen Sprachmodellen mit Text-to-Speech und Bilderzeugung kann ein einzelnes Wort in fesselnde Audio- oder Videoinhalte verwandeln. Ich hoffe, Sie werden versuchen, diese Anwendungen der künstlichen Intelligenz selbst anzuwenden! Beim Erstellen dieser Anwendung habe ich in meiner Funktion eine URL mit dem Thema der Meditation aufgerufen. Diese Anwendung eignet sich zwar hervorragend zum Testen, aber ich habe sie nicht mit dem Gedanken entwickelt, irgendetwas von Hand zu machen. Wer entscheidet also über diese Themen? Nun, die künstliche Intelligenz, natürlich.
Abbildung 3: Moment mal, das ist alles KI? Das war schon immer so.
Meditation: Body Scan Meditation für tiefe Körperwahrnehmung
Dieser Artikel ist Teil des XPRT. Magazin #15 Hier herunterladen

Verfasst von
Matthijs van der Veer
Matthijs is a consultant at Xebia, with a strong focus on Generative AI. He loves helping people achieve more in the cloud.
Unsere Ideen
Weitere Blogs
Contact



