航班预订系统

一个基于AI和MCP协议的航班预订系统,提供自然语言交互界面,支持航班搜索、预订管理及实时座位跟踪。

  • by IliasAntoniou
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 IliasAntoniou/MCPFlightBooking

使用说明

MCP航班预订

一个基于人工智能的航班预订应用程序,演示了模型上下文协议(MCP)。用户通过网络界面与对话式人工智能助手进行交互,以搜索航班和管理预订。该系统将Google Gemini与MCP服务器集成在一起,提供对航班数据和预订操作的自然语言访问。

🏗️ 建筑

┌─────────────────────────────────────────────────────┐
│ Web Frontend (index.html)                           │
│ - Chat interface & user authentication              │
│ - Tool authorization (approve/deny actions)         │
└────────────────────┬────────────────────────────────┘
                     ▲
                     │ HTTP
                     ▼
┌─────────────────────────────────────────────────────┐
│ Backend Server (host.py) - Port 8001                │
│ - Gemini AI + MCP client host                       │
│ - Conversation & session management                 │
└────────────────────┬────────────────────────────────┘
                     ▲
                     │ MCP Protocol (STDIO)
                     ▼
         ┌───────────┴──────────────┐
         ▲                          ▲
         │                          │
┌────────▼─────────┐      ┌─────────▼─────────┐
│ flightsearch.py  │      │ flightbooking.py  │
│ MCP Server       │      │ MCP Server        │
└────────┬─────────┘      └─────────┬─────────┘
         ▲                          ▲
         │ HTTP                     │ HTTP
         └────────────┬─────────────┘
                      ▲
                      │
                      ▼
┌─────────────────────────────────────────────────────┐
│ Flight API (flight_api.py) - Port 8000              │
│ - SQLite database (100k flights, seat tracking)     │
│ - REST endpoints for search & booking               │
└─────────────────────────────────────────────────────┘

✨ 主要特点

  • 自然语言接口:与人工智能聊天以搜索和预订航班
  • MCP集成:通过STDIO使用JSON-RPC的两个MCP服务器(搜索和预订)
  • 工具授权:用户在执行前批准AI操作
  • 座位管理:实时跟踪每架航班100个座位,防止超额预订
  • 用户认证:具有持久会话的配置文件管理
  • 100000次航班:预先生成具有真实飞行数据的SQLite数据库
  • 情境感知:AI理解对话历史和当前日期/时间

📁 项目结构

MCPFlightBooking/
├── src/
│   ├── backend/
│   │   ├── host.py          # Main FastAPI app + MCP client host
│   │   ├── config.py          # Centralized configuration
│   │   ├── db.py              # Database operations
│   │   ├── flight_api.py      # FastAPI flight search API
│   │   ├── flight_app.db      # SQLite database (100k flights)
│   │   └── .env               # API keys (GOOGLE_AI_STUDIO_API_KEY)
│   │
│   ├── frontend/
│   │   └── index.html         # Web UI with chat interface
│   │
│   └── MCPservers/
│       ├── flightsearch.py    # MCP server for flight search
│       └── flightbooking.py   # MCP server for booking management
│
├── start.ps1                  # PowerShell startup script
├── start.bat                  # Batch startup script
└── README.md

🛠️ 技术栈

  • 后端:Python 3.13、FastAPI、Uvicorn
  • AI模型:谷歌双子座(双子座最新flash)
  • MCP框架:FastMCP,MCP Python SDK
  • 数据库:SQLite
  • 前端:普通HTML/CSS/JavaScript
  • 运输:用于MCP通信的STDIO(标准输入/输出)

📦 安装

先决条件

  • Python 3.13+
  • UV包管理器(用于运行MCP服务器)
  • Google AI Studio API密钥

设置

  1. 克隆存储库

    git clone https://github.com/IliasAntoniou/MCPFlightBooking.git
    cd MCPFlightBooking
    
  2. 安装依赖项

    pip install fastapi uvicorn python-dotenv google-generativeai mcp httpx
    
  3. 配置环境变量

    创建 src/backend/.env:

    GOOGLE_AI_STUDIO_API_KEY=your_api_key_here
    
  4. 初始化数据库 (首次运行时自动)

    该系统将在首次启动时自动生成100000个航班。

🚀 运行应用程序

选项1:自动启动(推荐)

Windows PowerShell:

.\start.ps1

Windows命令提示符:

start.bat

这将:

  1. 启动航班API服务器(端口8000)
  2. 启动Gemini+MCP服务器(端口8001)
  3. 在浏览器中打开web界面

选项2:手动启动

1号航站楼-API航班:

cd src/backend
python -m uvicorn flight_api:app --reload --port 8000

终端2-主服务器:

cd src/backend
python -m uvicorn host:app --reload --port 8001

3号航站楼-打开浏览器:

start src/frontend/index.html

💬 用法

  1. 登录 使用演示凭据:

    • 电子邮件: john.doe@example.com
    • 密码: secret123
  2. 与AI助手聊天:

    • “2025年12月3日从ATH到BCN的搜索航班”
    • “显示我的预订”
    • “为John Doe预订FL-012345航班”
  3. 批准工具调用 当被提示时

  4. 管理您的个人资料 通过个人资料页面

🔧 MCP工具

航班搜索 (flightsearch.py)

  • search_flights -按出发地、目的地和日期查找航班
  • getflightbyid -获取特定航班的详细信息
  • 功能:LRU缓存、输入验证、结构化日志记录

航班预订 (flightbooking.py)

  • book_flight -创建已确认的预订(检查座位可用性)
  • hold_flight -临时持有到期
  • confirm_held_booking -将保留转换为已确认的预订
  • cancel_booking -删除预订并恢复座位
  • get_booking_details -查看预订信息
  • get_user_bookings -列出所有用户预订
  • 功能:原子座位更新,防止超售,保持过期跟踪

🔒 运作原理

  1. 用户通过web界面发送消息
  2. Gemini AI确定是否需要执行工具
  3. 用户批准/拒绝工具调用
  4. MCP服务器执行工具并返回结果
  5. AI格式化响应并向用户显示

所有工具执行都需要明确的用户安全批准。

📝 备注

这是一个论文项目,展示了模型上下文协议与会话人工智能在航班预订操作中的集成。

🔗 资源