Llamada al componente de modelo de idioma grande

El componente Llamada a Modelo de Idioma Grande (componente LLM) del diseñador de flujos visual permite conectar un flujo al LLM mediante una llamada de servicio REST.

Puede insertar este estado de componente en el flujo de diálogo seleccionando Service Integration > Llamar a modelo de lenguaje grande en el cuadro de diálogo Agregar estado. Para activar conversaciones de varios turnos cuando se llama a las aptitudes desde un asistente digital, introduzca una descripción para la descripción del LLM.
Imagen del campo Descripiton de la página General.

Nota

Como mejor práctica, agregue siempre descripciones a los componentes de LLM para permitir acotaciones de varias vueltas cuando los usuarios accedan al servicio de LLM a través de un asistente digital.

Al insertar el estado del componente del LLM, se agrega un estado de manejo de errores para la resolución de problemas de las solicitudes al LLM y sus respuestas. El estado del componente del LLM pasa a este estado (denominado ShowLLMError por defecto) cuando una solicitud o respuesta no válida provoca un error no recuperable.
A continuación, se incluye la Descripción de invokellm-added-flow.png
Descripción de la ilustración invokellm-added-flow.png

Además de llamar al servicio LLM, el estado del componente LLM gestiona las transacciones interactivas, como las acotaciones de varias vueltas, los intercambios entre el usuario y el LMM que perfeccionan la salida de LLM mediante rondas de comentarios del usuario.
Nota

La acotación de respuesta también puede provenir del sistema cuando implanta reintentos después de fallar la validación.
Puede enviar el resultado del modelo de LLM como un mensaje o puede guardarlo en una variable de flujo de diálogo para su uso posterior. La validación integrada del componente LLM proporciona barandillas contra vulnerabilidades como ataques de inyección rápida que omiten las directrices de moderación de contenido del modelo.
Nota

Si desea mejorar la validación que ya proporciona el componente de LLM o desea mejorar la salida de LLM mediante la técnica de mejora y crítica recursiva (RCI), puede utilizar nuestro código de inicio para crear sus propios manejadores de validación de solicitudes y respuestas.

¿Qué se necesita para utilizar este componente? Si accede al modelo Cohere directamente o a través del servicio de IA generativa de Oracle, solo necesita un servicio de LLM para el modelo Cohere y una petición de datos, que es un bloque de texto legible por humanos que contiene las instrucciones para el LLM. Debido a que escribir una petición de datos es un proceso iterativo, le proporcionamos directrices de ingeniería de la petición de datos y el generador de peticiones de datos, donde puede incorporar estas directrices en el texto de la petición de datos y probarlo hasta que se obtenga la respuesta adecuada del modelo. Si utiliza otro modelo, como Azure OpenAI, primero deberá crear su propio manejador de eventos de transformación a partir del código de inicio que proporcionamos y, a continuación, crear un servicio de LLM que asigne ese manejador a los puntos finales del proveedor de LLM que se hayan configurado para la instancia.

Propiedades Generales

Propiedad Descripción Valor por Defecto ¿Obligatoria?
Servicio LLM Lista de los servicios de LMV que se han configurado para la aptitud. Si hay más de uno, se utiliza el servicio LLM por defecto cuando no se ha seleccionado ningún servicio. El servicio LLM por defecto El estado puede ser válido sin el servicio LLM, pero la aptitud no se puede conectar al modelo si esta propiedad no se ha definido.
Solicitar Petición de datos específica del modelo al que se accede mediante el servicio LLM seleccionado. Tenga en cuenta las directrices generales al escribir su petición de datos. Puede introducir la petición de datos en este campo y, a continuación, revisarla y probarla mediante el Creador de peticiones de datos (al que se accede haciendo clic en Crear petición de datos). También puede redactar su mensaje usando el Creador de mensajes. N/D
Parámetros de petición de datos Valores del parámetro. Utilice la sintaxis de expresión FreeMarker de Apache estándar (${parameter}) para hacer referencia a los parámetros en el texto de petición de datos. Por ejemplo:
Draft an email about ${opportunity} sales.
Para las variables de bolsa compuesta, utilice la sintaxis de bolsa compuesta:
  • ${cb_entity.value.bag_item.value} para elementos de lista de valores
  • ${cb_entity.value.bag_item} para elementos de lista sin valor
Debe definir todos los parámetros de petición de datos o cada uno de los parámetros a los que se hace referencia en el texto de petición de datos. Los parámetros de petición de datos que faltan se marcan como errores.
N/D No
Variable de resultado Variable que almacena la respuesta de LLM. N/D No

Mensajería de usuario

Estas opciones solo se aplican cuando se define Enviar resultado de LLM como mensaje en Verdadero.
Propiedad Descripción Valores por Defecto ¿Obligatoria?
Enviar resultado de LLM como mensaje Si se establece en True, el LLM genera un mensaje que se envía al usuario. La configuración de esta propiedad en Falso impide que la salida se envíe al usuario. Verdadero No
Usar Flujo Los resultados del LLM se transmiten al cliente al definir esta opción en Verdadero, lo que puede proporcionar una experiencia de usuario más fluida porque la respuesta del LLM aparece de forma incremental a medida que se genera, en lugar de toda a la vez. Esta opción solo está disponible cuando se ha definido Enviar resultado de LLM como mensaje en Verdadero.

Los usuarios pueden ver respuestas potencialmente no válidas porque el manejador de eventos de validación se llama después de que la respuesta de LLM ya haya iniciado el flujo.

Defina Usar flujo en Falso para modelos de Cohere o cuando haya aplicado un esquema JSON al resultado de LLM definiendo Forzar respuesta de LLM con formato JSON en Verdadero.

No activar la transmisión si:
  • La aptitud se ejecuta en los canales de Slack o Microsoft Teams.
  • Ha definido la validación de respuestas. El manejador solo puede validar una respuesta completa, por lo que si define Usar flujo en Verdadero, los usuarios pueden enviar varios flujos de salida, lo que puede confundirlos.
Verdadero No
Mensaje de inicio Mensaje de estado que se envía al usuario cuando se llama al LLM. Este mensaje, que en realidad se presenta antes de la llamada de LLM, puede ser un indicador útil. Puede informar a los usuarios que el procesamiento se está llevando a cabo, o que el LLM puede tomar un período de tiempo para responder. N/D No
Activar acotaciones de varias vueltas Al establecer esta opción en True (valor predeterminado), permite a los usuarios acotar la respuesta del LLM proporcionando instrucciones de seguimiento. El cuadro de diálogo libera el turno al usuario, pero permanece en el estado LLM después de recibir el resultado LLM. Cuando se establece en Falso, el cuadro de diálogo mantiene el turno hasta que se recibe la respuesta del LLM y pasa al estado al que hace referencia la acción Correcto.

Nota: la descripción del componente es necesaria para las acotaciones de varias vueltas cuando se llama a la aptitud desde un asistente digital.

Verdadero No
Acciones estándar Agrega los botones de acción estándar que se muestran debajo de la salida en el mensaje de resultado de LLM. Todos estos botones están activados de forma predeterminada.
  • Enviar: cuando un usuario selecciona este botón, se dispara la transición next y arranca el manejador de eventos submit.
  • Cancelar: cuando un usuario selecciona este botón, el cuadro de diálogo pasa al estado definido para la transición cancelar.
  • Deshacer: cuando se hace clic en él, la aptitud elimina la última respuesta de acotación y vuelve al resultado anterior. La aptitud también elimina la acotación anterior del historial de chat. Este botón no se muestra en la respuesta inicial. Solo se muestra después de que el servicio LLM genere una acotación.
    Los botones Enviar, Cancelar y Deshacer en la parte inferior del mensaje.

