Customer Experience Insights를 사용하면 Agent Assist에서 대화를 가져와 분석할 수 있습니다. 이 문서에서는 가져온 상담 도우미 데이터에서 몇 가지 중요한 대화 측정항목을 계산하는 과정을 안내합니다.
기본 요건
Agent Assist를 사용하여 스마트 답장 또는 요약 기능을 사용하여 대화 데이터를 생성합니다.
CX Insights에서 BigQuery로 데이터를 내보냅니다.
트리거 비율
트리거 비율은 특정 유형의 주석이 대화에 표시되는 빈도를 설명합니다.
문장 수준 트리거 비율
문장 수준 트리거 비율은 문장당 최소 한 번 표시될 수 있는 주석에 적용됩니다.
| 주석 이름 | 주석 유형 | 기준 |
|---|---|---|
| 문서 추천 | 'ARTICLE_SUGGESTION' |
대화의 각 메시지에 대해 하나 이상의 SuggestArticles 요청이 전송됩니다. |
| FAQ 지원 | 'FAQ' |
대화의 각 메시지에 대해 하나 이상의 SuggestFaqAnswers 또는 AnalyzeContent 요청이 전송됩니다. |
| 스마트 답장 | 'SMART_REPLY' |
대화의 각 메시지에 대해 하나 이상의 SuggestSmartReplies 또는 AnalyzeContent 요청이 전송됩니다. |

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;
대화 수준 트리거 비율
대화 수준 트리거 비율은 대화당 최대 한 번 표시될 수 있는 주석에 적용됩니다.
| 주석 이름 | 주석 유형 | 기준 |
|---|
| 생성형 지식 어시스트 (GKA) | 'KNOWLEDGE_SEARCH' | 대화의 각 메시지에 대해 하나 이상의 SearchKnowledge 요청이 전송됩니다. |
| 선제적 생성형 지식 지원 | 'KNOWLEDGE_SEARCH' | 대화의 각 메시지에 대해 하나 이상의 SearchKnowledge 또는 AnalyzeContent 요청이 전송됩니다. |
| 요약 | 'CONVERSATION_SUMMARIZATION' | 대화마다 하나 이상의 SuggestConversationSummary 요청이 전송됩니다. |

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;
클릭률
클릭률은 통화 상담사가 추천된 특수효과를 클릭하는 빈도를 나타냅니다.
문장 수준 클릭률
문장 수준 클릭률은 상담사가 문장당 여러 번 클릭할 수 있는 특수효과에 적용됩니다.
| 주석 이름 | 주석 유형 | 기준 |
|---|---|---|
| 문서 추천 | 'ARTICLE_SUGGESTION' |
대화의 각 메시지에 대해 하나 이상의 SuggestArticles 요청이 전송됩니다. |
| FAQ 지원 | 'FAQ' |
대화의 각 메시지에 대해 하나 이상의 SuggestFaqAnswers 또는 AnalyzeContent 요청이 전송됩니다. |
| 스마트 답장 | 'SMART_REPLY' |
대화의 각 메시지에 대해 하나 이상의 SuggestSmartReplies 또는 AnalyzeContent 요청이 전송됩니다. |

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;
대화 수준 클릭률
대화 수준 클릭률은 상담사가 대화당 여러 번 클릭할 수 있는 특수효과에 적용됩니다. 통화 상담사는 대화 수준 주석을 만드는 요청을 선제적으로 보내야 합니다.
| 주석 이름 | 주석 유형 | 기준 |
|---|---|---|
| 생성형 지식 어시스트 (GKA) | 'KNOWLEDGE_SEARCH' |
대화의 각 메시지에 대해 하나 이상의 SearchKnowledge 요청이 전송됩니다. |
| 사전 생성형 지식 지원 | 'KNOWLEDGE_SEARCH' |
대화의 각 메시지에 대해 하나 이상의 SearchKnowledge 또는 AnalyzeContent 요청이 전송됩니다. |
기능별 측정항목
이 섹션에는 각 기능에 해당하는 측정항목이 나열되어 있습니다.
생성형 지식 지원
생성형 지식 어시스턴트 (GKA)는 사용자가 제공한 문서의 정보를 기반으로 상담사의 질문에 답변을 제공합니다. 상담사가 답변을 찾을 수 없는 경우 GKA는 질문할 유사한 질문을 제안하고 답변을 제공합니다. 이 기능은 다음과 같은 지식 검색 측정항목을 생성합니다.
| 측정항목 이름 | 정의 | 계산 |
|---|---|---|
| 결과 수 | 모든 대화에서 단일 상담사에게 제공된 총 답변 수입니다. | |
| 상담사 질문 소스 비율 | 상담사 질문이 전체 질문에서 차지하는 비율입니다. | 상담사 질문 수를 총 질문 수로 나눕니다. |
| 추천 쿼리 소스 비율 | 추천 질문의 비율을 전체 질문 수로 나눈 값입니다. | 추천 질문 수를 총 질문 수로 나눕니다. |
| URI 클릭률 | 하나 이상의 URI가 클릭된 답변의 비율을 총 답변 수로 나눈 값입니다. | 상담사가 URI를 클릭한 답변 수를 총 답변 수로 나눕니다. |
| 긍정적인 의견 비율 | 답변에 대한 긍정적인 의견의 비율입니다. | 긍정적인 피드백을 받은 답변 수를 총 답변 수로 나눕니다. |
| 부정적인 의견 비율 | 답변에 대한 부정적인 의견의 비율을 전체 답변 수로 나눈 값입니다. | 부정적인 피드백을 받은 답변 수를 총 답변 수로 나눕니다. |
사전 대응형 생성 지식 지원
선제적 생성형 지식 어시스트는 현재 대화 컨텍스트를 기반으로 질문을 제안하고, 사용자가 제공한 문서의 정보를 기반으로 답변을 제공합니다. 사전 생성형 지식 지원에는 상담사 상호작용이 필요하지 않습니다. 이 기능은 다음과 같은 지식 지원 측정항목을 생성합니다.
| 측정항목 이름 | 정의 | 계산 |
|---|---|---|
| 결과 수 | 모든 대화에 대해 단일 상담사에게 제공된 총 추천 수입니다. | |
| URI 클릭률 | 하나 이상의 URI가 클릭된 추천의 비율을 제공된 총 추천 수로 나눈 값입니다. | 상담사가 URI를 클릭한 추천 수를 제공된 총 추천 수로 나눕니다. |
| 긍정적인 의견 비율 | 제안에 대한 긍정적인 의견의 비율을 총 제안 수로 나눈 값입니다. | 긍정적인 피드백을 받은 추천 수를 총 추천 수로 나눕니다. |
| 부정적인 의견 비율 | 추천에 대한 부정적 의견의 비율을 총 추천 수로 나눈 값입니다. | 부정적인 의견을 받은 추천 수를 총 추천 수로 나눈 값을 계산합니다. |
스마트 답장
이 섹션에는 스마트 답장과 관련된 측정항목이 나열되어 있습니다.
유효 클릭률 (유효 CTR)
유효 클릭률은 일반 클릭률 측정항목보다 통화 상담사가 스마트 답장 특수효과를 클릭하는 빈도를 더 정확하게 반영합니다. 다음 쿼리는 각 상담사의 응답과 해당 상담사의 응답에 대해서만 이루어지고 상담사가 클릭한 스마트 답장 주석을 가져옵니다. 그런 다음 상담사가 스마트 답장 제안을 사용하여 대답을 작성한 횟수를 계산하고 이 숫자를 상담사의 총 대답 수로 나눕니다.

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;
샘플링 레이트 수정
상담사는 제안된 스마트 답글 응답을 그대로 사용하거나 고객에게 보내기 전에 응답을 수정할 수 있습니다. 스마트 답장 응답의 수정 비율을 계산하면 제안된 답장이 수정되는 빈도를 확인할 수 있습니다. 다음 쿼리는 각 추천 스마트 답장과 해당 스마트 답장 바로 다음에 오는 상담사의 응답을 가져옵니다. 그런 다음 상담사의 대답에 해당 스마트 답장이 포함되지 않은 횟수를 세고 이를 총 스마트 답장 수로 나눕니다.

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;
요약
이 섹션에는 요약과 관련된 측정항목이 나열되어 있습니다.
GENERATOR_SUGGESTION_RESULT유형에는 요약을 비롯한 모든 생성기 결과가 포함됩니다.CONVERSATION_SUMMARIZATION_SUGGESTION유형에는 기존 요약이 포함됩니다.
생성기 요약
생성기 요약 및 요약에 대한 에이전트 수정사항을 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 ;
거리 수정
요약의 편집 거리는 상담사가 수정한 요약이 추천 요약과 얼마나 다른지를 나타내는 측정항목입니다. 이 측정항목은 에이전트가 추천 요약을 수정하는 데 소비한 시간과 관련이 있습니다.
요약과 수정된 요약 (있는 경우)을 쿼리합니다.
통화 상담사는
clicked불리언을true로 설정하지 않고 요약 수정사항을 제출할 수 있으므로clicked상태와 관계없이 요약에 대해 쿼리합니다. 상담사의 요약이 null인 경우 상담사가 추천 요약을 수정하지 않았거나 수정된 요약이 기본 피드백 경로를 사용하여 Agent Assist로 전송되지 않았습니다.선호하는 편집 거리 알고리즘을 사용하여 제안된 요약과 상담사의 수정된 요약을 비교하여 요약 편집 거리를 계산합니다. 예를 들어 삽입, 삭제, 대체에 동일한 페널티가 적용되는 Levenshtein 거리가 있습니다.

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';
샘플링 레이트 수정
수정된 요약의 문자열 길이로 수정 거리를 나누어 요약의 수정 비율을 계산할 수 있습니다. 이 측정항목은 상담사가 요약을 얼마나 수정했는지를 반영합니다. 이 수정 비율에는 상한이 없지만 값이 1 이상이면 생성된 요약이 좋지 않다는 의미이므로 기능을 사용 중지하는 것이 좋습니다.
비율 수정
수정 비율은 전체 추천 요약 중 상담사가 그대로 사용하지 않고 수정한 비율을 나타냅니다. 에이전트가 수정한 요약 수를 추천 요약 수로 나눈 값입니다. 이 측정항목은 값이 0에 가까울 때 모델 품질을 나타내는 좋은 신호입니다. 하지만 1에 가까운 경우 수정이 사소할 수 있으며, 이 경우에도 제안된 요약이 수정된 것으로 간주되므로 모델 품질이 나쁘다는 의미는 아닙니다.

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;