Objectif
Opérer le pipeline d'alerte VSS (détection de mode, souscriptions Alert-Bridge, notifications Slack, requêtes, intégration de caméras, personnalisation des prompts du vérificateur).
Prérequis
- Déploiement VSS actif et accessible sur
$HOST_IP(voirvss-deploy-profileetreferences/). - Identifiants NGC dans
$NGC_CLI_API_KEYet$NVIDIA_API_KEYpour tout téléchargement d'image. curl,jqet Docker disponibles sur le système appelant.
Instructions
Suivez les tables de routage et les workflows étape par étape ci-dessous. Chaque section se terminant par workflow, quick start ou flow est destinée à être exécutée de haut en bas. La documentation de référence détaillée se trouve dans references/ et les scripts auxiliaires se trouvent dans scripts/ — appelez-les via run_script quand le skill pointe vers un script par son nom.
Exemples
Les exemples complets d'exécution se trouvent sous evals/ (chaque manifeste *.json contient un scénario exécutable) et en ligne dans les blocs curl par workflow ci-dessous. Exécutez une évaluation Tier-3 avec nv-base validate <this-skill-dir> --agent-eval pour les rejouer.
Limitations
- Nécessite le profil VSS correspondant / le microservice à déployer et accessible depuis le système appelant.
- Les modèles et NIMs hébergés sur NGC peuvent être soumis à des limites de débit, des exigences de mémoire GPU et des restrictions de licence.
- Les limites de concurrence, de mémoire GPU et de stockage dépendent du matériel hôte et du fichier compose du profil.
Dépannage
- Erreur : l'appel REST retourne connexion refusée. Cause : microservice cible non en cours d'exécution. Solution : sondez
/docsou/health; redéployez viavss-deploy-profileou le skillvss-deploy-*correspondant. - Erreur : HTTP 401/403 lors des téléchargements NGC. Cause :
NGC_CLI_API_KEYmanquante/expirée. Solution :docker login nvcr.ioet réexportez la clé avant de réessayer. - Erreur : conteneur OOM ou le modèle ne peut pas se charger. Cause : mémoire GPU insuffisante pour le profil sélectionné. Solution : basculez vers une variante plus petite ou libérez les GPUs via
docker compose down.
Gestion des alertes VSS
Le profil d'alertes est déployé en l'un de deux modes à la fois. Le mode est choisi à /vss-deploy-profile -p alerts -m {verification,real-time}.
- Le mode CV (vérification) exécute le pipeline CV statique (RT-CV + Behavior Analytics + vérificateur VLM
alert-bridge) et le service temps réel dynamiquertvi-vlm. Les workflows A (alertes CV statiques) et B (surveillance VLM) sont disponibles ; les workflows D et E nécessitent le mode VLM temps réel. - Le mode VLM (temps réel) exécute uniquement
rtvi-vlmpour les alertes temps réel dynamiques. Le pipeline CV (RT-CV, Behavior Analytics) n'est pas en cours d'exécution, donc le workflow A n'est pas disponible.
Ce skill effectue le routage par mode déployé + intention utilisateur (surveillance vs CRUD d'abonnement vs opérations de webhook Slack).
Quand l'utiliser
- Démarrer ou arrêter une alerte temps réel sur un capteur (« Démarrer une alerte temps réel pour les boîtes tombées sur le capteur warehouse_sample »)
- Créer, lister ou arrêter des règles d'abonnement temps réel sur Alert Bridge (« Lister les règles temps réel actives sur warehouse-dock-1 »)
- Configurer ou gérer les notifications d'incident Slack (« Démarrer le webhook Slack d'alerte et envoyer une notification de test »)
- Lister ou interroger les incidents/alertes détectés
- Ajouter une nouvelle caméra au pipeline d'alertes
- Personnaliser les prompts du vérificateur VLM (mode CV)
- Vérifier les verdicts (confirmé / rejeté / non vérifié)
Prérequis de déploiement
Nécessite le profil VSS alerts sur $HOST_IP en mode verification (CV) ou real-time (VLM).
# Soit perception-alerts (mode CV) SOIT rtvi-vlm (mode VLM) doit être présent.
curl -sf --max-time 5 "http://${HOST_IP}:8000/docs" >/dev/null \
&& docker ps --format '{{.Names}}' \
| grep -qE '^(perception-alerts|rtvi-vlm)$'
Si le sondage échoue, demandez à l'utilisateur quel mode déployer et remettez à /vss-deploy-profile -p alerts -m <mode>. Si l'utilisateur refuse, arrêtez. Si l'appelant a pré-autorisé un déploiement autonome, exécutez-le directement avec le mode verification par défaut. Si cela réussit, détectez le mode selon l'étape 1.
Les deux modes (choix au moment du déploiement)
| Mode | Drapeau de déploiement | Env (.env) |
Ce qui s'exécute | Ce qui est disponible |
|---|---|---|---|---|
| CV (vérification) | -m verification |
MODE=2d_cv |
RT-CV (Grounding DINO) + Behavior Analytics + vérificateur VLM alert-bridge + rtvi-vlm |
Les deux pipeline CV statique (Workflow A) et alertes VLM temps réel dynamiques (Workflows B/D) |
| VLM (temps réel) | -m real-time |
MODE=2d_vlm |
alert-bridge + rtvi-vlm |
Uniquement alertes VLM temps réel dynamiques (Workflows B/D) et backend alert-bridge. Aucun pipeline CV statique. |
Changer de mode nécessite le flux de démontage et déploiement vss-deploy-profile avec l'autre drapeau -m. Passer de VLM → CV ajoute le pipeline CV statique ; passer de CV → VLM démonte le pipeline CV. rtvi-vlm est présent dans les deux modes.
Étape 1 — Détecter le mode actuellement déployé
Avant d'exécuter n'importe quel workflow d'alerte, vérifiez quel mode est actif. Utilisez les conteneurs CV uniquement comme signal — rtvi-vlm n'est plus un signal de mode fiable car il s'exécute dans les deux modes.
# Mode vérification CV (behavior analytics + perception-alerts sont CV uniquement)
docker ps --format '{{.Names}}' | grep -qx vss-behavior-analytics-alerts && echo "mode=CV"
# Mode VLM temps réel (pas de pipeline CV ; uniquement rtvi-vlm)
docker ps --format '{{.Names}}' | grep -qx vss-behavior-analytics-alerts || \
docker ps --format '{{.Names}}' | grep -qx rtvi-vlm && echo "mode=VLM"
Si vss-behavior-analytics-alerts est présent → mode CV (qui a aussi rtvi-vlm).
Si seul rtvi-vlm est présent (et aucun pipeline CV) → mode VLM.
Si rien ne correspond, le profil d'alertes n'est pas déployé — dirigez l'utilisateur vers le skill vss-deploy-profile.
Signal alternatif (préféré quand docker ps n'est pas accessible) : vérifiez le .env du profil :
grep -E '^MODE=' deployments/developer-workflow/dev-profile-alerts/.env
# MODE=2d_cv → mode CV (ensemble complet)
# MODE=2d_vlm → mode VLM temps réel (rtvi-vlm uniquement)
Étape 2 — Routage par mode déployé
| Mode déployé | L'utilisateur demande… | Action |
|---|---|---|
| VLM temps réel | Configuration/statut/test/arrêt du webhook Slack | Exécutez Workflow E (Notifications Slack) — suivez references/alert-notify.md |
| VLM temps réel | CRUD d'abonnement / règle, ou configurer / créer / surveiller / signaler une alerte temps réel sur un capteur spécifique avec une condition de détection | Exécutez Workflow D (Souscriptions d'alerte) — suivez references/alert-subscriptions.md pour la gestion des règles Alert Bridge. |
| CV vérification | CRUD d'abonnement/règle ou configuration de Slack/notification | Refuser — voir le texte de refus canonique ci-dessous |
| CV ou VLM | surveillance générique de démarrage/arrêt via VSS Agent sans condition de détection spécifique (p. ex. « démarrer une alerte temps réel pour le capteur warehouse_sample ») | Exécutez Workflow B (VLM) — appelez l'agent VSS avec un prompt de détection. rtvi-vlm s'exécute dans les deux modes. |
| CV ou VLM | recherche / liste / requête d'incident (alertes récentes, requêtes de plage horaire) | Exécutez Workflow C (Requête) — video_analytics_mcp.get_incidents fonctionne sur les deux déploiements. |
| CV | intégration d'alerte CV statique (ajoutez simplement la caméra et laissez le pipeline CV émettre les alertes) / personnalisation des prompts de verdict | Exécutez Workflow A (CV) — intégrez RTSP via le skill vss-manage-video-io-storage ; le pipeline CV le récupère automatiquement. Aucun appel de création par requête. |
| VLM | spécifiquement une alerte CV / behavior-analytics / règle PPE qui nécessite le pipeline CV statique | Redéploiement requis. Confirmez d'abord avec l'utilisateur, puis pointez vers le skill vss-deploy-profile pour -m verification. |
Toujours confirmer avant de déclencher un redéploiement. Un changement de mode arrête toute surveillance actuellement en cours et redémarre les services.
Précédence d'intention (première correspondance gagne)
- Workflow E (Slack) — mots-clés spécifiques à Slack (
slack,webhook+slack,bot token,slack channel).notifyseul n'est pas suffisant. - Workflow D (Abonnements) — nom du capteur plus une condition de détection, ou mots-clés de CRUD de règle (
rule,subscription, ID de règle). - Workflow B (surveillance VLM) — démarrage/arrêt générique sur un capteur sans condition de détection.
- Workflow C (Requête) — recherche d'incident (
show/list incidents,recent alerts, requêtes de plage horaire). - Workflow A (CV) — gestion du déploiement CV pour tout ce qui n'est pas appareillé ci-dessus.
Désambiguïsation (B vs D) : si un capteur est nommé avec un langage de démarrage/surveillance mais que la condition de détection est floue, demandez :
« Voulez-vous que je (a) crée une règle d'alerte persistante sur Alert Bridge qui continue à s'exécuter jusqu'à ce que vous la supprimiez, ou (b) démarre une session de surveillance unique via l'agent VSS ? »
Si un prompt mélange les workflows (« démarrer la surveillance et envoyer à Slack »), posez une question de clarification pour séparer l'ordre d'exécution.
Texte de refus du mode CV pour les intentions D et E
Quand le mode déployé est vérification CV et que l'utilisateur demande une intention d'alerte-abonnement ou Slack/notification, refusez avec ce message à la lettre :
« Les abonnements aux alertes et les notifications Slack ne sont pris en charge que en mode VLM temps réel. Votre déploiement actuel est
<CV verification | not deployed>. Pour utiliser ces fonctionnalités, redéployez avec/vss-deploy-profile -p alerts -m real-time(note : le changement de mode démonte la surveillance CV actuelle). »
Aucun redéploiement automatique. L'utilisateur décide s'il faut changer de mode.
Prérequis pour l'un ou l'autre mode : le capteur doit être dans VIOS
Les deux modes nécessitent que la caméra soit d'abord enregistrée dans VIOS.
- Si l'utilisateur vous donne uniquement une URL RTSP (ou une caméra IP) — remettez au skill
vss-manage-video-io-storagepour l'ajouter viaPOST /sensor/add(voir la section 6 du skillvss-manage-video-io-storage). Enregistrez l'sensorId/ le nom retourné. - Si l'utilisateur nomme un capteur existant — confirmez qu'il est listé par
GET /sensor/listvia le skillvss-manage-video-io-storageavant de procéder.
Sur un déploiement CV, ajouter l'RTSP est l'intégralité de l'étape d'intégration — le pipeline récupère le flux automatiquement une fois qu'il est dans VIOS. Sur un déploiement VLM, ajouter l'RTSP est un prérequis du workflow B.
Le endpoint /generate de l'agent
Toutes les actions de flux VLM et toutes les actions de requête passent par le endpoint de langage naturel de l'agent VSS :
AGENT="http://<AGENT_ENDPOINT>" # par défaut http://localhost:8000 sur le profil d'alertes
curl -s -X POST "$AGENT/generate" \
-H "Content-Type: application/json" \
-d '{"input_message": "<demande en langage naturel>"}' | jq .
Résolution du endpoint : utilisez le endpoint de l'agent du contexte de déploiement VSS actif. S'il n'est pas disponible, demandez à l'utilisateur. Ne le découvrez pas via le système de fichiers.
Vérification de disponibilité : curl -sf --connect-timeout 5 "$AGENT/docs".
Ne appelez pas directement les endpoints du microservice rtvi-vlm — passez toujours par l'agent. L'agent distribue en interne vers rtvi_vlm_alert, rtvi_prompt_gen et video_analytics_mcp.get_incidents.
Workflow A — Mode CV (-m verification / MODE=2d_cv)
Les alertes CV sont déclenchées par le déploiement, non par la requête — il n'y a pas d'appel d'agent pour en « créer » une.
- Vérifiez si le capteur est déjà dans VIOS via
GET /sensor/listdu skillvss-manage-video-io-storage(idempotent — ne faites jamais aveuglémentPOST /sensor/add). - S'il manque, intégrez via
POST /sensor/adddu skillvss-manage-video-io-storage(voir la section 6 de ce skill). Le pipeline CV récupère le flux automatiquement une fois enregistré et en ligne. - Confirmez en ligne :
curl -s "http://<VST_ENDPOINT>/vst/api/v1/sensor/<sensorId>/status" | jq . - Attendez les alertes dans Elasticsearch (Behavior Analytics → vérification VLM
alert-bridgeselonalert_type_config.json). Interrogez les résultats avec Workflow C.
Si l'utilisateur demande une alerte de pipeline CV statique sur un déploiement VLM uniquement, c'est une inadéquation de mode — voir la table de routage ci-dessus.
Workflow B — Surveillance VLM temps réel (mode CV ou VLM)
Intents génériques de démarrage / arrêt via l'agent VSS pour un capteur nommé sans condition de détection (si une condition est présente, routez vers le workflow D). rtvi-vlm s'exécute dans les deux modes.
# démarrer : input_message = "Start real-time alert for sensor <id>"
# arrêter : input_message = "Stop real-time alert for sensor <id>"
curl -s -X POST "$AGENT/generate" -H "Content-Type: application/json" \
-d '{"input_message": "<start|stop> real-time alert for sensor <id>"}' | jq .
En coulisse, l'agent appelle rtvi_prompt_gen puis rtvi_vlm_alert action="start". Sémantique d'alerte : chaque chunk est sous-titré ; un chunk dont la réponse VLM contient yes / true (insensible à la casse) publie un incident dans mdx-vlm-incidents. Les prompts doivent forcer une réponse Oui/Non. Une requête de pipeline CV statique sur un déploiement VLM uniquement est une inadéquation de mode — voir la table de routage.
Workflow D — Souscriptions d'alerte (mode VLM temps réel uniquement)
Créez / listez / supprimez des règles d'alerte temps réel persistantes sur Alert Bridge. Routez ici quand le prompt a des mots-clés de règle (rule, subscription, un ID de règle) ou quand il associe un capteur spécifique à une condition de détection spécifique (p. ex. « Configurer une alerte temps réel sur warehouse-dock-1 pour les violations EPI », « Surveiller le capteur entrance-1 pour la fraude », « Arrêter la règle 496aebd1-… »).
Pas ici : démarrage/arrêt générique sans condition (→ Workflow B) ou opérations Slack (→ Workflow E).
Chargez et suivez references/alert-subscriptions.md comme playbook autoritaire pour le CRUD d'abonnement. Mode VLM temps réel uniquement ; refusez avec le texte de refus canonique sur CV.
Workflow E — Notifications Slack (mode VLM temps réel uniquement)
Utilisez quand l'utilisateur mentionne explicitement Slack ou le relais webhook (démarrage/arrêt du serveur webhook, vérification du statut/santé, envoi d'un message de test, définition du canal/token Slack). Le mot notify seul n'est pas suffisant.
alert-notify(port 9090) ≠vss-alert-bridge(/api/v1/realtime). Ne touchez PAS àvss-alert-bridgepour les opérations Slack.
Les exemples qui routent ici : « Configurer les notifications Slack pour les alertes », « Vérifier si alert-notify s'exécute », « Envoyer une notification d'alerte de test à Slack », « Démarrer le webhook d'alerte pour Slack ».
Les exemples qui ne routent PAS ici : « Me notifier quand quelqu'un entre dans la zone » (→ Workflow D/B), « Alerte et notification sur mon téléphone » (ambigu — demandez).
Chargez et suivez references/alert-notify.md. Le code se trouve dans scripts/alert-notify/. Mode VLM temps réel uniquement.
Workflow C — Requête / Liste des alertes (fonctionne sur l'un ou l'autre mode)
Les alertes générées par CV et VLM atterrissent dans Elasticsearch et sont interrogeables via l'outil video_analytics_mcp.get_incidents de l'agent. POSTez des requêtes en langage naturel vers $AGENT/generate — « Montrez-moi les alertes récentes pour le capteur X », « Lister les alertes confirmées de la dernière heure », « Afficher les incidents de collision de Camera_02 entre <ISO> et <ISO> ». Pour un filtrage plus riche / non langage naturel (au niveau du capteur, séries chronologiques, comptages), utilisez le skill vss-query-analytics (VA-MCP sur le port 9901).
Interprétation des verdicts (mode CV uniquement)
Les alertes vérifiées portent un bloc info étendu :
verdict |
Signification |
|---|---|
confirmed |
Le VLM a déterminé que l'alerte est réelle |
rejected |
Le VLM a déterminé que c'est un faux positif |
unverified |
La vérification n'a pas pu être complétée (erreur) |
Vérifiez verification_response_code (200 = succès) et reasoning pour l'explication du VLM. Les incidents en mode VLM sont toujours « confirmés » à la source (le déclencheur lui-même est une réponse Oui/Non du VLM), donc il n'y a pas de champ verdict séparé.
Personnaliser les prompts du vérificateur CV (mode CV uniquement)
Les prompts du vérificateur de chemin CV se trouvent dans deployments/developer-workflow/dev-profile-alerts/vlm-as-verifier/configs/alert_type_config.json. Chaque entrée mappe un alert_type CV (le champ category émis par Behavior Analytics) aux prompts VLM system / user / enrichment optionnel.
Règles clés :
alert_typedoit correspondre aucategoryémis par Behavior Analytics.output_categoryest le nom d'affichage dans Elasticsearch / UI.enrichmentdéclenche un deuxième appel VLM pour une description plus riche ; nécessitealert_agent.enrichment.enabled: true.- Les modifications nécessitent un redémarrage du conteneur
alert-bridgepour prendre effet.
Les prompts VLM temps réel ne sont pas configurés dans un fichier — ils sont par requête, formés par rtvi_prompt_gen à partir de la description de détection en langage naturel de l'utilisateur.
Liens entre skills
| Tâche | Skill |
|---|---|
| Déployer, redéployer ou changer le mode d'alerte | Skill vss-deploy-profile — /vss-deploy-profile -p alerts -m {verification,real-time} |
| Ajouter une caméra RTSP / IP à VIOS | Skill vss-manage-video-io-storage — Section 6 (Ajouter capteur / flux) |
| Lister les capteurs, prendre une capture, télécharger un clip | Skill vss-manage-video-io-storage |
| Métriques d'incident / occupation / EPI de plage horaire depuis Elasticsearch | Skill vss-query-analytics (VA-MCP :9901) |
| Générer un rapport d'incident détaillé à partir d'une alerte | Skill vss-generate-video-report |
| Souscriptions aux alertes (créer/lister/supprimer les règles) | Sous-workflow : references/alert-subscriptions.md |
| Transférer les incidents vers le webhook Slack | Sous-workflow : references/alert-notify.md, code dans scripts/alert-notify/ |
Pièges
alert-notify(port 9090) ≠vss-alert-bridge. « Webhook Slack » → Workflow E (alert-notify). Ne routez jamais les intentions Slack vers/api/v1/realtimedevss-alert-bridge.- Portée du workflow par mode : Workflow A est CV uniquement. Les workflows B et C fonctionnent sur l'un ou l'autre mode. Les workflows D et E (abonnements et Slack) sont VLM temps réel uniquement — refusez avec le texte de refus canonique s'ils sont tentés sur CV.
- N'utilisez pas la présence du conteneur
rtvi-vlmcomme signal de mode. Il s'exécute dans les deux modes. Utilisezvss-behavior-analytics-alerts(CV uniquement) ou la variable d'envMODEà la place. - Un changement de mode démonte le déploiement actuel. Tout flux de surveillance VLM actuellement en cours et tout état d'alerte CV non déjà dans Elasticsearch sera perdu.
- N'appelez pas le microservice
rtvi-vlmdirectement depuis ce skill. Passez toujours par$AGENT/generate. L'agent gère la recherche capteur→RTSP, l'enregistrement du flux et la suppression. - Le capteur doit déjà être dans VIOS pour l'un ou l'autre mode. Si l'utilisateur vous donne uniquement une URL RTSP, utilisez d'abord le skill
vss-manage-video-io-storage. - Le déclencheur d'alerte VLM est une correspondance de jeton
"yes"/"true"sur la réponse VLM (insensible à la casse).rtvi_prompt_genapplique le modèle Oui/Non — ne craftiez pas à la main des prompts qui le cassent. - Arrêter une alerte VLM est un appel d'agent (« Stop real-time alert… ») ; l'agent gère à la fois le flux de sous-titrage et la suppression de l'enregistrement de flux.
- Les modifications de prompt vers
alert_type_config.jsonont besoin d'un redémarragealert-bridge.alert_agent.enrichment.enabled: trueest requis pour que le promptenrichmentse déclenche.
bump:1