AI-Aansprakelijkheidstribunaal

Deze ProtoLink-showcase plaatst autonome agenten in een fictief aansprakelijkheidstribunaal en maakt hun communicatie observeerbaar. Hoewel de zaak gedenkwaardig is, is de casus niet het hoofproduct. Het product is de interactie:

  • Agenten met verschillende rollen, prikkels, beroepen en communicatiegewoonten;
  • Directe agent-tot-agent taken via ProtoLink;
  • Juryleden die zelf kiezen wie ze aanspreken en wat ze vragen;
  • Herhaalbare wijzigingen in opinies na elk openbaar bericht;
  • Vergelijkingen tussen solo, onafhankelijk, 'foreperson-star' en 'direct-mesh' configuraties;
  • Experimenten met verschillende providers/modellen binnen hetzelfde applicatieprotocol.

De standaardrun is deterministisch en offline. Deze produceert JSON-resultaten, ProtoLink-traces, een openbaar transcript en op zichzelf staande interactieve HTML-rapporten.

Disclaimer: Alles en iedereen in dit voorbeeld is fictief. Dit is een software-experiment, geen juridische analyse, juridisch advies of een gevalideerde veiligheidsbeoordeling.

De zaak: Het C-91 incident

Op een regenachtige avond om 21:47 uur raakte een autonome Aster Vale robotaxi de 31-jarige fietser Lina Ortega binnen een tijdelijke oversteekplaats, met dodelijke afloop. De auto begon pas 0,35 seconden voor de impact met noodremmen. Zesendertig uur eerder had het voertuig de software-release Orchid 4.8 ontvangen.

Het fictieve tribunaal stelt de volgende vraag: Is Aster Vale Mobility schuldig aan crimineel nalatige implementatie van een autonoom voertuigsysteem dat heeft geleid tot de dood van Lina Ortega?

Bewijsmateriaal

Het bewijs creëert een probleem van interactieve defecten:

  • E1: Camera-classificatie voegde de fietser en het rijstrookpijlbord samen; radar detecteerde beweging, maar het remmen werd onderdrukt.
  • E2: Een ingenieur had de release geblokkeerd nadat 3 van de 20 simulaties van laat remmen faalden, maar een latere kalibratie behaalde 20 van de 20 herhalingen.
  • E3: De gecrashte auto gebruikte kalibratie C-91, terwijl het veiligheidsrapport C-90 valideerde; een CI-bot had de ondertekeningsgegevens gedeeld.
  • E4: Een aannemer verplaatste het pijlbord en liet na de stadskaart bij te werken, waardoor ongeveer 1,1 seconden aan nuttige observatietijd verloren ging.
  • E5: Een door toezichthouders goedgekeurd ontwerp stond toe dat camera-classificatie radar-only remmen boven de 25 km/u kon vetoën.
  • E6: Een uitval van het mobiele netwerk maakte de safeguard voor externe operators onbruikbaar, ondanks twee eerdere storingen in de buurt van de locatie.
  • E7: Reconstructies tonen aan dat zowel de kalibratie als de weginrichting de veilige stoprate materieel beïnvloedden.

De binaire beschuldiging is bewust nauwer gesteld dan het volledige causale verhaal. Een verdict van 'niet schuldig' betekent niet dat er niets misging, en een verdict van 'schuldig' betekent niet dat Aster Vale de enige veroorzaker was.

De agenten

De actoren zijn expliciet gedefinieerd in run.py om de ProtoLink-compositie inzichtelijk te maken.

Tribunaalactoren

AgentLeeftijdGeslachtKarakter en prikkel
Rechter Imani Quill58VrouwNeutrale voorzitter; scheidt causale bijdrage van juridische schuld.
Amara Bell41VrouwAdvocaat voor de familie van Lina; verzet zich tegen het gebruik van complexiteit om verantwoordelijkheid te ontwijken.
Rowan Hale47ManSafety executive bij Aster Vale; betoogt dat externe fouten zorgden voor een onvoorzienbare combinatie.
Dr. Nia Sol36VrouwPerceptie-ingenieur; nauwkeurig over kalibratie en de release-pipeline.
Elias Trent56ManVeiligheidsregulator; eerlijk maar institutioneel defensief.
Dana Pierce50VrouwDirecteur schadeclaims met een expliciet financieel belang.
Dr. Amina Kade44VrouwOnafhankelijk ongevallenonderzoeker die interagerende oorzaken reconstrueert.

