conversation-evaluator について
Virtual Agent の会話について、一貫性、正確性、スロット入力、意図の一致を評価し、根拠のない情報も確認するスキルです。会話監査、利用者からの苦情調査、品質傾向の追跡に使えます。
主な機能
- 01一貫性と文脈保持の評価
- 02データソースに基づく正確性確認
- 03スロット取得と入力検証の確認
- 04意図とトピック選択の採点
- 05捏造情報の検出とスコアカード作成
活用シーン
- 01Virtual Agent の会話を定期監査
- 02ボット対応への苦情を調査
- 03会話トピックごとの品質を比較
- 04会話品質の傾向を追跡
MCP 対応
ServiceNow の MCP ツールで会話、メッセージ、トピック、アクション定義を取得し、回答の根拠を検証できます。問題のフラグ付けや評価結果の記録にも使えます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill conversation-evaluatorインストール後、Claude Code で/conversation-evaluatorを入力して読み込まれたか確認します。
詳細
会話評価器
概要
このスキルは、仮想エージェントとの会話を複数の品質面から評価し、正確で一貫性があり、役立つやり取りを実現します。会話型 AI のパフォーマンスに関する問題を特定し、実行可能な改善案を提示します。
- 会話の一貫性を評価します:論理的な流れ、コンテキストの保持、話題の継続性
- 正確性を検証します:回答が事実に基づき、ナレッジベースの内容と一致しているか
- スロットの入力を評価します:取得したユーザー入力の完全性と正確性
- インテントの一致度を採点します:仮想エージェントが適切なトピックとアクションを選択したか
- ハルシネーションを検出します:ServiceNow のデータに基づかない捏造情報を特定します
- 項目別の評価と総合スコアを含む品質スコアカードを作成します
使用するタイミング: 仮想エージェントのパフォーマンスを監査する場合、ボットとのやり取りに関するユーザーからの苦情を調査する場合、または会話型 AI のデプロイを定期的に品質評価する場合です。
前提条件
- ロール:
admin、va_admin、またはconversation_designer - プラグイン:
com.glide.cs.chatbot(Virtual Agent)、com.glide.cs.designer(Conversation Designer) - アクセス権:
sys_cs_topic、sys_cs_conversation、sys_cb_topic、sys_cb_action、sys_cs_messageの読み取り権限 - 知識: Virtual Agent のトピック設計と想定される会話フローに関する理解
- データ: 会話履歴を含むアクティブな仮想エージェントのデプロイ
手順
ステップ 1:評価する会話を取得する
最近の仮想エージェントとの会話をクエリします。必要に応じて、トピックまたは結果で絞り込みます。
MCP を使用する場合(Claude Code/Desktop):
Tool: SN-Query-Table
Parameters:
table_name: sys_cs_conversation
query: state=closed^sys_created_onONLast 7 days@javascript:gs.daysAgoStart(7)@javascript:gs.daysAgoEnd(0)
fields: sys_id,number,topic,state,channel,opened_at,closed_at,close_reason,user,queue_time,handle_time
limit: 50
REST API を使用する場合:
GET /api/now/table/sys_cs_conversation?sysparm_query=state=closed^sys_created_onONLast 7 days@javascript:gs.daysAgoStart(7)@javascript:gs.daysAgoEnd(0)&sysparm_fields=sys_id,number,topic,state,channel,opened_at,closed_at,close_reason,user,queue_time,handle_time&sysparm_limit=50
ステップ 2:会話メッセージを抽出する
評価対象の各会話について、メッセージ履歴全体を取得します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sys_cs_message
query: conversation=[conversation_sys_id]^ORDERBYsys_created_on
fields: sys_id,conversation,body,type,sender_type,sys_created_on,is_hidden
limit: 100
REST API を使用する場合:
GET /api/now/table/sys_cs_message?sysparm_query=conversation=[conversation_sys_id]^ORDERBYsys_created_on&sysparm_fields=sys_id,conversation,body,type,sender_type,sys_created_on,is_hidden&sysparm_limit=100
ステップ 3:トピックとアクションの定義を取得する
設計されたトピックフローを取得し、実際の会話の動作と比較します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sys_cb_topic
query: sys_id=[topic_sys_id]
fields: sys_id,name,description,goal,utterances,active
limit: 1
REST API を使用する場合:
GET /api/now/table/sys_cb_topic?sysparm_query=sys_id=[topic_sys_id]&sysparm_fields=sys_id,name,description,goal,utterances,active&sysparm_limit=1
このトピックで想定されるアクションを取得します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sys_cb_action
query: topic=[topic_sys_id]^ORDERBYorder
fields: sys_id,name,type,topic,order,script,table,field,mandatory
limit: 50
REST API を使用する場合:
GET /api/now/table/sys_cb_action?sysparm_query=topic=[topic_sys_id]^ORDERBYorder&sysparm_fields=sys_id,name,type,topic,order,script,table,field,mandatory&sysparm_limit=50
ステップ 4:一貫性を評価する(0~10 点)
会話の論理的な流れとコンテキスト管理を評価します。
| 基準 | 点数 | 説明 |
|---|---|---|
| 論理的な流れ | 0~3 | 話の筋が通らない応答を避け、論理的な順序で応答している |
| コンテキストの保持 | 0~2 | 会話を通じて、ボットが以前のユーザー入力を記憶している |
| 話題の継続性 | 0~2 | 説明のない話題の飛躍がなく、会話がトピックに沿っている |
| 挨拶/締めくくり | 0~1 | 適切な開始メッセージと終了メッセージがある |
| 混乱からの回復 | 0~2 | ボットが誤解に適切に対処している |
要注意事項:
- ユーザーがすでに回答した質問をボットが繰り返す
- ユーザーが伝えていない情報にボットが言及する
- 会話が、説明もなく無関係な話題に移る
- ボットがユーザーの訂正を認識しない
ステップ 5:正確性を評価する(0~10 点)
ServiceNow のデータソースと照合して応答を検証します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sys_cs_context_entry
query: conversation=[conversation_sys_id]
fields: sys_id,name,value,source,conversation
limit: 50
| 基準 | 点数 | 説明 |
|---|---|---|
| 事実の正確性 | 0~3 | 応答が ServiceNow のレコードおよび KB 記事と一致している |
| データの鮮度 | 0~2 | 情報が最新であり、古くなっていない |
| 情報源の明示 | 0~2 | ボットが正しいレコード/記事を参照している |
| 矛盾がないこと | 0~2 | 会話の中でボットが自身の発言と矛盾していない |
| 適切な不確実性の表明 | 0~1 | データが曖昧な場合に、ボットが不確実性を表明している |
ステップ 6:スロット充填を評価する(スコア 0~10)
必要なユーザー入力が正しく取得されたかを確認します。
| 基準 | 点数 | 説明 |
|---|---|---|
| 必須スロットの取得 | 0-3 | 必須フィールドをすべてユーザーから収集している |
| スロットの検証 | 0-2 | 入力を検証している(例:メール形式、日付範囲) |
| スロットの確認 | 0-2 | 重要な入力をユーザーに復唱して確認している |
| 適切な再入力の促し | 0-2 | 無効な入力に対して、明確な案内を示して対応している |
| スロット情報の引き継ぎ | 0-1 | 以前に提供された情報を再利用し、再度質問していない |
mandatory=true の sys_cb_action 定義を参照し、取得したスロットと照合します。
ステップ 7:インテントの照合を評価する(スコア 0~10)
仮想エージェントがユーザーの依頼に適したトピックを選択したかを判定します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sys_cs_topic
query: active=true
fields: sys_id,name,description,utterances
limit: 100
| 基準 | 点数 | 説明 |
|---|---|---|
| 正しいトピックの選択 | 0-4 | 最初のインテント分類がユーザーの依頼と一致している |
| 曖昧さの解消の質 | 0-2 | 曖昧な場合、関連するトピックの選択肢を提示している |
| トピックの切り替え | 0-2 | 会話の途中でトピックが変わった場合に適切に対応している |
| フォールバックの動作 | 0-2 | 一致するトピックがない場合に適切に対応している |
ステップ 8:ハルシネーションを検出する
ServiceNow のデータに基づかない、捏造された内容を特定します。
ハルシネーションのカテゴリ:
| 種類 | 説明 | 重大度 |
|---|---|---|
| 捏造されたレコード | 存在しないインシデント番号または KB 番号を提示する | 致命的 |
| 架空の手順 | どの KB 記事やプレイブックにも記載されていない手順を説明する | 高 |
| 誤ったステータス | チケットのステータスまたは割り当てについて誤った情報を伝える | 高 |
| 架空のポリシー | 存在しないポリシーに言及する | 中 |
| 誤った情報源の帰属 | 情報を誤った情報源に帰属させる | 中 |
具体的な主張を含むボットの応答について、情報源のテーブルと照合して確認します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: kb_knowledge
query: number=[cited_kb_number]
fields: sys_id,number,short_description,workflow_state
limit: 1
ステップ 9:品質スコアカードを作成する
評価結果を構造化されたスコアカードにまとめます。
=== VIRTUAL AGENT CONVERSATION QUALITY SCORECARD ===
Conversation: CS0045678
Topic: Password Reset
Date: 2026-03-19
Evaluator: AI Quality Evaluator v1.0
Dimension Scores:
Coherence: 8/10 - Minor context loss at turn 5
Accuracy: 9/10 - All references verified correct
Slot Filling: 7/10 - Did not confirm email address
Intent Match: 10/10 - Correct topic on first utterance
Hallucination: 10/10 - No fabricated content detected
Aggregate Score: 44/50 (88%) - GOOD
Issues Found:
1. [MEDIUM] Turn 5: Bot asked for department after user already provided it
2. [LOW] Turn 8: Bot did not confirm email address before sending reset link
Recommendations:
1. Add context check for department slot before re-prompting
2. Add confirmation step for email address in password reset topic
ステップ 10:品質の傾向を追跡する
会話全体のスコアを集計して、体系的な問題を特定します。
MCP を使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sys_cs_conversation
query: state=closed^close_reason=escalated^sys_created_onONLast 30 days@javascript:gs.daysAgoStart(30)@javascript:gs.daysAgoEnd(0)
fields: sys_id,topic,close_reason,handle_time
limit: 200
主な品質指標:
- トピックごとの平均スコア:最もパフォーマンスの低い会話フローを特定します
- エスカレーション率:人間のエージェントにエスカレーションされた会話の割合です
- ハルシネーションの発生頻度:捏造された内容がどの程度の頻度で発生するかを示します
- スロット完了率:必須スロットの取得に成功した割合です
ツールの使用
| ツール | 目的 | 使用するタイミング |
|---|---|---|
SN-Query-Table | 会話、メッセージ、トピック、アクションを取得する | 評価に必要なコアデータの収集 |
SN-Natural-Language-Search | 自然言語の条件で会話を検索する | 対象を絞った調査 |
SN-Update-Record | 品質上の問題がある会話にフラグを付ける | レビュー対象としてマークする |
SN-Add-Work-Notes | 評価結果を記録する | 監査証跡 |
SN-Get-Table-Schema | 会話関連のテーブル構造を調べる | セットアップと調査 |
ベストプラクティス
- 戦略的にサンプリングする -- 利用量の多いトピックだけでなく、すべてのトピックを評価します
- エスカレーションされた会話を含める -- エスカレーションから、最も重大な品質上のギャップが明らかになります
- バッチで評価する -- 統計的妥当性を確保するため、評価サイクルごとに 20~50 件の会話を評価します
- 評価の観点を分ける -- 一貫性スコアが高くても、ハルシネーションを補うことはできません
- 時間の経過に沿って追跡する -- 単発の評価では傾向を見逃すため、毎週評価を実施します
- トピック設計者を参加させる -- 調査結果を会話フローの構築チームと共有します
- 重大度に応じて重み付けする -- ハルシネーションや正確性の問題は、軽微な一貫性の欠如より重く評価します
- 人間のエージェントをベンチマークにする -- VA のスコアを人間のエージェントの CSAT と比較し、状況を把握します
トラブルシューティング
"会話のメッセージが見つかりません"
原因: メッセージが別のテーブルに保存されているか、会話が非常に短かった可能性があります
解決策: 関連するエントリがないか、sys_cs_message と sys_journal_field の両方を確認してください。非常に短い会話(1~2ターン)には、システムメッセージしか含まれていない場合があります。
"トピックの sys_id が sys_cb_topic と一致しません"
原因: 会話では、レガシーまたはカスタムのトピックフレームワークが使用されていました
解決策: sys_cb_topic に加えて、sys_cs_topic も確認してください。一部のデプロイでは、新しい Conversation Designer テーブルが使用されています。
"応答がハルシネーションかどうかを判断できません"
原因: 応答が曖昧で、特定のレコードと照合して検証できません 解決策: ハルシネーションではなく「検証不能」としてフラグを付けてください。具体的な主張(チケット番号、KB 参照、日付、名前など)を含む応答に注目してください。
"同じトピックのスコアに大きなばらつきがあります"
原因: トピックフローに条件分岐があり、ユーザー入力によって挙動が異なります 解決策: より有意義な比較ができるよう、会話パス(例:解決成功パスとエスカレーションパス)ごとに評価を分けてください。
例
例 1:高品質なパスワードリセットの会話
会話: CS0045678 - ユーザーがパスワードのリセットを依頼
評価:
- 一貫性:9/10 -- スムーズな進行で、全体を通じて文脈を維持
- 正確性:10/10 -- セルフサービスでのリセット方法として KB0012345 を正しく参照
- スロット入力:9/10 -- ユーザー名を取得し、メールアドレスを確認して、本人確認を完了
- インテント一致:10/10 -- すぐに「パスワードリセット」トピックに一致
- ハルシネーション:10/10 -- 捏造された内容なし
スコア: 48/50(96%)- 優秀
例 2:質の低い VPN トラブルシューティングの会話
会話: CS0045679 - ユーザーが VPN の問題を報告
評価:
- 一貫性:5/10 -- OS を2回尋ね、エラーメッセージの文脈を見失った
- 正確性:4/10 -- 存在しない KB0099999 を参照(ハルシネーション)
- スロット入力:6/10 -- 必須フィールドの VPN クライアントバージョンを確認できなかった
- インテント一致:7/10 -- VPN に修正する前に、最初は「ネットワークの問題」に一致
- ハルシネーション:2/10 -- KB 記事番号を捏造し、解決手順を創作
スコア: 24/50(48%)- 不良。トピックの即時再設計が必要です。
例 3:曖昧なインテントへの対応
会話: CS0045680 - ユーザーが「壊れています」と発言
評価:
- 一貫性:8/10 -- ボットが順序立てて明確化の質問をした
- 正確性:9/10 -- トピックが特定された後の応答は正確
- スロット入力:7/10 -- 十分な詳細を取得するのに4ターンかかった
- インテント一致:6/10 -- 選択肢が広すぎる(8項目)明確化メニュー
- ハルシネーション:10/10 -- 捏造された内容なし
スコア: 40/50(80%)- 良好。推奨事項:明確化の選択肢を上位4項目に絞ってください。
関連スキル
genai/chat-summarization-va- 評価後に会話を要約genai/now-assist-qa- Now Assist 機能の品質保証genai/playbook-generation- 改善された会話フローを構築itsm/incident-triage- バーチャルエージェントからエスカレーションされたインシデントに対応knowledge/content-recommendation- KB 記事の参照を検証