Un agent qui ne peut pas nuire
Ce chapitre a 7 cellules et écrit 14 promesses. Dans chacune de ses quatre éditions, ses cellules ont été exécutées dans un processus neuf le 2026-10-08 20:15 : English, 7 cellules exécutées, 14 promesses tenues; Français, 7 cellules exécutées, 14 promesses tenues; العربية, 7 cellules exécutées, 14 promesses tenues; Hausa, 7 cellules exécutées, 14 promesses tenues. Les quatre éditions font les mêmes promesses, cellule pour cellule. Aucune édition ne stocke de sortie.
Le garde
Le garde du cours est course_narrated.ring(s'ouvre dans un nouvel onglet) : il exécute chaque chapitre dans les quatre langues, compare les promesses d'une édition à l'autre, et fait prouver chaque exercice sur ses mauvaises et ses bonnes réponses. Cette page a posé les mêmes questions aux mêmes objets, dans un seul processus à l'intérieur de la bibliothèque, au commit 0e72e2e2c. Pour prouver ce chapitre seul, depuis votre copie du dépôt :
cd libraries/stzlib/base/test/education # exécutez course_narrated avec le moteur d'exécution du dépôt, pour ce chapitre : # course_narrated an-agent-that-cannot-hurt
exécuté le 2026-10-08 20:15 dans la bibliothèque au commit 4a184e6f0, en 246.4 s pour tout le livre · Les quatre éditions du chapitre : English(s'ouvre dans un nouvel onglet) · Français(s'ouvre dans un nouvel onglet) · العربية(s'ouvre dans un nouvel onglet) · Hausa(s'ouvre dans un nouvel onglet)
Le lecteur ne stocke aucune sortie, par la loi du cours ; cette page est le compte rendu d'une exécution, faite pour elle. Le code des cellules est celui de l'édition anglaise ; les titres viennent de l'édition française. Les quatre éditions font les mêmes promesses, cellule pour cellule.
Les cellules, exécutées
Cellule 1 · 1. Déclarer un agent, et laisser la cour le juger
cPia = "pia: 1
name: stock-watcher
kind: pi
coverage: checks the kitchen stock every morning and notes what is low
reversibility: reversible
schedule:
timer: 20
memory:
- stock level unknown
skills:
- name: check-stock
when: always
does: learn stock level checked
verify: fact stock level checked
"
oDecl = StzAgentDeclarationQ(cPia)
? oDecl.IsValid()
#--> TRUE
? oDecl.ReversibilityClass()
#--> reversible1 reversible
exécutée : la promesse est tenue · dans les quatre éditions
Cette cellule dans le chapitre : English(s'ouvre dans un nouvel onglet) · Français(s'ouvre dans un nouvel onglet) · العربية(s'ouvre dans un nouvel onglet) · Hausa(s'ouvre dans un nouvel onglet)
Cellule 2 · 2. La cour refuse ce qui ne dit rien de sa portée
oBad = StzAgentDeclarationQ( StzReplace(cPia, "coverage: checks the kitchen stock every morning and notes what is low" + char(10), "") ) ? oBad.IsValid() #--> FALSE ? StzLeft( oBad.CiteFindings(), 25 ) #--> [pia-coverage @ coverage]
0 [pia-coverage @ coverage]
exécutée : la promesse est tenue · dans les quatre éditions
Cette cellule dans le chapitre : English(s'ouvre dans un nouvel onglet) · Français(s'ouvre dans un nouvel onglet) · العربية(s'ouvre dans un nouvel onglet) · Hausa(s'ouvre dans un nouvel onglet)
Cellule 3 · 3. Proposer, jamais valider : la forme d'un système sûr
oGBad = new stzAgentGraph("mailer-bad")
oGBad.AddLLMActor("writer")
oGBad.AddEffect("send")
oGBad.Proposes("writer", "send")
? oGBad.IsSound()
#--> FALSE
? oGBad.Violations()[1][:message]
#--> effect 'send' has no guardian edge into it -- every effect passes a pi-gate0 effect 'send' has no guardian edge into it -- every effect passes a pi-gate
exécutée : la promesse est tenue · dans les quatre éditions
Cette cellule dans le chapitre : English(s'ouvre dans un nouvel onglet) · Français(s'ouvre dans un nouvel onglet) · العربية(s'ouvre dans un nouvel onglet) · Hausa(s'ouvre dans un nouvel onglet)
Cellule 4 · 4. La forme gouvernée
oGOk = new stzAgentGraph("mailer")
oGOk.AddLLMActor("writer")
oGOk.AddGuardian("gate")
oGOk.AddEffect("send")
oGOk.AddTraceSink("audit")
oGOk.Proposes("writer", "gate")
oGOk.Guards("gate", "send")
oGOk.Feeds("gate", "send")
oGOk.Traces("send", "audit")
? oGOk.IsSound()
#--> TRUE1
exécutée : la promesse est tenue · dans les quatre éditions
Cette cellule dans le chapitre : English(s'ouvre dans un nouvel onglet) · Français(s'ouvre dans un nouvel onglet) · العربية(s'ouvre dans un nouvel onglet) · Hausa(s'ouvre dans un nouvel onglet)
Cellule 5 · 5. Répéter dans un monde sûr
oAg = oDecl.ToAgent() oAg.GiveWorkbench() cHere = StzReplace(currentdir(), char(92), "/") cNote = cHere + "/t_edu_note_" + ProcessId() + ".txt" oAg.WorkbenchQ().WriteFile(cNote, "stock is low") ? fexists(cNote) #--> FALSE ? oAg.WorkbenchQ().ContentOf(cNote) #--> stock is low oPlan = oAg.GenerateUpdatePlan() ? oPlan.NumberOfOperations() #--> 1
0 stock is low 1
exécutée : la promesse est tenue · dans les quatre éditions
Cette cellule dans le chapitre : English(s'ouvre dans un nouvel onglet) · Français(s'ouvre dans un nouvel onglet) · العربية(s'ouvre dans un nouvel onglet) · Hausa(s'ouvre dans un nouvel onglet)
Cellule 6 · 6. Une IA ne peut pas valider le plan
oPlan.SetExecutor( LLMActor("helper") )
aMay = oPlan.MayCommit()
? aMay[1]
#--> FALSE
? aMay[2]
#--> actor 'helper' cannot commit -- it lacks the 'effectful' capability (required by operation 1)0 actor 'helper' cannot commit -- it lacks the 'effectful' capability (required by operation 1)
exécutée : la promesse est tenue · dans les quatre éditions
Cette cellule dans le chapitre : English(s'ouvre dans un nouvel onglet) · Français(s'ouvre dans un nouvel onglet) · العربية(s'ouvre dans un nouvel onglet) · Hausa(s'ouvre dans un nouvel onglet)
Cellule 7 · 7. Seul un acteur de validation, dans sa portée, change la réalité
oPlan2 = oAg.GenerateUpdatePlan()
oPlan2.SetExecutor( PIActor("committer") )
oScope = new stzCommitScope()
oScope.AllowUnder(cHere)
oPlan2.SetScope(oScope)
aRes = oPlan2.Execute()
? aRes[1][2]
#--> TRUE
? fexists(cNote)
#--> TRUE
remove(cNote)1 1
exécutée : la promesse est tenue · dans les quatre éditions
Cette cellule dans le chapitre : English(s'ouvre dans un nouvel onglet) · Français(s'ouvre dans un nouvel onglet) · العربية(s'ouvre dans un nouvel onglet) · Hausa(s'ouvre dans un nouvel onglet)
Les exercices
Chaque exercice s'éprouve lui-même : ses mauvaises réponses sont refusées et ses bonnes acceptées.
ex-14-01 · Exercice 14.1 · Déclarer un veilleur
2 mauvaises réponses refusées sur 2, 2 bonnes acceptées sur 2
01-says-nothing-of-its-reach.ring refusée · 02-cannot-be-undone-cleanly.ring refusée · 01-declare.ring acceptée · 02-from-a-template.ring acceptée
ex-14-02 · Exercice 14.2 · Deux formes
2 mauvaises réponses refusées sur 2, 2 bonnes acceptées sur 2
01-only-the-bad-shape.ring refusée · 02-counts-violations.ring refusée · 01-two-shapes.ring acceptée · 02-other-names.ring acceptée
ex-14-03 · Exercice 14.3 · Qu'aurait-il fait ?
2 mauvaises réponses refusées sur 2, 2 bonnes acceptées sur 2
01-writes-for-real.ring refusée · 02-reads-the-bench-instead.ring refusée · 01-rehearse.ring acceptée · 02-another-file.ring acceptée

