Conversation Evaluator
SkillAI & modelsEvaluate virtual agent conversations for quality including coherence, accuracy, slot filling, intent matching, and hallucination detection
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Conversation Evaluator skill
What this skill tells your AI
The instructions your AI receives, as published by happy-technologies-llc/happy-platform-skills in skills/genai/conversation-evaluator/SKILL.md and read by ahel’s review.
Overview
This skill evaluates virtual agent conversations across multiple quality dimensions to ensure accurate, coherent, and helpful interactions. It identifies issues with conversational AI performance and provides actionable improvement recommendations.
- Assess conversation coherence: logical flow, context retention, and topic continuity
- Validate accuracy: are responses factually correct and aligned with knowledge base content
- Evaluate slot filling: completeness and correctness of captured user inputs
- Score intent matching: did the virtual agent select the correct topic and actions
- Detect hallucination: identify fabricated information not grounded in ServiceNow data
- Generate quality scorecards with per-dimension ratings and aggregate scores
When to use: When auditing virtual agent performance, investigating user complaints about bot interactions, or running periodic quality assessments on conversational AI deployments.
Prerequisites
- Roles:
admin,va_admin, orconversation_designer - Plugins:
com.glide.cs.chatbot(Virtual Agent),com.glide.cs.designer(Conversation Designer) - Access: Read on
sys_cs_topic,sys_cs_conversation,sys_cb_topic,sys_cb_action,sys_cs_message - Knowledge: Understanding of your Virtual Agent topic designs and expected conversation flows
- Data: Active virtual agent deployment with conversation history
Procedure
Step 1: Retrieve Conversations for Evaluation
Query recent virtual agent conversations, optionally filtered by topic or outcome.
Using 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
Using 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
Step 2: Extract Conversation Messages
Retrieve the full message history for each conversation being evaluated.
Using 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
Using 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
Step 3: Retrieve Topic and Action Definitions
Get the designed topic flow to compare against actual conversation behavior.
Using 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
Using 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
Retrieve the expected actions for this topic:
Using 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
Using 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
Step 4: Evaluate Coherence (Score 0-10)
Assess the logical flow and context management of the conversation:
| Criterion | Points | Description |
|---|---|---|
| Logical flow | 0-3 | Responses follow a logical sequence without non-sequiturs |
| Context retention | 0-2 | Bot remembers earlier user inputs throughout conversation |
| Topic continuity | 0-2 | Conversation stays on-topic without unexplained jumps |
| Greeting/closing | 0-1 | Appropriate opening and closing messages |
| Recovery from confusion | 0-2 | Bot handles misunderstandings gracefully |
Red flags:
- Bot repeats the same question after user already answered
- Bot references information the user never provided
- Conversation jumps to unrelated topic without transition
- Bot fails to acknowledge user corrections
Step 5: Evaluate Accuracy (Score 0-10)
Verify responses against ServiceNow data sources:
Using 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
| Criterion | Points | Description |
|---|---|---|
| Factual correctness | 0-3 | Responses match ServiceNow records and KB articles |
| Data freshness | 0-2 | Information is current, not outdated |
| Source attribution | 0-2 | Bot references correct records/articles |
| No contradictions | 0-2 | Bot does not contradict itself within conversation |
| Appropriate uncertainty | 0-1 | Bot expresses uncertainty when data is ambiguous |
Step 6: Evaluate Slot Filling (Score 0-10)
Check if required user inputs were correctly captured:
| Criterion | Points | Description |
|---|---|---|
| Required slots captured | 0-3 | All mandatory fields collected from user |
| Slot validation | 0-2 | Inputs validated (e.g., email format, date range) |
| Slot confirmation | 0-2 | Bot confirms critical inputs back to user |
| Graceful re-prompting | 0-2 | Bot handles invalid inputs with clear guidance |
| Slot carryover | 0-1 | Previously provided info reused, not re-asked |
Cross-reference captured slots with sys_cb_action definitions where mandatory=true.
Step 7: Evaluate Intent Matching (Score 0-10)
Determine if the virtual agent selected the correct topic for the user's request:
Using MCP:
Tool: SN-Query-Table
Parameters:
table_name: sys_cs_topic
query: active=true
fields: sys_id,name,description,utterances
limit: 100
| Criterion | Points | Description |
|---|---|---|
| Correct topic selected | 0-4 | Initial intent classification matches user request |
| Disambiguation quality | 0-2 | When ambiguous, bot offers relevant topic choices |
| Topic switching | 0-2 | Handles mid-conversation topic changes appropriately |
| Fallback behavior | 0-2 | Graceful degradation when no topic matches |
Step 8: Detect Hallucinations
Identify fabricated content not grounded in ServiceNow data:
Hallucination categories:
| Type | Description | Severity |
|---|---|---|
| Fabricated record | Bot cites an incident/KB number that does not exist | Critical |
| Invented procedure | Bot describes steps not in any KB article or playbook | High |
| False status | Bot states incorrect ticket status or assignment | High |
| Made-up policy | Bot references a policy that does not exist | Medium |
| Incorrect attribution | Bot attributes information to wrong source | Medium |
For each bot response containing specific claims, verify against the source table:
Using 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
Step 9: Generate Quality Scorecard
Compile evaluation results into a structured scorecard:
=== 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
Step 10: Track Quality Trends
Aggregate scores across conversations to identify systemic issues:
Using 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
Key quality metrics:
- Average score per topic: Identifies worst-performing conversation flows
- Escalation rate: Percentage of conversations escalated to human agents
- Hallucination frequency: How often fabricated content appears
- Slot completion rate: Percentage of required slots successfully captured
Tool Usage
| Tool | Purpose | When to Use |
|---|---|---|
SN-Query-Table | Retrieve conversations, messages, topics, actions | Core evaluation data gathering |
SN-Natural-Language-Search | Find conversations by natural language criteria | Targeted investigation |
SN-Update-Record | Flag conversations with quality issues | Marking for review |
SN-Add-Work-Notes | Document evaluation findings | Audit trail |
SN-Get-Table-Schema | Explore conversation-related table structures | Setup and discovery |
Best Practices
- Sample strategically -- evaluate across all topics, not just high-volume ones
- Include escalated conversations -- escalations reveal the most significant quality gaps
- Evaluate in batches -- assess 20-50 conversations per evaluation cycle for statistical validity
- Separate dimensions -- a high coherence score does not compensate for hallucinations
- Track over time -- single-point evaluations miss trends; run evaluations weekly
- Involve topic designers -- share findings with the team that built the conversation flows
- Weight severity -- hallucinations and accuracy issues should weigh more than minor coherence gaps
- Benchmark against human agents -- compare VA scores with human agent CSAT for context
Troubleshooting
"No messages found for conversation"
Cause: Messages may be stored in a different table or the conversation was very short
Solution: Check sys_cs_message and also sys_journal_field for related entries. Very short conversations (1-2 turns) may only have system messages.
"Topic sys_id does not match any sys_cb_topic"
Cause: The conversation used a legacy or custom topic framework
Solution: Check sys_cs_topic in addition to sys_cb_topic. Some deployments use the newer Conversation Designer tables.
"Cannot determine if response is a hallucination"
Cause: The response is vague enough that it cannot be verified against specific records Solution: Flag as "unverifiable" rather than hallucination. Focus on responses with specific claims (ticket numbers, KB references, dates, names).
"Scores vary widely for the same topic"
Cause: Topic flow has conditional branches that behave differently based on user input Solution: Segment evaluations by conversation path (e.g., successful resolution vs. escalation path) for more meaningful comparisons.
Examples
Example 1: High-Quality Password Reset Conversation
Conversation: CS0045678 - User requests password reset
Evaluation:
- Coherence: 9/10 -- smooth flow, context maintained throughout
- Accuracy: 10/10 -- correctly referenced KB0012345 for self-service reset
- Slot Filling: 9/10 -- captured username, verified email, confirmed identity
- Intent Match: 10/10 -- matched "password reset" topic immediately
- Hallucination: 10/10 -- no fabricated content
Score: 48/50 (96%) - EXCELLENT
Example 2: Poor VPN Troubleshooting Conversation
Conversation: CS0045679 - User reports VPN issues
Evaluation:
- Coherence: 5/10 -- asked for OS twice, lost context of error message
- Accuracy: 4/10 -- referenced KB0099999 which does not exist (hallucination)
- Slot Filling: 6/10 -- missed mandatory field: VPN client version
- Intent Match: 7/10 -- initially matched "network issues" before correcting to VPN
- Hallucination: 2/10 -- fabricated KB article number and invented resolution steps
Score: 24/50 (48%) - POOR. Requires immediate topic redesign.
Example 3: Ambiguous Intent Handling
Conversation: CS0045680 - User says "it's broken"
Evaluation:
- Coherence: 8/10 -- bot asked clarifying questions methodically
- Accuracy: 9/10 -- once topic identified, responses were correct
- Slot Filling: 7/10 -- took 4 turns to capture enough detail
- Intent Match: 6/10 -- disambiguation menu was too broad (8 options)
- Hallucination: 10/10 -- no fabricated content
Score: 40/50 (80%) - GOOD. Recommendation: reduce disambiguation options to top 4.
Related Skills
genai/chat-summarization-va- Summarize conversations after evaluationgenai/now-assist-qa- Quality assurance for Now Assist featuresgenai/playbook-generation- Build improved conversation flowsitsm/incident-triage- Handle incidents escalated from virtual agentknowledge/content-recommendation- Verify KB article references
Signals
- GitHub stars
- 37
- Forks
- 13
- Last commit
- Jul 2026
Advanced
- Catalog kind
- skill
- Gateway key
conversation-evaluator- Source
- github.com/happy-technologies-llc/happy-platform-skills