VESICA
IQSYS_IQ_1Brouillon

SYS_IQ_1 — Appeler un agent via `agent_call`

Instruction· Direction des Systèmes d'Information (DSI) — Système & Infrastructure IA· émetteur VESICA SYS_PRO_1

SYS_IQ_1 — Appeler un agent via agent_call

Mode opératoire pour un workflow appelant (et embryon de catalogue : le bloc « Règles, critères et seuils » porte les source_ref). [CORPUS]

Objet (la tâche)

Invoquer un agent IA depuis n'importe quel workflow métier, en respectant le contrat d'entrée/sortie de agent_call, et obtenir une production normalisée (succès ou échec) avec télémétrie automatique. [CORPUS]

Prérequis / matériel / sécurité

  • L'agent visé existe dans le manifeste /config/agents.json (clé CODE-NN présente, dossier résolu). Sinon prepare_agent_call/get_agent_config throw « agent introuvable ». [CORPUS]
  • Le credential openrouter_prod (type natif openRouterApi) est valide sur main et worker (mode queue). [CORPUS]
  • L'agent Routeur SYS-01 n'est pas appelable (garde explicite) — c'est un placeholder, pas un agent productif. [CORPUS]
  • Aucune donnée sensible à protéger côté SYS (pas de donnée client manipulée ici) ; la confidentialité se joue dans le contenu du user_message fourni par l'appelant. [STANDARD]

Étapes d'exécution

  1. Construire l'INPUT : { agent_key:"CODE-NN", dossier_id?:"YYMMDD-NN-…", task_type?:"<vocab v0>", runtime_inputs:{ user_message:"…" } }. [CORPUS]
  2. Appeler agent_call en nœud Execute Workflow (jamais en boucle serrée sans nécessité). [CORPUS]
  3. Récupérer la sortie et tester success :
    • success:true → exploiter content (objet JSON si l'agent a un output_schema, sinon string) et usage/cost_usd/latency_ms si besoin. [CORPUS]
    • success:false → traiter l'échec côté appelant (error rempli, content:null) ; la notif llm_error a déjà été émise par agent_call. [CORPUS]
  4. Ne jamais recalculer le coût : cost_usd est natif OpenRouter, fourni dans usage. [CORPUS]
  5. Renseigner task_type et dossier_id dès que possible : ce sont les axes analytiques des dashboards de coût. [CORPUS]

Règles, critères et seuils (embryon de catalogue)

  • R1 — Tout appel LLM passe obligatoirement par agent_call ; aucun workflow d'agent ne hardcode un modèle, un endpoint ou une clé. (source_ref: ADR-029 ; 07 §B2 conventions communes) [CORPUS]
  • R2 — agent_key est requis ; un appel sans agent_key est rejeté à l'étape Validate input. (source_ref: 07 §B2.11) [CORPUS]
  • R3 — Le plafond response_format: json_schema strict:true n'est envoyé que si output_schema && native_output_schema_supported ; sinon seul le plancher (schéma dans le prompt) s'applique. (source_ref: ADR-028 ; 07 §B2.11) [CORPUS]
  • R4 — Si schéma actif et modèle non capable → warning Mattermost (notify_system, event llm_error, severity warning) émis par prepare_agent_call, sans bloquer (plancher seul). (source_ref: ADR-028 ; 07 §B2.3) [CORPUS]
  • R5 — usage.cost = coût natif, jamais recalculé, aucune grille tarifaire maintenue. (source_ref: ADR-029) [CORPUS]
  • R6 — reasoning_tokens est lu depuis usage.completion_tokens_details.reasoning_tokens, jamais par soustraction total − in − out. (source_ref: P-6g0-1 ; 07 §B1bis) [CORPUS]
  • R7 — task_type v0 (vocabulaire libre, contrôlé plus tard) : parsing | extraction | classification | synthese | redaction | analyse | routage | qa. (source_ref: 09 §1.4 ; 07 §B1bis) [CORPUS]
  • R8 — Pour un usage conversationnel, utiliser le wrapper mémoire au-dessus de agent_call (pattern C), jamais le nœud agent natif n8n (il court-circuite log_llm_call). (source_ref: ADR-039) [CORPUS]
  • R9 — Relance d'une production insuffisante = nouvelle tentative à modèle supérieur (model_override), sans régresser le statut ; chaque tentative est tracée. (source_ref: M1 « Tentative » ; UC-A11) [CORPUS]

Points de contrôle / cas particuliers

  • type_agent = agent_tools : non câblé (Lot 11) → agent_call throw « non câblé ». [CORPUS]
  • Multimodal (binary_inputs) : relais prévu, assemblage = Lot 11. [CORPUS]
  • Soft-error D2 : un HTTP 200 avec body.error ou choices vide est traité comme un échec (routé vers la branche llm_error). [CORPUS]
  • Sortie non-JSON alors qu'un schéma était attendu : parsing best-effort ; garde « parse raté » (severity warning) = fast-follow D3 non encore câblé. [CORPUS]

Sortie / enregistrement produit

  • L'objet de sortie agent_call (succès/échec) consommé par l'appelant. [CORPUS]
  • 1 ligne en telemetrie.appels_llm (cf. SYS_FQ_2). [CORPUS]

Agent responsable

agent_call (orchestrateur) — appelé par le workflow métier ; supervision humaine = gérant (stack). [CORPUS]