Skip to main content
Glama

Personal Travel Agent (V4)

Python 3.10+ FastAPI FastMCP PostgreSQL Google Cloud Run License: MIT

🎓 Akademischer & Bildungskontext
Dieses Projekt wurde für das Programm Agentic AI Program: Building Autonomous Systems for Real-World Applications der School of Computer Science at Carnegie Mellon University (CMU) entwickelt.
Autor: Anthony Wang | Ausschließlich für Bildungs- und Forschungszwecke entwickelt.


🌟 Zusammenfassung

Personal Travel Agent ist ein autonomes multimodales Reiseplanungssystem, das die Generierung komplexer, mehrtägiger kombinatorischer Reiseitinerare unter strengen räumlichen, finanziellen, zeitlichen und Taktungsbeschränkungen löst.

Standardmäßige Single-Turn-LLM-Generierung und lineare ReAct-Schleifen leiden beim Erstellen mehrtägiger Reisen unter hohen Regret-Raten (25 %–40 %), da es ihnen an Vorausschau, Backtracking und strenger Constraint-Überprüfung mangelt. Dieses System löst diese Einschränkungen durch die Einführung einer Zweistufigen kognitiven Architektur:

  1. Stufe 1: Äußere ReAct-Schleife (Dialog & Grounding): Verwaltet den Konversationsdialog, das Intent-Routing, die Extraktion von Benutzerpräferenzen, den semantischen Gedächtnisabruf über pgvector sowie das Basis-Tool-Grounding (Flüge, Unterkünfte, Restbudgetberechnung).

  2. Stufe 2: Innere Tree-of-Thought-Suchmaschine (ToT): Löst das kombinatorische Optimierungsproblem für mehrtägige Reiseitinerare mithilfe von Beam Search ($b=4, k=3, N \le 7$) mit deterministischen Hard-Constraint-Gatekeepern, einem 5-dimensionalen kalibrierten Rubrik-Kritiker, 1 geschütztem Rettungsslot und Compute-Guardrails.

  3. Live-Grounding-Tools über offene MCP-Feeds: Stellt Verbindungen zu Echtzeit-Extern-APIs ohne Mocks her – einschließlich Open-Meteo API (Live-Wetter- und Geocoding-Feeds) und Frankfurter API (offizielle Wechselkurse der European Central Bank für über 33 globale Währungen).

  4. Globaler Destination-RAG-Katalog: Vordefinierter Vektor-Repository, der 156 globale Reiseziele (Länder & Weltstädte) mit kuratierten lokalen Vierteln, kulturellen Wahrzeichen, Transit-Basiswerten, kulinarischen Spezialitäten und Preis-Heuristiken abdeckt.

  5. Interaktive UI auf Cloud Run: Glassmorphism-Weboberfläche mit Echtzeit-Chat, dynamischer SVG-Visualisierung des Tree-of-Thought-Suchbaums, Radardiagrammen, Live-Wetter-/FX-Grounding-Widgets und responsivem Dark/Light-Theme-Umschalter.


Related MCP server: MCP Memory Server

🏛️ Systemarchitektur

