Calcula métricas con los datos de conversaciones de Agent Assist

Las Estadísticas de experiencia del cliente te permiten importar conversaciones de Agent Assist para analizarlas. En este documento, se explica el proceso para calcular varias métricas de conversación importantes sobre los datos importados de Agent Assist.

Requisitos previos

  1. Usa Agent Assist para generar datos conversacionales con las funciones de respuesta inteligente o resumen.

  2. Habilita la integración del entorno de ejecución de Dialogflow en Customer Experience Insights.

  3. Exporta tus datos de CX Insights a BigQuery.

Tasa de activación

El porcentaje de activación describe la frecuencia con la que aparece un tipo de anotación en una conversación.

Tasa de activación a nivel de la oración

Se aplica un porcentaje de activación a nivel de la oración para las anotaciones que pueden aparecer al menos una vez por oración.

Nombre de la anotación Tipo de anotación Criterios
Sugerencia de artículo 'ARTICLE_SUGGESTION' Se envía al menos una solicitud de SuggestArticles por cada mensaje de la conversación.
Asistencia de preguntas frecuentes 'FAQ' Se envía al menos una solicitud de SuggestFaqAnswers o AnalyzeContent para cada mensaje de la conversación.
Respuesta inteligente 'SMART_REPLY' Se envía al menos una solicitud de SuggestSmartReplies o AnalyzeContent para cada mensaje de la conversación.

WITH calculation AS
(
  SELECT
    COUNTIF(
      (
        SELECT COUNT(*)
        FROM UNNEST (sen.annotations) AS annotation
        WHERE annotation.type = 'ANNOTATION_TYPE'
      ) > 0
    ) AS numSentencesAtLeastOneAnnotation,
    COUNT(*) AS numSentencesTotal
  FROM BIGQUERY_TABLE,
  UNNEST (sentences) AS sen
)
SELECT
  numSentencesAtLeastOneAnnotation,
  numSentencesTotal,
  numSentencesAtLeastOneAnnotation / numSentencesTotal AS triggerRate
FROM calculation;

Tasa de activación a nivel de la conversación

Se aplica una tasa de activación a nivel de la conversación a las anotaciones que pueden aparecer como máximo una vez por conversación.

Nombre de la anotación Tipo de anotación Criterios

| Asistencia de conocimiento generativa (GKA) | 'KNOWLEDGE_SEARCH' | Se envía al menos una solicitud de SearchKnowledge por cada mensaje de la conversación. | | Asistencia de conocimiento generativo proactiva | 'KNOWLEDGE_SEARCH' | Se envía al menos una solicitud de SearchKnowledge o AnalyzeContent para cada mensaje de la conversación. | | Resumen | 'CONVERSATION_SUMMARIZATION' | Se envía al menos una solicitud de SuggestConversationSummary por cada conversación. |

WITH calculation AS
(
  SELECT
    COUNTIF(
      (
        SELECT COUNT(*)
        FROM
          UNNEST (sentences) AS sen,
          UNNEST (sen.annotations) AS annotation
        WHERE annotation.type = 'ANNOTATION_TYPE'
      ) > 0
    ) AS numConversationsAtLeastOneAnnotation,
    COUNT(*) AS numConversationsTotal
  FROM BIGQUERY_TABLE
) SELECT
  numConversationsAtLeastOneAnnotation,
  numConversationsTotal,
  numConversationsAtLeastOneAnnotation / numConversationsTotal AS triggerRate
FROM calculation;

Tasa de clics

La tasa de clics describe la frecuencia con la que los agentes de llamadas hacen clic en las anotaciones que se les sugieren.

Tasa de clics a nivel de la oración

La tasa de clics a nivel de la oración se aplica a las anotaciones en las que los agentes de llamadas pueden hacer clic varias veces por oración.

Nombre de la anotación Tipo de anotación Criterios
Sugerencia de artículo 'ARTICLE_SUGGESTION' Se envía al menos una solicitud de SuggestArticles por cada mensaje de la conversación.
Asistencia de preguntas frecuentes 'FAQ' Se envía al menos una solicitud de SuggestFaqAnswers o AnalyzeContent para cada mensaje de la conversación.
Respuesta inteligente 'SMART_REPLY' Se envía al menos una solicitud de SuggestSmartReplies o AnalyzeContent para cada mensaje de la conversación.

