Stellen Sie sich eine Welt vor, in der KI-Agenten nicht nur Gespräche führen, sondern sich auch auf große Quests begeben, böse Gegner besiegen und zusammenarbeiten, um die Zaubererwelt zu retten. Heute schauen wir uns einen der spannendsten Anwendungsfälle an Große Sprachmodelle. Wir werden mit LangChain ein völlig autonomes Multiplayer-Dungeons & Dragons-Spiel entwickeln.
Dies ist nicht nur eine Einführung Chatbot-Tutorial. Was wir erreichen wollen, ist komplexer: eine funktionierende Zusammenarbeit mehrerer KI-Agenten mit ihren eigenen Persönlichkeiten, ihren eigenen Zielen, die alle in Echtzeit aufeinander reagieren, innerhalb desselben Erzähluniversums. Betrachten Sie es als eine Artwork Animation von Figuren, die eigenständig denken, planen und handeln können und dabei der Figur treu bleiben.
Warum ist das wichtig?
Bevor wir uns mit dem Code befassen, nehmen wir uns einen Second Zeit, um den Wert von zu verstehen Multiagentensysteme und warum sie so transformativ sind:
Bei herkömmlichen KI-Interaktionen ist es ganz einfach: Sie stellen eine Frage und die KI antwortet, und das ist Ihr Gespräch, aber in einem Multi-Agenten-System interagieren Sie im Wesentlichen mit mehreren KI-Agenten gleichzeitig. In unserem Weblog befassen wir uns mit dem Fall des Dungeons & Dragons-Spiels (D&D). Hier sehen wir, wie eine Entität mit einer anderen interagiert, was zu Verhaltensweisen und Narrativen führen kann, bei denen selbst wir als Entwickler nicht wirklich vorhersehen können, was als nächstes passieren wird. Es bietet uns die Möglichkeiten:
- Dynamische Model des Geschichtenerzählens und der Spieleentwicklung
- Forschungszwecke bei der Simulation komplexer sozialer Interaktionen
- Coaching von KI-Systemen durch kollaborative Interaktionen
- Ansprechende Lehrmittel, die an verschiedene Modalitäten und Lernstile angepasst werden können
Der Anwendungsfall, den wir heute entwickeln, wird die oben genannten Szenarien in der Praxis demonstrieren. Dieser spezielle Anwendungsfall bietet uns ein Beispiel für ein Phänomen von Mensch zu KI und KI-zu-KI-Kooperation oder Interaktion.
Die Architektur: Wie alles zusammenwirkt
Unser System besteht aus drei Hauptklassen, die gleichzeitig arbeiten:
Die DialogueAgent-Klasse
Sie können sich diese Klasse als das Gehirn jedes Charakters vorstellen. Jeder Agent hat nur seine eigene Erinnerung an das Gespräch, hat seine eigene Persönlichkeit (basierend auf den von uns definierten Systemnachrichten), in der er sprechen und zuhören kann. Das Tolle an diesem System ist seine Einfachheit und Geradlinigkeit. Jeder Agent weiß nur, was er gehört hat, was sich für authentische Interaktionen eignet, die Interaktionen mit begrenztem Wissen simulieren.
class DialogueAgent:
"""Agent that may take part in conversations."""
def __init__(self, identify: str, system_message: SystemMessage, mannequin: ChatOpenAI) -> None:
self.identify = identify
self.system_message = system_message
self.mannequin = mannequin
self.prefix = f"{self.identify}:"
self.reset()
def reset(self):
self.message_history = ("Right here is the dialog to date.")
def ship(self) -> str:
message = self.mannequin(
(
self.system_message,
HumanMessage(content material="n".be a part of(self.message_history + (self.prefix))),
)
)
return message.content material
def obtain(self, identify: str, message: str) -> None:
self.message_history.append(f"{identify}: {message}")
Die DialogueSimulator-Klasse
Diese Klasse ist im Grunde das Haupthirn hinter dem Spiel, da sie die Möglichkeit bietet, abwechselnd zwischen den ausgewählten Charakteren und ihren Dialogen zu wechseln. Außerdem können wir festlegen, welcher Charakter wann zuerst spricht, und haben so die volle Kontrolle. Dieser Kurs bietet uns die Flexibilität, komplexe Sprechbefehle anstelle eines starren rundenbasierten Methods zu entwerfen. Es ist wie eine Debatte oder ein Gespräch zwischen den Charakteren, bei dem sie sich zwischendurch gegenseitig unterbrechen dürfen.
class DialogueSimulator:
"""Manages the dialog circulation between brokers."""
def __init__(
self,
brokers: Record(DialogueAgent),
selection_function: Callable((int, Record(DialogueAgent)), int),
) -> None:
self.brokers = brokers
self._step = 0
self.select_next_speaker = selection_function
def reset(self):
for agent in self.brokers:
agent.reset()
def inject(self, identify: str, message: str):
for agent in self.brokers:
agent.obtain(identify, message)
self._step += 1
def step(self) -> tuple:
speaker_idx = self.select_next_speaker(self._step, self.brokers)
speaker = self.brokers(speaker_idx)
message = speaker.ship()
for receiver in self.brokers:
receiver.obtain(speaker.identify, message)
self._step += 1
return speaker.identify, message
Dynamische Charaktergenerierung
Die dynamische Charaktergenerierung ist die Klasse, die dieses Spiel am interessantesten macht und Einzigartigkeit hervorbringt. Wir müssen die Eigenschaften nicht vordefinieren oder Particulars zu den stattfindenden Quests angeben. Stattdessen nutzen wir KI-Modelle (LLMs), um kontextbezogene und detaillierte Hintergrundgeschichten mit angemessenen Beschreibungen der Charaktere und kontextbezogenen Parametern ihrer Missionen bereitzustellen. Dadurch wird das Spiel bei jedem Spiel dynamisch, anstatt sich zu wiederholen. Die Charaktere verhalten sich so, als wären sie am Leben und auf einer Mission, während sie sich automatisch an die Quests anpassen.
# Generate detailed quest
quest_specifier_prompt = (
SystemMessage(content material="You can also make a job extra particular."),
HumanMessage(
content material=f"""{game_description}
You're the storyteller, {storyteller_name}.
Please make the hunt extra particular. Be artistic and imaginative.
Please reply with the required quest in {word_limit} phrases or much less.
Converse on to the characters: {', '.be a part of(character_names)}.
Don't add the rest."""
),
)
Die technische Umsetzung
Lassen Sie uns Schicht für Schicht aufschlüsseln, wie der gesamte Code-Workflow funktioniert. Der Code implementiert einen strategischen Ablauf, der dem entspricht, was Menschen tatsächlich tun, wenn sie zusammenarbeiten, beispielsweise in einem Gruppenprojekt oder bei der Zusammenarbeit.
Zeichen werden in Ebenen instanziiert
Zuerst erstellen wir generische Rollen, wie zum Beispiel Harry Potter, Ron Weasley usw. Dann rufen wir einen LLM an, um Charakterbeschreibungen zu erstellen, die Persönlichkeit, Motivationen und Macken zusammenfassen. Schließlich werden diese Charakterbeschreibungen zur Systemnachricht für jeden Agenten und geben ihm eine Identität, in die er eintreten kann.
def get_character_emoji(identify: str) -> str:
"""Return emoji for character."""
emoji_map = {
"Harry Potter": "⚡",
"Ron Weasley": "🦁",
"Hermione Granger": "📚",
"Argus Filch": "🐈",
"Dungeon Grasp": "👾",
}
return emoji_map.get(identify, "⚪")
def get_character_color(identify: str) -> str:
"""Return shade class for character."""
color_map = {
"Harry Potter": "badge-harry",
"Ron Weasley": "badge-ron",
"Hermione Granger": "badge-hermione",
"Argus Filch": "badge-filch",
}
return color_map.get(identify, "")
def generate_character_description(character_name: str, game_description: str, word_limit: int, api_key: str) -> str:
"""Generate character description utilizing LLM."""
os.environ("OPENAI_API_KEY") = api_key
player_descriptor_system_message = SystemMessage(
content material="You possibly can add element to the outline of a Dungeons & Dragons participant."
)
character_specifier_prompt = (
player_descriptor_system_message,
HumanMessage(
content material=f"""{game_description}
Please reply with a artistic description of the character, {character_name}, in {word_limit} phrases or much less.
Converse on to {character_name}.
Don't add the rest."""
),
)
character_description = ChatOpenAI(temperature=1.0)(character_specifier_prompt).content material
return character_description
Die Konversationsschleife ist unkompliziert
Ein Agent wird ausgewählt, um abwechselnd zu sprechen. Der designierte Agent erstellt den Inhalt der nächsten Nachricht basierend auf dem Gesprächsverlauf, der im Speicher abgelegt wird. Die anderen Agenten empfangen die neue Nachricht und speichern sie. In der Auswahlfunktion findet die Magie statt: Da wir in unserem D&D-Spiel die Verantwortung des Dungeon-Meisters und der anderen Spieler teilten, wechselten wir uns im Kreis ab, um eine narrative Kontinuität zu schaffen.
Speicherverwaltung ist ebenfalls von entscheidender Bedeutung, da es die Grundlage für die Nachrichtenerstellung bildet. Jeder Agent speichert eine Abschrift des Gesprächsverlaufs. Es handelt sich nicht einfach nur um die Aufbewahrung von Speicher. Es ist der Kontext, der jede Antwort beeinflusst. Jeder Charakter erinnert sich an die vorherige(n) Interaktion(en), lernt aus seinen Fehlern und übernimmt im Verlauf des Abenteuers alte Aktionen.
def generate_character_system_message(
character_name: str,
character_description: str,
game_description: str,
storyteller_name: str,
word_limit: int,
) -> SystemMessage:
"""Create system message for character."""
return SystemMessage(
content material=f"""{game_description}
Your identify is {character_name}.
Your character description is as follows: {character_description}.
You'll suggest actions you intend to take and {storyteller_name} will clarify what occurs whenever you take these actions.
Converse within the first individual from the attitude of {character_name}.
For describing your individual physique actions, wrap their description in '*'.
Don't change roles!
Don't converse from the attitude of anybody else.
Keep in mind you're {character_name}.
Cease talking the second you end talking out of your perspective.
Always remember to maintain your response to {word_limit} phrases!
Don't add the rest."""
)
Den Code ausführen
In diesem Abschnitt werden wir die gesamte Implementierung durchgehen. Für diesen Schritt sollten Sie einen OpenAI-API-Schlüssel und bestimmte Abhängigkeiten in Ihrer Umgebung installiert haben.
Schritt 1: Installieren Sie die Abhängigkeiten, um die Anwendung in Ihrer Umgebung auszuführen
pip set up streamlit langchain openai python-dotenv streamlit-extras
Folgende Pakete sind notwendig:
- Streamlit: Das Webframework zum Hosten der Schnittstelle
- LangChain: Ein Orchestrierungsframework für Multiagentensysteme
- OpenAI: Bietet Zugriff auf GPT-Modelle für intelligente Agenten
- python-dotenv: Verwaltet Umgebungsvariablen sicher
Schritt 2: Richten Sie Ihren OpenAI-API-Schlüssel ein, indem Sie ihn entweder direkt im Skript fest codieren oder ihn in .env als Umgebungsvariable speichern und ihn dann aufrufen über:
api_key=
Schritt 3: Starten Sie das Abenteuer
Nachdem die Abhängigkeiten installiert sind, sind Sie nun bereit, das Multiagenten-D&D-Spiel zum Leben zu erwecken! Sie können die Streamlit-App mit dem folgenden Befehl starten:
streamlit run dnd_app.py
Ihr Browser öffnet sich automatisch für „localhost:8501“ und Ihnen wird die App-Oberfläche angezeigt.
Schritt 4: Konfigurieren Sie Ihr Abenteuer über individuelle Optionen
Wenn die App geladen wurde:
- Geben Sie Ihren API-Schlüssel ein: Kopieren Sie Ihren OpenAI-API-Schlüssel und fügen Sie ihn in die Seitenleiste ein (es sei denn, Sie verwenden .env-Variablen).
- Wählen Sie Ihre Charaktere aus: Wählen Sie 2–5 Helden aus der Liste aus
- Passen Sie Ihre Quest an: Ändern Sie das Questziel oder belassen Sie es als Customary-Horkruxjagd
- Legen Sie Ihre Parameter fest: Legen Sie das Antwortwortlimit und die Länge des Abenteuers fest
- Beginnen Sie das Abenteuer: Klicken Sie auf „Abenteuer starten“
- Beobachten Sie, wie die Magie geschieht: Die Charaktere werden mit einzigartigen Persönlichkeiten generiert
- Bringen Sie die Geschichte voran: Klicken Sie auf „Nächste Runde“, um das Abenteuer voranzutreiben


