Zum Hauptinhalt springen

So verwenden Sie das Plugin

Dieser Leitfaden behandelt die vollständige Runtime-API: Erstellen einer LLM-Instanz, Laden von Modellen, Senden von Nachrichten, Herunterladen von Modellen zur Laufzeit, Verwalten des Zustands und Hilfsfunktionen.

Erstellen Sie eine LLM-Instanz

Erstellen Sie zunächst ein Runtime Local LLM-Objekt. Behalten Sie eine Referenz darauf (z. B. als Variable in Blueprints oder als UPROPERTY in C++), um eine vorzeitige Speicherbereinigung zu verhindern.

Create Runtime Local LLM

Modell laden

Sie müssen ein Modell laden, bevor Sie Nachrichten senden. Das Plugin bietet mehrere Lademethoden, abhängig von Ihrem Arbeitsablauf.

Nach Namen laden

Wenn Sie Modelle über das Einstellungsfenster des Editors verwalten, verwenden Sie Load Model (By Name).

In UE 5.4 und später zeigt Load Model (By Name) ein Dropdown aller Modelle auf der Festplatte an – wählen Sie einfach das Modell aus, das Sie laden möchten.

Load Model By Name UE 5.4+

Aus Dateipfad laden

Laden Sie ein Modell direkt von einem absoluten Dateipfad zu einer .gguf-Datei:

Load Model From File

Von URL laden (Herunterladen und Laden)

Lade ein Modell von einer URL herunter (falls nicht bereits auf der Festplatte vorhanden) und lade es automatisch. Wenn die Datei bereits lokal existiert, wird der Download übersprungen.

Die einfachste Variante benötigt nur eine URL – die Metadaten werden aus dem Dateinamen abgeleitet:

Load Model From URL Simple

Sie können auch Load Model From URL mit vollständigen Modell-Metadaten für umfangreichere Modellinformationen verwenden:

Load Model From URL

Asynchrones Laden (Blueprint)

Um die Lastabschlüsse und Fehler über Ausgangspins zu behandeln, anstatt Delegaten manuell zu binden, stehen zwei asynchrone Knoten zur Verfügung.

Load Model By Name (Async) spiegelt Load Model (By Name) wider – in UE 5.4+ zeigt es ein Dropdown aller Modelle auf der Festplatte an:

Load Model By Name Async UE 5.4+

Load Model From File (Async) akzeptiert stattdessen einen absoluten Dateipfad:

Load Model From File Async

Ereignisse binden

An die Delegaten der LLM-Instanz binden, um Rückrufe zu erhalten. Alle Rückrufe werden im Spielthread ausgelöst.

Bind Events

Verfügbare Delegaten:

  • Bei Token generiert: Wird für jedes ausgegebene Token ausgelöst
  • Bei Generierung abgeschlossen: Wird ausgelöst, wenn die vollständige Antwort bereit ist, mit Dauer, Token-Anzahl und Token pro Sekunde
  • Bei Eingabeaufforderung verarbeitet: Wird ausgelöst, nachdem die Eingabeaufforderung verarbeitet wurde, bevor die Generierung beginnt
  • Bei Fehler: Wird ausgelöst, wenn während eines Vorgangs ein Fehler auftritt
  • Bei Modell geladen: Wird ausgelöst, wenn ein Modell fertig geladen ist
  • Bei Modell entladen: Wird ausgelöst, wenn das Modell entladen wird
  • Bei Download-Fortschritt: Wird während eines Modell-Downloads regelmäßig ausgelöst (Fortschrittsanteil, empfangene Bytes, Gesamtbytes)
  • Bei Modell heruntergeladen: Wird ausgelöst, wenn ein reiner Download-Vorgang abgeschlossen ist
  • Bei Konversation gespeichert: Wird ausgelöst, wenn eine Konversation in eine JSON-Datei geschrieben wurde
  • Bei Konversation geladen: Wird ausgelöst, wenn eine Konversation aus einer Datei oder einem Speicher-Snapshot geladen wurde
  • Bei Verlauf zusammengefasst: Wird ausgelöst, wenn die automatische Zusammenfassung ältere Nachrichten komprimiert (meldet Nachrichtenanzahl, gespeicherte Token und die Zusammenfassung)

Nachrichten senden

Sobald ein Modell geladen ist, senden Sie eine Benutzernachricht, um eine Antwort zu generieren:

Send Message

Um den System-Prompt für eine bestimmte Nachricht zu überschreiben, verwenden Sie Send Message With System Prompt:

Send Message With System Prompt

Tokens werden durch OnTokenGenerated gestreamt, sobald sie erzeugt werden. Wenn die Generierung abgeschlossen ist, wird OnGenerationComplete mit der vollständigen Antwort, der Dauer, der Token-Anzahl und den Token pro Sekunde ausgelöst.