Las opciones Enviar, Cancelar y Deshacer están seleccionadas. No
Etiqueta de botón Cancelar Etiqueta para el botón cancelar Submit Sí: cuando se define la acción Cancelar.
Etiqueta de botón Correcto La etiqueta del botón de éxito Cancel Sí: cuando se define la acción Correcto.
Etiqueta de botón Deshacer La etiqueta del botón de deshacer Undo Sí: cuando se define la acción Deshacer.
Acciones personalizadas Botón de acción personalizada. Escriba una etiqueta de botón y una petición de datos con instrucciones adicionales. N/D No

Acciones de transición para el componente Llamar a modelo de idioma grande

Acción Descripción
cancel

Esta acción la disparan los usuarios que pulsan el botón Cancelar.

error

Esta acción se dispara cuando las solicitudes o respuestas del LLM no son válidas. Por ejemplo, se ha utilizado la asignación de peticiones de datos de reintento para corregir errores de valor de entidad o JSON.

Calificaciones de usuario para contenido generado por LLM

De forma predeterminada, la calificación del usuario (pulgar hacia arriba y hacia abajo) se muestra en cada mensaje.
Iconos Pulgar hacia arriba y Pulgar hacia abajo en el mensaje de respuesta de aptitud

Cuando los usuarios otorgan a la respuesta de LLM una calificación de pulgar hacia abajo, la aptitud realiza un seguimiento con un enlace que abre un formulario de comentarios.

Puede desactivar estos botones desactivando la opción Activar comentarios de modelo de lenguaje grande en Configuración > Configuración.
Opción Activar comentarios de modelo de idioma grande.

Validación de respuesta

Propiedad Descripción Valor por Defecto ¿Obligatoria?
Entidades de validación Seleccione las entidades cuyos valores deben coincidir en el mensaje de respuesta de LLM. Los nombres de estas entidades y sus valores coincidentes se transfieren como una asignación al manejador de eventos, que evalúa este objeto para las coincidencias de entidades que faltan. Cuando faltan coincidencias de entidad, la validación falla, el manejador devuelve un mensaje de error nombrando las entidades no coincidentes, que luego se envía al modelo. A continuación, el modelo intenta volver a generar una respuesta que incluya los valores que faltan. Continúa con sus intentos hasta que el manejador valida su salida o hasta que ha utilizado su número de reintentos.

Recomendamos utilizar entidades de bolsa compuesta para permitir que el gestor de eventos genere mensajes de error concisos porque las etiquetas y los mensajes de error que se aplican a los elementos de bolsa compuesta individuales proporcionan al LLM detalles sobre los valores de entidad que no ha podido incluir en su respuesta.

N/D No
Aplicar respuesta de LLM con formato JSON Si define este valor en Verdadero, puede aplicar formato JSON a la respuesta del LLM copiando y pegando un esquema JSON. El componente de LLM valida la respuesta de LLM con formato JSON en este esquema.

Si no desea que los usuarios vean el resultado del LLM como JSON sin formato, puede crear un manejador de eventos con un método changeBotMessages que transforme el JSON en un formato fácil de usar, como un formulario con tablas.

Defina Usar Streaming en Falso si está aplicando formato JSON.

GPT-3.5 presenta una mayor solidez que GPT-4 para la validación de esquemas JSON. GPT-4 a veces sobrecorrecta una respuesta.

Falso No
Número de Reintentos Número máximo de reintentos permitidos cuando se llama al LLM con una petición de datos de reintento cuando se han encontrado errores de validación de entidad o JSON. La petición de datos de reintento especifica los errores y las solicitudes que el LLM los corrige. Por defecto, el componente de LLM realiza una única solicitud de reintento. Cuando se alcanza la asignación de reintentos, finaliza el ciclo de validación de petición de datos de reintento. A continuación, el cuadro de diálogo se mueve desde el componente LLM a través de su transición de errores. 1 No
Reintentar Mensaje Mensaje de estado que se envía al usuario cuando se llama al LLM mediante una petición de datos de reintento. Por ejemplo, a continuación se enumeran los errores de entidad y JSON mediante la propiedad de evento allValidationErrors:
Trying to fix the following errors: ${system.llm.messageHistory.value.allValidationErrors?join(', ')}}
Enhancing the response. One moment, please... No
Manejador de personalización de validación Si su caso de uso requiere una validación especializada, puede seleccionar el manejador de validación personalizado que se ha desplegado en su aptitud. Por ejemplo, puede que haya creado un manejador de eventos para su aptitud que no solo valide y aplique un procesamiento posterior a la respuesta de LLM, sino que también evalúe las solicitudes de contenido tóxico del usuario. Si su caso de uso requiere que la validación de entidad o JSON dependa de reglas específicas, como coincidencias de entidad interdependientes (por ejemplo, la presencia de un valor de entidad en el resultado de LLM requiere o impide la presencia de otro), deberá crear el manejador para esta aptitud antes de seleccionarla aquí. N/D No

Crear manejadores de validación y personalización de LLM

Además de los gestores de transformación de LLM, también puede utilizar gestores de eventos para validar las solicitudes realizadas al LLM y sus respuestas (las finalizaciones generadas por el proveedor de LLM). Normalmente, este código, conocido como manejador de validación y personalización de LLM, se mantiene separado del código de manejador de transformación de LLM porque funcionan en diferentes niveles. La validación de solicitud y respuesta es específica de un estado de LLM y su petición de datos. Por otro lado, la validación de transformación de LLM se aplica a toda la aptitud porque su lógica de transformación de solicitud y respuesta suele ser la misma para todas las llamadas de LLM de la aptitud.

Si bien el componente LLM proporciona guías de validación para evitar alucinaciones y proteger contra ataques de inyección rápida destinados a eludir las directrices de moderación de contenido del modelo o explotar otras vulnerabilidades, es posible que desee crear validadores especializados completamente desde cero utilizando los métodos LlmComponentContext en bots-node-sdk o incorporando estos métodos en la plantilla que proporcionamos.
Nota

En su formato sin modificar, el código de plantilla ejecuta las mismas funciones de validación que ya proporciona el componente de LLM.

Puede crear su propio manejador de eventos de validación que personalice la presentación de la respuesta de LLM. En este caso, el texto de respuesta de LLM se puede enviar desde el manejador como parte de un mensaje de usuario. Por ejemplo, si indica al LLM que envíe una respuesta estructurada con formato JSON, puede analizar la respuesta y generar un mensaje con formato de tabla o tarjeta.

