Reserva de viagens com IA agêntica para TMCs e OTAs
Construímos um agente autônomo de reserva de viagens cujo fluxo de controle é Python determinístico. O modelo só interpreta o pedido de viagem e redige a resposta. Cada etapa da reserva registra uma ação compensatória; assim, quando a tarifa do hotel expira depois que o voo já foi emitido, o agente anula o bilhete dentro da janela de 24 horas e entrega ao viajante alternativas honestas, em vez de deixá-lo encalhado.
100%
Estado terminal consistente, por construção
Lote sintético de 200 cenários com semente fixa, vs 65% da linha de base LLM-no-controle
0 / 0
Viajantes encalhados, reservas fabricadas apresentadas
Mesmo lote, vs 40 e 30 da linha de base
$3.25
Gasto médio de busca no GDS por reserva
vs $7.57 da linha de base; o GDS cobra por busca; a Lufthansa aumentou as taxas em 1º de janeiro de 2026
Todos os cenários são sintéticos sobre um GDS e um CRS simulados; códigos de aeroporto e nomes de hotéis são fixtures com forma real, não inventário ao vivo nem reservas reais.
Nenhuma delas é uma falha de QI do modelo. Ambas já são uma classe de bug de 2026.
O agente emite o bilhete do voo, a etapa do hotel falha e, sem lógica de compensação, ainda diz "Está tudo certo." Alguém fica com um voo e sem quarto. Um modelo perfeito ainda encalha um viajante se nada anular o bilhete.
Ele inventa um hotel plausível e o reserva. A propriedade nunca esteve no CRS. Nada verificou antes de chegar ao viajante, porque em um loop de raciocínio o modelo é ao mesmo tempo o proponente e o juiz.
A razão pela qual um modelo melhor não resolve isso é que as falhas são eventos de infraestrutura e de uso, independentes da qualidade do modelo. Uma tarifa expira entre duas chamadas de API. Uma retenção é recusada depois que um bilhete é emitido. Uma tempestade de buscas queima a margem. O raciocínio estocástico se acumula contra isso: dez etapas a 90 por cento de confiabilidade resultam em cerca de 34 por cento de ponta a ponta, e o GPT-4 com ReAct conclui itinerários reais de vários dias a 0.6 por cento (TravelPlanner, OSU NLP, arXiv 2402.01622). Não se sai de uma falha estocástica composta só com prompt.
E o deployer é dono de cada afirmação que o agente faz. Em Moffatt v. Air Canada (BC Civil Resolution Tribunal, 14 de fevereiro de 2024) a companhia aérea foi condenada a pagar $812.02 depois que seu chatbot inventou uma política de tarifa por luto, e o argumento de que a IA era uma entidade separada foi rejeitado.
O fluxo de controle é uma máquina de estados Python feita à mão, com cerca de dez nós. O LLM fica restrito a dois trabalhos-folha. Tudo entre eles é determinístico.
input → extract (LLM leaf) → search → policy gate → verify gate → hold → ticket → hotel-book → commit
O modelo interpreta a intenção em linguagem natural em um Pydantic-typed TripRequest (origin, destination, date, passengers, cabin, hotel). Esse objeto tipado é o único artefato estruturado que o LLM produz. É intercambiável de provedor via Pydantic AI e roda totalmente offline com um stub determinístico quando nenhuma chave está presente.
A política corporativa vive como predicados Python puros: somente econômica, teto de tarifa de $600 por segmento, companhias preferenciais (United, American, Delta), teto de $350 por noite de hotel. Opções fora da política são fisicamente não apresentáveis porque são filtradas antes de poderem ser exibidas, não sinalizadas depois. Famílias de tarifa desconhecidas falham de forma segura, tratadas como acima da política em vez de silenciosamente como econômica. Sem voo dentro da política, o agente escala para uma fila humana em vez de blefar.
Cada hotel é confirmado contra o CRS por property_id. Uma propriedade que o modelo inventa simplesmente não está no CRS, então é recusada e nunca apresentada, e a reserva chega ao estado terminal abstained. O portão recusa inventário não confirmado; não pede ao modelo que avalie a própria saída.
Cada etapa de avanço registra sua ação reversa no momento da execução. A emissão, por exemplo, registra "void ticket, 24-hour window." Diante de uma falha no passo N, as compensações de N-1 até 1 rodam em ordem inversa, e só então o agente informa. É isso que separa uma demo de um produto, porque é o que impede que uma falha parcial vire um cliente encalhado.
Um contador ao vivo rastreia o gasto de busca no GDS a $3.25 por segmento, porque as buscas são cobradas, não só as reservas. Um cache L2B e a busca adiada mantêm isso estável onde um agente especulativo rebusca e queima margem. Cada reserva grava um log de eventos JSON append-only, exportável como audit-<pnr>.json, com o modelo e a versão, o pedido de viagem tipado, cada veredito de nó, cada compensação da Saga, a flag de divulgação do EU AI Act Article 50 e o estado terminal.
Quatro botões, lado a lado com uma linha de base real de LLM-no-controle no mesmo cenário. Cada captura de tela abaixo foi tirada do aplicativo em execução.
"ORD para SFO na próxima terça, uma noite no centro, política da empresa." A máquina de estados executa cada nó, confirma o Hyatt Regency SF contra o CRS por property_id, e o medidor de busca permanece em $3.25 em uma busca em cache. Estado terminal: confirmed, com um PNR.
O pedido nomeou uma propriedade fabricada, "Tabacon Springs Eco-Lodge," um nome que mistura dois resorts reais e, de propósito, não tem property_id. O portão não encontra correspondência no CRS e recusa apresentá-la. O agente se abstém com honestidade, "Não pude confirmar essa propriedade," em vez de inventar uma.
A tarifa do hotel expira depois que o voo já está emitido. Do nosso lado a Saga dispara: anula o bilhete dentro da janela de 24 horas, libera os holds e responde com honestidade que o bilhete foi anulado sem custo, com alternativas anexadas. Estado terminal: rolled back, traveler safe. A linha de base no mesmo cenário deixa o bilhete emitido, não oferece compensação e emite um falso "Está tudo certo," que é exatamente o precedente da Air Canada esperando acontecer.
Um clique exporta audit-<pnr>.json: o modelo e a versão, o pedido de viagem tipado, cada nó e seu veredito determinístico, cada compensação da Saga, a flag de divulgação do EU AI Act Article 50 (obrigações de transparência valem a partir de 2 de agosto de 2026) e o estado terminal.
As mesmas 200 reservas sintéticas, uma semente fixa (42) e as mesmas falhas de infraestrutura injetadas, executadas nas duas arquiteturas. A mistura de cenários é 50 por cento happy, 20 por cento hotel-fail-after-ticket, 15 por cento hallucinated-entity e 15 por cento search-storm. Nossas garantias valem por construção; as falhas da linha de base emergem dos mesmos dados.
A linha de base é um agente real ReAct-style LLM-no-controle rodando nos mesmos cenários, uma âncora honesta em vez de um homem de palha. Os números abaixo são sobre o lote sintético de 200 cenários com semente fixa (benchmark.py, seed 42, n=200).
| Métrica | Agente determinístico (o nosso) | Linha de base (LLM-no-controle) |
|---|---|---|
| Estado terminal consistente | 100.0% | 65.0% |
| Viajantes encalhados | 0 | 40 |
| Reservas fabricadas apresentadas | 0 | 30 |
| Gasto médio de busca no GDS por reserva | $3.25 | $7.57 |
Os 100 por cento, 0 e 0 valem por construção sobre este lote sintético de semente fixa, não como uma garantia de produção em mundo aberto. A afirmação é estreita e durável: uma reserva parcial nunca é mostrada como confirmed, e um viajante nunca fica encalhado. A diferença $3.25 versus $7.57 é um número de margem que vale em qualquer qualidade de modelo.
A garantia não vem de confiar no modelo. Nesta demo o fluxo de controle é Python determinístico, e cada etapa de avanço registra uma ação compensatória no instante em que roda. Quando uma etapa falha depois que um bilhete é emitido, o motor executa essas compensações em reverso (uma Saga), anula o bilhete dentro da janela de 24 horas e informa com honestidade. Um viajante nunca fica com um voo e sem quarto porque nada depende do modelo decidir limpar.
Não. O GDS, o CRS, a emissão de bilhetes e o pagamento são todos stubbed e simulados nesta demo. O adaptador de fixtures é a integração V1, e não há conta ao vivo Amadeus, Sabre ou Duffel por trás. A demo prova a arquitetura de fluxo de controle e a lógica de compensação, não um pipeline de reservas de produção.
Esse é exatamente o caso para o qual a Saga foi feita. A emissão registra sua própria ação reversa (anular o bilhete dentro da janela de 24 horas) no instante em que roda. Se a tarifa do hotel expirar antes do commit, o motor dispara as compensações em ordem inversa, anula o bilhete sem custo, libera os holds e entrega ao viajante alternativas honestas. O estado terminal é rolled back, não confirmed e não stranded.
Um portão de verificação confirma cada propriedade contra o CRS pelo seu property_id antes de poder ser exibida. Quando o pedido nomeou uma propriedade fabricada na nossa demo, o portão não encontrou correspondência no CRS e recusou apresentá-la, e o agente se absteve com honestidade em vez de reservá-la. O portão não sinaliza um hotel inventado depois do fato; ele o torna fisicamente não apresentável.
Um agente ReAct-style coloca o LLM no comando da transação, então ele decide quando buscar, reservar e emitir, e não tem portão nem lógica de compensação. No mesmo lote sintético de 200 cenários com semente fixa, essa linha de base apresentou inventário fabricado e deixou bilhetes emitidos sem rollback, emitindo um falso "Está tudo certo." Aqui o LLM é um nó-folha tipado que só interpreta a intenção e redige a resposta; o código determinístico é dono do fluxo e cada etapa carrega o próprio undo.
O deployer é dono de cada afirmação que o seu agente faz. Em Moffatt v. Air Canada (BC Civil Resolution Tribunal, 14 de fevereiro de 2024) a companhia aérea foi condenada a pagar $812.02 depois que seu chatbot inventou uma política de tarifa por luto, e a defesa de que foi a IA foi rejeitada. A demo exporta uma trilha de auditoria JSON por reserva com o modelo e a versão, cada veredito de nó, cada compensação da Saga e uma flag de divulgação do EU AI Act Article 50, para que o que o agente fez seja inspecionável depois do fato.
A pesquisa por trás desta demo — a arquitetura, o design de verificação e o blueprint empresarial.
Solução completa
Explore a solução Reserva de viagens com IA agêntica →As falhas que encalham viajantes e inventam hotéis são eventos de infraestrutura, não problemas de QI do modelo.
Se a sua equipe está pesando onde o LLM deve ficar em um agente de reservas de alto risco, e como impedir que uma falha parcial vire uma responsabilidade no estilo Air Canada, gostaríamos de fato de trocar impressões. O problema é de toda a indústria e as respostas também serão.