Calculer des métriques à l'aide des données de conversation Agent Assist

Les insights sur l'expérience client vous permettent d'importer des conversations depuis Agent Assist pour les analyser. Ce document vous explique comment calculer plusieurs métriques conversationnelles importantes sur les données importées d'Assistance pour les agents.

Prérequis

  1. Utilisez Agent Assist pour générer des données conversationnelles à l'aide des fonctionnalités Réponse suggérée ou Synthèse.

  2. Activez l'intégration de l'environnement d'exécution de Dialogflow dans Customer Experience Insights.

  3. Exportez vos données CX Insights vers BigQuery.

Taux de déclenchement

Le taux de déclenchement décrit la fréquence à laquelle un type d'annotation apparaît dans une conversation.

Taux de déclenchement au niveau de la phrase

Un taux de déclenchement au niveau de la phrase s'applique aux annotations qui peuvent apparaître au moins une fois par phrase.

Nom de l'annotation Type d'annotation Critères
Suggestion d'article 'ARTICLE_SUGGESTION' Au moins une requête SuggestArticles est envoyée pour chaque message de la conversation.
Assistance pour les questions fréquentes 'FAQ' Au moins une requête SuggestFaqAnswers ou AnalyzeContent est envoyée pour chaque message de la conversation.
Réponse suggérée 'SMART_REPLY' Au moins une requête SuggestSmartReplies ou AnalyzeContent est envoyée pour chaque message de la conversation.

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;

Taux de déclenchement au niveau de la conversation

Un taux de déclenchement au niveau de la conversation s'applique aux annotations qui peuvent apparaître au maximum une fois par conversation.

Nom de l'annotation Type d'annotation Critères

| Assistance basée sur les connaissances génératives (ABCG) | 'KNOWLEDGE_SEARCH' | Au moins une requête SearchKnowledge est envoyée pour chaque message de la conversation. | | Assistance proactive basée sur les connaissances génératives | 'KNOWLEDGE_SEARCH' | Au moins une requête SearchKnowledge ou AnalyzeContent est envoyée pour chaque message de la conversation. | | Synthèse | 'CONVERSATION_SUMMARIZATION' | Au moins une demande SuggestConversationSummary est envoyée pour chaque conversation. |

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;

Taux de clics

Le taux de clics décrit la fréquence à laquelle les agents du centre d'appels cliquent sur les annotations qui leur sont suggérées.

Taux de clics au niveau de la phrase

Un taux de clics au niveau de la phrase s'applique aux annotations sur lesquelles les agents du centre d'appels peuvent cliquer plusieurs fois par phrase.

Nom de l'annotation Type d'annotation Critères
Suggestion d'article 'ARTICLE_SUGGESTION' Au moins une requête SuggestArticles est envoyée pour chaque message de la conversation.
Assistance pour les questions fréquentes 'FAQ' Au moins une requête SuggestFaqAnswers ou AnalyzeContent est envoyée pour chaque message de la conversation.
Réponse suggérée 'SMART_REPLY' Au moins une requête SuggestSmartReplies ou AnalyzeContent est envoyée pour chaque message de la conversation.

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;

Taux de clics au niveau de la conversation

Le taux de clics au niveau de la conversation s'applique aux annotations sur lesquelles les agents du centre d'appels peuvent cliquer plusieurs fois par conversation. Les agents d'appels doivent envoyer de manière proactive une demande qui crée une annotation au niveau de la conversation.

Nom de l'annotation Type d'annotation Critères
Assistance basée sur les connaissances génératives (GKA) 'KNOWLEDGE_SEARCH' Au moins une requête SearchKnowledge est envoyée pour chaque message de la conversation.
Assistance proactive basée sur les connaissances génératives 'KNOWLEDGE_SEARCH' Au moins une requête SearchKnowledge ou AnalyzeContent est envoyée pour chaque message de la conversation.

Métriques spécifiques aux fonctionnalités

Cette section répertorie les métriques spécifiques à chaque fonctionnalité.

Assistance base de connaissances générative

L'assistance basée sur les connaissances génératives (GKA, Generative Knowledge Assist) fournit des réponses aux questions d'un agent en s'appuyant sur les informations contenues dans les documents que vous fournissez. Si l'agent ne trouve pas de réponse, GKA suggère une question similaire et fournit la réponse. Cette fonctionnalité génère les métriques de recherche de connaissances suivantes :

Nom de la métrique Définition Calcul
Nombre de résultats Nombre total de réponses fournies à un agent unique pour toutes les conversations.
Ratio de la source de requête de l'agent Proportion de questions de l'agent par rapport au nombre total de questions. Calculez le nombre de questions des agents divisé par le nombre total de questions.
Ratio de sources de requêtes suggérées Proportion de questions suggérées par rapport au nombre total de questions. Calculez le nombre de questions suggérées divisé par le nombre total de questions.
Taux de clics sur l'URI Proportion de réponses dans lesquelles au moins un URI a été cliqué par rapport au nombre total de réponses. Calculez le nombre de réponses pour lesquelles un agent a cliqué sur l'URI, divisé par le nombre total de réponses.
Ratio de commentaires positifs Proportion de commentaires positifs sur les réponses par rapport au nombre total de réponses. Calculez le nombre de réponses ayant reçu des commentaires positifs, puis divisez-le par le nombre total de réponses.
Ratio de commentaires négatifs Proportion de commentaires négatifs sur les réponses par rapport au nombre total de réponses. Calculez le nombre de réponses ayant reçu des commentaires négatifs, puis divisez-le par le nombre total de réponses.