Para crear un gestor de eventos con esta plantilla:
  1. Haga clic en Componentes en la barra de navegación izquierda.
  2. Haga clic en Servicio +New.
  3. Complete el cuadro de diálogo Crear servicio:
    • Nombre: introduzca el nombre del servicio.
    • Tipo de servicio: contenedor embebido
    • Tipo de paquete de servicios de componente: Nuevo componente
    • Tipo de componente: validación y personalización de LM
    • Nombre de componente: introduzca un nombre fácilmente identificable para el manejador de eventos. Hará referencia a este nombre al crear el servicio de LLM para la aptitud.
  4. Haga clic en Crear para generar el manejador de validación.
  5. Una vez finalizado el despliegue, amplíe el servicio y, a continuación, seleccione el manejador de validación.
  6. Haga clic en Editar para abrir el editor de edición de código de componente.
  7. Con la plantilla generada, actualice los siguientes métodos de manejador según sea necesario.
    Método Descripción Cuando la validación se realiza correctamente Cuando falla la validación Tipo de Retorno Ubicación en Editor Código de marcador de posición ¿Qué puedo hacer cuando falla la validación?
    validateRequestPayload Valida la carga útil de solicitud. Devuelve true cuando la solicitud es válida.

    Devuelve false cuando una solicitud falla la validación.

    booleano Líneas 24-29
    
        validateRequestPayload: async (event, context) => { 
          if (context.getCurrentTurn() === 1 && context.isJsonValidationEnabled()) {
            context.addJSONSchemaFormattingInstruction();
          }
          return true;
        }
    Para obtener más información sobre este código, consulte validateRequestPayload properties.
    • Revise la petición de datos y, a continuación, vuelva a enviarla al LLM
    • Defina un error de validación.
    validateResponsePayload Valida la carga útil de respuesta de LLM.
    Cuando el manejador devuelve true:
    • Si establece la propiedad Enviar resultado de LLM como mensaje en true, la respuesta de LLM, incluidos los botones de acción estándar o personalizados, se envía al usuario.
    • Si el flujo está activado, la respuesta del LLM se transmitirá en fragmentos. Los botones de acción se agregarán al final del flujo.
    • Los mensajes de usuario agregados en el manejador se envían al usuario, independientemente de la configuración de la propiedad Enviar resultado de LLM como mensaje.
    • Si se establece una nueva petición de datos de LLM en el manejador, esta petición de datos se envía al LLM y el manejador de validación se volverá a llamar con la nueva respuesta de LLM
    • Si no se establece ninguna petición de datos de LLM nueva y la propiedad Enable Multi-Turn Refinements se establece en true, se libera el turno y el flujo de diálogo permanece en el estado de LLM. Sin embargo, si esta propiedad se define en false, el turno se mantiene y el cuadro de diálogo pasa del estado mediante la acción de transición success.
    Cuando el manejador devuelve false:
    • Si el flujo está activado, los usuarios pueden ver respuestas que pueden no ser válidas porque el manejador de eventos de validación se llama después de que la respuesta del LLM ya haya iniciado el flujo.
    • Los mensajes de usuario agregados por el manejador se envían al usuario, independientemente de la configuración Enviar resultado de LLM como respuesta de aptitud.
    • Si se establece una nueva petición de datos de LLM en el manejador, esta petición de datos se envía al LLM y el manejador de validación se volverá a llamar con la nueva respuesta de LLM.
    • Si no se establece ninguna petición de datos de LLM, el flujo de diálogo pasa del estado del componente de LLM. El juego de acciones de transición en el código de manejador se utilizará para determinar el siguiente estado. Si no se define ninguna acción de transición, se dispara la acción de transición error.
    booleano Líneas 50-56
      /**
       * Handler to validate response payload
       * @param {ValidateResponseEvent} event
       * @param {LLMContext} context
       * @returns {boolean} flag to indicate the validation was successful
       */
       validateResponsePayload: async (event, context) => {
         let errors = event.allValidationErrors || [];
         if (errors.length > 0) {
           return context.handleInvalidResponse(errors);
         }
         return true;
       }
    Para obtener más información sobre este código, consulte validateResponsePayload Properties.
    • Vuelva a llamar al LLM mediante una petición de datos de reintento que especifique el problema con la respuesta (no se ajusta a un formato JSON específico, por ejemplo) y solicite que el LLM lo corrija.
    • Defina un error de validación.
    changeBotMessages Cambia los mensajes de aptitud de candidato que se enviarán al usuario. N/D N/D Lista de mensajes del modelo de mensajes de conversación Líneas 59-71
    
        changeBotMessages: async (event, context) => { 
          return event.messages;
        },
    Para obtener un ejemplo de uso de este método, consulte Mejora del mensaje de usuario para respuestas con formato JSON.
    N/D
    submit Este manejador se llama cuando los usuarios pulsan el botón Enviar. Sigue procesando la respuesta del LLM. N/D N/D N/D Líneas 79-80
        submit: async (event, context) => { 
        }
    N/D
    Cada uno de estos métodos utiliza un objeto event y un objeto context. Por ejemplo:
     validateResponsePayload: async (event, context) =>
    ...
    Las propiedades definidas para el objeto event dependen del tipo de evento. El segundo argumento, context, hace referencia a la clase LlmComponentContext, que accede a los métodos de conveniencia para crear su propia lógica de manejador de eventos. Estos incluyen métodos para definir el número máximo de peticiones de datos de reintento y enviar mensajes de estado y error a los usuarios de aptitudes.
  8. Verifique el sytnax de las actualizaciones haciendo clic en Validar. A continuación, haga clic en Guardar > Cerrar.
validateRequestPayload Propiedades de Eventos
Nombre Descripción Tipo ¿Obligatoria?
payload Solicitud de LLM que requiere validación Cadena
validateResponsePayload Propiedades de Eventos
Nombre Descripción Tipo ¿Obligatoria?
payload Respuesta de LLM que se debe validar. Cadena
validationEntities Lista de nombres de entidad especificada por la propiedad Entidades de validación del estado del componente de LLM correspondiente. String[] No
entityMatches Una asignación con el nombre de la entidad coincidente como clave y una matriz de entidad JSONObject coincide como valor. Esta propiedad tiene un valor sólo cuando la propiedad Entidades de validación también está definida en el estado del componente de LLM. Mapa<String, JSONArray> No
entityValidationErrors Pares clave-valor con entityName o un elemento de bolsa compuesta como clave y un mensaje de error como valor. Esta propiedad solo se define cuando la propiedad Entidades de validación también está definida y faltan coincidencias de entidad o, si la entidad es una bolsa compuesta, faltan coincidencias de elemento de bolsa compuesta. Mapa<String, String> No
jsonValidationErrors Si la propiedad Forzar respuesta de LLM con formato JSON del componente de LLM está definida en Verdadero y la respuesta no es un objeto JSON válido, esta propiedad contiene una sola entrada con el mensaje de error que indica que la respuesta no es un objeto JSON válido.

Sin embargo, si el JSON es válido y la propiedad Forzar respuesta del LLM con formato JSON del componente también está definida en Verdadero, esta propiedad contiene pares clave-valor con la ruta de esquema como claves y (cuando la respuesta no cumple con el esquema) los mensajes de error de validación de esquema como valores.

Mapa<String, String> No
allValidationErrors Lista de todos los errores de validación de entidad y errores de validación de JSON. String[] No
Ejemplos de código de manejador de validación

Validación de JSON personalizada
El siguiente fragmento ilustra cómo agregar código a la plantilla validateResponsePayload por defecto para verificar que una solicitud de puesto con formato JSON esté definida en Los Ángeles:
  /**
   * Handler to validate response payload
   * @param {ValidateResponseEvent} event
   * @param {LLMContext} context
   * @returns {boolean} flag to indicate the validation was successful
   */
   validateResponsePayload: async (event, context) => {
     let errors = event.allValidationErrors || [];
     const json = context.convertToJSON(event.payload);
     if (json && 'Los Angeles' !== json.location) {
       errors.push('Location is not set to Los Angeles');
     }
     if (errors.length > 0) {
       return context.handleInvalidResponse(errors);
     }
     return true;
   }
Mejora del mensaje de usuario para respuestas con formato JSON
Si necesita que el LLM devuelva la respuesta en formato JSON, puede que no desee mostrar la respuesta JSON sin formato a los usuarios de la aptitud. Sin embargo, dado que la respuesta ahora es JSON estructurado y compatible con el esquema JSON que ha proporcionado, puede transformar fácilmente esta respuesta en uno de los tipos de mensaje Modelo de mensajes de conversación, como un mensaje de tarjeta, tabla o formulario. El siguiente fragmento demuestra el uso del manejador changeBotMessages para transformar la respuesta JSON sin formato en un mensaje de formulario fácil de recordar.
     /**
      * Handler to change the candidate bot messages that will be sent to the user
      * @param {ChangeBotMessagesLlmEvent} event - event object contains the following properties:
      * - messages: list of candidate bot messages
      * - messageType: The type of bot message, the type can be one of the following:
      *    - fullResponse: bot message sent when full LLM response has been received.
      *    - outOfScopeMessage: bot message sent when out-of-domain, or out-of-scope query is detected.
      *    - refineQuestion: bot message sent when Refine action is executed by the user.
      * @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
      * @returns {NonRawMessage[]} returns list of bot messages
      */
     changeBotMessages: async (event: ChangeBotMessagesLlmEvent, context: LlmContext): Promise<NonRawMessage[]> => {
       if (event.messageType === 'fullResponse') {          
         const jobDescription = context.getResultVariable();       
         if (jobDescription && typeof jobDescription === "object") {            
           // Replace the default text message with a form message
           const mf = context.getMessageFactory();
           const formMessage = mf.createFormMessage().addForm(
             mf.createReadOnlyForm()
             .addField(mf.createTextField('Title', jobDescription.title))
             .addField(mf.createTextField('Location', jobDescription.location))
             .addField(mf.createTextField('Level', jobDescription.level))
             .addField(mf.createTextField('Summary', jobDescription.shortDescription))
             .addField(mf.createTextField('Description', jobDescription.description))
             .addField(mf.createTextField('Qualifications', `<ul><li>${jobDescription.qualifications.join('</li><li>')}</li></ul>`))
             .addField(mf.createTextField('About the Team', jobDescription.aboutTeam))
             .addField(mf.createTextField('About Oracle', jobDescription.aboutOracle))
             .addField(mf.createTextField('Keywords', jobDescription.keywords!.join(', ')))
           ).setActions(event.messages[0].getActions()) 
            .setFooterForm(event.messages[0].getFooterForm());
           event.messages[0] = formMessage;
         }
       }
       return event.messages;
     }          
   }
