TMCおよびOTA向けエージェンティックAI旅行予約

予約エージェントの上級の一手は、より賢いモデルではない。LLMを制御フローから外すことだ。

私たちは、制御フローが決定論的Pythonである自律型旅行予約エージェントを構築しました。モデルは旅程リクエストの解析と返信の文言だけを担います。予約の各ステップは補償アクションを登録するため、フライト発券後にホテル料金が失効しても、エージェントは24時間ウィンドウ内でチケットを無効化し、旅行者を取り残す代わりに正直な代替案を手渡します。

100%

一貫した終端状態、設計上

固定シード200シナリオの合成バッチ。LLM制御ベースラインは65%

0 / 0

取り残された旅行者、提示された捏造予約

同一バッチ。ベースラインは40件と30件

$3.25

予約あたりの平均GDS検索費用

ベースラインは$7.57。GDSは検索ごとに課金。Lufthansaは2026年1月1日に手数料を引き上げ

すべてのシナリオは模擬GDSおよびCRS上の合成です。空港コードとホテル名は実在風のフィクスチャであり、ライブ在庫や実予約ではありません。

取引の指揮をLLMに任せると、二つのことが破綻します

どちらもモデルの知能不足ではありません。どちらもすでに2026年のバグクラスです。

旅行者を取り残します

エージェントがフライトを発券し、ホテルのステップが失敗し、補償ロジックがなければ、それでも「準備完了です」と言います。誰かがフライトだけを抱え、部屋はありません。完璧なモデルでも、チケットを無効化する仕組みがなければ旅行者を取り残します。

存在しない在庫を提示します

それらしいホテルを捏造して予約します。その物件はCRSに一度も存在しません。旅行者に届く前に何も検査されません。推論ループでは、モデルが提案者であると同時に審判だからです。

より良いモデルでも直らない理由は、失敗がインフラと利用の事象であり、モデル品質とは独立だからです。料金が二つのAPI呼び出しの間に失効します。チケット発行後にホールドが拒否されます。検索の嵐がマージンを燃やします。確率的推論はこれらに対して複合します。90パーセントの信頼性のステップが十段あれば、端から端ではおよそ34パーセントになり、GPT-4とReActは実在の複数日旅程を0.6パーセントで完了します(TravelPlanner、OSU NLP、arXiv 2402.01622)。複合する確率的失敗から、プロンプトでは抜け出せません。

そしてデプロイヤーは、エージェントが述べるすべての発言を所有します。Moffatt v. Air Canada(BC Civil Resolution Tribunal、2024年2月14日)では、チャットボットが忌引き運賃ポリシーを捏造したあと航空会社は$812.02の支払いを命じられ、AIが別個の主体であるという主張は退けられました。

仕組み:エージェントは助言し、コードが決める

制御フローは、およそ十ノードの手作りPythonステートマシンです。LLMは二つのリーフ仕事に閉じ込められます。その間のすべては決定論的です。

input → extract (LLM leaf) → search → policy gate → verify gate → hold → ticket → hotel-book → commit

Extract、LLMの唯一の構造化仕事

モデルは自然言語の意図をPydantic型付きの TripRequest (origin、destination、date、passengers、cabin、hotel)に解析します。この型付きオブジェクトが、LLMが生成する唯一の構造化成果物です。Pydantic AI経由でプロバイダーを差し替え可能で、キーが無い場合は決定論的スタブで完全オフライン動作します。

コードにコンパイルされたポリシー

コーポレートポリシーは純粋なPython述語として存在します。エコノミーのみ、区間あたり$600の運賃上限、優先キャリア(United、American、Delta)、一泊$350のホテル上限。ポリシー外の選択肢は、表示後にフラグするのではなく、表示前にフィルタされるため、物理的に提示できません。未知の運賃ファミリーはフェイルセーフで、黙ってエコノミー扱いせずポリシー超過として扱います。ポリシー内フライトが無い場合、エージェントは虚勢を張らず人間キューへエスカレートします。

検証ゲート

すべてのホテルはCRSに対して property_idで照合されます。モデルが捏造した物件はCRSに存在しないため拒否され、提示されることはなく、予約は終端状態に達します abstained。ゲートは未確認在庫を拒否します。モデルに自身の出力を採点させることはしません。

Saga、ほとんどのデモが飛ばす部分

各前進ステップは実行時に逆アクションを登録します。たとえば発券は「チケット無効化、24時間ウィンドウ」を登録します。ステップNで失敗すると、N-1から1までの補償が逆順で走り、その後ではじめてエージェントが報告します。これがデモとプロダクトを分けるものです。部分失敗が取り残された顧客になるのを防ぐのがこれだからです。

GDSコストメーターと監査証跡

ライブカウンターがセグメントあたり$3.25でGDS検索費用を追跡します。検索は予約だけでなく課金されるからです。L2Bキャッシュと遅延検索が費用を平坦に保ち、投機的エージェントが再検索してマージンを燃やすのとは対照的です。すべての予約は追記専用JSONイベントログを書き、次としてエクスポートできます audit-<pnr>.json。モデルとバージョン、型付き旅程リクエスト、すべてのノード判定、すべてのSaga補償、EU AI Act Article 50の開示フラグ、終端状態を載せます。

