Wenn Albert Einstein deinem Discord Server joined

Wenn Albert Einstein deinem Discord Server joined

Servus Maik hier.

Was wie ein Setup zu einem Witz klingt, ist Heute tatsächlich passiert.
Gut, ich hab’s erwartet – war ja schließlich mein Projekt. Aber egal.

Ich fang vorne an:

KI ist in aller Munde

ChatGPT hat künstliche Intelligenz für Jedermann (und Jederfrau) greifbar gemacht.
Ich habe auf der Arbeit ganze Monitoringscripte in mir komplett unbekannten Programmiersprachen geschrieben. Eins ist klar: KI wird das „Next Big Thing“.

Wie einst beim Dotcom Boom die Webseiten, sprießen aktuell die wildesten Ideen, Proofs-of-Concept und Businesses im „Wilden Westen“ GenAI aus dem Boden.

„Suck Up!“ und die KI-NPCs

Eines dieser Produkte, das mich extrem abgeholt hat ist das PC-Spiel „Suck Up!“. Hier spielt man einen Vampir in einer Stadt voller KI-NPCs. Ziel des Spiels ist es, an deren Haustür zu klopfen und hineingebeten zu werden. Dafür stehen einem in der Spielwelt verstreute Verkleidungen und die eigene Kreativität zur Verfügung. Man muss nämlich mit diesen NPCs sprechen. Mit einem Mikrofon.
Im Hintergrund passiert dann KI-Schwarzmagie, Speech-to-Text und der NPC spuckt eine KI-generierte Antwort aus. Hat man das Vertrauen erschlichen und wird hereingelassen, beißt man den NPC und presto. Rinse and repeat bis die ganze Stadt gebissen ist.

Was hat das mit Albert Einstein und meinem Discord Server zu tun?

Berechtigte Frage!
Kurzum: Ich moderiere den Community Discord von Suck Up!
Wir stehen aktuell vor der Herausforderung, die User Experience beim Onboarding zu verbessern und da habe ich mich dran gemacht, einen Discord bot zu schreiben, der diesen Automod-Kram eben erledigt. Rollenzuweisung, dies das. Der Bot ist dem Spiel-NPC der Nachbarschaftswache nachempfunden, welche die Straßen patrouilliert und den Spieler zu schnappen versucht.

Gestatten: Frank, die Nachbarschaftswache


Ich dachte mir: Für ein KI-basiertes Spiel ist ein Discord-Bot mit KI-Funktion doch nur passend. So machte ich mich auf, neben der grundlegenden Automoderator-Funktionalitäten eine Chat-Schnittstelle zu OpenAI zu implementieren und Frank auf Erwähnungen und Privatnachrichten antworten zu lassen.

Discord Bots + OpenAI

Als ich einen funktionierenden Prototypen hatte, entschied ich mich aus FrankBot ein Template zu machen.

Discord-CharAIbot
(gesprochen Scharay – Nur, um’s dem Typen gleichzutun, der das GIF erfunden hat und darauf besteht, dass es JIF ausgesprochen wird)

Zu finden ist das Projekt auf Github. Unter der Haube werkeln hier zwei Libraries, die das eigentliche schwere Heben übernehmen – Ich habe hier lediglich die Schnittstelle gebaut.

  • discord.py stellt den python-wrapper für die Discord API bereit
  • openai stellt den python-wrapper für die OpenAI API bereit

Grundlage bietet hier ein sogenannter OpenAI Assistant. Das ist wie ChatGPT, nur mit einem Bewusstsein.
Okay – Das ist überspitzt gesagt. Ein Assistant kriegt über eine „Instruction“ Informationen mit auf dem Weg: Wofür bist du da?, Was ist dein Ziel?, Was erwarten Leute von dir?
Gedacht ist das Ganze für Usecases wie Quellcodeanalysen oder allgemeine Fragestellungen.

Man kann die Instruction aber eben auch nutzen, um dem Assistant die Persönlichkeit einer Person zu geben. Einer Echten, einer Fiktiven, was auch immer. Ich hab’s am Beispiel Albert Einstein gemacht.

Da die Modelle von OpenAI auf unvorstellbar großen Datenmengen trainiert wurden, weiß das System, wer Albert Einstein war – Und kann ohne großes Prompt-Engineering „In-Character“ agieren.

Some assembly required

Voraussetzung für die Nutzung des Projekts ist ein (kostenpflichtiger) Zugang zur OpenAI-API.
Discordseitig ist die Nutzung des Developer Portals (und damit die Erstellung von Bots) kostenfrei möglich.

Anschließend müssen nur noch ein paar Variablen in die Config-Datei env.py eingefügt werden und schon ist der Bot einsatzbereit.

Ähnlich wie ChatGPT nutzt auch der Assistant „Threads“, also einzelne Gespräche. Die Implementierung des CharAIbot nutzt diese für eine Art „Gedächtnis“. Schreibt man innerhalb des Servers mit dem Bot (bspw. durch eine @Mention oder eine Antwort) landet dies immer in dem selben Thread. Heißt, der Bot ‚erinnert‘ sich an vergangene Gespräche.

Ähnlich ist es bei Kommunikation über DMs. Hier wird für jeden User ein einzelner Thread erstellt und persistent gehalten. Der Bot erinnert sich an vorherige Gespräche mit jedem User (1 on 1), aber nicht an Gespräche mit anderen Usern.

Conclusion

Dieses ganze Projekt war unfassbar spannend zu entwickeln und die Ergebnisse haben eine gewisse Situationskomik – Letzteres könnte aber auch an meinem Humor liegen.
Man nehme beispielsweise folgendes Gespräch:

Ein Pro-Gamer wird aus Dr. Einstein scheinbar nicht mehr… Nur die Wissenschaft im Kopf, der gute Herr

Wer selber damit rumspielen will, dem kann ich nur das Github-Repo wärmstens ans Herz legen.
Neben dem Quellcode findet sich dort eine detaillierte Anleitung über die notwendige Konfiguration, sowohl auf Discord- wie auch auf OpenAI-Seite.
Wer auf den Geschmack von „Suck Up!“ gekommen ist, dem kann ich das Spiel auch uneingeschränkt empfehlen.

Github-Repo: https://github.com/Kyrillian/Discord-CharAIbo
Suck Up!: https://www.playsuckup.com/

Grüßt eure Chatbots von mir!
-Maik

Schreibe einen Kommentar

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.