一个基于 AI 的智能旅行规划应用,使用 Next.js、Supabase 和阿里云 DashScope(通义千问)构建。
📖 提交说明:助教批改请查看 README_SUBMISSION.md,包含详细的运行说明和 API Key 配置。
- 🤖 AI 智能规划:使用大语言模型(通义千问)自动生成旅行行程
- 🗺️ 地图可视化:集成高德地图,实时显示行程地点和路线
- 💰 预算管理:自动计算和追踪旅行费用
- 🎤 语音输入:支持语音输入,快速创建和修改行程
- 📱 响应式设计:适配移动端和桌面端
- 🔐 用户认证:基于 Supabase 的用户注册和登录系统
- 前端框架:Next.js 14 (React 18 + TypeScript)
- 数据库:Supabase (PostgreSQL)
- AI 服务:阿里云 DashScope (通义千问)
- 地图服务:高德地图 (AMap)
- 状态管理:SWR
- 语音识别:Web Speech API
- Node.js 18+ 或 Docker
- Supabase 项目(用于数据库和认证)
- 阿里云 DashScope API Key(用于 AI 功能)
- 高德地图 API Key(可选,用于地图功能)
git clone <repository-url>
cd AI_Travel_Planner复制 .env.example 并创建 .env 文件:
cp .env.example .env编辑 .env 文件,填入必要的配置:
# Supabase 配置(必需)
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
# 阿里云 DashScope API 配置(必需)
DASHSCOPE_API_KEY=your_dashscope_api_key
# 高德地图 API Key(可选,但推荐)
NEXT_PUBLIC_AMAP_KEY=your_amap_api_keydocker-compose up -d应用将在 http://localhost:3000 启动。
docker-compose downcd apps/web
npm install在 apps/web 目录下创建 .env.local 文件:
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_key
DASHSCOPE_API_KEY=your_dashscope_api_key
NEXT_PUBLIC_AMAP_KEY=your_amap_api_key在 Supabase 控制台执行以下 SQL 脚本(按顺序执行):
migrations/001_init_schema.sql- 创建基础表结构migrations/002_seed_example.sql- 示例数据(可选)migrations/003_budget_triggers.sql- 预算触发器migrations/004_add_estimated_budget_remaining.sql- 预算计算字段
或使用 Supabase 迁移功能:
# 在 Supabase 控制台中执行所有迁移npm run dev应用将在 http://localhost:3000 启动。
npm run build
npm startcd apps/web
docker build -t ai-travel-planner:latest .docker run -d \
-p 3000:3000 \
--name ai-travel-planner \
--env-file .env \
ai-travel-planner:latestAI_Travel_Planner/
├── apps/
│ └── web/ # Next.js 应用
│ ├── components/ # React 组件
│ ├── lib/ # 工具库和 API 客户端
│ ├── pages/ # Next.js 页面和 API 路由
│ ├── public/ # 静态资源
│ └── Dockerfile # Docker 构建文件
├── migrations/ # 数据库迁移脚本
├── docker-compose.yml # Docker Compose 配置
├── .env.example # 环境变量示例
└── README.md # 项目文档
启动应用后,访问 http://localhost:3000/dev/api-docs 查看完整的 API 文档。
NEXT_PUBLIC_SUPABASE_URL: Supabase 项目 URLNEXT_PUBLIC_SUPABASE_ANON_KEY: Supabase 匿名密钥SUPABASE_SERVICE_ROLE_KEY: Supabase 服务角色密钥(用于服务端操作)DASHSCOPE_API_KEY: 阿里云 DashScope API 密钥
NEXT_PUBLIC_AMAP_KEY: 高德地图 API Key(不配置将影响地图功能)DASHSCOPE_BASE_URL: DashScope API 基础 URL(默认已配置)NEXT_PUBLIC_BASE_URL: 应用基础 URL(默认:http://localhost:3000)DEV_AUTH_FALLBACK: 开发模式下的认证回退(默认:true)
- 在 Supabase 创建新项目
- 获取项目 URL 和 API 密钥
- 在 SQL 编辑器中执行迁移脚本(位于
migrations/目录)
001_init_schema.sql: 创建用户、行程、行程项、费用等核心表002_seed_example.sql: 插入示例数据(开发/测试用)003_budget_triggers.sql: 创建预算自动计算的触发器004_add_estimated_budget_remaining.sql: 添加预算剩余字段
cd apps/web
npm run devpages/: Next.js 页面路由和 API 路由api/: API 端点ai/: AI 相关 API(chat、modify)dev/: 开发用 API(CRUD 操作)
components/: 可复用组件MapView.tsx: 地图组件VoiceRecorder.tsx: 语音录制组件
lib/: 工具函数和客户端api.ts: API 客户端封装supabaseClient.ts: Supabase 客户端
cd apps/web
npm run gen:openapi生成的文档位于 public/openapi.json。
# 1. 克隆项目
git clone <repository-url>
cd AI_Travel_Planner
# 2. 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填入实际配置
# 3. 构建并运行
docker-compose up -d --build从阿里云镜像仓库拉取:
# 登录阿里云镜像仓库
docker login registry.cn-hangzhou.aliyuncs.com
# 拉取镜像(请替换为实际的命名空间)
docker pull registry.cn-hangzhou.aliyuncs.com/YOUR_NAMESPACE/ai-travel-planner:latest
# 创建环境变量文件
cp .env.example .env
# 编辑 .env 文件,填入实际配置
# 运行容器
docker run -d \
-p 3000:3000 \
--name ai-travel-planner \
--env-file .env \
--restart unless-stopped \
registry.cn-hangzhou.aliyuncs.com/YOUR_NAMESPACE/ai-travel-planner:latest使用导出的镜像文件:
# 1. 导入镜像(如果提供的是 .tar 文件)
docker load -i ai-travel-planner.tar
# 2. 创建环境变量文件
cp .env.example .env
# 编辑 .env 文件,填入实际配置
# 3. 运行容器
docker run -d \
-p 3000:3000 \
--name ai-travel-planner \
--env-file .env \
--restart unless-stopped \
ai-travel-planner:latest# 配置环境变量
cp .env.example .env
# 编辑 .env 文件
# 构建并运行
docker-compose up -d --build重要:所有 API Key 必须通过环境变量配置,切勿在代码中硬编码。
必需的环境变量:
NEXT_PUBLIC_SUPABASE_URL- Supabase 项目 URLNEXT_PUBLIC_SUPABASE_ANON_KEY- Supabase 匿名密钥SUPABASE_SERVICE_ROLE_KEY- Supabase 服务角色密钥DASHSCOPE_API_KEY- 阿里云 DashScope API 密钥
详细说明请参考 .env.example 文件。
项目配置了 GitHub Actions 工作流,会在推送到 main 分支时自动构建 Docker 镜像并推送到阿里云镜像仓库。
配置 GitHub Secrets:
详细的配置步骤请查看 GitHub Secrets 配置指南。
必需的 Secrets:
ALIYUN_ACR_USERNAME- 阿里云镜像仓库用户名ALIYUN_ACR_PASSWORD- 阿里云镜像仓库密码ALIYUN_ACR_NAMESPACE- 阿里云镜像仓库命名空间NEXT_PUBLIC_SUPABASE_URL- Supabase URL(用于构建)NEXT_PUBLIC_SUPABASE_ANON_KEY- Supabase Anon Key(用于构建)NEXT_PUBLIC_AMAP_KEY- 高德地图 Key(用于构建,可选)
- 在阿里云容器服务中创建应用
- 配置镜像地址为阿里云镜像仓库地址
- 配置环境变量
- 部署应用
任何支持 Docker 的平台都可以使用提供的 Dockerfile 或预构建镜像部署。
详细的部署说明请参考 DEPLOY.md。
-
应用无法启动
- 检查环境变量是否正确配置
- 确认 Supabase 连接正常
- 查看 Docker 日志:
docker-compose logs
-
地图不显示
- 检查高德地图 API Key 是否正确
- 确认 API Key 已启用 Web 端服务
-
AI 功能不可用
- 验证 DashScope API Key 是否有效
- 检查 API 配额是否充足
-
数据库连接失败
- 确认 Supabase 项目状态正常
- 检查网络连接和防火墙设置
使用 Docker Compose:
docker-compose logs -f web直接运行容器:
docker logs -f ai-travel-planner欢迎提交 Issue 和 Pull Request!
请查看 LICENSE 文件了解详细信息。
如有问题,请提交 Issue 或联系维护者。
# 导出镜像为 tar 文件
docker save ai-travel-planner:latest -o ai-travel-planner.tar
# 压缩镜像文件(可选)
gzip ai-travel-planner.tar-
方式一:推送到阿里云镜像仓库(推荐)
- 使用 GitHub Actions 自动构建和推送
- 或手动推送:
docker push registry.cn-hangzhou.aliyuncs.com/YOUR_NAMESPACE/ai-travel-planner:latest
-
方式二:导出镜像文件
- 导出为
.tar或.tar.gz文件 - 提供
.env.example模板文件 - 提供部署说明文档
- 导出为
-
导入镜像(如果提供的是文件):
gunzip ai-travel-planner.tar.gz # 如果压缩了 docker load -i ai-travel-planner.tar -
配置环境变量:
cp .env.example .env # 编辑 .env 文件,填入实际配置 -
运行容器:
docker run -d \ -p 3000:3000 \ --name ai-travel-planner \ --env-file .env \ --restart unless-stopped \ ai-travel-planner:latest
详细说明请参考 DEPLOY.md。
查看 ARCH.md 了解架构详细信息。
项目地址:https://github.com/VansamaYD/AI_Travel_Planner
Docker 镜像下载:查看 DOCKER_DOWNLOAD.md 获取详细的下载和运行说明。
详细的 Git 提交记录可在 GitHub 仓库的 Commits 页面查看。