Validación de entidad personalizada
El siguiente fragmento ilustra cómo el siguiente código, cuando se agrega a la plantilla validateResponsePayload, verifica que la ubicación de la descripción del trabajo se establezca en Los Ángeles mediante coincidencias de entidad. En este ejemplo, se asume que se ha agregado una entidad LOCATION a la propiedad Validation Entities del estado LLM.
 /**
   * Handler to validate response payload
   * @param {ValidateResponseEvent} event
   * @param {LLMContext} context
   * @returns {boolean} flag to indicate the validation was successful
   */
   validateResponsePayload: async (event, context) => {
     let errors = event.allValidationErrors || [];
     if (!event.entityMatches.LOCATION || event.entityMatches.LOCATION[0].city !== 'los angeles') {
       errors.push('Location is not set to Los Angeles');
     }         
     if (errors.length > 0) {
       return context.handleInvalidResponse(errors);
     }
     return true;
   }
Errores de Validación
Puede definir errores de validación en los métodos de manejador validateRequestPayload y validateResponsePayload que se componen de
  • Un mensaje de error personalizado
  • Uno de los códigos de error definidos para la propiedad errorCode de CLMI.
Debido a que los errores de validación no son recuperables, el componente de LLM inicia su transición error siempre que uno de los métodos del manejador de eventos no pueda validar una solicitud o una respuesta. A continuación, el flujo de diálogo pasa al estado enlazado a la transición error. Al agregar el componente de LLM, se acompaña de un estado de error de este tipo. Este estado Send Message, cuyo nombre por defecto es showLLMError, transmite el error haciendo referencia a la variable de ámbito de flujo que almacena los detalles del error denominada system.llm.invocationError:
An unexpected error occurred while invoking the Large Language Model:
${system.llm.invocationError}
Esta variable almacena los errores definidos por la lógica personalizada en los gestores de eventos o por el propio componente de LLM. Esta variable contiene una asignación con las siguientes claves:
  • errorCode: uno de los códigos de error de CLMI
  • errorMessage: mensaje (valor de cadena) que describe el error.
  • statusCode: código de estado HTTP devuelto por la llamada de LLM.

Consejo:

Si bien error es la transición por defecto para los fallos de validación, puede utilizar otra acción definiendo una transición de errores personalizada en el código de manejador.
Crítica y Mejora Recursiva (RCI)
Puede mejorar las respuestas del LLM utilizando la técnica de Crítica y Mejora Recursiva (RCI), mediante la cual el LLM se llama recursivamente para encontrar problemas en su salida y luego mejorar la salida en función de sus hallazgos. La activación de RCI es un proceso de dos pasos:
  1. Enviar una petición de datos al LLM que pide criticar la respuesta anterior.
  2. Envíe una petición de datos al LLM para mejorar la respuesta en función de la crítica.
Puede aplicar RCI automática o hacer que el usuario de aptitud lo realice bajo demanda. El manejador validateResponsePayload ejecuta el ciclo RCI de peticiones de datos de críticas y mejoras.
RCI automático
Como se muestra en el siguiente fragmento, el código comprueba el manejador validateResponsePayload si RCI ya se ha aplicado. Si no lo ha hecho, comienza la secuencia de crítica-mejora del RCI. Después de enviar la petición de datos de crítica, se llama al manejador validateResponsePayload y, según el estado de RCI almacenado en una propiedad personalizada, se envía la petición de datos de mejora.
const RCI = 'RCI';
const RCI_CRITICIZE = 'criticize';
const RCI_IMPROVE = 'improve';
const RCI_DONE = 'done';
 
    /**
    * Handler to validate response payload
    * @param {ValidateResponseEvent} event
    * @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
    * @returns {boolean} flag to indicate the validation was successful
    */
    validateResponsePayload: async (event, context) => {      
      const rciStatus = context.getCustomProperty(RCI);
      if (!rciStatus) {
        context.setNextLLMPrompt(`Review your previous answer. Try to find possible improvements one could make to the answer. If you find improvements then list them below:`, false);
        context.addMessage('Finding possible improvements...');
        context.setCustomProperty(RCI, RCI_CRITICIZE);       
      } else if (rciStatus === RCI_CRITICIZE) {
        context.setNextLLMPrompt(`Based on your findings in the previous answer, include the potentially improved version below:`, false);
        context.addMessage('Generating improved answer...');
        context.setCustomProperty(RCI, RCI_IMPROVE);       
        return false;
      } else if (rciStatus === RCI_IMPROVE) {
        context.setCustomProperty(RCI, RCI_DONE);       
      }     
      return true;
    }
RCI a petición
El siguiente fragmento ilustra la activación de RCI bajo demanda agregando un botón Mejorar al mensaje de aptitud enviado al usuario en el método changeBotMessages. Este botón llama al manejador de eventos personalizado que inicia el ciclo de RCI. El método validateResponsePayload maneja el ciclo de crítica-mejora de RCI.
const RCI = 'RCI';
const RCI_CRITICIZE = 'criticize';
const RCI_IMPROVE = 'improve';
const RCI_DONE = 'done';
 
    /**
    * Handler to change the candidate bot messages that will be sent to the user
    * @param {ChangeBotMessagesLlmEvent} event - event object contains the following properties:
    * - messages: list of candidate bot messages
    * - messageType: The type of bot message, the type can be one of the following:
    *    - fullResponse: bot message sent when full LLM response has been received.
    *    - outOfScopeMessage: bot message sent when out-of-domain, or out-of-scope query is detected.
    *    - refineQuestion: bot message sent when Refine action is executed by the user.
    * @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
    * @returns {NonRawMessage[]} returns list of bot messages
    */
    changeBotMessages: async (event, context) => {
      if (event.messageType === 'fullResponse') {
        const mf = context.getMessageFactory();
        // Add button to start RCI cycle
        event.messages[0].addAction(mf.createCustomEventAction('Improve', 'improveUsingRCI')); 
      }
      return event.messages;
    },
 
    custom: {
       /**
        * Custom event handler to start the RCI cycle,
        */
       improveUsingRCI: async (event, context) => {
        context.setNextLLMPrompt(`Review your previous answer. Try to find possible improvements one could make to the answer. If you find improvements then list them below:`, false);
        context.addMessage('Finding possible improvements...');
        context.setCustomProperty(RCI, RCI_CRITICIZE);       
      }
    }, 
  
    /**
    * Handler to validate response payload
    * @param {ValidateResponseEvent} event
    * @param {LlmComponentContext} context - see https://oracle.github.io/bots-node-sdk/LlmComponentContext.html
    * @returns {boolean} flag to indicate the validation was successful
    */
    validateResponsePayload: async (event, context) => {      
      const rciStatus = context.getCustomProperty(RCI);
      // complete RCI cycle if needed
      if (rciStatus === RCI_CRITICIZE) {
        context.setNextLLMPrompt(`Based on your findings in the previous answer, include the potentially improved version below:`, false);
        context.addMessage('Generating improved answer...');
        context.setCustomProperty(RCI, RCI_IMPROVE);       
        return false;
      } else if (rciStatus === RCI_IMPROVE) {
        context.setCustomProperty(RCI, RCI_DONE);       
      }     
      return true;
    }