WITH calculation AS
(
  SELECT
    COUNTIF(
      (
        SELECT COUNT(*)
        FROM UNNEST (sen.annotations) AS annotation
        WHERE
          annotation.type = 'ANNOTATION_TYPE' AND
          annotation.displayed = TRUE AND
          annotation.clicked = TRUE
      ) > 0
    ) AS numSentencesAtLeastOneClickedAndDisplayedAnnotation,
    COUNTIF(
      (
        SELECT COUNT(*)
        FROM UNNEST (sen.annotations) AS annotation
        WHERE
          annotation.type = 'ANNOTATION_TYPE' AND
          annotation.displayed = TRUE
      ) > 0
    ) AS numSentencesAtLeastOneDisplayedAnnotation,
  FROM BIGQUERY_TABLE,
  UNNEST (sentences) AS sen
)
SELECT
  numSentencesAtLeastOneClickedAndDisplayedAnnotation,
  numSentencesAtLeastOneDisplayedAnnotation,
  numSentencesAtLeastOneClickedAndDisplayedAnnotation / numSentencesAtLeastOneDisplayedAnnotation AS clickThroughRate
FROM calculation;

Tasa de clics a nivel de la conversación

La tasa de clics a nivel de la conversación se aplica a las anotaciones en las que los agentes de llamadas pueden hacer clic varias veces por conversación. Los agentes de llamadas deben enviar de forma proactiva una solicitud que cree una anotación a nivel de la conversación.

Nombre de la anotación Tipo de anotación Criterios
Asistencia de conocimiento generativo (GKA) 'KNOWLEDGE_SEARCH' Se envía al menos una solicitud de SearchKnowledge por cada mensaje de la conversación.
Knowledge Assist proactivo y generativo 'KNOWLEDGE_SEARCH' Se envía al menos una solicitud de SearchKnowledge o AnalyzeContent para cada mensaje de la conversación.

Métricas específicas de la función

En esta sección, se enumeran las métricas específicas de cada función.

Asistente de conocimiento generativo

La asistencia de conocimiento generativo (GKA) proporciona respuestas a las preguntas de un agente en función de la información de los documentos que proporciones. Si el agente no encuentra una respuesta, GKA sugiere una pregunta similar y proporciona la respuesta. Esta función genera las siguientes métricas de la Búsqueda de conocimiento:

Nombre de la métrica Definición Cálculo
Recuento de resultados Es la cantidad total de respuestas proporcionadas a un solo agente para todas las conversaciones.
Proporción de fuentes de consultas de agentes Proporción de preguntas del agente en relación con la cantidad total de preguntas. Calcula la cantidad de preguntas de los agentes y divídela por la cantidad total de preguntas.
Proporción de fuentes de consultas sugeridas Proporción de preguntas sugeridas en relación con la cantidad total de preguntas. Calcula la cantidad de preguntas sugeridas dividida por la cantidad total de preguntas.
Proporción de clics en el URI Proporción de respuestas en las que se hizo clic en al menos un URI en relación con la cantidad total de respuestas. Calcula la cantidad de respuestas para las que un agente hizo clic en el URI dividida por la cantidad total de respuestas.
Proporción de comentarios positivos Proporción de comentarios positivos sobre las respuestas en relación con la cantidad total de respuestas. Calcula la cantidad de respuestas que recibieron comentarios positivos dividida por la cantidad total de respuestas.
Proporción de comentarios negativos Proporción de comentarios negativos sobre las respuestas en relación con la cantidad total de respuestas. Calcula la cantidad de respuestas que recibieron comentarios negativos dividida por la cantidad total de respuestas.

Knowledge Assist proactivo y generativo

La asistencia de conocimiento generativo proactiva sugiere las preguntas según el contexto de la conversación actual y proporciona las respuestas en función de la información de los documentos que proporcionas. Knowledge Assist proactivo y generativo no requiere interacción del agente. Esta función genera las siguientes métricas de asistencia basada en el conocimiento:

Nombre de la métrica Definición Cálculo
Recuento de resultados Es la cantidad total de sugerencias proporcionadas a un solo agente para todas las conversaciones.
Proporción de clics en el URI Proporción de sugerencias en las que se hizo clic en al menos un URI en relación con la cantidad total de sugerencias proporcionadas. Calcula la cantidad de sugerencias para las que un agente hizo clic en el URI dividida por la cantidad total de sugerencias proporcionadas.
Proporción de comentarios positivos Proporción de comentarios positivos sobre las sugerencias en relación con la cantidad total de sugerencias. Calcula la cantidad de sugerencias que recibieron comentarios positivos dividida por la cantidad total de sugerencias.
Proporción de comentarios negativos Proporción de comentarios negativos sobre las sugerencias en relación con la cantidad total de sugerencias. Calcula la cantidad de sugerencias que recibieron comentarios negativos dividida por la cantidad total de sugerencias.