Asynchrone Nachricht senden (Blueprint)

Der Send LLM Message (Async)-Knoten bietet dedizierte Ausgabepins für Tokens, Vervollständigung und Fehler:

Async Send Message

Modelle zur Laufzeit herunterladen

Neben dem oben beschriebenen Download-und-Laden-Ablauf können Sie ein Modell auf die Festplatte herunterladen, ohne es zu laden. Dies ist nützlich, um Modelle in einem Ladebildschirm oder Einstellungsmenü vorab zwischenzuspeichern.

Download Model

Eine URL-only-Variante ist ebenfalls verfügbar:

Download Model From URL

Der Knoten Download LLM Model (Async) und Download LLM Model From URL (Async) bietet Ausgabepins für Fortschritt, Abschluss und Fehler:

Async Download Model

Der OnDownloadProgress-Delegat meldet den Fortschritt während des Downloads. OnModelDownloaded wird ausgelöst, wenn die Datei auf die Festplatte gespeichert wurde.

Um einen laufenden Download abzubrechen:

Cancel Download

Das Plugin verhindert automatisch doppelte Downloads – wenn für dasselbe Modell bereits ein Download läuft, werden nachfolgende Aufrufe ignoriert.

Generation stoppen

Um eine laufende Generierung zu unterbrechen:

Stop Generation

Gesprächskontext zurücksetzen

Löschen Sie den Gesprächsverlauf, um ein neues Gespräch zu beginnen:

Reset Context

Konversationen speichern und laden

Das Plugin kann den Gesprächsverlauf als JSON auf der Festplatte speichern oder als Schnappschuss im Arbeitsspeicher behalten. Standardmäßig wird der System-Prompt von den Speicherungen ausgeschlossen, sodass derselbe Gesprächsverlauf in verschiedene LLM-Instanzen mit unterschiedlichen Systemregeln geladen werden kann. Dies ist nützlich für Multi-NPC-Szenarien, in denen jeder Charakter seinen eigenen Speicher hat, sich die Systemanweisungen jedoch teilen oder unterscheiden können.

In Datei speichern

Speichern Sie das aktuelle Gespräch als JSON-Datei auf der Festplatte:

Save Conversation To File

Der Parameter Include System Prompt steuert, ob die Systemnachricht (falls vorhanden) in die Datei geschrieben wird. Standardmäßig ist der Wert false, um die Portabilität zwischen NPCs zu gewährleisten.

On Conversation Saved wird ausgelöst, wenn die Datei geschrieben wird.

Aus Datei laden

Lade ein Gespräch aus einer JSON-Datei zurück:

Load Conversation From File

Der Parameter Preserve Current System Prompt (Standardwert true) bewahrt das aktuell geladene System-Prompt, während die gespeicherte Gesprächshistorie ausgetauscht wird. Dies ist die empfohlene Einstellung für den Austausch des NPC-Gedächtnisses.

On Conversation Loaded wird mit dem geladenen Snapshot ausgelöst.

In-Memory Snapshots (Multi-NPC-Workflow)

Für schnelles NPC-Austauschen während des Spiels sollte die aktuelle Unterhaltung im Arbeitsspeicher zwischengespeichert werden, anstatt auf die Festplatte zu schreiben. Dieses Muster ist die empfohlene Methode, um viele NPCs zu verwalten, die ein einziges geladenes Modell gemeinsam nutzen:

Das typische Multi-NPC-Muster verwendet eine Map von Name → LLM-Konversations-Snapshot in Ihrem NPC-Manager oder Spielstatus:

  1. Beim Wechseln von einem NPC weg: Rufen Sie Save Conversation To Memory auf, speichern Sie dann in On Conversation Loaded (das auch bei der Zustellung von Snapshots ausgelöst wird) den Snapshot in Ihrer Map, abgelegt unter dem NPC-Namen.
  2. Beim Wechseln zu einem anderen NPC: Lesen Sie den Snapshot aus Ihrer Map und rufen Sie Load Conversation From Memory mit aktivierter Option Preserve Current System Prompt auf.

Multi NPC Pattern

Da der System-Prompt über Swaps hinweg geladen bleibt, kann die "Persönlichkeit" jedes NPC entweder in einem NPC-spezifischen System-Prompt kodiert werden (rufen Sie Send Message With System Prompt einmal nach einem Swap auf, um ihn zu aktualisieren) oder von allen NPCs gemeinsam genutzt werden.

tipp

Snapshots sind modellunabhängig – sie speichern Nachrichten, nicht den KV-Cache-Status. Derselbe Snapshot kann in ein anderes Modell geladen werden (auch wenn sich der Gesprächsstil verschieben kann). Das Feld OriginModelFamilyName im Snapshot ermöglicht es Ihnen zu überprüfen, welches Modell ihn erstellt hat, falls Sie Kompatibilität erzwingen möchten.