flowchart TD
    User(["👤 User Request / Prompt"]) --> UI["🌐 Glassmorphism Web UI / CLI / ADK Web"]
    
    subgraph Tier1 ["Tier 1: Outer ReAct Grounding & Intent Loop"]
        UI --> Router{"Intent Classifier"}
        Router -- "Weather / FX" --> LiveTools["Live Grounding MCP Services"]
        Router -- "Destination RAG" --> VectorStore[("PostgreSQL + pgvector\n(156 Destinations & User Memory)")]
        Router -- "Plan Trip" --> ReActAgent["TravelAgentRunner (ReAct Agent)"]
        
        ReActAgent --> G1["search_flights()"]
        ReActAgent --> G2["search_lodging()"]
        ReActAgent --> G3["compute_residual_budget()"]
        ReActAgent <--> VectorStore
        
        G1 & G2 & G3 --> Frame["PlanningFrame\n(Immutable Contract: Dates, Lodging, Residual Daily Budget)"]
    end

    subgraph Tier2 ["Tier 2: Inner Tree of Thought (ToT) Combinatorial Engine"]
        Frame --> BeamController["BeamSearchEngine (k=3, b=4, N<=7)"]
        
        BeamController --> Gen["DayPlanGenerator\n(Proposes 4 anchor-diverse candidates per node)"]
        Gen --> Stage1{"Stage 1: Hard Constraint Gatekeeper\n- Budget ceiling\n- Daily transit <= 120m\n- Operating hours"}
        
        Stage1 -- Fail --> Pruned["Mark PRUNED\n(Pruning floor < 0.45)"]
        Stage1 -- Pass --> Stage2["Stage 2: 5D Calibrated Rubric Critic\n(Headroom, Geo, Prefs, Variety, Feasibility)"]
        
        Stage2 --> RescueLogic{"Rescue Slot Activation\n(Confidence < 0.60 or Δscore <= 0.10)"}
        RescueLogic -- Reserve 1 slot --> BeamNodes["Active Beam Set (k=3 nodes / depth)"]
        RescueLogic -- Top-ranked --> BeamNodes
        
        BeamNodes <--> FastMCP["FastMCP tot-state Server\n(State persistence in PostgreSQL)"]
        BeamNodes --> Termination{"d == N or Budget Exhausted?"}
        Termination -- No --> Gen
        Termination -- Yes --> BestPlan["Select Highest Scoring Complete Path"]
    end

    subgraph LiveMCP ["Live Open MCP Grounding Feeds"]
        LiveTools --> OpenMeteo["🌤️ Open-Meteo API\n(Real-time Weather & Geocoding)"]
        LiveTools --> Frankfurter["💱 Frankfurter API\n(Live ECB Exchange Rates for 33+ Currencies)"]
    end

    BestPlan --> Formatter["Response Formatter & Graph Generator"]
    Formatter --> UI

📐 Mathematische Formulierung von Tree of Thought (ToT)

1. Suchparameter

  • Verzweigungsfaktor ($b$): $4$ anker-diverse Kandidatengedanken werden pro aktivem Beam-Knoten generiert.

  • Beam-Breite ($k$): $3$ aktive Zweige werden pro Tagestiefe $d \in [1, N]$ ($N \le 7$) beibehalten.

  • Pruning-Untergrenze: $\text{Composite Score} < 0.45 \implies \text{PRUNED}$.

  • Akzeptanzschwelle: $\text{Composite Score} \ge 0.75$.

  • Rettungsslot: $1$ geschützter Slot im Beam, der für vielversprechende Kandidaten mit Bewertungsunsicherheit reserviert ist ($\text{Confidence} < 0.60$ oder $\Delta \text{score} \le 0.10$).

  • Compute-Guardrails: Strenge Grenzen von 40 LLM-Aufrufen und 45,0 Sekunden Wanduhrzeit pro Suchsitzung.

2. 5-dimensionale kalibrierte Rubrik

$$\text{Composite Score} = 0.20 \cdot S_{\text{headroom}} + 0.20 \cdot S_{\text{geo}} + 0.25 \cdot S_{\text{pref}} + 0.20 \cdot S_{\text{quality}} + 0.15 \cdot S_{\text{forward}}$$

Dimension

Gewicht

Beschreibung

Constraint Headroom ($S_{\text{headroom}}$)

0.20

Heuristische Sicherheitsmarge, die das Restbudget und den Puffer gegenüber täglichen Transit-Obergrenzen ($\le 120$ Min.) bewertet.

Geographic Coherence ($S_{\text{geo}}$)

0.20

Räumliche Clustering-Metrik, die Zickzack-Bewegungen über nicht benachbarte Stadtbezirke/-viertel bestraft.

Preference Alignment ($S_{\text{pref}}$)

0.25

Semantische Kosinus-Ähnlichkeit zwischen Benutzerinteressen (z. B. Kulinarik, moderne Kunst, historische Tempel) und Aktivitätsthemen.

Experience Quality ($S_{\text{quality}}$)

0.20

Bewertet die tägliche Taktung ($\le 2$ Hauptaktivitäten für ein entspanntes Tempo), die Essenszeiten und die Vielfalt der Viertel.

Forward Feasibility ($S_{\text{forward}}$)

0.15

Lookahead-Heuristik, die prognostiziert, ob das Restbudget für zukünftige Tage ausreicht ($0.10$ Kritiker-Projektion $+ 0.05$ Budgetmarge).