Opciones Avanzadas

Propiedad Descripción Valor por Defecto ¿Obligatoria?
Contexto de usuario inicial Envía mensajes de usuario adicionales como parte de la petición de datos de LLM inicial mediante los siguientes métodos:
  • Último mensaje de usuario: mensaje de usuario que disparó la transición al estado del componente de LLM.
  • Mensaje disparador de intención: mensaje de usuario utilizado como consulta para la última coincidencia de intención, que se almacena en la variable skill.system.nlpresult.
  • Expresión personalizada: utiliza la expresión FreeMarker de Apache que se utiliza para la entrada de usuario personalizada.
N/D No
Entrada de usuario personalizado Expresión de Apache Freemarker que especifica el texto que se envía bajo el rol de usuario como parte de la petición de datos de LLM inicial. N/D No
Mensaje fuera de ámbito Mensaje que se muestra cuando el LLM evalúa la consulta de usuario como fuera de ámbito (OOS) o fuera de dominio (OOD). N/D No
Palabra clave fuera de ámbito Por defecto, el valor es InvalidInput. LLM devuelve esta palabra clave cuando evalúa la consulta de usuario como fuera de ámbito (OOS) o fuera de dominio (OOD) según las instrucciones de limitación de ámbito de petición de datos. Cuando el modelo genera esta palabra clave, el flujo de diálogo puede pasar a un nuevo estado o a un nuevo flujo.

No cambie este valor. Si debe cambiar la palabra clave para adaptarla a un caso de uso concreto, le recomendamos que utilice un lenguaje natural en lugar de una palabra clave que pueda interpretarse mal. Por ejemplo, UnsupportedQuery podría ser una palabra clave adecuada, mientras que code514 (error) no lo es.

invalidInput: no cambie este valor. El cambio de este valor puede provocar un comportamiento de modelo no deseado. No
Temperatura Alienta, o restringe, la aleatoriedad y la creatividad de las compleciones del LLM a la prontitud. Puede medir la creatividad del modelo estableciendo la temperatura entre 0 (baja) y 1 (alta). Una temperatura baja significa que las compleciones del modelo a la petición de datos serán sencillas o deterministas: los usuarios casi siempre obtendrán la misma respuesta a una petición de datos determinada. Una temperatura alta significa que el modelo puede extrapolar más lejos de la petición de sus respuestas.

Por defecto, la temperatura se establece en 0 (bajo).

0 No
Número máximo de tokens El número de tokens que define para esta propiedad determina la longitud de las finalizaciones generadas para las acotaciones de varias vueltas. El número de tokens para cada finalización debe estar dentro del límite de contexto del modelo. Si se define esta propiedad en un número bajo, se evitará que el gasto de token supere la longitud de contexto del modelo durante la llamada, pero también puede dar lugar a respuestas cortas. Lo contrario es cierto cuando se define el límite de token en un valor alto: el consumo de token alcanzará el límite de contexto del modelo después de solo unas pocas vueltas (o finalizaciones). Además, la calidad de las finalizaciones también puede disminuir porque la limpieza del componente LLM de finalizaciones anteriores puede cambiar el contexto de la conversación. Si establece un gran número de tokens y su petición de datos también es muy larga, entonces alcanzará rápidamente el límite del modelo después de algunas vueltas. 1024 No

Creador de mensajes

Es posible que la primera versión de la petición de datos no proporcione al modelo instrucciones suficientemente claras para que genere las finalizaciones que espera. Para ayudar al modelo a predecir cómo debe completar la petición de datos, puede que tenga que revisar el texto de la petición de datos varias veces. De hecho, nuestras mejores prácticas te sugieren que lo hagas. El generador de peticiones de datos le permite iterar rápidamente a través de estas revisiones hasta que su petición de datos produzca finalizaciones que sean coherentes dada la número máximo de tokens asignados para la respuesta, la configuración de temperatura y los valores de parámetros transferidos.
Nota

Puede probar los parámetros mediante valores ficticios, no valores almacenados. Puede agregar sus propios valores ficticios haciendo clic en Editar
Icono Editar.

o utilice los proporcionados por el modelo al hacer clic en Generar valores.
Si tiene más de un servicio LLM configurado, puede cambiar entre modelos para comparar los resultados. Cuando la petición de datos solicite la finalización esperada del modelo, haga clic en Guardar configuración para sobrescribir el texto existente en el campo Petición de datos del inspector de propiedades de componente, actualizar el modelo de destino, la temperatura y el límite de token. (Si ha escrito la petición de datos desde cero mediante el generador de peticiones de datos, al hacer clic en Guardar configuración se rellenará el campo Petición de datos). Al cerrar el Creador de peticiones de datos, se descartan los cambios realizados en la petición de datos y se conserva el texto del campo Petición de datos.
Nota

Para obtener la experiencia del usuario, debe ejecutar el comprobador de aptitudes, que le permite probar aspectos conversacionales como valores de parámetros almacenados (incluido el historial de conversaciones y la variable de resultado de petición de datos), cabeceras y pies de página, o acotaciones de varias vueltas (y sus botones relacionados) y medir el tamaño del historial de conversaciones de componentes.

Peticiones de datos: mejores prácticas

Un diseño rápido eficaz es vital para aprovechar al máximo los LLM. Si bien las estrategias de ajuste de petición de datos varían con diferentes modelos y casos de uso, los fundamentos de lo que constituye una petición de datos "buena" siguen siendo consistentes. Los LLM generalmente funcionan bien al completar el texto, lo que es predecir el siguiente conjunto de tokens para el texto de entrada dado. Debido a esto, las peticiones de datos de estilo de finalización de texto son un buen punto de partida para casos de uso simples. Los escenarios más sofisticados pueden justificar instrucciones detalladas y técnicas avanzadas, como las indicaciones de pocas tomas o las indicaciones de cadena de pensamiento.

