会话航班搜索
基于人工智能的航班搜索服务,具有自然语言处理功能,采用微服务架构构建。
概述
一个双层系统,使用户能够通过自然对话搜索航班:
- 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密钥
安装
- 克隆并安装依赖项
# Clone repository
git clone
cd
# 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- 配置环境变量
mcp飞行服务器/env
AMADEUS_CLIENT_ID=your_amadeus_client_id
AMADEUS_CLIENT_SECRET=your_amadeus_client_secret
PORT=8700api网关/.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- 启动服务
# 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
