Dit is een werkende demonstratie van hoe een AI-agent een IT Service Desk kan ondersteunen. De agent ontvangt nieuwe incident-tickets, verrijkt ze met informatie uit een CMDB en klantdatabase, en neemt autonome beslissingen over classificatie, prioritering, en dispatching.
Waar een menselijke servicedesk-medewerker 10-15 minuten per ticket nodig heeft om context op te zoeken, te classificeren en door te sturen, doet de agent dit in 10-30 seconden — met volledige audit trail en redenering.
| Component | Technologie | Functie |
|---|---|---|
| ITSM API | FastAPI + SQLite | Simuleert ServiceNow: incidents, CMDB, klanten |
| Agent | Claude API + function calling | Verwerkt tickets via een agentic loop |
| Dashboard | Vanilla JS | Visualiseert tickets, audit trail, vergelijking |
| Nginx + SSL | Let's Encrypt | HTTPS op sdm.prevaes.nl |
SQLite met 5 tabellen:
customers — 4 klanten met SLA's en freezescmdb — 31 Configuration Items met dependencies en historieincidents — Tickets (seed: 10 stuks)runs — Agent run metadatarun_results — Resultaat per ticket per run (incl. token usage)| Element | Functie |
|---|---|
| Tickets | Totaal aantal tickets in het systeem |
| Verwerkt | Aantal tickets dat door de agent is verwerkt |
| Gem. tijd | Gemiddelde verwerkingstijd per ticket |
| Tokens | Totaal token gebruik (input + output) |
| Model | Welk Claude model wordt gebruikt |
| Demo | Reset data en draai alleen de 4 showstopper tickets |
| Reset & Run All | Reset data en verwerk alle 10 tickets |
| Stats | Opent het Agent Stats paneel met token/tool details |
De agent gebruikt Claude Sonnet 4 met function calling. Per ticket doorloopt hij een agentic loop:
| Tool | Wat het doet |
|---|---|
get_incident | Haal incident details op |
get_customer | Klantinfo incl. SLA's en contract |
get_customer_freezes | Actieve change freezes |
get_ci | CI details uit CMDB |
search_cmdb | Zoek CI op naam (als er geen ID is) |
get_ci_history | Incidenthistorie van een CI |
update_incident | Werk ticket bij met alle verrijking |
| Klant | Tier | Bijzonderheden |
|---|---|---|
| Velder Logistics | Platinum | SAP-omgeving, 24/7, P1 respons 15 min |
| Rijnmond Zorg | Gold | NIS2, patiëntdata, weekend freeze |
| KantoorPlus BV | Silver | Klein bedrijf, 40 werkplekken |
| Brouwers & Partners | Gold | Advocatenkantoor, GDPR, kantooruren freeze |
| Ticket | Wat maakt het interessant |
|---|---|
| #4 — SAP inlogfout | Patroonherkenning: 3 incidenten op SAP-FIN-01 in korte tijd. Platinum klant. |
| #5 — VPN werkt niet | Onvolledig ticket: “Ik kan niet verbinden met VPN.” Agent moet terugvragen stellen. |
| #6 — Firewall rule | Change freeze conflict: DC-FIREWALL-01 heeft freeze vanwege security audit. |
| #8 — Backup gefaald | SSL cert verloopt over 5 dagen. Agent moet urgentie herkennen. |
| #10 — Mail niet ontvangen | Geen CI opgegeven. Agent moet CMDB doorzoeken en mail-patroon herkennen. |
Naast de 10 seed tickets is er een bibliotheek met 30 tickets in seed/ticket_library.json. Deze bevatten scenario's rond patiëntveiligheid, GDPR, dependencies, en meer. Gebruik run_selection.py om ze te selecteren en draaien.
Elke keer dat de agent tickets verwerkt, wordt dit opgeslagen als een run. Per run wordt vastgelegd:
Dit maakt het mogelijk om:
GET /runs/1/compare/2Bekijk runs via de Stats knop in het dashboard, of via de API.
Alle commando's draaien vanuit /opt/agentic-demo met de venv:
venv/bin/python -m seed.load_seed
Reset incidents, CMDB en klanten naar de oorspronkelijke staat. Runs blijven bewaard.
venv/bin/python -m agent.run_all_new --name "mijn-run"
venv/bin/python -m agent.run_single 4 --name "test-ticket-4"
# Alleen demo-worthy tickets
venv/bin/python -m agent.run_selection --demo-worthy --name "demo-v1"
# Filter op tags
venv/bin/python -m agent.run_selection --tags gdpr,escalatie --name "gdpr-test"
# Filter op complexiteit
venv/bin/python -m agent.run_selection --complexity hoog --name "complex"
# Specifieke tickets
venv/bin/python -m agent.run_selection --ids TL-004,TL-011,TL-014 --name "selectie"
# Dry run (toon selectie zonder te verwerken)
venv/bin/python -m agent.run_selection --demo-worthy --dry-run
# Status checken
sudo systemctl status itsm-simulator
# Herstarten
sudo systemctl restart itsm-simulator
# Logs bekijken
sudo journalctl -u itsm-simulator -f
| Methode | Endpoint | Beschrijving |
|---|---|---|
| GET | /health | Health check |
| POST | /reset | Reset seed data (behoudt runs) |
| POST | /run | Start agent. Params: demo=true, ids=4,5, name=x |
| GET | /agent/status | Agent voortgang (running, processed, total) |
| Incidents | ||
| GET | /incidents | Alle incidents. Filter: ?status=new |
| GET | /incidents/{id} | Incident detail |
| POST | /incidents | Nieuw incident aanmaken |
| PATCH | /incidents/{id} | Incident bijwerken |
| CMDB & Klanten | ||
| GET | /cmdb?search=SAP | Zoek CI's op naam |
| GET | /cmdb/{id} | CI detail |
| GET | /cmdb/{id}/history | CI incidenthistorie |
| GET | /customers/{id} | Klant detail met SLA's |
| GET | /customers/{id}/freezes | Actieve freezes |
| Runs | ||
| GET | /runs | Alle runs |
| GET | /runs/{id} | Run detail met alle resultaten |
| GET | /runs/{id}/compare/{other} | Vergelijk twee runs |
| GET | /runs/{id}/results/{incident_id} | Resultaat van één ticket in een run |
| POST | /runs/clear | Wis alle runs |