tool_calls : des invocations concrètes avec des arguments réels, choisis
par le modèle. La surface response du
firewall agent inspecte exactement ceux-là,
au moment où ils quittent le modèle et avant qu’ils n’atteignent votre
boucle d’agent. C’est la surface où vous filtrez ce que le modèle a réellement
décidé de faire, avec les arguments qu’il a réellement choisis.
Cette page couvre le cas d’usage du filtrage sur la surface response — quand
y recourir plutôt qu’à inbound, la
seule torsion de verdict qu’elle ajoute, et comment elle se comporte sur un
stream. Pour le vocabulaire complet des règles et la sémantique des verdicts,
voir Schéma de règle et
Verdicts.
1. Filtrer les appels de réponse d’outil llm, avec les arguments en portée
Le stageinbound voit les outils que vous
annoncez — des noms seulement, pas encore d’arguments au moment de l’appel.
Le stage response voit les tool_calls que le modèle émet, qui portent
les arguments que le modèle a choisis. C’est toute la raison de filtrer ici :
c’est la seule surface qui voit l’appel réel + les arguments pour un outil
exécuté par le client (non-MCP), de sorte que les
clauses d’arguments, les séquences
et les règles d’état d’exécution atterrissent toutes sur response.
La distinction en une ligne :
| Stage | Voit | Utilisez-le pour |
|---|---|---|
inbound | Les définitions d’outils annoncées | Rendre un outil invisible au modèle |
response | Les tool_calls émis + arguments | Filtrer l’appel que le modèle a réellement fait |
inbound répond à quels outils existent ; response répond à ce que
le modèle a fait avec l’un d’eux. Recourez à response (ou laissez stage
vide pour couvrir les deux) quand un outil apparaît légitimement dans
certaines requêtes mais qu’un appel particulier de celui-ci est dangereux
— ou quand vous ne contrôlez que la boucle d’agent, pas l’ensemble d’outils
annoncé.
stage s’exécute sur chaque surface, y compris
response. Épinglez à response uniquement quand une règle ne devrait
inspecter que les appels émis — par exemple une clause d’argument qui n’a
de toute façon rien à faire correspondre sur la surface inbound. Voir
Stages.2. Un exemple concret
Autorisezshell.exec en général, mais retirez-le de la réponse du modèle au
moment où son argument command paraît destructeur. Dans la console de votre
espace de travail, ouvrez une politique (ou
créez-en une) et ajoutez une règle
épinglée à la surface response :
args_match_json — une chaîne JSON
contenant {"clauses":[…]}, chaque clause un triplet path / op / value
(op est l’une des valeurs eq, contains, regex, gt, lt). Le
formulaire de la console le construit pour vous ; la forme brute est montrée
ici pour que le nom du champ soit sans ambiguïté.
L’outil reste annoncé — le modèle peut toujours proposer shell.exec —
mais quand l’appel émis porte un command destructeur, le firewall retire ce
tool_call de la réponse avant que votre agent ne le voie jamais. Un
shell.exec bénin (disons ls -la) passe intact. C’est le pattern
« autoriser l’outil, filtrer l’appel » pour lequel la surface response
existe ; la clause d’argument est ce qui le rend possible.
3. Ce que fait un verdict sur la surface response
La surface response inspecte chaquetool_call émis et réécrit la réponse
sur place. Les appels conservés sont transmis octet pour octet ; seul un
appel correspondant change :
deny → l'appel est retiré de la réponse
deny → l'appel est retiré de la réponse
tool_call correspondant est retiré de la réponse du modèle avant
qu’il n’atteigne votre agent. Contrairement à un deny inbound — qui
renvoie HTTP 400 avec le code firewall_blocked — un deny de surface
response ne fait pas échouer la requête ; le reste de la réponse (autres
appels d’outils, tout texte) circule avec l’appel fautif simplement
absent.sanitize → les arguments sont redactés, l'appel transmis
sanitize → les arguments sont redactés, l'appel transmis
pending_approval → l'appel est retiré ici, pas mis en attente
pending_approval → l'appel est retiré ici, pas mis en attente
pending_approval qui correspond en premier sur un
appel émis est donc retirée (fail-closed) — la conserver transmettrait
un appel non revu sans décision humaine. Rédigez les mises en attente HITL
pour qu’elles se déclenchent en inbound ; voir
Approbations.allow / audit → l'appel passe, journalisé
allow / audit → l'appel passe, journalisé
allow et audit transmettent tous deux l’appel ; audit est le
default_verdict habituel — tout enregistrer, ne rien bloquer, jusqu’à ce
que vous soyez prêt à appliquer.4. Streaming : mis en attente, puis filtré
Sur une réponse non-stream, toute la réponse est parsée et filtrée d’un coup. Sur un stream, lestool_calls d’un modèle arrivent comme des deltas par
index à travers de nombreuses frames SSE — et une fois qu’un delta est
transmis, votre agent l’a déjà et il ne peut pas être rétracté. Donc la
passerelle retient les frames d’appel d’outil : elles ne sont jamais
transmises en milieu de stream. À la fin du stream, le firewall assemble
chaque appel (nom + arguments complets), l’évalue, et n’émet que les appels
survivants.
tool_call
sont retenues pour évaluation, de sorte qu’un appel refusé ou assaini est
filtré avant que l’appel d’outil assemblé ne soit livré. Le verdict et la
sémantique des règles sont identiques à la surface non-stream. Pour les
détails au niveau des frames, voir
Rouages du streaming et
Streaming par fournisseur.5. Le déployer en toute sécurité
Dry-run de la règle d'abord
Dry-run de la règle d'abord
Le mode shadow pour une mesure en live
Le mode shadow pour une mesure en live
audit, raison préfixée [shadow] would …. Vous mesurez
exactement ce que la règle retirerait contre le trafic réel avant
qu’elle ne change une seule réponse.Confirmer le filtrage dans le journal d'événements
Confirmer le filtrage dans le journal d'événements
response pour voir votre règle se déclencher sur les appels émis que
vous attendiez. Voir Analytics.6. Attacher la politique et qui peut la configurer
Une politique ne fait rien jusqu’à ce qu’une clé s’y résolve. Attachez dans la console en définissantfirewall_policy_id sur la
clé, ou faites de la politique le défaut
de l’espace de travail. Résolution : la politique attachée de la clé
(lorsqu’elle existe et est activée), sinon le défaut de l’espace de travail —
et une politique attachée mais désactivée retombe sur le défaut de l’espace
de travail. Voir Gérer les politiques.
Toute la configuration s’exécute dans la console sous votre session
(/api/workspace/firewall/*) :
| Action | Rôle |
|---|---|
| Lire les politiques, presets, outils découverts, Simulate | Member |
| Dry-run (Test), lire le journal d’événements et les agrégations d’exécutions | Developer+ |
| Créer / éditer / supprimer des règles et des politiques | Developer+ |
Connexe
Valider les arguments
Assainir les réponses
Stages du firewall
response se compare à inbound, mcp et egress.