Output strutturato aggiunge una dimensione più profonda al tuo gameplay con i PNG. L'Output strutturato è un meccanismo attraverso il quale l'LLM che supporta il tuo PNG restituisce strutture definite dall'utente e istanziate dall'LLM per guidare la logica di gioco.
Questo significa che il tuo personaggio basato su LLM può avere interazioni più articolate, ad esempio rispondere a domande a scelta multipla, decidere se vale la pena pagare il prezzo di un oggetto e altro ancora.
Sia la risposta che l'Output strutturato devono essere in inglese.
Panoramica
Questa sezione personalizza il tuo persona_npc_behavior con un singolo Output strutturato per la tua persona. La struttura interactions_response:
Registra il numero di volte in cui questo PNG ha interagito con il giocatore.
La sensazione attuale che la persona prova riguardo a questa interazione con il giocatore.
Un array che registra la cronologia dei sentimenti della persona riguardo a tutte le interazioni con il giocatore.
L'Output strutturato richiede che tu:
Crea una struttura che definisce l'Output strutturato.
Fornisci istruzioni su come la persona deve compilare la struttura Output strutturato.
Definisci e sottoscrivi un evento segnalato al ricevimento di Output strutturato.
Puoi configurare più output strutturati su una singola persona contemporaneamente e specificare abbonamenti diversi per ogni tipo di Output strutturato per la tua persona.
Tipi supportati
L'Output strutturato supporta i seguenti tipi Verse come campi all'interno di strutture:
intfloatboolenummessage
Visualizzazione dei messaggi
I tipi di messaggio vengono oscurati quando vengono stampati nel registro o in gioco, ma puoi visualizzare i tipi di messaggio utilizzando dispositivi progettati per visualizzarli, come:
billboard_devicehud_message_devicepopup_dialog_device
Prerequisiti
Aggiungere Output strutturato allo script di comportamento PNG
Il codice seguente utilizza l'Output strutturato per estendere le capacità di più LLM utilizzando un tipo prompt_binding_definition e la funzione RegisterAction() per introdurre nuovi tipi di risposta basati sui prompt dei giocatori.
L'Associazione prompt è una struttura data all'IA per registrare un'azione definita nella funzione RegisterAction(). Insieme indicano all'LLM quando eseguire una determinata azione o perché una determinata azione dovrebbe essere utilizzata in base al prompt di un giocatore.
Di seguito è riportato uno script Verse contenente un persona_npc_behavior espanso nella sezione persona_npc_behavior.verse. Questo amplia il codice nella documentazione Aggiungi un PNG a una conversazione, includendo l'Output strutturato.
Per modificare il codice nel tuo persona_npc_behavior esistente, segui questi passaggi:
Assicurati di avere il tuo progetto Verse aperto in VS Code:
Nella Barra del menu, seleziona Verse > Apri progetto in VS Code…
Una volta aperto VS Code, trova il file
persona_npc_behavior.versein Explorer di VS Code.
Copia e incolla il contenuto di
persona_npc_behavior.versequi sotto nel tuo file di Verse nel progetto.Compila il tuo codice Verse nella Barra degli strumenti di UEFN o all'interno di VS Code.
Per una guida passo-passo dello script Verse, segui i passaggi in Spiegazione delle modifiche allo script. Questa sezione riprende immediatamente dopo il punto in cui si è interrotta la spiegazione dello script in Aggiungi persona al personaggio PNG.
persona_npc_behavior.verse
using { /Fortnite.com/AI }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Playspaces }
using { /UnrealEngine.com/Conversations }
using { /UnrealEngine.com/Temporary/Diagnostics }
using { /Verse.org/Chat }
using { /Verse.org/SceneGraph }
using { /Verse.org/Simulation }
Spiegazione delle modifiche allo script
Una struttura denominata
interactions_responsecontiene variabili che le funzioni passano all'LLM. L'LLM utilizza le variabili per valutare il prompt e determinare come rispondere.Verseinteractions_response := struct: @ai_description("Use the Number field to output the number of times you have spoken to this player.") Number:int @ai_description("Use the Feeling field to output how you are feeling about your current interaction with the player.") Feeling:messageDue diverse
@ai_descriptionsindicano all'LLM quali sono le variabili e il motivo per cui l'LLM dovrebbe usarle quando crea una risposta.Verse@ai_description("Use the Number field to output the number of times you have spoken to this player.") Number:int @ai_description("Use the Feeling field to output how you are feeling about your current interaction with the player.") Feeling:messageOnInteractionsResponseè la funzione che guida la logica di gioco utilizzando l'Output strutturato. La callback che si attiva ogni volta che la sessione IA produce un output strutturato che corrisponde alla strutturainteractions_response. È l'handler registrato daRegisterActioninAddStructuredOutput(), e il parametro Response contiene i dati compilati dal modello.VerseOnInteractionsResponse(Response:interactions_response):void = Logger.Print("Structured response received") Logger.Print("Number of Interactions: {Response.Number}") Logger.Print("Feeling: {Localize(Response.Feeling)}") # Drive gameplay logic hereLa funzione
AddStructuredOutputregistra l'azione di output strutturato del PNG con la sua sessione di IA. Ciò fornisce un modo per il modello di segnalare i dati di interazione nel gameplay. Questo codice esegue due operazioni. Innanzitutto, compila unprompt_binding_definition, un piccolo descrittore che assegna all'azione unNamee unaDescription(entrambi racchiusi tramite l'helperMakeMessageper trasformare i letterali stringa in valori di messaggio). Il testo descrittivo indica al modello quando utilizzare questa azione: qui, ogni volta che il giocatore ha parlato con il PNG.Poi chiama
Session.RegisterAction, passando il binding, true, il tipo di strutturainteractions_responsee l'handlerOnInteractionsResponse. Questo indica alla sessione che quando emette un output strutturato con la forma diinteractions_response, instrada quei dati aOnInteractionsResponse.RegisterActionrestituisce un annullabile, che è racchiuso inoption{}e memorizzato inInteractionsResponseSubscription, in modo che l'abbonamento possa essere interrotto nel metodoOnEnd.VerseAddStructuredOutput():void = if: NPCEntity := GetEntity[] PersonaComponent := NPCEntity.GetComponent[persona_component] Session := PersonaComponent.GetAISession() then: # Create a prompt_binding so that we can use it on RegisterAction InteractionBinding:prompt_binding_definition = prompt_binding_definition: Name := MakeMessage("InteractionBinding") Description := MakeMessage("Signals whenever the player has spoken to you.")OnBeginaggiunge l'output strutturato alla sessione e imposta il giocatore come target di conversazione. In un gioco in cui i giocatori possono unirsi in ritardo, è consigliabile aggiungerli all'PlayerAddedEvento quando un giocatore si avvicina a un PNG tramite un attivatore.VerseOnBegin<override>()<suspends>:void= AddStructuredOutput() AddPlayersAsConversationTarget()In
OnEnd,InteractionsResponseSubscriptionviene ripulita e rimossa da tutti i giocatori. Questa è una buona pratica.VerseOnEnd<override>():void= if (Subscription := InteractionsResponseSubscription?): Subscription.Cancel() for (Player : GetEntity[].GetPlayspaceForEntity[].GetPlayers()): RemovePlayerAsConversationTarget(Player)
Test Output strutturato
Il PNG è ora configurato con Output strutturato. Ogni volta che la persona parla, viene emesso un segnale per interactions_response.
Testa il comportamento del tuo personaggio LLM per risposte e reazioni più coinvolgenti ai tuoi prompt in gioco.