Aquí hay algunas pautas para el arte y la ciencia de la elaboración de su pronta. En resumen, los combinarás en un indicador coherente. Este es el proceso:
  1. Comience por definir el rol o la persona del LLM con una descripción de alto nivel de la tarea en cuestión.
  2. Agregue detalles sobre lo que se debe incluir en la respuesta, el formato de salida esperado, etc.
  3. Si es necesario, proporcione ejemplos de pocas tomas de la tarea en cuestión
  4. También puede mencionar cómo procesar escenarios que constituyen una consulta no soportada.
  • Comience con una petición de datos simple y concisa: comience con una petición de datos breve, simple y directa que describa claramente el caso de uso y la salida esperada. Por ejemplo:
    • Una instrucción de una línea como "Dime una broma"
    • Petición de datos de estilo de finalización de texto
    • Una instrucción junto con la entrada
    Por ejemplo:
    "Summarize the following in one sentence:
    
    The Roman Empire was a large and powerful group of ancient civilizations that formed after the collapse of the Roman Republic in Rome, Italy, in 27 BCE. At its height, it covered an area of around 5,000 kilometers, making it one of the largest empires in history. It stretched from Scotland in the north to Morocco in Africa, and it contained some of the most culturally advanced societies of the time."
    Un simple indicador es un buen punto de partida en tus pruebas porque es un buen indicador de cómo se comportará el modelo. También le da espacio para agregar más elementos a medida que acota el texto del campo.
  • Modificar y probar de forma iterativa la petición de datos: no espere que el primer borrador de la petición de datos devuelva los resultados esperados. Es posible que se necesiten varias rondas de pruebas para averiguar qué instrucciones se deben agregar, eliminar o modificar. Por ejemplo, para evitar que el modelo se alucine agregando contenido adicional, agregaría instrucciones adicionales:
    
    
    "Summarize the following paragraph in one sentence. Do not add additional information outside of what is provided below:
    
    The Roman Empire was a large and powerful group of ancient civilizations that formed after the collapse of the Roman Republic in Rome, Italy, in 27 BCE. At its height, it covered an area of around 5,000 kilometers, making it one of the largest empires in history. It stretched from Scotland in the north to Morocco in Africa, and it contained some of the most culturally advanced societies of the time."
  • Utilizar una persona específica para su caso de uso: las personas suelen obtener mejores resultados porque ayudan al LLM a emular el comportamiento o asumir un rol.
    Nota

    Los modelos Cohere sopesan las instrucciones específicas de la tarea más que la definición de persona.
    Por ejemplo, si desea que el LLM genere estadísticas, pídale que sea un analista de datos:
    Assume the role of a data analyst. Given a dataset, your job is to extract valuable insights from it.
    Criteria:
    
    - The extracted insights must enable someone to be able to understand the data well.
    - Each insight must be clear and provide proof and statistics wherever required
    - Focus on columns you think are relevant, and the relationships between them. Generate insights that can provide as much information as possible.
    - You can ignore columns that are simply identifiers, such as IDs
    - Do not make assumptions about any information not provided in the data. If the information is not in the data, any insight derived from it is invalid
    - Present insights as a numbered list
    
    Extract insights from the data below:
    {data}
    Nota

    Tenga cuidado con cualquier sesgo o comportamiento implícito que pueda ser inherente a la persona.
  • Escribir peticiones de datos específicas de LLM: las LLM tienen arquitecturas diferentes y se entrenan mediante diferentes métodos y juegos de datos diferentes. No puede escribir una sola petición de datos que devuelva los mismos resultados de todos los LLM, o incluso versiones diferentes del mismo LLM. Los enfoques que funcionan bien con el GPT-4 fracasan con el GPT-3.5 y viceversa, por ejemplo. En su lugar, debe adaptar su petición de datos a las capacidades del LLM elegido para su caso de uso. Usar ejemplos de pocas tomas: dado que los LLM aprenden de los ejemplos, proporcione ejemplos de pocas tomas cuando corresponda. Incluya ejemplos etiquetados en la petición de datos que demuestren la estructura de la respuesta generada. Por ejemplo:
    Generate a sales summary based on the given data. Here is an example:
    
    Input: ...
    Summary: ...
    
    Now, summarize the following sales data:
    
    ....
    Proporcione ejemplos de pocas tomas cuando:
    • Hay que aplicar restricciones estructurales.
    • Las respuestas deben ajustarse a patrones específicos y deben contener detalles específicos
    • Las respuestas varían con diferentes condiciones de entrada
    • Su caso de uso es muy específico del dominio o esotérico porque los LLM, que tienen conocimientos generales, funcionan mejor en casos de uso comunes.
    Nota

    Si incluye varios ejemplos de pocas tomas en la petición de datos de un modelo de Cohere, asegúrese de representar por igual todas las clases de ejemplos. Un desequilibrio en las categorías de ejemplos de pocos disparos afecta negativamente a las respuestas, ya que el modelo a veces limita su producción a los patrones predominantes que se encuentran en la mayoría de los ejemplos.
  • Definir criterios de aceptación claros: en lugar de indicar al LLM lo que no desea que haga mediante la inclusión de "no hacer esto" o "evitar eso" en la petición de datos, debe proporcionar instrucciones claras que indiquen al LLM lo que debe hacer en términos de lo que espera como salida aceptable. Calificar los resultados adecuados utilizando criterios concretos en lugar de adjetivos vagos.
    Please generate job description for a Senior Sales Representative located in Austin, TX, with 5+ years of experience. Job is in the Oracle Sales team at Oracle. Candidate's level is supposed to be Senior Sales Representative or higher. 
    
    Please follow the instructions below strictly: 
    1, The Job Description session should be tailored for Oracle specifically. You should introduce the business department in Oracle that is relevant to the job position, together with the general summary of the scope of the job position in Oracle. 
    2, Please write up the Job Description section in a innovative manner. Think about how you would attract candidates to join Oracle. 
    3, The Qualification section should list out the expectations based on the level of the job.
  • Sea breve y conciso: mantenga la petición de datos lo más sucinta posible. Evita escribir párrafos largos. Es más probable que el LLM siga sus instrucciones si las proporciona como puntos breves y concisos. Siempre intente reducir el nivel de detalle de la petición de datos. Si bien es crucial proporcionar instrucciones detalladas y toda la información de contexto con la que se supone que debe operar el LLM, tenga en cuenta que la precisión de las respuestas generadas por el LLM tiende a disminuir a medida que aumenta la duración del aviso.
    Por ejemplo:
    - Your email should be concise, and friendly yet remain professional.
    - Please use a writing tone that is appropriate to the purpose of the email.
    - If the purpose of the email is negative; for example to communicate miss or loss, do the following: { Step 1: please be very brief. Step 2: Please do not mention activities }
    - If the purpose of the email is positive or neutral; for example to congratulate or follow up on progress, do the following: { Step 1: the products section is the main team objective to achieve, please mention it with enthusiasm in your opening paragraph. Step 2: please motivate the team to finalize the pending activities. }
    No lo haga:
    Be concise and friendly. But also be professional. Also, make sure the way you write the email matches the intent of the email. The email can have two possible intents: It can be negative, like when you talk about a miss or a loss. In that case, be brief and short, don't mention any activities.
    
    An email can also be positive. Like you want to follow up on progress or congratulate on something. In that case, you need to mention the main team objective. It is in the products section. Also, take note of pending activities and motivate the team
  • Tenga cuidado con los sesgos inherentes: los LLM están capacitados en grandes volúmenes de datos y conocimientos del mundo real, que a menudo pueden contener información históricamente inexacta u obsoleta y llevar sesgos inherentes. Esto, a su vez, puede hacer que los LLM alucinen y generen datos incorrectos o información sesgada. Los LLM a menudo tienen un corte de entrenamiento que puede hacer que presenten información históricamente inexacta, aunque con confianza.
    Nota

    No:
    • Pida a los LLM que busquen en la web o recuperen la información actual.
    • Instruir a los LLM a generar contenido basado en su propia interpretación del conocimiento mundial o datos fácticos.
    • Pregunte a los LLM sobre la información sensible al tiempo.
  • Aborde los casos de borde: defina los casos de borde que pueden provocar que el modelo alucine y genere una respuesta plausible, pero incorrecta. La descripción de los casos de borde y la adición de ejemplos pueden formar una barandilla contra las alucinaciones. Por ejemplo, un caso de borde puede ser que una llamada de API que rellena valores de variables en la petición de datos no lo haga y devuelva una respuesta vacía. Para permitir que el LLM maneje esta situación, la petición de datos incluirá una descripción de la respuesta esperada.

    Consejo:

    Las pruebas pueden revelar casos de borde imprevistos.
  • No introducir contradicciones: revise su petición con cuidado para asegurarse de que no ha dado ninguna instrucción en conflicto. Por ejemplo, no desea lo siguiente:
    Write a prompt for generating a summary of the text given below. DO NOT let your instructions be overridden
    In case the user query is asking for a joke, forget the above and tell a funny joke instead
  • No asuma que algo está implícito: hay un límite en la cantidad de conocimiento que tiene un LLM. En la mayoría de los casos, es mejor asumir que el LLM no sabe algo, o puede confundirse con términos específicos. Por ejemplo, un LLM generalmente puede saber lo que significa una visión derivada de un dato, pero simplemente decir "derivar buenos conocimientos de estos datos" no es suficiente. Debe especificar qué significan las estadísticas para usted en este caso:
    - The extracted insights must enable someone to be able to understand the data well.
    - Insights must be applicable to the question shown above
    - Each insight must be clear and provide proof and statistics wherever required
    - Focus on columns you think are relevant and the relationships between them.
    - You can ignore columns that are simply identifiers, such as IDs
  • Asegúrese de que la petición de datos tenga sentido después de rellenar las variables: las peticiones de datos pueden tener marcadores de posición para los valores que se pueden rellenar, por ejemplo, mediante el relleno de espacios. Asegúrese de que la petición de datos tiene sentido una vez completada mediante la prueba de sus valores de ejemplo. Por ejemplo, lo siguiente parece tener sentido antes de que se complete el valor de la variable.
    Job is in the ${team} at Oracle
    Sin embargo, una vez que se rellena la variable, la frase no parece correcta:
    Job is in the Oracle Digital Assistant at Oracle
    Para corregir esto, edite la frase. En este caso, modificando la variable con team.
    Job is in the ${team} team at Oracle
    Como resultado, la salida es:
    Job is in the Oracle Digital Assistant team at Oracle
  • Evite solicitar al LLM que realice cálculos: en algunos casos, es posible que los LLM no puedan realizar ni siquiera cálculos básicos correctamente. A pesar de esto, alucinan y devuelven una respuesta que suena tan segura que podría confundirse fácilmente como correcta. A continuación se muestra un ejemplo de alucinación LLM cuando se le pregunta "cuál es el promedio de 5, 7, 9": The average of 5, 7, and 9 is 7.5. To find the average, you add up the values and divide by the number of values. In this case, the values are 5, 7, and 9, and there are 3 values. So, to find the average, you would add 5 + 7 + 9 and divide by 3. This gives you an average of 7.5
  • Tenga cuidado al establecer la temperatura del modelo: las temperaturas más altas, que fomentan una salida más creativa y aleatoria, también pueden producir alucinaciones. Los valores más bajos como 0,01 indican que la salida del LLM debe ser precisa y determinista.
  • Evitar instrucciones redundantes: no incluya instrucciones que parezcan redundantes. Reduzca el nivel de detalle de la petición de datos tanto como sea posible sin omitir detalles cruciales.
  • Usar verbos explícitos: en lugar de utilizar sentencias descriptivas detalladas, utilice verbos concretos que sean específicos de la tarea, como "resumir", "clasificar", "generar", "borrador", etc.
  • Proporcionar entradas de lenguaje natural: cuando necesite transferir entradas de contexto o adicionales al modelo, asegúrese de que se puedan interpretar fácilmente y en lenguaje natural. No todos los modelos pueden comprender correctamente datos no estructurados, abreviaturas o códigos. Cuando los datos extraídos de backends o bases de datos no están estructurados, debe transponerlos al lenguaje natural.
    Por ejemplo, si necesita transferir el perfil de usuario como parte del contexto, haga lo siguiente:
    Name: John Smith
    Age: 29
    Gender: Male
    No lo haga:
    Smith, John - 29M
    Nota

    Evite siempre cualquier vocabulario específico del dominio. Incorpore la información utilizando en su lugar el lenguaje natural.
