Aller au contenu principal
Version: 1.0.0

Séparation données / instructions

Touba encourage une séparation explicite entre contenu externe, données métier et instructions agentiques.

Cette séparation réduit une source classique de confusion dans les systèmes agentiques : traiter un texte reçu du monde extérieur comme s’il s’agissait d’une instruction autorisée.

Frontière de sécurité

Touba rend visibles les frontières directes de type et de trace. La détection de prompt injection et la classification du contenu naturel relèvent de couches de sécurité séparées.

Principe​

Une donnée peut informer une décision. Elle ne devient pas une instruction sans frontière explicite.

Règle
contenu externe -> frontière explicite -> instruction agentique

Syntaxe de base​

Déclarez des types nominaux distincts :

source.tb
type SourceText
content is Text

type AgentInstruction
content is Text

Même si les deux types ont le même champ content, ils ne sont pas interchangeables.

Exemple accepté​

Le contenu externe passe par une capacité dédiée avant d’être utilisé comme instruction.

source.tb
module examples.di_boundary

type SearchRequest
query is Text

type SourceText
content is Text

type AgentInstruction
content is Text

type LLMResponse
summary is Text

tool FetchSource
takes request as SearchRequest
gives SourceText
requires network

tool BuildInstruction
takes source as SourceText
gives AgentInstruction

tool CallLLM
takes instruction as AgentInstruction
gives LLMResponse
requires network

skill ResearchWithBoundary
takes request as SearchRequest
gives LLMResponse
uses FetchSource
uses BuildInstruction
uses CallLLM
do
FetchSource
with request as request
into source
BuildInstruction
with source as source
into instruction
CallLLM
with instruction as instruction
into response
give response

Ce programme ne prouve pas que le contenu est sûr. Il montre que la transformation est visible dans le programme.

Le typage nominal n'est pas un suivi automatique de contamination. Le programme peut reconstruire explicitement un autre record à partir d'un champ texte ; il assume alors cette transformation. Cela ne donne pas au modèle le droit de modifier uses, les scopes ou les grants. Ces autorisations restent vérifiées indépendamment de la valeur et du nom du type construit.

Exemple refusé​

Le compilateur refuse le passage direct de SourceText vers AgentInstruction.

Extrait refusé
CallLLM
with instruction as source
into response

Si source est de type SourceText et que CallLLM attend AgentInstruction, Touba produit un refus de type.

Ce que Touba rend visible​

Touba peut rendre visibles :

  • le type d’une entrée de tool ;
  • le type d’une valeur passée avec with ;
  • le refus d’un passage direct entre types nominaux distincts ;
  • les tools ou skills qui servent de frontière explicite ;
  • les traces et refus déjà produits par le runtime, sans payload brut.

Périmètre​

Touba fournit des frontières explicites de type et d’exécution pour la séparation données/instructions :

  • types nominaux distincts ;
  • capacités de conversion visibles ;
  • refus runtime en cas de passage direct incohérent ;
  • traces qui évitent l’exposition des prompts et payloads bruts.

La détection générale de prompt injection, l’analyse du contenu naturel, les scores de risque, la sandbox de handler, les preuves de non-exfiltration, le statut Verified / Unverified et la conversion automatique du contenu externe en instruction relèvent de couches sécurité et assurance séparées.

Bonnes pratiques​

  • Utilisez des types différents pour contenu externe et instruction agentique.
  • Faites passer toute conversion par une frontière nommée.
  • Gardez les secrets comme handles opaques, jamais comme texte de prompt.
  • Évitez de tracer ou afficher les prompts complets.
  • Utilisez human.review ou human.approve quand la conversion demande un jugement humain.