AI & Machine Learning Complete Guide — دليل الذكاء الاصطناعي الشامل
Platform: ServiceNow Australia (Sep 2026)
دليل شامل لـ Virtual Agent و Predictive Intelligence و NLU و Now Assist
Table of Contents
- AI Overview in ServiceNow
- Virtual Agent
- Predictive Intelligence
- Natural Language Understanding
- Now Assist (GenAI)
- Document Intelligence
- AI Search
- HR Leave AI Integration
- Best Practices
- Labs
1. AI Overview in ServiceNow
Direct URLs
| Component | URL |
|---|---|
| Virtual Agent | {BASE}/now/va-admin |
| Predictive Intelligence | {BASE}/ml_solutions.do |
| NLU Models | {BASE}/sys_nlu_model_list.do |
| AI Search | {BASE}/ais_search_config_list.do |
AI Capabilities Matrix
| Capability | Use Case |
|---|---|
| Virtual Agent | Conversational self-service |
| Predictive Intelligence | Classification, similarity, clustering |
| NLU | Intent detection, entity extraction |
| Now Assist | GenAI summarization, generation |
| Document Intelligence | Document processing, extraction |
| AI Search | Enhanced search relevance |
2. Virtual Agent
Direct URL: {BASE}/now/va-admin
Create Topic
**HR Leave Request Topic:**
1. Navigate: Virtual Agent > Designer
2. Create Topic:
- Name: Request Leave
- Description: Submit a leave request
- Category: HR
3. Configure NLU:
- Add utterances:
- "I want to request leave"
- "I need time off"
- "Submit vacation request"
- "Book annual leave"
- "أريد طلب إجازة"
- "طلب إجازة سنوية"
Topic Flow
Nodes:
1. Start
- Trigger: NLU intent match
2. Greet
- Bot: "I can help you request leave. Let me gather some details."
3. Get Leave Type
- Bot: "What type of leave?"
- Input: Choice
- Options:
- Annual Leave
- Sick Leave
- Emergency Leave
- Store: leave_type
4. Get Start Date
- Bot: "When does your leave start?"
- Input: Date
- Validation: Must be today or future
- Store: start_date
5. Get End Date
- Bot: "When does it end?"
- Input: Date
- Validation: Must be after start date
- Store: end_date
6. Calculate Duration
- Script:
var start = new GlideDateTime(vaVars.start_date);
var end = new GlideDateTime(vaVars.end_date);
var dur = GlideDateTime.subtract(start, end).getDayPart() + 1;
vaVars.duration = dur;
- Bot: "That's {duration} days."
7. Check Balance
- Script:
var util = new x_786686_hr_leave.LeaveBalanceUtil();
vaVars.balance = util.getBalance(vaSystem.getUser(), vaVars.leave_type);
- Condition: balance < duration
- Bot: "Sorry, you only have {balance} days available."
- End
- Continue
8. Get Reason (Optional)
- Bot: "Any reason you'd like to add? (or say 'skip')"
- Input: Text
- Store: reason
9. Confirm
- Bot: "Please confirm:
Type: {leave_type}
Dates: {start_date} to {end_date}
Duration: {duration} days"
- Input: Choice
- Options: [Confirm, Cancel]
10. Submit
- Script:
var gr = new GlideRecord('x_786686_hr_leave_request');
gr.initialize();
gr.employee = vaSystem.getUser();
gr.leave_type = vaVars.leave_type;
gr.start_date = vaVars.start_date;
gr.end_date = vaVars.end_date;
gr.reason = vaVars.reason || '';
vaVars.request_number = gr.insert() ? gr.number : '';
11. Success
- Bot: "Done! Your request {request_number} has been submitted. Your manager will be notified."
- End
Custom Server Script
// Virtual Agent Server Script
(function execute(inputs, outputs) {
var userId = inputs.user_id;
var leaveType = inputs.leave_type;
var startDate = inputs.start_date;
var endDate = inputs.end_date;
var reason = inputs.reason;
// Validate balance
var util = new x_786686_hr_leave.LeaveBalanceUtil();
var balance = util.getBalance(userId, leaveType);
var start = new GlideDateTime(startDate);
var end = new GlideDateTime(endDate);
var duration = GlideDateTime.subtract(start, end).getDayPart() + 1;
if (duration > balance) {
outputs.success = false;
outputs.message = 'Insufficient balance. Available: ' + balance + ' days';
return;
}
// Create request
var gr = new GlideRecord('x_786686_hr_leave_request');
gr.initialize();
gr.employee = userId;
gr.leave_type = leaveType;
gr.start_date = startDate;
gr.end_date = endDate;
gr.reason = reason;
gr.duration_days = duration;
var sysId = gr.insert();
if (sysId) {
gr.get(sysId);
outputs.success = true;
outputs.request_number = gr.number.toString();
outputs.message = 'Request ' + gr.number + ' submitted successfully';
} else {
outputs.success = false;
outputs.message = 'Failed to create request';
}
})(inputs, outputs);
3. Predictive Intelligence
Direct URL: {BASE}/ml_solutions.do
Classification Model
**HR Leave Auto-Classification:**
1. Navigate: Predictive Intelligence > Solutions
2. Create Solution:
- Name: Leave Request Classification
- Type: Classification
- Table: x_786686_hr_leave_request
3. Configure Training:
- Input fields: short_description, reason
- Target field: leave_type
- Training data: Historical requests (1000+ records)
4. Train Model:
- Click Train
- Wait for completion
- Review accuracy metrics
5. Deploy:
- Enable auto-classification
- Set confidence threshold: 0.8
Similarity Model
**Similar Leave Requests:**
1. Create Solution:
- Type: Similarity
- Table: x_786686_hr_leave_request
2. Configure:
- Fields: employee department, leave_type, duration_days
- Use case: Find similar past requests for approval reference
3. Deploy and use in workspace
Prediction API
// Use prediction in Business Rule
var predictor = new sn_ml.ClassificationPredictor('leave_classification');
var prediction = predictor.predict({
short_description: current.short_description,
reason: current.reason
});
if (prediction.confidence > 0.8) {
current.leave_type = prediction.predicted_value;
gs.info('Auto-classified as: ' + prediction.predicted_value);
}
4. Natural Language Understanding
Direct URL: {BASE}/sys_nlu_model_list.do
Create NLU Model
**HR Leave NLU Model:**
1. Navigate: NLU > Models
2. Create Model:
- Name: HR Leave NLU
- Language: English, Arabic
3. Create Intents:
- request_leave
- check_balance
- cancel_request
- view_requests
- approve_request
4. Add Utterances per Intent
5. Create Entities
6. Train and Publish
Intent Configuration
Intent: request_leave
Utterances:
- I want to request leave
- I need to take time off
- Submit a vacation request
- I want to apply for annual leave
- Can I book some days off
- أريد طلب إجازة
- طلب إجازة سنوية
- احتاج اجازة
Entities:
- leave_type: [annual, sick, emergency, unpaid]
- duration: [number] days
- date: [date expression]
---
Intent: check_balance
Utterances:
- What's my leave balance
- How many vacation days do I have
- Show me my remaining leave
- كم رصيد إجازاتي
- عرض رصيد الإجازات
---
Intent: cancel_request
Utterances:
- Cancel my leave request
- I want to withdraw my leave
- Delete my vacation request
- إلغاء طلب الإجازة
Entity Extraction
// Extract entities from text
var nlu = new sn_nlu.NLUService();
var result = nlu.processText('HR Leave NLU', userInput);
if (result.intent === 'request_leave') {
var entities = result.entities;
var leaveType = entities.leave_type || 'annual';
var duration = entities.duration;
var startDate = entities.date;
gs.info('Intent: ' + result.intent);
gs.info('Leave Type: ' + leaveType);
gs.info('Duration: ' + duration);
}
5. Now Assist (GenAI)
Summarization
// Summarize leave request for manager
var nowAssist = new sn_genai.GenerativeAIAPI();
var prompt = 'Summarize this leave request for quick manager review:\n' +
'Employee: ' + current.employee.getDisplayValue() + '\n' +
'Type: ' + current.leave_type.getDisplayValue() + '\n' +
'Dates: ' + current.start_date + ' to ' + current.end_date + '\n' +
'Duration: ' + current.duration_days + ' days\n' +
'Reason: ' + current.reason;
var summary = nowAssist.generateText(prompt);
current.work_notes = 'AI Summary: ' + summary;
Response Generation
// Generate rejection response
var nowAssist = new sn_genai.GenerativeAIAPI();
var prompt = 'Generate a professional and empathetic rejection message for a leave request. ' +
'Include: appreciation for the request, clear reason for rejection, and next steps. ' +
'Rejection reason: ' + rejectionReason;
var response = nowAssist.generateText(prompt);
Code Assistance
// Generate script suggestion
var prompt = 'Generate a ServiceNow Business Rule script that: ' +
'1. Triggers before insert on x_786686_hr_leave_request ' +
'2. Validates that end_date is after start_date ' +
'3. Calculates duration_days ' +
'4. Sets the short_description';
var code = nowAssist.generateText(prompt);
6. Document Intelligence
Document Processing
**Use Case: Medical Certificate Processing**
1. Upload medical certificate
2. Document Intelligence extracts:
- Doctor name
- Date of issue
- Recommended leave duration
- Diagnosis (if permitted)
3. Auto-populate leave request fields
Configuration
// Document extraction for leave attachments
var docIntel = new sn_doc_intel.DocumentIntelligenceAPI();
var attachment = current.getAttachments();
if (attachment.hasNext()) {
var result = docIntel.extractDocument(attachment.next().sys_id);
if (result.document_type === 'medical_certificate') {
current.u_doctor_name = result.fields.doctor_name;
current.u_certificate_date = result.fields.issue_date;
current.u_recommended_days = result.fields.duration;
}
}
7. AI Search
Direct URL: {BASE}/ais_search_config_list.do
Configure AI Search
**HR Knowledge Search:**
1. Navigate: AI Search > Search Applications
2. Create Application:
- Name: HR Leave Knowledge
- Sources:
- Knowledge Base: HR Policies
- Table: x_786686_hr_leave_request (historical)
3. Configure:
- Enable semantic search
- Enable query understanding
- Configure relevancy tuning
Search Integration
// Search for relevant policies
var aiSearch = new sn_ais.AISearchAPI();
var results = aiSearch.search({
query: 'annual leave policy maximum days',
application: 'hr_leave_knowledge',
limit: 5
});
for (var i = 0; i < results.length; i++) {
gs.info('Result: ' + results[i].title + ' (Score: ' + results[i].score + ')');
}
8. HR Leave AI Integration
Complete AI-Powered Flow
// Script Include: LeaveAIAssistant
var LeaveAIAssistant = Class.create();
LeaveAIAssistant.prototype = {
initialize: function() {
this.nlu = new sn_nlu.NLUService();
this.predictor = new sn_ml.ClassificationPredictor('leave_classification');
},
processUserInput: function(input) {
// NLU processing
var nluResult = this.nlu.processText('HR Leave NLU', input);
return {
intent: nluResult.intent,
confidence: nluResult.confidence,
entities: nluResult.entities
};
},
classifyRequest: function(description, reason) {
var prediction = this.predictor.predict({
short_description: description,
reason: reason
});
return {
leave_type: prediction.predicted_value,
confidence: prediction.confidence
};
},
getSmartSuggestions: function(employeeId) {
// Based on patterns and ML
var suggestions = [];
// Check upcoming holidays
var holidays = this._getUpcomingHolidays();
if (holidays.length > 0) {
suggestions.push({
type: 'bridge_day',
message: 'Consider taking ' + holidays[0].bridge_date + ' to extend your weekend'
});
}
// Check balance expiry
var balance = new x_786686_hr_leave.LeaveBalanceUtil().getBalance(employeeId, 'annual');
if (balance > 10) {
suggestions.push({
type: 'use_balance',
message: 'You have ' + balance + ' days that may expire. Consider planning time off.'
});
}
return suggestions;
},
_getUpcomingHolidays: function() {
// Implementation
return [];
},
type: 'LeaveAIAssistant'
};
Virtual Agent with AI
// VA Server Script with full AI integration
(function execute(inputs, outputs) {
var assistant = new x_786686_hr_leave.LeaveAIAssistant();
var userId = inputs.user_id;
// Process natural language input
var nluResult = assistant.processUserInput(inputs.user_message);
outputs.intent = nluResult.intent;
switch (nluResult.intent) {
case 'request_leave':
// Extract entities and create request
var entities = nluResult.entities;
outputs.response = 'I understand you want to request ' +
(entities.leave_type || 'leave') + '. ';
outputs.next_action = 'collect_details';
break;
case 'check_balance':
var util = new x_786686_hr_leave.LeaveBalanceUtil();
var balances = util.getAllBalances(userId);
outputs.response = 'Your leave balances:\n' +
'Annual: ' + balances.annual + ' days\n' +
'Sick: ' + balances.sick + ' days\n' +
'Emergency: ' + balances.emergency + ' days';
outputs.next_action = 'end';
break;
case 'view_requests':
outputs.response = 'Here are your recent leave requests:';
outputs.next_action = 'show_list';
break;
default:
outputs.response = 'I\'m not sure what you need. Would you like to:\n' +
'1. Request leave\n' +
'2. Check your balance\n' +
'3. View your requests';
outputs.next_action = 'clarify';
}
// Add smart suggestions
var suggestions = assistant.getSmartSuggestions(userId);
if (suggestions.length > 0) {
outputs.suggestions = suggestions;
}
})(inputs, outputs);
9. Best Practices
AI Model Training
1. **Data Quality**
- Clean training data
- Balanced classes
- Sufficient volume (1000+ per class)
2. **Continuous Improvement**
- Monitor accuracy
- Retrain periodically
- Incorporate feedback
3. **Confidence Thresholds**
- Set appropriate thresholds
- Handle low-confidence cases
- Provide fallback options
Virtual Agent Design
1. **Conversation Design**
- Keep flows simple
- Provide escape options
- Handle errors gracefully
2. **Multilingual Support**
- Train for each language
- Consider cultural differences
- Test with native speakers
10. Labs
Lab 1: Create VA Topic
**Duration:** 1 hour
1. Open VA Designer
2. Create "Request Leave" topic
3. Add NLU training
4. Build conversation flow
5. Add server scripts
6. Test in preview
7. Publish
Lab 2: Predictive Model
**Duration:** 1.5 hours
1. Create classification solution
2. Configure training data
3. Train model
4. Review metrics
5. Deploy to production
6. Test auto-classification
Direct URLs Reference
| Page | URL |
|---|---|
| Virtual Agent Admin | {BASE}/now/va-admin |
| VA Designer | {BASE}/now/va-designer |
| Predictive Intelligence | {BASE}/ml_solutions.do |
| NLU Models | {BASE}/sys_nlu_model_list.do |
| NLU Workbench | {BASE}/now/nlu-workbench |
| AI Search | {BASE}/ais_search_config_list.do |