Respuesta inteligente

En esta sección, se enumeran las métricas específicas de la respuesta inteligente.

Tasa de clics efectiva (CTR efectiva)

La tasa de clics efectiva refleja con mayor precisión la frecuencia con la que los agentes de asistencia al cliente hacen clic en las anotaciones de respuesta inteligente que la métrica de tasa de clics normal. La siguiente consulta recupera la respuesta de cada agente y las anotaciones de respuestas inteligentes que se hicieron solo para la respuesta de ese agente y en las que hizo clic el agente. Luego, cuenta la cantidad de veces que el agente redactó su respuesta con sugerencias de Respuesta inteligente y divide este número por el recuento total de respuestas del agente.

WITH calculation AS (
  SELECT
    sen.sentence AS agentResponse,
    (
      # Get a list of effective smart replies that map to each agent response.
      SELECT ARRAY_AGG(JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.reply"))
      FROM
        UNNEST (sentences) AS sen2,
        UNNEST (sen2.annotations) AS annotation
      WHERE
        annotation.type='SMART_REPLY' AND
        annotation.clicked=TRUE AND
        annotation.annotationRecord IS NOT NULL AND
        annotation.createTimeNanos >= (
          # Get the timestamp of the agent response that immediately precedes
          # the current agent response. The timestamp of the effective smart
          # reply must be greater than this timestamp.
          SELECT MAX(sen3.createTimeNanos)
          FROM UNNEST(sentences) AS sen3
          WHERE
            sen3.participantRole = 'HUMAN_AGENT' AND
            sen3.createTimeNanos < sen.createTimeNanos
        ) AND
        annotation.createTimeNanos <= sen.createTimeNanos
    ) AS effectiveSmartRepliesPerAgentResponse
  FROM BIGQUERY_TABLE,
  UNNEST (sentences) AS sen
  WHERE sen.participantRole = 'HUMAN_AGENT'
)
SELECT COUNTIF(ARRAY_LENGTH(effectiveSmartRepliesPerAgentResponse) > 0) / COUNT(agentResponse) AS effectiveCTR
FROM calculation;

Editar tarifa

Los agentes pueden optar por usar las respuestas de respuesta inteligente sugeridas de forma literal o editarlas antes de enviarlas a los clientes. Calcular la tasa de edición de las respuestas de Respuesta inteligente puede mostrarte con qué frecuencia se editan las respuestas sugeridas. La siguiente consulta recupera cada respuesta inteligente sugerida y la respuesta del agente que sigue inmediatamente a esa respuesta inteligente. Luego, cuenta la cantidad de veces que la respuesta del agente no contiene su respuesta inteligente correspondiente y, luego, divide este número por el recuento total de respuestas inteligentes.

WITH calculation AS
(
  SELECT
    JSON_VALUE(PARSE_JSON(JSON_VALUE(annotation.annotationRecord), wide_number_mode=>'round'), "$.reply") AS smartReply,
    (
      # Get the agent response that immediately follows the smart reply.
      SELECT sen2.sentence
      FROM UNNEST (sentences) AS sen2
      WHERE sen2.createTimeNanos = (
        SELECT MIN(sen3.createTimeNanos)
        FROM UNNEST (sentences) AS sen3
        WHERE
          sen3.createTimeNanos > sen.createTimeNanos AND
          sen3.participantRole = 'HUMAN_AGENT'
      )
    ) AS agentResponseThatFollows,
  FROM BIGQUERY_TABLE,
  UNNEST (sentences) AS sen,
  UNNEST (sen.annotations) AS annotation
  WHERE
    annotation.type='SMART_REPLY' AND
    annotation.clicked=TRUE AND
    annotation.annotationRecord IS NOT NULL
)
SELECT COUNTIF(REGEXP_CONTAINS(agentResponseThatFollows, smartReply)) / COUNT(smartReply) AS editRate
FROM calculation;

Resúmenes

En esta sección, se enumeran las métricas específicas de la generación de resúmenes.

  • El tipo GENERATOR_SUGGESTION_RESULT contendrá todos los resultados del generador, incluidos los resúmenes.
  • El tipo CONVERSATION_SUMMARIZATION_SUGGESTION contendrá resúmenes heredados.

Resumen del generador

Consulta de ejemplo para acceder al resumen del generador y a las ediciones del agente en el resumen como JSON:

SELECT
IF
  (JSON_VALUE(annotation.annotationRecord) != '', 
   JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.generatorSuggestion.summarySuggestion"),
   NULL) AS generator_summary,
IF
  (JSON_VALUE(annotation.detailedFeedback) != '',
   JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.detailedFeedback)), "$.summarizationFeedback.summaryText"),
   NULL) AS feedback,