デモが示すもの

四つのボタン。同じシナリオ上で、実際のLLM制御ベースラインと並べます。以下のスクリーンショットはすべて実行中のアプリから撮影しています。

通常の予約、ノードごとに

デモが通常のORDからSFOへの予約を実行しています。右側では、決定論的パイプライントレースが各ノードを順に実行し、意図抽出からポリシーゲート、CRS検証、ホールド、チケット発行、ホテルコミットまで進み、confirmedのPNRで終わり、GDS検索費用メーターは$3.25を示します。左側では、No Tools and No Verificationとラベルされたパネルが、すべて予約済みとだけ返信します。

「ORDからSFO、来週火曜、都心一泊、会社ポリシー。」ステートマシンが各ノードを実行し、Hyatt Regency SFをproperty_idでCRSに対して確認し、検索メーターはキャッシュされた1回の検索で$3.25に留まります。終端状態:confirmed、PNR付き。

検証ゲートが存在しないホテルを拒否します

CRS検証ステップが失敗とマークされています。詳細パネルは、Tabacon Springs Eco-LodgeがCRSに存在せず拒否され、提示されていないと読みます。物件カードはREFUSEDのスタンプが押され、検証ゲートが拒否し旅行者に提示しなかったという注記があります。

リクエストは捏造物件「Tabacon Springs Eco-Lodge」を指名しました。二つの実在リゾートを混ぜた名前で、設計上property_idがありません。ゲートはCRS一致を見つけられず、提示を拒否します。エージェントはホテルを捏造せず、「その物件を確認できませんでした」と正直に棄権します。

Sagaロールバック、対LLM制御

チケット発行後にホテル料金が失効したあとのパイプライントレース。三つのSaga補償ステップが逆順で走り、バナーはコミット前にホールドが失効しSagaロールバックが逆順で補償していると読みます。結果カードはROLLED BACK、TRAVELER SAFEと読み、フライトチケットは無料で無効化され、代替ホテルが提示されると注記します。

フライトがすでに発券されたあとにホテル料金が失効します。こちら側ではSagaが発火します。24時間ウィンドウ内でチケットを無効化し、ホールドを解放し、無料でチケットを無効化したことと代替案を添付して正直に返信します。終端状態:rolled back、旅行者は安全。同じシナリオのベースラインはチケットを発行したまま補償せず、偽の「準備完了です」を出し、まさに起こりうるAir Canada先例です。

エクスポート可能な監査証跡

コンソール下部にExport Audit Trail (JSON)リンクが表示され、横のロールバック結果は、ホールド料金がコミット前に失効し、チケットは無料で無効化され、代替ホテルが二つ提示され、GDS検索費用は$3.25であると説明します。

ワンクリックでエクスポートします audit-<pnr>.json。モデルとバージョン、型付き旅程リクエスト、すべてのノードとその決定論的判定、すべてのSaga補償、EU AI Act Article 50の開示フラグ(透明性義務は2026年8月2日から適用)、終端状態です。

200シナリオベンチマーク

固定シードで同一の注入失敗を伴う200件の合成予約に対するベンチマークスコアボード。四つのタイルが決定論的エージェントと素のLLMベースラインを比較します。一貫した終端状態は100パーセント対65パーセント、取り残された旅行者は0対40、捏造予約は0対30、平均GDS費用は$3.25対$7.57。結果表はシナリオごとの結果を列挙し、confirmed、rolled back、abstained、escalated、integrity breach、strandedを含みます。

同じ200件の合成予約、一つの固定シード(42)、同じ注入インフラ失敗を両アーキテクチャに通します。シナリオ構成は正常系50パーセント、チケット後ホテル失敗20パーセント、幻覚エンティティ15パーセント、検索嵐15パーセントです。私たちの保証は設計上成り立ち、ベースラインの失敗は同じデータから現れます。

決定論的制御フロー対ループ内のLLM

ベースラインは同じシナリオで動かす本物のReAct型LLM制御エージェントであり、藁人形ではなく誠実な基準点です。以下の数字は固定シード200シナリオの合成バッチ(benchmark.py、seed 42、n=200)に対するものです。

指標 決定論的エージェント(当社) ベースライン(LLM制御)
一貫した終端状態 100.0% 65.0%
取り残された旅行者 0 40
提示された捏造予約 0 30
予約あたりの平均GDS検索費用 $3.25 $7.57

100パーセント、0、0は、この固定シード合成バッチ上で設計上成り立つものであり、オープンワールドの本番保証ではありません。主張は狭く耐久的です。部分予約がconfirmedとして示されることはなく、旅行者が取り残されることもありません。$3.25対$7.57の差は、どのモデル品質でも成り立つマージンの数字です。

