Implementar Perspectivas de conversación
Para producir datos de conversación como eventos de experiencia XDM y asegurarse de que estos eventos de experiencia de conversación terminen en Adobe Experience Platform como conjuntos de datos, instrumente la aplicación o el servicio del agente para utilizar Perspectivas de conversación.
Este artículo documenta los pasos de implementación necesarios.
- Debe tener un entorno de Experience Platform (organización y zona protegida) disponible para recopilar los datos.
- Su organización de Adobe debe estar habilitada para los grupos de campos de conversación y agéntico.
Esquema y conjuntos de datos
Configure conjuntos de datos para los eventos de conversación principales: solicitud, respuesta, comentarios. Los conjuntos de datos de solicitud, respuesta y comentarios deben ampliar el esquema base de XDM Experience Event con el grupo de campos Evento de conversación y, opcionalmente, pueden incluir el grupo de campos Información de agente y otros grupos de campos adicionales.
Puede definir conjuntos de datos independientes para preguntas, respuestas y comentarios, o bien combinar datos en conjuntos de datos. Por ejemplo, utilice un conjunto de datos para preguntas y respuestas y otro conjunto de datos para comentarios. O use un conjunto de datos distinto para cada tipo de evento de conversación como se muestra en Cómo funciona.
Para ilustrar, utilice:
-
Implementación de conjunto de datos discreto. Separe los conjuntos de datos para los eventos de solicitud, respuesta y comentarios. Siga este método de implementación si:
- Desea mantener menos estado en la implementación de su cliente.
- Enviar datos de solicitud independientemente de una respuesta retrasada o inexistente.
-
Implementación de conjunto de datos combinado. Por ejemplo, un conjunto de datos de eventos de respuesta y petición de datos combinado y un conjunto de datos de eventos de comentarios independiente. Siga este método de implementación si:
- Desea reducir las llamadas de porque su implementación admite giros completos.
- No se preocupe por la latencia mientras espera a que lleguen las respuestas.
El diseño del conjunto de datos y el envío de eventos de conversación a estos conjuntos de datos son preocupaciones independientes. Envíe cada evento de conversación tan pronto como los datos estén disponibles para garantizar identificadores de conversación estables y identificadores de giro. Los identificadores estables facilitan la correlación adecuada mediante el servicio de mezclador de conversaciones entre conjuntos de datos.
Grupo de campos Evento de conversación
El grupo de campos Evento de conversación es un grupo de campos obligatorio y usa el objeto conversation.
El objeto de conversación captura datos para:
Conversación
Un(a) conversationID único(a) identifica una conversación. Por ejemplo: conversationID = "conv-001". conversationID permite que todos los eventos de turnos relacionados se agrupen en la misma experiencia de conversación.
El esquema también admite conversationName. Un nombre legible en lenguaje natural que describe el contexto general de la conversación, como: France Geography Q&A. El nombre de la conversación se genera automáticamente, pero puede actualizar el nombre generado. El nombre de la conversación también se rellena en signals[].name. Adobe rellena conversationName con el mismo valor que la señal signals[].name = “title”. Puede establecer conversation.conversationName en cualquier conjunto de datos que rellene y sobrescribir el valor proporcionado por Adobe.
Turno
Un giro es un ciclo de interacción dentro de una conversación.
turnID Un(a) turnID único(a) identifica un turno. Por ejemplo:
conversationID = "conv-001"turnID = "turn-001"
Se usan los mismos conversationID y turnID para correlacionar el aviso, la respuesta y los comentarios asociados con ese turno. Esa correlación funciona en registros que se entregan por separado o que terminan en diferentes conjuntos de datos. Un(a) turnId solamente necesita ser único(a) dentro de la misma conversación, pero puede reutilizarse en todas las conversaciones. Por ejemplo, puede tener tanto turn-001 como turnID en conversaciones con conversationID conv-001 y conv-002.
Preguntar
Una solicitud es la entrada enviada al agente. En la mayoría de los casos de clientes, esta entrada es la pregunta, la solicitud, la instrucción o el mensaje del usuario.
La solicitud utiliza la siguiente representación: conversation.prompt
Los campos de solicitud importantes incluyen:
prompt.sourceprompt.raw[]prompt.raw[].textprompt.raw[].purposeUna solicitud puede contener varios segmentos sin procesar. Por ejemplo, un usuario introduce texto e incluye una dirección URL.
-
Prompt"What is the capital of France""https://example.com/france"
Respuesta
Una respuesta es el contenido devuelto por el agente u otra parte encuestada.
conversation.response Un(a) responseID único representa la respuesta.
Los campos de respuesta importantes incluyen:
response.sourceresponse.raw[]response.raw[].textresponse.raw[].purposeLos tipos de fuentes documentados incluyen:
botcannedconciergeend-userComentarios
Los comentarios son la evaluación explícita o la reacción del usuario a la interacción.
La estructura de comentarios incluye: conversation.feedback.
Ejemplos:
feedback.raw[].text: "Great help"feedback.rating.score:1feedback.rating.classification:"Thumbs Up"feedback.rating.reasons[]: ["Accurate", "Quick response"]
El rango de puntuación de clasificación documentado es de -1.0 a 1.0.
Un evento de comentarios puede representarse como un evento de solo comentarios mediante: eventType = "conversation.feedback".
Cuando los comentarios se apliquen a un turno en particular, conserva los conversationID y turnID adecuados para que el mezclador de conversaciones pueda asociar los comentarios con la interacción relevante.
Señal
Una señal es una observación analítica estructurada acerca del contenido de una conversación. El servicio de extracción de señales proporciona señales predeterminadas. No se requiere ninguna acción para proporcionar señales, pero puede agregarlas como parte de la integración.
Una señal tiene los siguientes campos.
scopenametypevalues[]stringValuenumberValuebooleanValueconfidencequalifiers[]metadata[]El servicio de extracción de señales rellena el objeto signals para el conjunto de datos de señales.
El contenedor signals[].attributes.{subjects,intents,tones,sentiment} anterior está obsoleto.
Tipo de Source
Debe establecer un valor para source para cada objeto prompt, response o feedback de un evento. Cualquier valor es aceptable. Utilice valores que le ayuden a comprender desde dónde se originan los datos. Por ejemplo:
end-useragentbotcanned-promptconciergeTipo de propósito (texto sin procesar)
Debe establecer un valor para el atributo purpose en cualquier elemento del objeto raw en un objeto prompt, response o feedback. Cualquier valor de cadena es aceptable. Este campo se utiliza para diferenciar lo que se almacena en el texto sin procesar. Los valores útiles están por debajo, otros valores son igualmente válidos:
free-form-textscreenshotattachmentlinkurlimage-linkcitationmediaConversación
Consulte a continuación todos los detalles de un objeto de conversación.
| table 0-row-4 1-row-4 2-row-4 3-row-4 4-row-4 5-row-4 6-row-4 7-row-4 8-row-4 9-row-4 10-row-4 11-row-4 12-row-4 13-row-4 14-row-4 15-row-4 16-row-4 17-row-4 18-row-4 19-row-4 20-row-4 21-row-4 22-row-4 23-row-4 24-row-4 25-row-4 26-row-4 27-row-4 28-row-4 29-row-4 30-row-4 31-row-4 32-row-4 33-row-4 34-row-4 35-row-4 36-row-4 37-row-4 38-row-4 39-row-4 40-row-4 | |||
|---|---|---|---|
| Ruta de campo (notación de puntos) | Tipo | Valor de ejemplo | Notas |
conversationID |
string | "conv-001" |
Agrupa varios turnos. |
conversationName |
string | "France Geography Q&A" |
Nuevo. Nombre dado a una conversación que representa su contexto general. |
turnID |
string | "turn-001" |
ID único para este turno. |
prompt.source |
string | "end-user" |
Source del mensaje, otras opciones pueden incluir un valor almacenado en caché, un valor conservado, etc. |
prompt.raw[] |
matriz | Consulte el objeto sin procesar a continuación | Datos sin procesar. |
prompt.raw[].text |
string | "What is the capital of France?" |
Contenido de texto real. |
prompt.raw[].purpose |
string | "User Input" |
Objetivo de este segmento de texto. |
response.source |
string | "bot" |
Source de respuesta. |
response.raw[] |
matriz | Consulte el objeto sin procesar a continuación | Datos de respuesta sin procesar. |
response.raw[].text |
string | "The capital of France is Paris." |
Contenido de texto de respuesta. |
response.raw[].purpose |
string | "main" |
Objetivo del segmento de respuesta, otras opciones pueden incluir vínculos, imágenes, etc. |
feedback.source |
string | "end-user" |
Source de comentarios. |
feedback.raw[] |
matriz | Consulte el objeto sin procesar a continuación | Datos de comentarios sin procesar |
feedback.raw[].text |
string | "Great help" |
Texto de comentarios. |
feedback.raw[].purpose |
string | "free-form text" |
Objetivo del segmento de comentarios, otras opciones pueden incluir capturas de pantalla, medios, etc. |
feedback.rating.score |
número | 1 |
Puntuación de clasificación numérica de -1.0 a 1.0. |
feedback.rating.classification |
string | "Thumbs Up" |
Clasificación de clasificación. |
feedback.rating.reasons[] |
matriz | ["Accurate", "Quick response"] |
Matriz de motivos de clasificación. |
signals[] |
matriz | Consulte el objeto de señal a continuación | Señales derivadas basadas en este evento y la conversación hasta la fecha. Cada entrada es una señal con un solo nombre y su propio ámbito. |
signals[].scope |
string | "turn" |
Ámbito de las entradas de las que se deriva este conjunto de señales (turno, conversación hasta la fecha, últimos N giros, comentarios). |
signals[].attributes |
objeto | Consulte los atributos a continuación | Obsoleto. Contenedor de atributos de señal. Cada atributo es un objeto con valor o valores en él. Esto es para satisfacer la necesidad anticipada de admitir la población de información de ML/agente utilizada para generar la señal. |
signals[].attributes.subjects |
objeto | Consulte los temas siguientes | Obsoleto. Contenedor de asuntos. |
signals[].attributes.subjects.values[] |
matriz | Consulte los valores de asunto a continuación | Obsoleto. Matriz de valores de asunto. |
signals[].attributes.subjects.values[].phrase |
string | "product pricing" |
Obsoleto. Una frase o palabra clave extraída de la entrada con ámbito. |
signals[].attributes.subjects.values[].qualifiers[] |
matriz | ["important", "urgent"] |
Obsoleto. Lista de calificadores para la frase |
signals[].attributes.intents |
objeto | Consulte Intenciones a continuación | Obsoleto. Contenedor de intenciones. |
signals[].attributes.intents.values[] |
matriz | ["make a purchase", "learn more"] |
Obsoleto. Intenciones derivadas de la entrada con ámbito. |
signals[].attributes.tones |
objeto | Ver tonos a continuación | Obsoleto. Contenedor de tonos. |
signals[].attributes.tones.values[] |
matriz | ["thrilled", "contemplative"] |
Obsoleto. Tonos derivados de la entrada con ámbito. |
signals[].attributes.sentiment |
objeto | Consulte la opinión a continuación | Obsoleto. Contenedor de opinión. |
signals[].attributes.sentiment.value |
número | 0.71 |
Obsoleto. Puntuación de -1 (negativa) a 1 (positiva) que indica opinión. |
signals[].name |
string | "sentiment" |
Nuevo (reemplaza el contenedor attributes obsoleto). Identificador de esta señal, por ejemplo, “sujetos”, “intenciones”, “tonos”, “opinión” o cualquier nombre definido por el productor. Los productores pueden añadir nuevos tipos de señales sin cambiar el esquema. |
signals[].type |
string | "number" |
Nuevo. Tipo de datos de los valores de esta señal (string, number o boolean). Indica a los consumidores qué campo de valor escrito se rellena en cada entrada de values[]. |
signals[].values[] |
matriz | Consulte el objeto values a continuación | Uno o más valores para esta señal. |
signals[].values[].stringValue |
string | "curious" |
Se rellena cuando type es una cadena. Un valor categórico como intención, tono o frase extraída/ |
signals[].values[].numberValue |
número | 0.71 |
Rellenado cuando type es un número. Por ejemplo, una puntuación de opinión de -1 a 1 o una intensidad/ |
signals[].values[].booleanValue |
booleano | true |
Se rellena cuando type es booleano. Un indicador true / false |
signals[].values[].confidence |
número | 0.9 |
Nuevo. Confianza que el productor asigna a este valor, de 0 a 1. |
signals[].values[].qualifiers[] |
matriz | ["important", "urgent"] |
Descriptores adicionales para este valor, similares a las palabras clave pero más significativos/ |
signals[].values[].metadata[] |
matriz | Consulte los parámetros siguientes | Nuevo. Metadatos definidos por el productor para este valor como pares clave/valor, p. ej. contexto sobre el ML/agente que generó la señal/ |
Grupo de campos Información de agente
El grupo de campos Información de agente es un grupo de campos opcional y utiliza el objeto agenticExperience. Considere utilizar este grupo de campos si desea rastrear información auténtica.
| table 0-row-4 1-row-4 2-row-4 3-row-4 4-row-4 5-row-4 6-row-4 7-row-4 8-row-4 9-row-4 10-row-4 11-row-4 12-row-4 13-row-4 14-row-4 15-row-4 16-row-4 17-row-4 18-row-4 19-row-4 20-row-4 21-row-4 22-row-4 23-row-4 24-row-4 25-row-4 26-row-4 27-row-4 28-row-4 29-row-4 30-row-4 31-row-4 32-row-4 33-row-4 34-row-4 35-row-4 | |||
|---|---|---|---|
| Ruta de campo (notación de puntos) | Tipo | Valor de ejemplo | Notas |
conciergeID |
string | "concierge-abc123" |
Nuevo. Identificador único del conserje |
name |
string | "Brand Concierge" |
Nombre del conserje que combina un conjunto de agentes |
version |
string | "1.0.0" |
Versión del conserje que combina un conjunto de agentes |
environment |
string | "prod" |
Entorno desde el que se originó este evento (dev, stage, prod) |
mode |
string | "release" |
Modo en el que se encuentra el agente (prueba, previsualización, lanzamiento) |
agents[] |
matriz | Consulte el objeto del agente a continuación | Matriz de agentes utilizados |
agents[].agentID |
string | "agent-001" |
Nuevo. Identificador único del agente, al que hace referencia skills[].agentID más abajo |
agents[].name |
string | "Chatbot Assistant" |
Nombre del agente |
agents[].version |
string | "2.1.3" |
Versión del agente |
agents[].score |
número | 0.92 |
Puntuación de confianza del agente en sus valores devueltos |
agents[].skills[] |
matriz | Consulte el objeto de aptitud a continuación | Obsoleto. En su lugar, utilice la matriz de nivel superior skills[] que aparece a continuación, que posee la lista ordenada completa de llamadas de aptitudes y vincula cada una a su agente mediante agentID |
agents[].skills[].name |
string | "Intent Recognition" |
Nombre de aptitud (matriz obsoleta) |
agents[].skills[].version |
string | "1.0.0" |
Versión de aptitud (matriz obsoleta) |
agents[].skills[].score |
número | 0.95 |
Puntuación de confianza de aptitudes (0-1) (matriz obsoleta) |
agents[].skills[].parameters[] |
matriz | Consulte los parámetros siguientes | Parámetros enviados a la aptitud (pares clave-valor) (matriz obsoleta) |
agents[].skills[].parameters[].key |
string | "language" |
Clave de parámetro |
agents[].skills[].parameters[].value |
string | "en-US" |
Valor de parámetro |
skills[] |
matriz | Consulte el objeto Invocación de aptitud a continuación | Nuevo, experimental. Lista completa y ordenada de invocaciones de aptitudes para esta experiencia, en todos los agentes. Reemplaza la matriz obsoleta por agente agents[].skills[] |
skills[].skillID |
string | "skill-intent-recognition" |
Identificador de la definición de aptitud invocada |
skills[].skillInvocationID |
string | "inv-9f2a-001" |
Identificador único de esta invocación de aptitud individual, coherente incluso con las reentregas. Clave de deduplicación al combinar cabinas de aptitudes descendentes |
skills[].name |
string | "Intent Recognition" |
Nombre de la aptitud a la que se llamó |
skills[].version |
string | "1.0.0" |
Versión de la aptitud invocada |
skills[].agentID |
string | "agent-001" |
Identificador del agente que invocó esta aptitud, que corresponde a agents[].agentID. La agrupación de consumidores clave utiliza para ordenar habilidades dentro de un agente, ya que los subagentes se ejecutan en paralelo |
skills[].invocationSource |
string | "main" |
Ya sea invocado por el bucle agéntico principal (main) o por un subagente (subagent) |
skills[].score |
número | 0.95 |
Puntuación resultante de la coincidencia de la aptitud |
skills[].failed |
booleano | false |
Indicador que indica que la ejecución de la aptitud ha fallado |
skills[].errorReason |
string | "timeout" |
Motivo del error de la aptitud, cuando failed es verdadero |
skills[].sequenceNumber |
entero | 1 |
Índice de aumento monotónico de esta llamada de habilidad dentro de una ejecución de agente único. Este índice no es turn-global, ya que los subagentes se ejecutan en paralelo. Los consumidores solicitan agentID, después sequenceNumber y después timestamp como desempate. Opcional |
skills[].timestamp |
cadena (fecha y hora) | "2026-09-11T00:03:15Z" |
Hora de invocación de la aptitud, ISO 8601 UTC. Clave de orden usada después de sequenceNumber. Los productores siempre deben rellenar esto |
skills[].skillSource |
string | "inline" |
Cómo se entregó la definición de aptitud al tiempo de ejecución: inline (cargado en línea en el contexto) o deferred (cargado bajo demanda) |
skills[].executionContext |
string | "inline" |
Donde la aptitud se ejecuta en relación con el agente que realiza la llamada: inline o forked (se ejecuta en un contexto de subagente ramificado) |
skills[].reasoning.narration |
string | "Recognized an intent to verify a geography fact" |
Explicación en lenguaje natural de por qué se llamó a esta aptitud |
skills[].parameters[] |
matriz | Consulte los parámetros siguientes | Parámetros transferidos a la aptitud |
skills[].parameters[].key |
string | "language" |
Clave de parámetro |
skills[].parameters[].value |
string | "en-US" |
Valor de parámetro |
Para implementar eventos que propaguen el grupo de campos Información de agente con datos, debe asegurarse de lo siguiente:
-
Configuración del agente
- Cada agente tiene una combinación única de Id. de agente, nombre y versión.
- Las puntuaciones del agente se normalizaron entre
0.0y1.0. - Usar
agentIDpara hacer referencia a agentes por invocación de aptitud.
-
Invocación de aptitudes
- Emitir solo una entrada por llamada de aptitud, en todos los agentes, en lugar de anidar aptitudes en cada agente.
- Rellene skillInvocationID para que la fusión descendente pueda eliminar los eventos duplicados.
- Solicite a los consumidores correctamente. Agrupar por
agentIDy ordenar porsequenceNumber, volviendo atimestamp. Es necesario realizar el pedido porque los subagentes se pueden ejecutar en paralelo - Utilice
invocationSourceyexecutionContextpara distinguir las habilidades principales frente a las de subagente, y la ejecución en línea frente a la ejecución bifurcada. - Evite utilizar la matriz
agents[].skills[]obsoleta. Si ha utilizado la matriz en el pasado, trate la matriz como un objeto de solo lectura.
-
Parámetros de aptitud
- Los parámetros utilizan el tipo de datos de valor clave XDM de Adobe y utilizan tipos de parámetros comunes para la configuración de idioma, los umbrales y las configuraciones de modelo. Por ejemplo,
"key":"language", "value":"en-US".
- Los parámetros utilizan el tipo de datos de valor clave XDM de Adobe y utilizan tipos de parámetros comunes para la configuración de idioma, los umbrales y las configuraciones de modelo. Por ejemplo,
| code language-json |
|---|
|
Grupos de campo adicionales
Puede agregar grupos de campos opcionales al esquema que utiliza para los conjuntos de datos de solicitud, respuesta y comentarios. Por ejemplo:
- Detalles web grupo de campos. Para capturar los detalles de la página web en la que se incrustó la conversación.
- Detalles de Commerce grupo de campos. Para recopilar los detalles del producto recomendado mencionado como parte de la conversación.
El cliente es responsable de producir los eventos de conversación de origen. Adobe realiza la extracción de señales y la mezcla de datos. El cliente no necesita implementar los servicios de extracción o fusión de señales.
Tipo de evento
Debe establecer uno de los siguientes valores para eventType (cadena) para cada evento de conversación:
conversation.turnconversation.recommendationconversation.feedbackEjemplo
Consulte a continuación un ejemplo de uso del grupo de campos Evento de conversación en varios escenarios.
| tabs | |||
|---|---|---|---|
| Ejemplo del evento Turn |
|
||
| Ejemplo de evento de respuesta |
|
||
| Ejemplo de evento de comentarios |
|
||
| Ejemplo de evento de recomendaciones de productos |
|
Recopilación de datos
Utilice la siguiente estrategia de recopilación de datos para las Perspectivas de conversación.
Tipos de eventos
El servicio o la aplicación del agente envía un evento lo antes posible. Asegúrese de que la aplicación o el servicio no espere una respuesta antes de enviar el mensaje con la información disponible en el momento del evento.
Esta recomendación implica que:
- Los objetos de solicitud, respuesta y comentarios se rellenan de forma independiente y no se deben forzar para que formen parte de un solo evento.
- Se esperan varios eventos con los mismos
conversationIDyturnIDen los conjuntos de datos.
Correlación de eventos
La aplicación o el servicio del agente debe conservar los identificadores estables en todos los eventos relacionados.
conversation.conversationIDconversation.turnID_idtimestampeventType-
Se debe usar el mismo(a)
conversationIDpara todos los eventos que pertenecen a la misma conversación. -
Se debe usar el mismo
turnIDpara el aviso, la respuesta y cualquier comentario asociado con el mismo turno. Pueden existir varios eventos con el mismoturnIDen los conjuntos de datos de mensajes, respuestas y comentarios.
La aplicación o el servicio del agente genera ID que permanecen estables durante los reintentos o la reentrega. Esto permite que el procesamiento descendente asocie correctamente los eventos y evite los eventos duplicados no deseados.
Extracción de señal
La extracción de señales se produce después de la recopilación de datos. La aplicación o el servicio del agente puede rellenar señales adicionales.
Nombre de señal
Debe establecer un valor para signals[].name. Cualquier valor de cadena es aceptable; sin embargo, Adobe rellena los siguientes nombres durante el proceso de extracción de señales. Evite utilizar estos valores para name para cualquier señal que envíe, ya que estos valores se sobrescribirán.
intentssentimenttonestopicskeywordstitle
Ámbito de señal
Cualquier valor de cadena es aceptable; sin embargo, Adobe rellena los siguientes ámbitos durante el proceso de extracción de señales. Evite utilizar estos valores para scope para cualquier señal que envíe, ya que estos valores se sobrescribirán.
turnfeedback
| code language-json |
|---|
|
Combinación de datos
El servicio de mezcla de conversaciones combina eventos de conjuntos de datos de mensajes, respuestas, comentarios y eventos de señal en un conjunto de datos de eventos de conversación combinados dedicado. Ese conjunto de datos se utiliza en Customer Journey Analytics como parte de una conexión. Los componentes de ese conjunto de datos se agregan a las vistas de datos especificadas para una configuración de Perspectivas de conversación.