Situatie
Echipele de suport IT primesc zilnic ticket-uri repetitive (resetare parolă, cont blocat, VPN nefuncțional, mapare drive etc.). Triajul manual și redactarea răspunsurilor consumă timp prețios.
Această soluție citește descrierile ticket-urilor dintr-un fișier CSV (exportat din helpdesk), le clasifică automat pe categorii folosind un model AI local (Ollama) și sugerează pașii de rezolvare pe baza unei baze de cunoștințe interne — totul fără ca datele clienților să părăsească rețeaua.
Solutie
Pasi de urmat
Pasul 1 — Pregătire mediu (Ollama + model)
# Verifica Ollama (presupunem deja instalat )
ollama –version
# Descarca modelul recomandat pentru clasificare text
ollama pull llama3
# Creeaza directoarele de lucru
New-Item -ItemType Directory -Force -Path “C:\Tickets” | Out-Null
New-Item -ItemType Directory -Force -Path “C:\Tickets\Output” | Out-Null
Pasul 2 — Definire bază de cunoștințe (categorii + soluții)
Powershell:
# Baza interna de categorii si solutii standard
$KnowledgeBase = @"
CATEGORII DISPONIBILE si solutii standard:
1. RESETARE_PAROLA - Reset parola in Active Directory, comunicare parola temporara catre user
2. CONT_BLOCAT - Deblocare cont (Unlock-ADAccount), verificare sursa lockout in Event Viewer
3. VPN - Reinstalare/reconfigurare client VPN, verificare credentiale si conectivitate
4. EMAIL - Recreare profil Outlook, verificare setari cont, scanare OST/PST
5. MAPARE_DRIVE - Remapare share de retea, verificare permisiuni ACL
6. PRINTER - Reinstalare driver imprimanta, verificare coada de printare
7. HARDWARE - Diagnosticare componenta, escaladare catre tehnician on-site
8. ALTELE - Necesita analiza manuala de catre administrator
"@
Pasul 3 — Funcție de analiză cu Ollama
function Invoke-TicketAnalysis {
param(
[string]$TicketText,
[string]$Knowledge,
[string]$Model = "llama3"
)
$Prompt = @"
Esti un asistent de suport IT. Pe baza bazei de cunostinte de mai jos,
analizeaza ticket-ul si raspunde STRICT in formatul:
CATEGORIE: <numele exact al categoriei>
PRIORITATE: <Mica/Medie/Mare>
PASI_REZOLVARE: <pasii recomandati, concis>
Raspunde DOAR in limba romana.
$Knowledge
TICKET DE ANALIZAT:
$TicketText
"@
$Body = @{
model = $Model
prompt = $Prompt
stream = $false
} | ConvertTo-Json -Depth 3
try {
$Response = Invoke-RestMethod `
-Uri "http://localhost:11434/api/generate" `
-Method POST -ContentType "application/json" `
-Body $Body -TimeoutSec 120
return $Response.response
}
catch {
return "EROARE la analiza: $_"
}
}
Pasul 4 — Script principal de procesare
# ============================================================
# AI Ticket Triage - Main Script
# Autor: Claudiu Ceausescu
# ============================================================
$InputCSV = "C:\Tickets\input.csv"
$OutputCSV = "C:\Tickets\Output\tickets_analizate_$(Get-Date -Format 'yyyy-MM-dd_HH-mm').csv"
$Model = "llama3"
# Verifica Ollama
try {
Invoke-RestMethod -Uri "http://localhost:11434/api/tags" -TimeoutSec 5 | Out-Null
Write-Host "[OK] Ollama activ." -ForegroundColor Green
}
catch {
Write-Host "[EROARE] Ollama nu raspunde." -ForegroundColor Red
exit 1
}
# CSV de intrare asteptat cu coloanele: ID, Descriere
$Tickets = Import-Csv -Path $InputCSV
$Results = @()
$Counter = 0
foreach ($Ticket in $Tickets) {
$Counter++
Write-Host "[$Counter/$($Tickets.Count)] Procesez ticket $($Ticket.ID)..." -ForegroundColor Cyan
$Analysis = Invoke-TicketAnalysis `
-TicketText $Ticket.Descriere `
-Knowledge $KnowledgeBase `
-Model $Model
# Parsare raspuns AI
$Categorie = ($Analysis | Select-String "CATEGORIE:\s*(.+)").Matches.Groups[1].Value
$Prioritate = ($Analysis | Select-String "PRIORITATE:\s*(.+)").Matches.Groups[1].Value
$Pasi = ($Analysis -split "PASI_REZOLVARE:")[1]
$Results += [PSCustomObject]@{
ID = $Ticket.ID
Descriere = $Ticket.Descriere
Categorie = $Categorie.Trim()
Prioritate = $Prioritate.Trim()
Solutie = $Pasi.Trim()
}
Start-Sleep -Seconds 1
}
# Export rezultate
$Results | Export-Csv -Path $OutputCSV -NoTypeInformation -Encoding UTF8
Write-Host "`n[DONE] Rezultate salvate: $OutputCSV" -ForegroundColor Green
Pasul 5 — Rulare
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\AI_Ticket_Triage.ps1
# Vizualizare rezultate
Import-Csv "C:\Tickets\Output\tickets_analizate_*.csv" | Format-Table -AutoSize
Leave A Comment?