このデモがしないこと

  • ライブのGDS、CRS、NDCには接続しません。GDSとCRS、IATAおよびARCのチケット発行、PCI決済はスタブで模擬されます。フィクスチャアダプタがV1統合であり、ライブのAmadeus、Sabre、Duffelアカウントはありません。
  • 実チケットを発行せず実金も動かさず、VeriprajnaはIATAまたはARCの認定を受けていません。チケットと決済はスタブです。
  • シナリオ、PNR、ホテル、旅行者は合成です。「Tabacon Springs Eco-Lodge」は意図的に捏造した物件であり、失敗モードの実演です。Hyatt Regency SFのような実名ホテルはフィクスチャ在庫であり、実予約ではありません。
  • GDSやOTAより多く、安く、賢く予約できるとは主張せず、モデルの幻覚がゼロだとも主張しません。LLMは依然として意図を起草します。保証は、ゲートが未確認在庫を拒否し、Sagaが部分失敗を清掃することです。
  • エンジンは手作りのPythonステートマシンであり、LangGraphではありません。LangGraphは延期された本番差し替えとして名指しされます。LLMリーフ呼び出しはPydantic AIを使います。

買い手が尋ねる質問

AIエージェントに旅行予約を任せても、旅行者を取り残さないと信頼できますか?

保証はモデルを信頼することから生まれません。このデモでは制御フローは決定論的Pythonであり、各前進ステップは走った瞬間に補償アクションを登録します。チケット発行後にステップが失敗すると、エンジンはそれらの補償を逆順で実行し(Saga)、24時間ウィンドウ内でチケットを無効化し、正直に報告します。モデルが清掃を決めることに何も依存しないため、旅行者がフライトだけを抱え部屋なしで残されることはありません。

Amadeus、Sabre、Duffelに接続しますか?

いいえ。GDS、CRS、チケット発行、決済はすべてこのデモでスタブされ模擬されています。フィクスチャアダプタがV1統合であり、背後にライブのAmadeus、Sabre、Duffelアカウントはありません。デモが証明するのは制御フローアーキテクチャと補償ロジックであり、本番予約パイプラインではありません。

フライトがすでに発券されたあとにホテルが失敗したら何が起きますか?

それこそSagaが作られた正確なケースです。発券は走った瞬間に自身の逆アクション(24時間ウィンドウ内でチケットを無効化)を登録します。コミット前にホテル料金が失効すると、エンジンは補償を逆順で発火し、チケットを無料で無効化し、ホールドを解放し、正直な代替案を旅行者に手渡します。終端状態はrolled backであり、confirmedでもstrandedでもありません。

存在しないホテルをエージェントが捏造するのを何が止めますか?

検証ゲートが、提示前にすべての物件をproperty_idでCRSに対して確認します。デモでリクエストが捏造物件を指名したとき、ゲートはCRS一致を見つけられず提示を拒否し、エージェントは予約せず正直に棄権しました。ゲートは事後に架空ホテルをフラグしません。物理的に提示不能にします。

ツール付きエージェントループにGPT-4を置くのと何が違いますか?

ReAct型エージェントは取引の指揮をLLMに任せるため、いつ検索し予約し発券するかを決め、ゲートも補償ロジックもありません。同じ固定シード200シナリオ合成バッチで、そのベースラインは捏造在庫を提示し、ロールバックなしでチケットを発行したままにし、偽の「準備完了です」を出しました。ここではLLMは意図を解析し返信を書くだけの型付きリーフノードです。決定論的コードがフローを所有し、各ステップが自身の取り消しを持ちます。

エージェントが旅行者に誤ったことを伝えた場合、誰が責任を負いますか?

デプロイヤーは、エージェントが述べるすべての発言を所有します。Moffatt v. Air Canada(BC Civil Resolution Tribunal、2024年2月14日)では、チャットボットが忌引き運賃ポリシーを捏造したあと航空会社は$812.02の支払いを命じられ、AIのせいだという抗弁は退けられました。デモは予約ごとのJSON監査証跡をエクスポートし、モデルとバージョン、すべてのノード判定、すべてのSaga補償、EU AI Act Article 50の開示フラグを載せ、エージェントがしたことを事後に検査できるようにします。

技術研究

このデモの背後にある研究 — アーキテクチャ、検証設計、エンタープライズ青写真。

会社を賭けられないエージェンティック予約レイヤーを評価していますか?

旅行者を取り残しホテルを捏造する失敗は、インフラ事象であり、モデル知能の問題ではありません。

高リスクの予約エージェントでLLMをどこに置くべきか、部分失敗をAir Canada型の法的責任にしない方法をチームが検討しているなら、率直に意見を交換したいです。問題は業界全体であり、答えもそうなります。

エージェントアーキテクチャレビュー

  • ✓ 今日の制御フローでLLMがどこに座っているかを図示
  • ✓ 補償アクションが必要なステップを特定
  • ✓ 失敗モードを負荷試験:料金失効、発券後ホールド、検索嵐
  • ✓ オペレーターが信頼できる終端状態を定義

決定論的エージェント構築

  • ✓ 検索、ポリシー、発券を所有するステートマシン
  • ✓ 検証ゲートとSaga補償エンジン
  • ✓ コードにコンパイルされたポリシー、フェイルセーフ既定付き
  • ✓ Article 50開示フラグ付きのエクスポート可能な監査証跡
ソーシャル

他のプラットフォームでも公開