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.
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.
Descripción de la ilustración invokellm-added-flow.png
La acotación de respuesta también puede provenir del sistema cuando implanta reintentos después de fallar la validación.
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 | Sí |
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: Para las variables de bolsa compuesta, utilice la sintaxis de bolsa compuesta:
|
N/D | No |
Variable de resultado | Variable que almacena la respuesta de LLM. | N/D | No |
Mensajería de usuario
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:
|
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.
|
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

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.
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 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 :
|
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.
LlmComponentContext
en bots-node-sdk
o incorporando estos métodos en la plantilla que proporcionamos.
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.
- Haga clic en Componentes en la barra de navegación izquierda.
- Haga clic en Servicio +New.
- 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.
- Haga clic en Crear para generar el manejador de validación.
- Una vez finalizado el despliegue, amplíe el servicio y, a continuación, seleccione el manejador de validación.
- Haga clic en Editar para abrir el editor de edición de código de componente.
- 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
Para obtener más información sobre este código, consultevalidateRequestPayload: async (event, context) => { if (context.getCurrentTurn() === 1 && context.isJsonValidationEnabled()) { context.addJSONSchemaFormattingInstruction(); } return true; }
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 devuelvetrue
:- 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 enfalse
, el turno se mantiene y el cuadro de diálogo pasa del estado mediante la acción de transiciónsuccess
.
Cuando el manejador devuelvefalse
:- 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
Para obtener más información sobre este código, consulte/** * 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; }
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
Para obtener un ejemplo de uso de este método, consulte Mejora del mensaje de usuario para respuestas con formato JSON.changeBotMessages: async (event, context) => { return event.messages; },
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 event
y un objetocontext
. Por ejemplo:
Las propiedades definidas para el objetovalidateResponsePayload: async (event, context) => ...
event
dependen del tipo de evento. El segundo argumento,context
, hace referencia a la claseLlmComponentContext
, 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. - 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 | Sí |
validateResponsePayload
Propiedades de Eventos
Nombre | Descripción | Tipo | ¿Obligatoria? |
---|---|---|---|
payload |
Respuesta de LLM que se debe validar. | Cadena | Sí |
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
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
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
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
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.
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 CLMIerrorMessage
: mensaje (valor de cadena) que describe el error.statusCode
: código de estado HTTP devuelto por la llamada de LLM.
Consejo:
Si bienerror
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)
- Enviar una petición de datos al LLM que pide criticar la respuesta anterior.
- Envíe una petición de datos al LLM para mejorar la respuesta en función de la crítica.
validateResponsePayload
ejecuta el ciclo RCI de peticiones de datos de críticas y mejoras.
RCI automático
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
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:
|
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, |
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
Puede probar los parámetros mediante valores ficticios, no valores almacenados. Puede agregar sus propios valores ficticios haciendo clic en Editar

o utilice los proporcionados por el modelo al hacer clic en Generar valores.
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.
- Comience por definir el rol o la persona del LLM con una descripción de alto nivel de la tarea en cuestión.
- Agregue detalles sobre lo que se debe incluir en la respuesta, el formato de salida esperado, etc.
- Si es necesario, proporcione ejemplos de pocas tomas de la tarea en cuestión
- 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
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."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."
- 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.
NotaPor ejemplo, si desea que el LLM genere estadísticas, pídale que sea un analista de datos:
Los modelos Cohere sopesan las instrucciones específicas de la tarea más que la definición de persona.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:
Proporcione ejemplos de pocas tomas cuando:Generate a sales summary based on the given data. Here is an example: Input: ... Summary: ... Now, summarize the following sales data: ....
- 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:
No lo haga:- 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. }
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.
Sin embargo, una vez que se rellena la variable, la frase no parece correcta:Job is in the ${team} at Oracle
Para corregir esto, edite la frase. En este caso, modificando la variable conJob is in the Oracle Digital Assistant at Oracle
team
.
Como resultado, la salida es:Job is in the ${team} team at Oracle
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:
No lo haga:Name: John Smith Age: 29 Gender: Male
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).
- Comience definiendo el rol del LLM con una descripción de alto nivel de la tarea en cuestión.
- 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.
- Mencione cómo procesar escenarios que constituyen una consulta no soportada .
- Proporcione ejemplos de consultas fuera del alcance y respuestas esperadas.
- 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
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 respuestaInvalidInput
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
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.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?
What's the difference between Roth and 401k?
Please file an expense for me
How do tax contributions work?
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
- 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 aInvalidInput
. - 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 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.
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
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

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.