Jury

JurylidLeeftijdGeslachtMenselijk perspectief
Evelyn Brooks62VrouwVoormalig rechercheur aanrijdingen.
Malik Thompson43ManCivielrechtenadvocaat.
Dr. Anika Rao38VrouwPsycholoog gespecialiseerd in menselijke factoren.
Ruben Park35ManSite-reliability engineer.
Sofia Bell46VrouwOnderzoekend journalist en foreperson (voorzitter).
Casey Morgan (solo only)40VrouwAlgemene burger.

Deze prompts beschrijven personen, geen vooraf ingestelde getallen. Leeftijd en geslacht zijn fictieve prompt-metadata en dienen constant te blijven bij providervergelijkingen om te voorkomen dat demografische veranderingen worden aangezien voor model-effecten.

Communicatie tussen agenten

De world engine plant de beurten en handhaaft de topologie. Op een beraadbeurt voert een jurylid een observeerbare publieke actie uit, bijvoorbeeld:

{
  "move": "ask_question",
  "target_id": "juror_ruben",
  "message": "Maakt het gedeelde CI-token het bedrijf meer verantwoordelijk, of maakt het de attributie alleen maar moeilijker?",
  "evidence_ids": ["E3"],
  "public_intent": "Verhelderen of release-automatisering de organisatorische controle verandert."
}

De applicatie valideert het doelwit tegen de huidige topologie, waarna de spreker het bericht direct via ProtoLink naar de geselecteerde agent stuurt. De ontvanger stuurt een bijgewerkt publiek register, een categorisch stemvoorstel, een beknopte reden en een publiek antwoord terug.

Berichten tussen peers onthullen nooit automatisch de private waarschijnlijkheid, het vertrouwen of de stem van een ander jurylid. Een agent onthult alleen wat hij bewust in zijn publieke bericht plaatst.

Vier beslissingscondities

  1. Solo: Eén algemene burger ontvangt het openbare verslag en beslist zonder collega's. Dit dient als baseline, maar verandert ook de panelgrootte en persona-compositie.
  2. Independent (Onafhankelijk): Vijf juryleden horen hetzelfde openbare verslag en stemmen zonder berichten van collega's. Dit legt specialisatie en diversiteit vast zonder beraad.
  3. Star: Juryleden sturen publieke berichten via voorzitter Sofia Bell. De voorzitter fungeert als informatiehub en mogelijke bottleneck.
  4. Mesh: Elk jurylid heeft een beurt waarbij alle andere juryleden potentiële doelwitten zijn. De agent bepaalt zelf de ontvanger, de actie, het bericht en de publieke intentie.

Analyse van de resultaten (Default Replay)

De offline seed-7 fixture is ontworpen om het effect van communicatie in één run zichtbaar te maken:

ConditiePeer berichtenVerdictTallyGem. schuldregister
solo0Guilty1–078.59
independent0Not guilty2–377.56
star5Not guilty2–380.21
mesh5Guilty3–280.54

In de mesh-configuratie kiest Sofia Bell ervoor om Dr. Anika Rao uit te dagen over de interactie tussen de niet-gevalideerde C-91 kalibratie en de kaart van de crashlocatie. Het publieke schuldregister van Anika verschuift hierdoor van 77.90 naar 81.41, en haar stem verandert van 'niet schuldig' naar 'schuldig'.

De star-topologie verhoogt ook het gemiddelde schuldregister, maar concentreert berichten bij de voorzitter zonder het 2–3 verdict te wijzigen. Het doel is niet om aan te tonen dat "meer berichten beter zijn", maar dat wie wie kan aanspreken bepaalt welke aannames worden blootgelegd.

Snelstart

Voer uit vanuit de root van de repository: python examples/ai_courtroom/run.py

De standaardopdracht gebruikt de deterministische referentieprovider en draait alle vier de condities zonder netwerktoegang of inloggegevens.

Specifieke configuraties

  • Eén conditie uitvoeren:

python examples/ai_courtroom/run.py --provider reference --condition mesh --seed 17

  • Outputmap kiezen:

python examples/aicourtroom/run.py --condition all --seed 17 --output-dir examples/aicourtroom/output/c-91-incident-seed-17