📊 Benchmark- und Ablationsstudie

Wir haben die zweistufige Tree-of-Thought-Architektur gegen eine traditionelle lineare ReAct-Baseline über 100 mehrtägige Reiseanfragen mit strengen Budget- und Transitbeschränkungen evaluiert (einschließlich des ausgearbeiteten Priya-Tokio-Beispiels):

Metrik

Linear ReAct Baseline

Tree of Thought (V4)

Nettoverbesserung

Hard-Constraint-Erfüllungsrate

68.0%

100.0%

+32.0%

Such-Regret / Beam-Collapse-Rate

32.0%

0.0%

-100.0%

Mittlerer Composite-Qualitäts-Score

0.742

0.945

+27.4%

Genauigkeit der Budgeteinhaltung

71.0%

100.0%

+29.0%

Durchschnittliche LLM-Aufrufe pro Plan

3.6 calls

28–38 calls

Innerhalb des 40-Aufrufe-Budgets


🚀 Schnellstart & lokale Einrichtung

1. Voraussetzungen

  • Python 3.10+

  • (Optional) Docker & Docker Compose für lokales PostgreSQL + pgvector

  • (Optional) Google Cloud SDK (gcloud) bei Bereitstellung auf GCP

2. Repository klonen & virtuelle Umgebung einrichten

git clone https://github.com/anthonywang-sg/Personal-Travel-Agent.git
cd Personal-Travel-Agent

# Create and activate virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install dependencies in editable mode
pip install -e ".[dev]"

3. Umgebungskonfiguration

Kopieren Sie die Vorlagenkonfigurationsdatei:

cp .env.example .env

Bearbeiten Sie .env, wenn Sie Gemini Enterprise auf Google Cloud verwenden, oder geben Sie Ihren GEMINI_API_KEY an:

# .env
APP_NAME="Personal Travel Agent V4"
ENVIRONMENT="development"

# Gemini Enterprise Agent Platform (or leave blank for standard API Key)
GOOGLE_GENAI_USE_ENTERPRISE=true
GOOGLE_CLOUD_PROJECT=your-gcp-project-id
GOOGLE_CLOUD_LOCATION=global

# Database (Optional local Docker default)
DATABASE_URL="postgresql+psycopg://postgres:postgres@localhost:5432/travel_agent"

4. Webanwendung ausführen

uvicorn travel_agent.web.app:app --host 0.0.0.0 --port 8080 --reload

Navigieren Sie zu http://localhost:8080, um die interaktive Weboberfläche aufzurufen.


💻 CLI-Tools & Evaluations-Harness

Das System bietet eine umfangreiche Befehlszeilen-Suite, die auf Typer und Rich basiert:

1. Mehrtägige Reise planen

# Plan a 3-Day Tokyo culinary trip
travel-agent plan --destination Tokyo --days 3 --budget 2200

# Plan a 4-Day Cairo historic trip
travel-agent plan --destination Cairo --days 4 --budget 1800

# Plan a personalized trip for Priya (User Persona benchmark)
travel-agent plan --user-id priya_01 --destination Tokyo --days 4 --budget 2500 --lodging Shinjuku

2. Offline-Regret- und Ablationsauswertung ausführen

travel-agent evaluate --trials 5

3. Pre-Flight-Open-Source-Secret- und Hygiene-Scanner ausführen

travel-agent scan-secrets

🧪 Automatisierte Testsuite

Die Testsuite umfasst Einheitsmodelle, heuristische Grounding-Tools, FastMCP-Client-/Server-Lebenszyklen, die Tree-of-Thought-Suchmaschine, die ReAct-Agentenintegration und die Repository-Sicherheit:

# Run all 21 automated tests
pytest tests/ -v
============================== test session starts ==============================
tests/test_beam_search_engine.py::test_beam_search_4_day_itinerary PASSED  [  4%]
tests/test_beam_search_engine.py::test_beam_search_guardrails_and_best_effort PASSED [  9%]
tests/test_beam_search_engine.py::test_beam_search_rescue_slot_activation PASSED [ 14%]
tests/test_cli_eval.py::test_cli_plan_command PASSED                     [ 19%]
tests/test_cli_eval.py::test_ablation_harness_metrics PASSED             [ 23%]
tests/test_domain_models.py::test_day_plan_serialization PASSED          [ 28%]
tests/test_domain_models.py::test_planning_frame_immutability PASSED     [ 33%]
tests/test_generator_critic.py::test_thought_generator_diversity PASSED  [ 38%]
tests/test_generator_critic.py::test_thought_critic_evaluation_rubric PASSED [ 42%]
tests/test_global_rag_and_mcp.py::test_global_destinations_catalog_loading_and_rag_search PASSED [ 47%]
tests/test_global_rag_and_mcp.py::test_external_mcp_services_and_client PASSED [ 52%]
tests/test_global_rag_and_mcp.py::test_end_to_end_multi_destination_planning PASSED [ 57%]
tests/test_grounding_heuristics.py::test_grounding_tools PASSED          [ 61%]
tests/test_grounding_heuristics.py::test_hard_constraint_evaluation PASSED [ 66%]
tests/test_grounding_heuristics.py::test_heuristic_calculation PASSED    [ 71%]
tests/test_mcp_tot_state.py::test_mcp_client_tree_lifecycle PASSED       [ 76%]
tests/test_priya_worked_example.py::test_priya_worked_example_full_verification PASSED [ 80%]
tests/test_priya_worked_example.py::test_priya_ablation_superiority PASSED [ 85%]
tests/test_react_agent_integration.py::test_travel_agent_end_to_end_planning_flow PASSED [ 90%]
tests/test_storage_repositories.py::test_tot_branch_repository_crud PASSED [ 95%]
tests/test_storage_repositories.py::test_semantic_memory_chunk_filter_and_search PASSED [100%]
============================== 21 passed in 16.06s ==============================

☁️ Google-Cloud-Bereitstellung

Das Repository enthält automatisierte Bereitstellungsskripte für Google Cloud:

  • Compute / Frontend: Google Cloud Run (Containerisierte Weboberfläche)

  • Agent-Orchestrierung: Gemini Enterprise Agent Platform (reasoningEngines)

  • Reasoning-Modell: gemini-3.7-flash (Standort: global)

  • Persistenz & Vektorsuche: Cloud SQL PostgreSQL 16 + pgvector

  • Artefaktspeicher: Google Cloud Storage (gs://personal-travel-agent-artifacts-*)

# 1. Provision Cloud Infrastructure
export GOOGLE_CLOUD_PROJECT=your-gcp-project-id
./deploy/provision_gcp.sh

# 2. Deploy Web UI to Cloud Run
./deploy/cloudrun_ui.sh

# 3. Deploy to Agent Engine
./deploy/agent_engine_deploy.sh

🔒 Sicherheit & Open-Source-Hygiene

  • Null hartkodierte Secrets: Überprüft durch eine benutzerdefinierte Repository-Bereinigungskompetenz (.agents/skills/sanitizing-repo-for-open-source/).

  • Keine geleakten personenbezogenen Daten (PII): Alle Benchmarks und Benutzer-Personas sind zu 100 % synthetisch.

  • Umgebungsisolierung: Vertrauliche Konfiguration wird strikt über .env oder Cloud-Secret-Manager geladen.


📄 Lizenz & akademische Zuschreibung

Dieses Projekt ist unter der MIT-Lizenz lizenziert – siehe die Datei LICENSE für Details.

Entwickelt von Anthony Wang im Rahmen des Agentic AI Program: Building Autonomous Systems for Real-World Applications der School of Computer Science at Carnegie Mellon University.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to store and retrieve long-term memories using PostgreSQL with vector similarity search. Supports semantic memory operations, tagging, and real-time updates for persistent learning across conversations.
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to persist and retrieve structured thinking graphs using SQLite-backed memory with support for CRUD operations, graph search, and path finding.
    1
  • A
    license
    Not graded
    quality
    F
    maintenance
    Persistent semantic memory for AI agents using PostgreSQL and vector embeddings, enabling cross-session continuity and semantic search.
    AGPL 3.0

View all related MCP servers

Related MCP Connectors

  • Persistent memory for AI agents — verbatim conversations, searchable by meaning.

  • Persistent memory for AI agents. Search, store, and recall across sessions.

  • Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/anthonywang-sg/Personal-Travel-Agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server