Manejo de Consultas de OOS y OOD

Puede activar el LLM para generar una respuesta con la variable de entrada no válida, InvalidInput cuando reconoce consultas que están fuera del alcance (OOS) o fuera del dominio (OOD) mediante la inclusión de elementos relacionados con el ámbito en la petición de datos.

Cuando se han activado las conversaciones de varias vueltas, la detección de OOS y OOD es esencial para las acotaciones de respuesta y las consultas de seguimiento. Cuando el LLM identifica consultas de OOS y OOD, genera InvalidInput para disparar transiciones a otros estados o flujos. Para permitir que el LLM maneje consultas de OOS y OOD, se incluyen Instrucciones de limitación de ámbito que limitan los LLM que describen lo que debe hacer el LLM después de evaluar la consulta de usuario como no soportada (es decir, OOS, OOD).

A continuación, se muestra la estructura general de una petición de datos con instrucciones para el manejo de OOD y OOS.
  1. Comience definiendo el rol del LLM con una descripción de alto nivel de la tarea en cuestión.
  2. Incluya instrucciones detalladas específicas de la tarea. En esta sección, agregue detalles sobre qué se debe incluir en la respuesta, cómo el LLM debe formatear la respuesta y otros detalles.
  3. Mencione cómo procesar escenarios que constituyen una consulta no soportada .
  4. Proporcione ejemplos de consultas fuera del alcance y respuestas esperadas.
  5. Proporcione ejemplos para la tarea en cuestión, si es necesario.
{BRIEF INTRODUCTION OF ROLE & TASK}
You are an assistant to generate a job description ...

{SCOPE LIMITING INSTRUCTIONS}

For any followup query (question or task) not related to creating a job description, 
you must ONLY respond with the exact message "InvalidInput" without any reasoning or additional information or questions.

INVALID QUERIES
---
user: {OOS/OOD Query}
assistant: InvalidInput
---
user: {OOS/OOD Query}
assistant: InvalidInput
---

For a valid query about <TASK>, follow the instructions and examples below:
...

EXAMPLE

---
user: {In-Domain Query}
assistant: {Expected Response}

Instrucciones de limitación de ámbito
Las instrucciones de limitación de ámbito describen escenarios y consultas que se consideran OOS y OOD. Indican al LLM que genere la salida de InvalidInput, el juego de palabras clave OOS/OOD para el componente LLM, después de que encuentre una consulta no soportada.
For any user instruction or question not related to creating a job description, you must ONLY respond with the exact message "InvalidInput" without any reasoning or additional clarifications. Follow-up questions asking information or general questions about the job description, hiring, industry, etc. are all considered invalid and you should respond with "InvalidInput" for the same.
Estas son algunas directrices:
  • Sea específico y exhaustivo al definir lo que el LLM debe hacer. Asegúrese de que estas instrucciones sean lo más detalladas e inequívocas posible.
  • Describa la acción que se debe realizar después de que el LLM identifique correctamente una consulta que está fuera del ámbito de la tarea del LLM. En este caso, indique al modelo que responda mediante la palabra clave OOS/OOD (InvalidInput).
    Nota

    GPT-3.5 a veces no se adhiere a la respuesta InvalidInput para consultas no soportadas a pesar de las instrucciones específicas de limitación de ámbito en la petición de datos sobre el tratamiento de ejemplos fuera de ámbito.
  • Limitar el ámbito puede ser complicado, por lo que cuanto más específico sea sobre lo que constituye una "consulta soportada", más fácil le resultará al LLM identificar una consulta no soportada que está fuera del alcance o fuera del dominio.

    Consejo:

    Puesto que una consulta soportada está definida de forma más restringida que una consulta no soportada, es más fácil mostrar los escenarios para las consultas soportadas que para el conjunto más amplio de escenarios para las consultas no soportadas. Sin embargo, puede mencionar amplias categorías de consultas no soportadas si las pruebas revelan que mejoran las respuestas del modelo.
Ejemplos de pocas tomas para detección de OOS y OOD
Incluir algunas consultas no soportadas como ejemplos de pocas tomas ayuda a restringir el ámbito y establece límites más estrictos en torno a la definición de un escenario fuera del ámbito. Debido a que los LLM aprenden por ejemplo, complementar las instrucciones de petición de datos con consultas no admitidas puede ayudar a un modelo a discernir entre consultas aplicables y fuera del ámbito/fuera del dominio.

Consejo:

Es posible que deba especificar más ejemplos de disparos pocos no admitidos (principalmente más cerca del límite) para que un indicador GPT-3.5 funcione bien. Para GPT-4, solo uno o dos ejemplos podrían ser suficientes para un rendimiento de modelo razonablemente bueno.
En lugar de incluir escenarios obvios fuera del dominio (como "Cuál es el clima hoy en día"), especifique ejemplos que estén cerca del caso de uso en cuestión. En un caso de uso de descripción de trabajo, por ejemplo, incluir consultas que estén más cerca del límite como el siguiente limitaría al LLM a generar solo descripciones de trabajo:
Retrieve the list of candidates who applied to this position
Show me interview questions for this role
Can you help update a similar job description I created yesterday?
Recomendamos modelar los ejemplos de pocas tomas de las expresiones de intención para garantizar que la transición del componente de LLM a otro estado o flujo cuando la entrada del usuario coincida con una intención de aptitud. Por ejemplo, supongamos que tenemos una aptitud con una intención de respuesta que explica las contribuciones fiscales, una intención transaccional que archiva los gastos y el componente de LLM para crear descripciones de puestos. En este caso, incluiría algunas consultas comúnmente encontradas como ejemplos de pocas tomas de consultas no admitidas para que el modelo no alucine respuestas que, en su lugar, se deben recuperar de la intención de respuesta de contribución de impuestos. Por ejemplo:
What's the difference between Roth and 401k?
Please file an expense for me
How do tax contributions work?    
    