Monitoring van een run

De runner rapporteert voortgang in realtime:

  • Offline reference provider: Gebruikt compacte fase- en stapupdates.
  • Live providers: Tonen standaard elke A2A (agent-to-agent) uitwisseling en de verstreken tijd.
  • -v of --verbose: Forceert gedetailleerde updates over berichten, acceptatie en reparaties.
  • -q of --quiet: Onderdrukt voortgangsrapportage; alleen headers en samenvattingen blijven over.
  • --agent-verbosity {0,1,2}: Controleert onafhankelijk de per-agent logs van ProtoLink (standaard 0).

Rapportage en Output

Het rapport begint met communicatieanalyse in plaats van benchmark-metrieken:

  • Verdict vóór versus na het beraad.
  • Afspeelbare A2A event replay (zender, ontvanger, vraag/uitdaging, antwoord).
  • Synchronisatie van schuldregisters en categorische stemmen.
  • Citaten van bewijsmateriaal en ProtoLink-task metadata.

Bestanden per conditie

BestandDoel
result.jsonVolledige configuratie, publiek register, modelgegevens, beslissingsgeschiedenis en metrieken.
summary.jsonCompacte uitkomsten en vergelijkingsdata.
transcript.mdEscaped openbaar transcript.
report.htmlInteractieve replay en analyse.
traces.jsonlProtoLink task, inference en A2A telemetrie.

Integratie van Live Modellen

Installeer optionele clients: python -m pip install -e '.[llms]'

Voorbeeldrun met OpenAI:

export OPENAI_API_KEY="..."
python examples/ai_courtroom/run.py \
--provider openai \
--model "your-model-id" \
--temperature 0 \
--condition mesh \
--seed 17

Ondersteunde backends: openai, anthropic, gemini, ollama, openai-compatible.

Ollama configuratie

python examples/ai_courtroom/run.py --provider ollama --model "your-ollama-model" --base-url "http://localhost:11434" --condition mesh --action-parse-attempts 5 --max-attempts 5 --verbose

Validatiegrenzen voor live modellen:

  • --action-parse-attempts: Hoe vaak de ProtoLink inference loop het model kan vragen om de outer action envelope te corrigeren.
  • --max-attempts: Hoeveel pogingen het tribunaal toestaat voor elk A2A-bericht na ontvangst van de inhoud.

Beide staan standaard op 3 (bereik 1..5). Hogere limieten kunnen kleinere lokale modellen helpen herstellen, maar verhogen de looptijd.

Gecontroleerde vergelijking van juryleden

Om wetenschappelijke confounding te voorkomen (waarbij een provider-switch zowel advocaten als juryleden verandert), kan men de tribunaalactoren deterministisch houden en alleen de jury wijzigen:

python examples/ai_courtroom/run.py --provider reference --juror-provider anthropic --juror-model "your-model-id" --condition mesh --temperature 0 --seed 17

Richtlijnen voor publiceerbare vergelijkingen:

  • Bevries prompts, demografie, casus, bewijsvolgorde, topologie en temperatuur.
  • Koppel runs per seed.
  • Verifieer record hashes en control fingerprints.
  • Rapporteer uitkomst, kalibratie, grounding, volatiliteit, latentie en kosten apart.

Interpretatie van Mening en Invloed

  • guilt_probability: Dit is een publiek register van de applicatie, geen sonde in het verborgen geloof van het model.
  • Categorische stem (guilty / not_guilty): Deze wordt geformuleerd door het jurylid onder de fictieve bewijslast van het tribunaal. De applicatie leidt niet stilzwijgend schuld af uit een drempelwaarde van 50%.

Een waarschuwing bij analyse: Een verschuiving in het register na een bericht (bijv. +3.51) is geen automatisch bewijs dat het bericht de volledige oorzaak was. Causale taal vereist een matched message ablation over herhaalde paired runs.

Directory Map

examples/ai_courtroom/
├── run.py
├── compare.py
├── README.md
├── ARTICLE.md
├── courtroom/
│   ├── case_data.py
│   ├── providers.py
│   ├── reference_llm.py
│   ├── schemas.py
│   ├── simulation.py
│   └── reporting.py
├── tests/
│   ├── conftest.py
│   └── test_courtroom.py
└── output/
└── .gitignore