对话式航班搜索服务

一个基于自然语言处理的AI航班搜索服务,通过微服务架构实现与Amadeus GDS的实时航班数据集成。

  • by TORU0239
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 toru0239/mcpsample-flight

使用说明

会话航班搜索

基于人工智能的航班搜索服务,具有自然语言处理功能,采用微服务架构构建。

概述

一个双层系统,使用户能够通过自然对话搜索航班:

  • API网关 -处理聊天互动,使用LLM(OpenAI/Anthropic)理解自然语言
  • MCP飞行服务器 -与Amadeus GDS集成,获取实时航班数据

建筑

User → [/chat] → API Gateway (:8787) → [MCP Protocol] → Flight Server (:8700) → Amadeus API
                       ↓                                         
                  OpenAI/Claude                              

快速开始

先决条件

  • Node.js 18+
  • Amadeus API证书(在这里注册)
  • OpenAI或Anthropic API密钥

安装

  1. 克隆并安装依赖项
# Clone repository
git clone <your-repo-url>
cd <project-root>

# Install Flight Server
cd mcp-flight-server
npm install
cp .env.example .env  # Add Amadeus credentials

# Install API Gateway
cd ../api-gateway
npm install
cp .env.example .env  # Add LLM API keys
  1. 配置环境变量

mcp飞行服务器/env

AMADEUS_CLIENT_ID=your_amadeus_client_id
AMADEUS_CLIENT_SECRET=your_amadeus_client_secret
PORT=8700

api网关/.env

# Server
PORT=8787
FLIGHT_SERVER_URL=http://localhost:8700

# LLM Provider (choose one)
LLM_PROVIDER=openai  # or anthropic

# OpenAI
OPENAI_API_KEY=your_openai_key
OPENAI_MODEL=gpt-4o-mini

# OR Anthropic
ANTHROPIC_API_KEY=your_anthropic_key
ANTHROPIC_MODEL=claude-3-5-sonnet-20241022
  1. 启动服务
# Terminal 1: Start Flight Server
cd mcp-flight-server
npm run dev

# Terminal 2: Start API Gateway
cd api-gateway
npm run dev

用法

与助手聊天

发布 http://localhost:8787/chat

curl -X POST http://localhost:8787/chat \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": "Find me flights from Seoul to New York next Monday"
      }
    ]
  }'

答复:

{
  "message": "I found 15 flights from ICN to JFK. The cheapest option is $890 with one stop...",
  "flights": {
    "currency": "USD",
    "items": [...]
  },
  "cards": [
    {"title": "Local Food", "summary": "Must-try NYC dishes..."},
    {"title": "Top Attractions", "summary": "Empire State, Central Park..."},
    {"title": "Travel Tips", "summary": "NYC subway guide..."}
  ]
}

直达航班搜索

发布 http://localhost:8787/search-flights

{
  "origin": "ICN",
  "destination": "JFK",
  "departDate": "2025-03-15",
  "returnDate": "2025-03-22",
  "adults": 2,
  "currency": "USD"
}

API终点

API网关(端口8787)

端点 方法 描述
/chat POST 自然语言航班搜索
/search-flights POST 直达航班搜索
/locations GET IATA代码查询
/health GET 服务健康检查

飞行服务器(端口8700)

端点 方法 描述
/mcp POST MCP协议处理程序
/api/search-flights POST REST API(旧版)
/health GET 服务健康检查

技术栈

组件 技术
运行时 Node.js 18+
框架 禁食5
语言 TypeScript 5.9
法学硕士 OpenAI GPT-4/人类学克劳德3.5
GDS Amadeus测试API
验证 Zod
协议 MCP(消息通信协议)

项目结构

.
├── api-gateway/
│   └── src/
│       ├── index.ts        # Main gateway server
│       ├── llm.ts          # LLM integration
│       ├── mcpClient.ts    # MCP client
│       └── types.ts        # TypeScript types
│
└── mcp-flight-server/
    └── src/
        ├── index.ts        # Flight server with Amadeus
        ├── types.ts        # Type definitions
        └── schema.ts       # Zod schemas

特性

  • 自然语言处理 -理解会话查询
  • 智能意图检测 -从文本中提取航班搜索参数
  • 旅行建议 -生成目的地信息卡
  • OAuth令牌管理 -Amadeus代币自动刷新
  • 速率限制 -每个客户端每分钟100个请求
  • 类型安全 -带有运行时验证的完整TypeScript

发展

# Build for production
npm run build

# Start production server
npm start

# Type checking
npx tsc --noEmit

故障排除

问题 解决方案
“AMADEUS_CLIENT_ID未设置” 将AMADEUS凭据添加到 .env
“未配置LLM提供程序” 设置OpenAI或Anthropic API密钥
无航班结果 检查IATA代码和日期格式(YYYY-MM-DD)
连接被拒绝 确保两台服务器都在运行

许可证

麻省理工学院

作者

Choi Wonyoung