Automatische Kontextzusammenfassung

Lange Unterhaltungen überschreiten irgendwann das Kontextfenster des Modells, was normalerweise entweder zur Kürzung des Verlaufs oder zu Fehlern führen würde. Die automatische Zusammenfassungsfunktion des Plugins überwacht die Kontextnutzung und fasst, wenn ein konfigurierter Schwellenwert überschritten wird, ältere Nachrichten zu einer einzigen „Erinnerungs"-Nachricht zusammen, bevor die nächste Antwort generiert wird. Dadurch bleiben Token-Kosten und Latenz auch bei unbegrenzt langen Unterhaltungen stabil.

Die Zusammenfassung wird vom selben geladenen Modell durchgeführt, sodass kein zweites Modell oder API-Aufruf erforderlich ist.

Auto-Zusammenfassung aktivieren

Enable Auto Summarization

Verwenden Sie Get Default Summarization Config für sinnvolle Startvorgaben und passen Sie diese dann nach Bedarf an:

Get Default Summarization Config

Nach der Aktivierung läuft die Zusammenfassung automatisch vor jedem SendMessage-Aufruf, wenn nötig, ohne dass weitere Aktionen erforderlich sind.

tipp

Standardmäßig wird die automatische Zusammenfassung ausgeführt, bevor eine neue Nachricht verarbeitet wird, da sie den Kontext neu aufbauen muss, was nicht sicher parallel zur Erstellung einer Antwort erfolgen kann. Wenn Sie stattdessen möchten, dass sie nach der Antwort ausgeführt wird, während der Spieler liest und tippt, deaktivieren Sie die automatische Zusammenfassung und steuern Sie sie manuell: Binden Sie an On Generation Complete, prüfen Sie Get Used Context Length gegen Ihren Schwellenwert und rufen Sie Summarize Now auf, wenn dieser überschritten wird. Da Summarize Now in derselben Hintergrundaufgaben-Warteschlange eingereiht wird, wird es direkt nach Abschluss der Antwort und vor der Verarbeitung der nächsten Nachricht ausgeführt.

Konfigurationsreferenz

ParameterTypeStandardBeschreibung
Trigger-Token-Schwellenwertint321500Die Zusammenfassung wird ausgeführt, wenn die verwendeten Kontext-Token diesen Wert überschreiten. Setzen Sie diesen Wert relativ zu Ihrer Context Size; etwa 60-75 % sind eine gute Faustregel.
Anzahl der letzten Nachrichten beibehaltenint324Die neuesten N Nachrichten werden niemals zusammengefasst, um die unmittelbare Gesprächskohärenz zu bewahren.
Minimale Nachrichten für Zusammenfassungint326Überspringen Sie die Zusammenfassung, wenn weniger als diese Anzahl älterer Nachrichten in Frage kommt (vermeidet sinnlose winzige Zusammenfassungen).
Maximale Zusammenfassungs-Tokenint32256Maximale Länge der generierten Zusammenfassung in Tokens
System-Prompt beibehaltenbooltrueDie Systemnachricht (Index 0) muss stets unverändert bleiben.
ZusammenfassungsanweisungFString(see default)Die Anweisung, die an das Modell gesendet wurde, um die Zusammenfassung zu erstellen
Präfix für ZusammenfassungsnachrichtenFString"[Langzeitgedächtnis-Zusammenfassung des vorherigen Gesprächs]: "Der generierten Zusammenfassung vorangestellt, wenn sie als Erinnerungsnachricht mit der Rolle des Assistenten in das Gespräch eingefügt wird.

Manuelle Auslösung und Abhören von Zusammenfassungen

Sie können die Zusammenfassung jederzeit manuell auslösen, unabhängig vom Schwellenwert.

Summarize Now

Binden Sie an On History Summarized, um benachrichtigt zu werden, wenn ein Zusammenfassungsdurchlauf abgeschlossen ist. Das Ereignis meldet, wie viele Nachrichten entfernt wurden, wie viele Token eingespart wurden und den generierten Zusammenfassungstext – nützlich, um einen dezenten Indikator in der Chat-Benutzeroberfläche anzuzeigen:

On History Summarized

Abfrage der verwendeten Kontextlänge

Verwenden Sie Get Used Context Length, um zu überprüfen, wie viele Tokens derzeit im Kontextfenster des Modells belegt sind. Dies ist derselbe Wert, den der integrierte Auto-Zusammenfassungs-Trigger mit dem Trigger Token Threshold vergleicht.

Get Used Context Length

Auto-Summarisierung deaktivieren

Disable Auto Summarization

Das Deaktivieren macht bereits auf die Unterhaltung angewandte Zusammenfassungen nicht rückgängig.

hinweis

