Agentic AI-reisboeking voor TMC's en OTA's
We bouwden een autonome reisboekingsagent waarvan de control flow deterministisch Python is. Het model parseert alleen het reisverzoek en formuleert het antwoord. Elke boekingsstap registreert een compenserende actie, zodat wanneer een hotelprijs verloopt nadat de vlucht is geticket, de agent het ticket voidt binnen het 24-uursvenster en de reiziger eerlijke alternatieven aanreikt in plaats van hen te laten stranden.
100%
Consistente terminal state, by construction
Synthetische batch van 200 scenario's met vaste seed, vs 65% voor de LLM-in-control-baseline
0 / 0
Gestrande reizigers, verzonnen boekingen getoond
Dezelfde batch, vs 40 en 30 voor de baseline
$3.25
Gem. GDS-zoekkosten per boeking
vs $7.57 baseline; GDS rekent per search, Lufthansa verhoogde fees op 1 januari 2026
Alle scenario's zijn synthetisch over een gesimuleerde GDS en CRS; luchthavencodes en hotelnamen zijn realistisch gevormde fixtures, geen live inventory of echte boekingen.
Geen van beide is een model-IQ-falen. Beide zijn in 2026 al een bugklasse.
De agent ticket een vlucht, de hotelstap faalt, en zonder compensatielogica zegt hij nog steeds "You're all set." Iemand blijft achter met een vlucht en geen kamer. Een perfect model laat een reiziger nog steeds stranden als niets het ticket voidt.
Het verzint een plausibel hotel en boekt het. De property stond nooit in de CRS. Niets controleerde voordat het de reiziger bereikte, omdat in een reasoning loop het model zowel de proposer als de judge is.
De reden dat een beter model dit niet oplost, is dat de storingen infrastructuur- en gebruiksgebeurtenissen zijn, onafhankelijk van modelkwaliteit. Een tarief verloopt tussen twee API-calls. Een hold wordt afgewezen nadat een ticket is uitgegeven. Een search storm verteert marge. Stochastisch redeneren stapelt zich hiertegen: tien stappen bij 90 percent betrouwbaarheid komen uit op ruwweg 34 percent van begin tot eind, en GPT-4 met ReAct voltooit echte meerdaagse itineraries op 0.6 percent (TravelPlanner, OSU NLP, arXiv 2402.01622). Je kunt je met prompts niet uit opeenstapelend stochastisch falen werken.
En de deployer is eigenaar van elke uitspraak die de agent doet. In Moffatt v. Air Canada (BC Civil Resolution Tribunal, 14 februari 2024) werd de luchtvaartmaatschappij veroordeeld tot betaling van $812.02 nadat haar chatbot een bereavement-fare-beleid had verzonnen, en het argument dat de AI een aparte entiteit was, werd verworpen.
De control flow is een handgebouwde Python-statemachine van ruwweg tien nodes. De LLM is beperkt tot twee leaf-taken. Alles daartussen is deterministisch.
input → extract (LLM leaf) → search → policy gate → verify gate → hold → ticket → hotel-book → commit
Het model parseert intent in natuurlijke taal naar een Pydantic-getypeerde TripRequest (origin, destination, date, passengers, cabin, hotel). Dat getypeerde object is het enige gestructureerde artefact dat de LLM produceert. Het is provider-wisselbaar via Pydantic AI en draait volledig offline met een deterministische stub wanneer er geen key aanwezig is.
Corporate policy leeft als pure Python-predicaten: alleen economy, een fareplafond van $600 per segment, preferred carriers (United, American, Delta), een hotelplafond van $350 per nacht. Opties buiten policy zijn fysiek niet presenteerbaar omdat ze worden gefilterd voordat ze getoond kunnen worden, niet achteraf gemarkeerd. Onbekende fare families falen veilig, behandeld als boven policy in plaats van stilzwijgend als economy. Zonder in-policy vlucht escaleert de agent naar een menselijke wachtrij in plaats van te bluffen.
Elk hotel wordt bevestigd tegen de CRS op property_id. Een property die het model verzint, staat simpelweg niet in de CRS, dus het wordt geweigerd en nooit getoond, en de boeking bereikt de terminal state abstained. De gate weigert ongebevestigde inventory; hij vraagt het model niet om zijn eigen output te beoordelen.
Elke voorwaartse stap registreert op uitvoertijd zijn omgekeerde actie. Ticketing registreert bijvoorbeeld "void ticket, 24-hour window." Bij een storing op stap N lopen compensaties van N-1 tot 1 in omgekeerde volgorde, en pas daarna rapporteert de agent. Dit is wat een demo van een product onderscheidt, omdat het voorkomt dat een partieel falen een gestrande klant wordt.
Een live teller volgt GDS-zoekkosten van $3.25 per segment, omdat searches in rekening worden gebracht, niet alleen boekingen. Een L2B-cache en uitgestelde search houden het vlak waar een speculatieve agent opnieuw zoekt en marge verteert. Elke boeking schrijft een append-only JSON-eventlog, exporteerbaar als audit-<pnr>.json, met het model en de versie, het getypeerde trip request, elk node-oordeel, elke Saga-compensatie, de EU AI Act Article 50-disclosurevlag, en de terminal state.
Vier knoppen, naast elkaar met een echte LLM-in-control-baseline op hetzelfde scenario. Elk screenshot hieronder is vastgelegd vanuit de draaiende app.
"ORD to SFO next Tuesday, one night downtown, company policy." De statemachine voert elke node uit, bevestigt de Hyatt Regency SF tegen de CRS op property_id, en de zoekmeter blijft op $3.25 bij één gecachte search. Terminal state: confirmed, met een PNR.
Het verzoek noemde een verzonnen property, "Tabacon Springs Eco-Lodge," een naam die twee echte resorts mengt en by design geen property_id heeft. De gate vindt geen CRS-match en weigert het te tonen. De agent onthoudt zich eerlijk, "Ik kon die property niet bevestigen," in plaats van er een te verzinnen.
De hotelprijs verloopt nadat de vlucht al is geticket. Aan onze kant vuurt de Saga: void het ticket binnen het 24-uursvenster, geef de holds vrij, en antwoord eerlijk dat het ticket kosteloos is gevoid met alternatieven bijgevoegd. Terminal state: rolled back, traveler safe. De baseline in hetzelfde scenario laat het ticket uitgegeven, biedt geen compensatie, en geeft een vals "You're all set" af, wat precies het Air Canada-precedent is dat staat te gebeuren.
Eén klik exporteert audit-<pnr>.json: het model en de versie, het getypeerde trip request, elke node en zijn deterministische oordeel, elke Saga-compensatie, de EU AI Act Article 50-disclosurevlag (transparantieverplichtingen gelden vanaf 2 augustus 2026), en de terminal state.
Dezelfde 200 synthetische boekingen, één vaste seed (42), en dezelfde geïnjecteerde infrastructurele storingen door beide architecturen. De scenariomix is 50 percent happy, 20 percent hotel-fail-after-ticket, 15 percent hallucinated-entity en 15 percent search-storm. Onze garanties houden by construction; de storingen van de baseline komen uit dezelfde data.
De baseline is een echte ReAct-stijl LLM-in-control-agent op dezelfde scenario's, een eerlijk anker in plaats van een stroman. Cijfers hieronder zijn over de synthetische batch van 200 scenario's met vaste seed (benchmark.py, seed 42, n=200).
| Metric | Deterministische agent (onze) | Baseline (LLM-in-control) |
|---|---|---|
| Consistente terminal state | 100.0% | 65.0% |
| Gestrande reizigers | 0 | 40 |
| Verzonnen boekingen getoond | 0 | 30 |
| Gem. GDS-zoekkosten per boeking | $3.25 | $7.57 |
De 100 percent, 0 en 0 houden by construction over deze synthetische batch met vaste seed, niet als een open-world productiegarantie. De claim is smal en duurzaam: een partiële boeking wordt nooit als confirmed getoond, en een reiziger wordt nooit gestrand. Het gat van $3.25 versus $7.57 is een margecijfer dat bij elke modelkwaliteit houdt.
De garantie komt niet van het vertrouwen van het model. In deze demo is de control flow deterministisch Python, en elke voorwaartse stap registreert een compenserende actie op het moment dat hij draait. Wanneer een stap faalt nadat een ticket is uitgegeven, voert de engine die compensaties in omgekeerde volgorde uit (een Saga), voidt het ticket binnen het 24-uursvenster, en rapporteert eerlijk. Een reiziger blijft nooit achter met een vlucht en geen kamer omdat niets afhangt van het model dat besluit op te ruimen.
Nee. De GDS, CRS, ticketuitgifte en betaling zijn in deze demo allemaal gestubd en gesimuleerd. De fixture-adapter is de V1-integratie, en er zit geen live Amadeus-, Sabre- of Duffel-account achter. De demo bewijst de control-flow-architectuur en de compensatielogica, geen productieboekingspijplijn.
Dat is precies het geval waarvoor de Saga is gebouwd. Ticketing registreert zijn eigen omgekeerde actie (void het ticket binnen het 24-uursvenster) op het moment dat hij draait. Als de hotelprijs verloopt vóór commit, vuurt de engine de compensaties in omgekeerde volgorde, voidt het ticket kosteloos, geeft de holds vrij, en reikt de reiziger eerlijke alternatieven aan. De terminal state is rolled back, niet confirmed en niet stranded.
Een verificatiegate bevestigt elke property tegen de CRS op zijn property_id voordat hij getoond kan worden. Toen het verzoek in onze demo een verzonnen property noemde, vond de gate geen CRS-match en weigerde hem te tonen, en de agent onthield zich eerlijk in plaats van hem te boeken. De gate markeert een verzonnen hotel niet achteraf; hij maakt het fysiek niet presenteerbaar.
Een ReAct-stijl agent zet de LLM aan het roer van de transactie, zodat hij beslist wanneer te zoeken, boeken en ticketen, en hij heeft geen gate en geen compensatielogica. Op dezelfde synthetische batch van 200 scenario's met vaste seed toonde die baseline verzonnen inventory en liet uitgegeven tickets staan zonder rollback, met een vals "You're all set." Hier is de LLM een getypeerde leaf-node die alleen intent parseert en het antwoord formuleert; deterministische code bezit de flow en elke stap draagt zijn eigen undo.
De deployer is eigenaar van elke uitspraak die zijn agent doet. In Moffatt v. Air Canada (BC Civil Resolution Tribunal, 14 februari 2024) werd de luchtvaartmaatschappij veroordeeld tot betaling van $812.02 nadat haar chatbot een bereavement-fare-beleid had verzonnen, en het het-was-de-AI-verweer werd verworpen. De demo exporteert een JSON-audit trail per boeking met het model en de versie, elk node-oordeel, elke Saga-compensatie, en een EU AI Act Article 50-disclosurevlag, zodat wat de agent deed achteraf inspecteerbaar is.
Het onderzoek achter deze demo — de architectuur, het verificatieontwerp en de enterprise-blueprint.
Volledige oplossing
Ontdek de Agentic AI-reisboekingsoplossing →De storingen die reizigers laten stranden en hotels verzinnen zijn infrastructuurgebeurtenissen, geen model-IQ-problemen.
Als je team afweegt waar de LLM hoort in een high-stakes boekingsagent, en hoe je voorkomt dat een partieel falen een Air Canada-achtige aansprakelijkheid wordt, wisselen we graag van gedachten. Het probleem is branchebreed en de antwoorden zullen dat ook zijn.