您可以將 Agent Assist 中的對話匯入 Customer Experience Insights 進行分析。本文將逐步說明如何計算匯入的 Agent Assist 資料中,幾項重要的對話指標。
JSON_QUERY(..., "$.reply")必要條件
使用 Agent Assist 的智慧回覆或摘要功能,生成對話資料。
在 Customer Experience Insights 中啟用 Dialogflow 執行階段整合功能。
將資料從 CX Insights 匯出至 BigQuery。
觸發率
觸發率是指某種註解出現在對話中的頻率。
句子層級觸發率
如果註解至少每句會顯示一次,則適用句子層級的觸發率。
| 註解名稱 | 註解型別 | 條件 |
|---|---|---|
| 文章建議 | 'ARTICLE_SUGGESTION' |
系統會為對話中的每則訊息傳送至少一項 SuggestArticles 要求。 |
| 常見問題小幫手 | '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' |
系統會為對話中的每則訊息,傳送至少一個 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 的建議數除以提供的建議總數。 |
| 正面評價比率 | 建議獲得正面評價的比例 (正面評價數除以建議總數)。 | 計算獲得正面意見回饋的建議數量,然後除以建議總數。 |
| 負評比率 | 對建議內容給予負評的比例,以建議總數為分母。 | 計算收到負面意見回饋的建議數量,然後除以建議總數。 |
智慧回覆
本節列出與智慧回覆相關的指標。
有效點閱率
相較於一般點閱率指標,有效點閱率更能準確反映通話服務專員點按智慧回覆註解的頻率。以下查詢會擷取每位服務專員的回覆,以及專為該回覆製作並由專員點選的智慧回覆註解。接著,系統會計算代理程式使用智慧回覆建議草擬回覆的次數,然後將這個數字除以代理程式回覆的總次數。

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狀態為何,查詢摘要都會提交。如果專員摘要為空值,表示專員未修訂建議摘要,或未透過偏好的意見回饋管道將修訂後的摘要傳送至 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;