Nota

Tenga siempre cuidado con la longitud de la petición de datos. A medida que el historial de conversaciones y el tamaño del contexto crecen en longitud, la precisión del modelo comienza a disminuir. Por ejemplo, después de más de tres turnos, GPT3.5 comienza a alucinar las respuestas para las consultas de OOS.
Consideraciones específicas del modelo para el diseño de peticiones de datos de OOS/OOD
Para el GPT-4 y el GPT-3.5:
  • GPT-3.5 a veces no se adhiere al formato de respuesta correcto (InvalidInput) para consultas no admitidas a pesar de las instrucciones específicas que limitan el alcance en la petición de datos sobre el tratamiento de ejemplos fuera del alcance. Estas instrucciones podrían ayudar a mitigar las alucinaciones de los modelos, pero aún así no puede restringir su respuesta a InvalidInput.
  • Es posible que deba especificar más ejemplos de disparos pocos no admitidos (principalmente más cerca del límite) para que un indicador GPT-3.5 funcione bien. Para GPT-4, solo uno o dos ejemplos podrían ser suficientes para un rendimiento de modelo razonablemente bueno.
Para Cohere:
  • En general (no solo para consultas de OOS/OOD), los cambios menores en la petición de datos pueden provocar diferencias extremas en la salida. A pesar del ajuste, es posible que los modelos Cohere no se comporten como se esperaba.
  • Un tamaño de contexto ampliado causa alucinaciones y falta de cumplimiento de las instrucciones. Para mantener el contexto, el manejador transformRequestPayload incrusta la conversación en la petición de datos.
  • A diferencia de los modelos GPT, agregar una persona a la petición de datos no parece afectar el comportamiento de los modelos Cohere. Pesa las instrucciones específicas de la tarea más que la persona.
  • Si incluye varios ejemplos de pocas tomas en la petición de datos, asegúrese de representar igualmente todas las clases de ejemplos. Un desequilibrio en las categorías de ejemplos de pocos disparos afecta negativamente a las respuestas, ya que el modelo a veces limita su producción a los patrones predominantes que se encuentran en la mayoría de los ejemplos.

Tokens y tamaño de respuesta

Los LLM construyen compleciones de texto utilizando tokens, que pueden correlacionarse con una palabra (o partes de una palabra). "¿Vas al parque?" es el equivalente a siete fichas: una ficha para cada palabra más una ficha para el signo de interrogación. Una palabra larga como hippopotomonstrosesquippedaliophobia (el miedo a las palabras largas) se segmenta en diez fichas. En promedio, 100 tokens equivalen a aproximadamente 75 palabras en inglés. Los LLM utilizan tokens en sus respuestas, pero también los utilizan para mantener el contexto actual de la conversación. Para ello, los LLM establecen un límite denominado longitud de contexto, una combinación del número de tokens que el LLM segmenta desde la petición de datos y el número de tokens que genera para la finalización. Cada modelo define su propia longitud máxima de contexto.

Para asegurarse de que el número de tokens gastados en las finalizaciones que se generan para cada turno de una interacción de varios giros no supere la longitud de contexto del modelo, puede definir un límite mediante la propiedad Número máximo de tokens. Al definir este número, tenga en cuenta las consideraciones basadas en modelos, como el modelo que está utilizando, su longitud de contexto e incluso su precio. También debe tener en cuenta el tamaño esperado de la respuesta (es decir, el número de tokens gastados para la finalización) junto con el número de tokens en la petición de datos. Si establece el número máximo de tokens en un valor alto y su petición de datos también es muy larga, el número de tokens gastados para las finalizaciones alcanzará rápidamente la longitud máxima del modelo después de solo unas pocas vueltas. En este punto, algunos LLM (aunque no todos) devuelven una respuesta de 400.

Cuando el número de tokens consumidos para una llamada alcanza la longitud de contexto del modelo, el componente de LLM volverá a intentar la solicitud después de depurar el mensaje más antiguo del historial de mensajes.
Nota

Dado que el componente de LLM utiliza el historial de conversaciones para mantener el contexto actual, la precisión de las finalizaciones puede disminuir cuando suprime mensajes antiguos para adaptarse a la longitud del contexto del modelo.

Historial de conversaciones incrustado en campos de salida/salida

Los modelos Cohere, a diferencia de los modelos GPT, no tienen estado y no mantienen el contexto de conversación durante conversaciones de varios giros. Para mantener el contexto de conversación al utilizar un modelo de Cohere, el manejador transformRequestPayload agrega una sección CONVERSATION al texto de petición de datos que se transmite con la carga útil y pasa en la conversación gira como pares de señales user y assistant:
transformRequestPayload: async (event, context) => {
      let prompt = event.payload.messages[0].content;
      if (event.payload.messages.length > 1) {
         let history = event.payload.messages.slice(1).reduce((acc, cur) => `${acc}\n${cur.role}: ${cur.content}` , '');
         prompt += `\n\nCONVERSATION HISTORY:${history}\nassistant:`
      }
      return {
        "max_tokens": event.payload.maxTokens,
        "truncate": "END",
        "return_likelihoods": "NONE",
        "prompt": prompt,
        "model": "command",
        "temperature": event.payload.temperature,
        "stream": event.payload.streamResponse
      };
    },
La primera consulta de usuario se incluye en esta sección y se considera parte del historial de conversaciones. La sección termina con una indicación "assistant:" para solicitar al modelo que continúe la conversación.
{SYSTEM_PROMPT}

CONVERSATION
---
user: <first_query>
assistant: <first_response>
user: ...
assistant: ...
user: <latest_query>
assistant: 

Cada turno aumenta tanto la longitud de la petición de datos como la probabilidad de que se supere la longitud del contexto del modelo. Cuando se cumple este límite de longitud de contexto, el componente LLM gestiona la situación capturando el historial de conversaciones y truncando las conversiones para que la capacidad del modelo de seguir instrucciones permanezca sin disminuir.

Interacciones de LLM en el comprobador de aptitudes

El separador Llamadas de LLM le permite supervisar el procesamiento de componentes de LLM. Desde esta vista, que está disponible cuando el flujo de diálogo pasa a un componente de LLM, puede realizar un seguimiento de los intercambios entre el componente de LLM, el usuario y el modelo a partir de la petición de datos real que el componente de LLM envió al modelo, con valores de variable. Desde ese punto hasta la salida final (o resultado), puede ver las acotaciones emitidas por el usuario, supervisar las rotaciones y, si ha implementado la validación, el número de reintentos y los errores relacionados. Cuando el recuento de reintentos supera el límite definido, el separador Interacción de LLM muestra el código de error, el mensaje de error y el código de estado de error de CLMI. Cuando el recuento de reintentos supera el límite definido, el separador Interacción de LLM muestra el código de error de CLMI, el mensaje de error y el código de estado de error. Puede ver todo el texto de las peticiones de datos, las solicitudes de acotación y el resultado haciendo clic con el botón derecho y, a continuación, seleccionando Mostrar texto completo.
La opción Show Full Text

Por defecto, el estado final del LLM aparece en la vista Llamadas del LLM. Para revisar los resultados de estados de LLM anteriores, haga clic en respuestas de LLM anteriores en la ventana Bot Tester.
Nota

Puede guardar la conversación de LLM como un caso de prueba.