Bitte denken Sie daran, dass dies ein kleiner Schritt ist. Nachdem Sie den D&D-Anwendungsfall in Aktion gesehen haben, fragen Sie sich vielleicht, was Sie sonst noch entwerfen können. Ein Krimi? Eine Erzählung zur Erforschung des Weltraums? Ein Geschäftsverhandlungssimulator? In dieser Hinsicht handelt es sich um die gleiche zugrunde liegende Architektur, und Ihre Kreativität ist die einzige Grenze.
Was macht diesen Ansatz besonders?
Es gibt eine Facette von Nicht-Spieler-Charakteren in Standardspielen, die eng an das Skript gebunden ist; Sie verfügen über vorgefertigte Gesprächsbäume und definierte Verhaltensgewohnheiten. Mit diesem LangChain-basierten System können wir die Zeichen jedoch so programmieren:
- Im Kontext improvisieren: Wenn der Spieler eine überraschende Lösung für eine State of affairs vorschlägt, würde ein Charakter normalerweise natürlich reagieren, anstatt den Charakter abrupt zu unterbrechen.
- Kontinuität der Persönlichkeit zeigen: Die Systemnachricht wirkt als Persönlichkeitsstabilisator und sorgt dafür, dass Harrys Tapferkeit und Rons Loyalität während des gesamten Abenteuers beständig bleiben.
- Emergentes Storytelling generieren: Wenn wir den NPCs erlauben, sich frei zu unterhalten, passieren erzählerisch interessante Dinge auf eine Weise, die nicht vollständig geschrieben oder geplant ist.
Denken Sie an diesen Second aus unserem früheren Beispiel der Benutzeroberfläche zurück: Als die Gruppe zum ersten Mal auf die Dementoren trifft, überlegt Hermine sofort, ob sie die Abkürzungen vorschlagen soll oder nicht, und Argus Filch äußert Bedenken, sie zu beobachten. Diese Verhaltensweisen ergeben sich direkt aus der definierten Rolle der Figur und der jeweiligen State of affairs.
Wichtige Designmuster, die Sie verwenden werden
Dieser Code veranschaulicht einige starke und nützliche Muster, die in vielen KI-Anwendungen nützlich sind:
- Das Spherical-Robin mit verschachtelter Planung garantiert, dass der Dungeon-Grasp (DM) den Konflikt und die Konsequenzen für die Aktion jedes Spielers beschreibt. Darüber hinaus conflict die Auswahlfunktion, die ziemlich genial erfasste, ob die nächste Aktion im Schritt die des DM (Schritt % 2 == 0) oder die Aktion eines Spielers conflict, eine sehr einfache und nützliche Struktur zur Statusverwaltung.
- Die Systemmeldungen sind Ihr zentrales Schema zur Steuerung des Agentenverhaltens. Beachten Sie, wie jede Systemmeldung für jeden Charakter diesem erklärt, dass er stets in der Ich-Perspektive sprechen soll. Oder wie die Aktion durch Sternchen angezeigt und eine Wortbeschränkung angegeben wird (in diesem Fall 50). In gewisser Weise unterliegt jeder Charakter den gleichen Systembeschränkungen und daher ist das resultierende Verhalten konsistent, obwohl die Entscheidungsfreiheit jedes Spielers innerhalb der kreativen Grenzen des Methods liegt.
- Schließlich kann eine Änderung der Temperatur indirekt auch eine Persönlichkeitsveränderung bewirken. Die Charakterbeschreibung basiert auf der Temperatur = 1,0 für Kreativität, aber die Charaktergewöhnung im Spiel zeigt eine fokussiertere und konsistentere Leistung, wenn die Temperatur = 0,2 eingestellt ist. Dieses Temperaturgleichgewicht ist einfach richtig, nicht zu zufällig, hat aber dennoch den gewissen „Interessanten“-Ingredient von den Anfangseinstellungen an.
Reale Anwendungen jenseits von Spielen
Während unser Beispiel aus Dungeons & Dragons amüsant ist, deutet es auf andere, ernstere Anwendungen der Technologie hin, für die wir Multiagenten verwenden können:
- Für Bildungszwecke: In einer Bildungssimulation stellen Schüler historische Ereignisse mit einer KI-Darstellung historischer Persönlichkeiten nach. Zum Beispiel könnten Schüler in einem Klassenzimmer den Vertrag von Versailles aushandeln und dabei am Tisch sitzen KI-Avatare der politischen Führer.
- Für Geschäftstreffen: Bei der Planung von Geschäftsszenarien können Multi-Agenten-Systeme zum Einsatz kommen, die die Dynamik eines Marktes simulieren oder Stakeholder untersuchen, die ein Downside diskutieren oder auf eine Krise reagieren. Groups könnten schwierige Gespräche in einer Umgebung üben, in der es keine Einsätze gibt.
- Für Forschungszwecke: Forschung und Psychologie haben eine einzigartige Dimension bei der Untersuchung von Themen wie Entscheidungsfindung, Gruppendynamik und sozialer Interaktion und bieten intuitive Möglichkeiten, Studien zu geringeren Kosten und in größerem Maßstab durchzuführen. Forscher könnten Tausende von agentenbasierten Studien zum Testen erstellen.
- Für Schreibanforderungen: Kreatives Schreiben oder Worldbuilding würden von einer originellen Zusammenarbeit mit einer KI profitieren. Ein Drehbuch könnte Charaktere koordinieren, um Dialoge zu testen, Handlungsstränge zu erstellen oder aufzubauen oder different Handlungsstränge zu erkunden und dabei die ursprüngliche Absicht und Konsistenz des Charakters beizubehalten.
Abschluss
Das von uns entwickelte Spiel dient nicht nur dem Spielerlebnis. Es spiegelt einen schnellen Einstieg in die Entwicklung umfassender interaktiver Erlebnisse durch KI wider. Egal, ob Sie Lehrmittel, kreative Schreibhilfen, Geschäftssimulationen oder sogar das Spielen mit einer KI, die eine Geschichte generiert, erstellen, die Muster, die Sie hier finden, können Ihnen leicht helfen.
Und das Beste daran? Diese Technologie ist jetzt da! Sie benötigen kein Labor, um diese Artwork von Forschung durchzuführen, und Sie müssen auch nicht in die Infrastruktur eines Unternehmens investieren. Mit LangChainSie können Erfahrungen schaffen, die sich vor nicht allzu langer Zeit wie Science-Fiction angefühlt haben.
Starten Sie additionally Ihre IDE, geben Sie Ihren API-Schlüssel ein und beginnen Sie damit, dieses Multi-Agent-Erlebnis vom Papier in die Realität umzusetzen.
Melden Sie sich an, um weiterzulesen und von Experten kuratierte Inhalte zu genießen.
