Asistent AI pentru clasificarea și rezolvarea automată a ticketelor recurente cu Ollama si PowerShell

Configurare noua (How To)

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

powershell:
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

powershell
# ============================================================
# 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

powershell
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\AI_Ticket_Triage.ps1

# Vizualizare rezultate
Import-Csv "C:\Tickets\Output\tickets_analizate_*.csv" | Format-Table -AutoSize

Tip solutie

Permanent

Voteaza

(10 din 16 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?