Assistance proactive basée sur l'IA générative

L'assistance proactive basée sur les connaissances génératives suggère des questions en fonction du contexte de la conversation en cours et fournit des réponses basées sur les informations contenues dans les documents que vous fournissez. L'assistance proactive basée sur l'IA générative ne nécessite aucune interaction avec un agent. Cette fonctionnalité génère les métriques d'aide à la connaissance suivantes :

Nom de la métrique Définition Calcul
Nombre de résultats Nombre total de suggestions fournies à un agent pour toutes les conversations.
Taux de clics sur l'URI Proportion de suggestions pour lesquelles au moins un URI a été cliqué par rapport au nombre total de suggestions fournies. Calculer le nombre de suggestions pour lesquelles un agent a cliqué sur l'URI, divisé par le nombre total de suggestions fournies.
Ratio de commentaires positifs Proportion de commentaires positifs sur les suggestions par rapport au nombre total de suggestions. Calculez le nombre de suggestions ayant reçu des commentaires positifs, divisé par le nombre total de suggestions.
Ratio de commentaires négatifs Proportion de commentaires négatifs sur les suggestions par rapport au nombre total de suggestions. Calculer le nombre de suggestions ayant reçu des commentaires négatifs, divisé par le nombre total de suggestions.

Réponse suggérée

Cette section liste les métriques spécifiques aux réponses suggérées.

Taux de clics effectif (CTR effectif)

Le taux de clics effectif reflète plus précisément la fréquence à laquelle les agents du centre d'appels cliquent sur les annotations de réponses intelligentes que la métrique de taux de clics standard. La requête suivante récupère la réponse de chaque agent ainsi que les annotations de réponses intelligentes qui ont été créées et sur lesquelles l'agent a cliqué pour cette réponse. Il comptabilise ensuite le nombre de fois où l'agent a rédigé sa réponse à l'aide de suggestions de réponses intelligentes, puis divise ce nombre par le nombre total de réponses de l'agent.

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;

Modifier le taux

Les agents peuvent choisir d'utiliser les réponses intelligentes suggérées telles quelles ou de les modifier avant de les envoyer aux clients. Le calcul du taux de modification des réponses suggérées peut vous indiquer la fréquence à laquelle elles sont modifiées. La requête suivante récupère chaque réponse suggérée intelligente et la réponse de l'agent qui suit immédiatement cette réponse suggérée intelligente. Il compte ensuite le nombre de fois où la réponse de l'agent ne contient pas la réponse suggérée correspondante, puis divise ce nombre par le nombre total de réponses suggérées.

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;

Synthèse

Cette section répertorie les métriques spécifiques à la summarization.

  • Le type GENERATOR_SUGGESTION_RESULT contient tous les résultats du générateur, y compris les résumés.
  • Le type CONVERSATION_SUMMARIZATION_SUGGESTION contiendra les anciens récapitulatifs.

Résumé du générateur

Exemple de requête pour accéder au récapitulatif du générateur et aux modifications apportées par l'agent au récapitulatif au format 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 ;

Distance d'édition

La distance d'édition de la synthèse est une mesure de l'écart entre les résumés modifiés par l'agent et les résumés suggérés. Cette métrique correspond au temps passé par l'agent à modifier les résumés suggérés.

  1. Interrogez les résumés et leurs versions révisées (le cas échéant).

  2. Étant donné que les agents d'appels peuvent envoyer des révisions de résumés sans définir le booléen clicked sur true, les résumés de requêtes sont acceptés, quel que soit leur état clicked. Si le récapitulatif de l'agent est nul, cela signifie que l'agent n'a pas modifié le récapitulatif suggéré ou que le récapitulatif modifié n'a pas été envoyé à Agent Assist via la méthode de feedback préférée.

  3. Comparez les résumés suggérés avec ceux révisés par les agents à l'aide de vos algorithmes de distance d'édition préférés pour calculer la distance d'édition de la synthèse. Par exemple, la distance de Levenshtein avec une pénalité égale pour l'insertion, la suppression et la substitution.

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';

Modifier le taux

Vous pouvez calculer le taux de modification pour la synthèse en divisant la distance d'édition par la longueur de la chaîne de la synthèse modifiée. Cette métrique reflète la part du résumé qui a été modifiée par l'agent. Il n'y a pas de limite supérieure à ce taux de modification, mais lorsque la valeur est supérieure ou égale à 1, cela signifie que les résumés générés sont de mauvaise qualité et que la fonctionnalité doit probablement être désactivée.

Modifier le pourcentage

Le pourcentage de modifications mesure le pourcentage du nombre total de résumés suggérés qui ont été modifiés par les agents au lieu d'être utilisés tels quels. Il est calculé en divisant le nombre de résumés modifiés par un agent par le nombre de résumés suggérés. Cette métrique est un bon indicateur de la qualité du modèle lorsque la valeur est proche de 0. Toutefois, lorsqu'il est proche de 1, cela ne signifie pas nécessairement que la qualité du modèle est mauvaise, car la modification peut être mineure et elle sera tout de même comptabilisée comme une modification du résumé suggéré.

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;