Die Zusammenfassung benötigt einen Moment, um im Hintergrundthread ausgeführt zu werden (das Modell generiert die Zusammenfassung). Token-Stream-Callbacks werden während dieser internen Generierung unterdrückt, sodass sie nicht in Ihrer Chat-Oberfläche erscheinen. On History Summarized wird ausgelöst, sobald die Zusammenführung abgeschlossen ist.

Modell entladen

Ressourcen freigeben, wenn ein Modell nicht mehr benötigt wird:

Unload Model

Abfragestatus

Überprüfen Sie den aktuellen Zustand der LLM-Instanz:

Query State

  • Modell geladen: Wahr, wenn ein Modell für die Inferenz bereit ist
  • Generiert: Wahr, wenn eine Generierung läuft
  • Ist beschäftigt: Wahr, wenn ein Vorgang (Laden, Generieren, Herunterladen) aktiv ist
  • Lädt herunter: Wahr, wenn ein Modell-Download läuft
  • Metadaten des geladenen Modells abrufen: Gibt die Metadaten des aktuellen Modells zurück
  • Angewandte Inferenzparameter abrufen: Gibt die beim Laden angewandten Parameter zurück

Modellbibliotheksfunktionen

Eine Reihe statischer Hilfsfunktionen wird zur Verwaltung von Modelldateien auf der Festplatte bereitgestellt. Diese sind nützlich für die Erstellung einer Benutzeroberfläche zur Modellauswahl oder zur Überprüfung der Modellverfügbarkeit zur Laufzeit.

Heruntergeladene Modellnamen / Metadaten abrufen

Get Downloaded Model Names

Get All Downloaded Model Metadata

Prüfen, ob ein Modell auf der Festplatte vorhanden ist

Is Model On Disk

Modell-Dateipfad abrufen

Get Model File Path

Modelldateien löschen

Delete Model Files

Vordefinierte und verfügbare Modelle abrufen

Get Predefined Models

Get All Available Models

Metadaten aus einer URL erstellen

Erstellen Sie Model-Metadaten aus einer rohen URL (Felder werden aus dem Dateinamen abgeleitet):

Make Metadata From URL

Hilfsfunktionen

Eine Reihe von Hilfsfunktionen wird für die Formatierung und Fehleranzeige bereitgestellt.

Bytes in lesbaren String umwandeln

Wandelt eine Byteanzahl in einen menschenlesbaren String um (z. B. „4,07 GB“). Nützlich zur Anzeige von Modellgrößen in der Benutzeroberfläche.

Bytes to Readable String

Format Download Progress

Formatiert einen Download-Fortschritts-String wie „1,23 GB / 4,07 GB (30,2 %)". Wenn die Gesamtgröße unbekannt ist, wird nur die empfangene Menge zurückgegeben.

Format Download Progress

Fehlerbeschreibung / Fehlercode-Zeichenfolge abrufen

Get LLM Error Description gibt eine menschenlesbare Textbeschreibung für einen Fehlercode zurück. Get LLM Error Code String gibt den Namen des Enum-Werts als Zeichenfolge zurück (nützlich für die Protokollierung).

Get Error Description

Fehlercode-Referenz

CodeWertBeschreibung
Unbekannt0Ein nicht näher bezeichneter Fehler
ModelLoadFailed10Die GGUF-Datei konnte nicht geladen werden (beschädigte Datei, inkompatibles Format usw.)
ContextCreateFehlgeschlagen11Fehler beim Erstellen des Inferenzkontexts
ModelNotLoaded20Es wurde versucht, eine Inferenz durchzuführen, ohne dass ein Modell geladen war.
ChatTemplateFehlgeschlagen21Die Chatvorlage des Modells konnte nicht angewendet werden.
TokenizationFailed22Der eingegebene Text konnte nicht tokenisiert werden.
ContextOverflow23Die Eingabeaufforderung + der Kontext überschreitet die konfigurierte Kontextgröße.
PromptDecodeFehlgeschlagen24Die Prompt-Token konnten nicht dekodiert werden.
ContextTooFullToGenerate25Nicht genügend Kontextspeicherplatz, um eine Ausgabe zu generieren.
GenerationDecodeFailed30Ein Token konnte während der Generierung nicht dekodiert werden.
GenerationTruncated31Die Generierung wurde gestoppt, da das maximale Token-Limit erreicht wurde.
LLMInstanceNull40Die LLM-Instanz ist null oder ungültig.
ModelNotFoundOnDisk41Die Modelldatei existiert nicht am erwarteten Pfad.
ModelURLEmpty42Ein Download wurde mit einer leeren URL angefordert.
ModelDownloadAbgebrochen43Der Download wurde abgebrochen.
ModelDownloadEmptyData44Der Download wurde abgeschlossen, aber der Antworttext war leer.
ModelDownloadSaveFehlgeschlagen45Der Download wurde abgeschlossen, aber die Datei konnte nicht auf der Festplatte gespeichert werden.