FROM
  BIGQUERY_TABLE AS c,
  UNNEST(c.sentences) AS sentences,
  UNNEST(sentences.annotations) AS annotation
WHERE
  annotation.type = 'GENERATOR_SUGGESTION_RESULT'
  AND JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.generatorSuggestion.summarySuggestion") IS NOT NULL
LIMIT
  10 ;

Distancia de edición

La distancia de edición del resumen es una medida de cuánto difieren los resúmenes editados por el agente de los resúmenes sugeridos. Esta métrica se correlaciona con la cantidad de tiempo que el agente dedicó a editar los resúmenes sugeridos.

  1. Consultar las resúmenes y sus resúmenes revisados (si los hay)

  2. Dado que los agentes de llamadas pueden enviar revisiones de resúmenes sin establecer el valor booleano clicked en true, se pueden consultar los resúmenes de las búsquedas, independientemente de su estado clicked. Si el resumen del agente es nulo, significa que el agente no revisó el resumen sugerido o que el resumen revisado no se envió a Agent Assist a través de la ruta de comentarios preferida.

  3. Compara los resúmenes sugeridos con los resúmenes revisados de los agentes usando tus algoritmos de distancia de edición preferidos para calcular la distancia de edición de la summarización. Por ejemplo, la distancia de Levenshtein con la misma penalización para la inserción, la eliminación y la sustitución.

SELECT
  JSON_VALUE(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.text") AS suggestedSummary,
IF
  (JSON_VALUE(annotation.detailedFeedback) != '', JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.detailedFeedback)), "$.summarizationFeedback.summaryText"), NULL) AS feedback,
FROM
  BIGQUERY_TABLE,
  UNNEST (sentences) AS sen,
  UNNEST (sen.annotations) as annotation
WHERE
  type='CONVERSATION_SUMMARIZATION_SUGGESTION';

Editar tarifa

Para calcular la tasa de edición del resumen, divide la distancia de edición por la longitud de la cadena del resumen editado. Esta métrica refleja qué parte del resumen editó el agente. Esta tasa de edición no tiene límite superior, pero cuando el valor es igual o superior a uno, significa que los resúmenes generados son malos y, probablemente, se debería inhabilitar la función.

Editar porcentaje

El porcentaje de edición es una medida del porcentaje de la cantidad total de resúmenes sugeridos que los agentes editaron en lugar de usarlos textualmente. Se calcula como la cantidad de resúmenes editados por el agente dividida por la cantidad de resúmenes sugeridos. Esta métrica es un buen indicador de la calidad del modelo cuando el valor está cerca de 0. Sin embargo, cuando se acerca a 1, no significa necesariamente que la calidad del modelo sea mala, ya que la edición podría ser menor y, aun así, se contaría como que se editó el resumen sugerido.

WITH
  summaryAndEdits AS (
  SELECT
    JSON_VALUE(PARSE_JSON(JSON_VALUE(annotation.annotationRecord)), "$.text") AS suggestedSummary,
  IF
    (JSON_VALUE(annotation.detailedFeedback) != '', JSON_QUERY(PARSE_JSON(JSON_VALUE(annotation.detailedFeedback)), "$.summarizationFeedback.summaryText"), NULL) AS editedSummary,
  FROM
    BIGQUERY_TABLE,
    UNNEST (sentences) AS sen,
    UNNEST (sen.annotations) AS annotation
  WHERE
    type='CONVERSATION_SUMMARIZATION_SUGGESTION' )
SELECT
  countif (suggestedSummary IS NOT NULL) AS totalSummaries,
  countif (editedSummary IS NOT NULL) AS editedSummaries,
  countif (editedSummary IS NOT NULL) / countif (suggestedSummary IS NOT NULL) AS editRate
FROM
  summaryAndEdits;