La respuesta estructurada da una dimensión más profunda a tu jugabilidad con PNJ. La respuesta estructurada es un mecanismo a través del cual el LLM que respalda a tu PNJ devuelve estructuras instanciadas por tecnología LLM y definidas por el usuario para impulsar la lógica del juego.
Esto significa que tu personaje con tecnología LLM puede tener interacciones más profundas, como devolver respuestas a preguntas de opción múltiple, decidir si el precio de un objeto vale la pena y más.
Tanto la respuesta como la respuesta estructurada deben estar en inglés.
Overview
Esta sección personaliza tu persona_npc_behavior con una única respuesta estructurada para tu persona. La estructura interactions_response:
Registra el número de veces que este PNJ ha interactuado con el jugador.
El sentimiento actual que la persona tiene sobre esta interacción con el jugador.
Una matriz que registra el historial de los sentimientos de la persona sobre todas las interacciones con el jugador.
La respuesta estructurada requiere que hagas lo siguiente:
Crea una estructura que defina la respuesta estructurada.
Proporciona instrucciones sobre cómo la persona debe completar la estructura de respuesta estructurada.
Define y suscríbete a un evento que se señalice al recibir la respuesta estructurada.
Puedes configurar varias respuestas estructuradas en una sola persona al mismo tiempo y especificar diferentes suscripciones para cada tipo de respuesta estructurada de tu persona.
Tipos compatibles
La respuesta estructurada es compatible con los siguientes tipos de Verse como campos dentro de estructuras:
intfloatboolenummessage
Mostrar mensajes
Los tipos de mensaje se omiten cuando se imprimen en el registro o en el juego, pero puedes mostrarlos usando dispositivos diseñados para ello, como:
billboard_devicehud_message_devicepopup_dialog_device
Prerrequisitos
Añadir respuestas estructuradas a la secuencia de comandos de comportamiento de PNJ
El código a continuación utiliza la respuesta estructurada para ampliar las capacidades de varios LLM mediante el uso de un tipo prompt_binding_definition y una función RegisterAction() para introducir nuevos tipos de respuesta basados en las indicaciones del jugador.
La vinculación de indicaciones es una estructura que se le da a la IA para registrar una acción definida en la función RegisterAction(). Juntos, le indican al LLM cuándo realizar una determinada acción o por qué se debe utilizar una determinada acción en función de la indicación de un jugador.
A continuación, se muestra una secuencia de comandos de Verse que contiene un persona_npc_behavior ampliado en la sección persona_npc_behavior.verse. Esto amplía el código en la documentación Agregar un PNJ a una conversación, incluyendo la respuesta estructurada.
Para modificar el código en tu persona_npc_behavior existente, sigue estos pasos:
Asegúrate de tener tu proyecto de Verse abierto en VS Code:
En la barra de menús, selecciona Verse > Abrir proyecto en VS Code…
Una vez que VS Code se abra, busca tu archivo
persona_npc_behavior.verseen el Explorador de VS Code.
Copia y pega el contenido de
persona_npc_behavior.versea continuación en tu archivo de Verse en tu proyecto.Compila tu código Verse ya sea en la barra de herramientas de UEFN o en VS Code.
Para obtener una guía paso a paso de la secuencia de comandos de Verse, sigue los pasos en Explicación de cambios de la secuencia de comandos. Esta sección continúa inmediatamente después de donde la explicación de la secuencia de comandos en Añadir persona al personaje PNJ terminó.
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 }
Explicación de cambios de la secuencia de comandos
Una estructura llamada
interactions_responsecontiene variables que las funciones pasan al LLM. El LLM utiliza las variables para evaluar la indicación y cómo responder.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:messageDos
@ai_descriptionsdiferentes le dicen al LLM cuáles son las variables y la razón por la que el LLM debería usarlas al crear una respuesta.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:messageOnInteractionsResponsees la función que impulsa la lógica de jugabilidad usando una respuesta estructurada. La devolución de llamada que se activa cada vez que la sesión de IA produce una respuesta estructurada que coincide con la estructurainteractions_response. Es el controlador registrado porRegisterActionenAddStructuredOutput(), y su parámetro de respuesta contiene los datos que rellenó el modelo.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 función
AddStructuredOutputregistra la acción de respuesta estructurada del PNJ con su sesión de IA. Esto proporciona una forma para que el modelo informe los datos de interacción en la jugabilidad. Este código hace dos cosas. Primero, compila unaprompt_binding_definition, un pequeño descriptor que le da a la acción unnombrey unadescripción(ambos envueltos a través del asistenteMakeMessagepara convertir los literales de cadena en valores de mensaje). El texto de descripción es lo que le indica al modelo cuándo usar esta acción: en este caso, cada vez que el jugador haya hablado con el PNJ.Luego, llama a
Session.RegisterAction, pasando la vinculación, verdadera, el tipo de estructurainteractions_responsey el controladorOnInteractionsResponse. Esto le indica a la sesión que cuando emita una respuesta estructurada con la forma deinteractions_response, debe dirigir esos datos aOnInteractionsResponse.RegisterActiondevuelve un cancelable, que se envuelve enopción{}y se almacena enInteractionsResponseSubscriptionpara que la suscripción pueda eliminarse en el métodoOnEnd.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.")OnBeginañade la respuesta estructurada a la sesión y establece al jugador como objetivo de la conversación. En un juego donde los jugadores pueden unirse más tarde, quieres asegurarte de agregarlos en elPlayerAddedEvento cuando un jugador se acerca a un PNJ mediante un activador.VerseOnBegin<override>()<suspends>:void= AddStructuredOutput() AddPlayersAsConversationTarget()En
OnEnd, se limpiaInteractionsResponseSubscriptiony se elimina de todos los jugadores. Es una práctica recomendada.VerseOnEnd<override>():void= if (Subscription := InteractionsResponseSubscription?): Subscription.Cancel() for (Player : GetEntity[].GetPlayspaceForEntity[].GetPlayers()): RemovePlayerAsConversationTarget(Player)
Probar respuestas estructuradas
El PNJ ahora está configurado con respuesta estructurada. Cada vez que la persona habla, se señala la interactions_response.
Prueba el comportamiento de tu personaje con tecnología LLM para obtener respuestas y reacciones más atractivas a tus indicaciones en el juego.