AI+旅游应用教程:从零搭建一个行程推荐小工具
想做一个 AI+旅游应用,最现实的起点不是直接开发完整 App,而是先跑通一个“输入目的地和天数,输出每日行程建议”的最小可用版本。
下面按零基础也能照做的节奏,用 Python + Flask 搭一个本地可运行的行程推荐小工具,重点讲清楚准备条件、接口调用、页面展示和常见报错处理。
先确认你要做的形态和运行条件
这个教程适合两类人:想快速验证旅游 AI 想法的人,以及需要给现有网站加一个行程推荐入口的站长。
我们不做复杂的地图轨迹和实时比价,只聚焦“行程文本生成 + 简单页面展示”这条最短路径。
运行环境建议:
- 一台能联网的电脑或云服务器,Linux 或 Windows 均可;
- Python 3.8 及以上版本;
- 一个可调用的大模型 API Key,具体申请方式以你选用的服务商控制台为准;
- 本地能打开终端或命令行。
先检查 Python 是否可用:
python3 --version
如果提示命令不存在,Windows 可以安装 Python 时勾选 Add to PATH,Linux 用包管理器安装 python3 和 python3-pip。
创建项目并安装依赖
新建目录并进入:
mkdir ai-travel-demo && cd ai-travel-demo
创建虚拟环境,避免污染系统 Python:
python3 -m venv venv
source venv/bin/activate
Windows 下激活命令为 venv\Scripts\activate。
安装 Flask 和 requests:
pip install flask requests
预期结果是终端没有红色报错,pip list 能看到 Flask 和 requests。
如果下载慢,可以临时指定国内镜像源,但不要写死到项目配置里。
写行程生成接口和页面
在项目目录下新建 app.py,核心逻辑分三块:接收表单参数、调用大模型接口、把结果渲染回页面。
下面是可运行的骨架,接口地址和模型名需要按你实际使用的服务商文档替换:
import os
import requests
from flask import Flask, request, render_template_string
app = Flask(__name__)
API_URL = os.environ.get("AI_API_URL", "") # 替换为服务商提供的对话接口地址
API_KEY = os.environ.get("AI_API_KEY", "")
PAGE = """
{% if result %}{{ result }}{% endif %}
{% if error %}{{ error }}
{% endif %}
"""
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "GET":
return render_template_string(PAGE)
city = request.form.get("city", "").strip()
days = request.form.get("days", "3")
if not city:
return render_template_string(PAGE, error="请填写目的地")
prompt = f"请为{city}设计{days}天行程,每天列出上午、下午、晚上安排,语言简洁。"
try:
resp = requests.post(
API_URL,
headers={"Authorization": f"Bearer {API_KEY}"},
json={"model": "你的模型名", "messages": [{"role": "user", "content": prompt}]},
timeout=30,
)
resp.raise_for_status()
data = resp.json()
content = data["choices"][0]["message"]["content"]
return render_template_string(PAGE, result=content)
except Exception as e:
return render_template_string(PAGE, error=f"生成失败:{e}")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
保存后先设置环境变量再启动,不要把 Key 直接写进代码:
export AI_API_URL="你的接口地址"
export AI_API_KEY="你的Key"
python app.py
浏览器访问 http://127.0.0.1:5000,填入目的地和天数,能看到行程文本就说明主流程通了。
最容易踩的几个坑
接口返回 401 或 403:优先检查 Key 是否完整复制、请求头是否带 Bearer 前缀、账号是否有该模型权限。
不要反复重试,先看返回体里的错误信息。
返回 404:多数是接口地址写错,注意区分对话接口和模型列表接口,路径以服务商文档为准。
请求超时:行程生成本身耗时较长,timeout=30 不够时可以适当调大,但不要无限等待;
同时确认服务器出网正常,可用 curl -I https://你的接口域名 做基础连通性检查。
页面中文乱码:确认 HTML 模板里包含 UTF-8 声明,Flask 默认返回 JSON 时一般不会乱码,乱码多出现在手动拼接响应时。
Key 泄露:不要把 Key 提交到 Git 仓库,用环境变量或 .env 文件管理,并在 .gitignore 中排除。
验证结果并继续扩展
验证分三步:先看页面是否能正常提交表单,再看返回内容是否包含目的地和天数对应的行程结构,最后故意填一个空目的地,确认错误提示能正常显示而不是白屏。
本地跑通后,如果部署到云服务器,注意放行 5000 端口或改用 Nginx 反向代理,生产环境不要直接用 Flask 自带服务器对外提供服务。
后续可以加缓存、把生成结果存数据库、增加多城市对比,但建议先把这条最小链路稳定跑通再扩展。
遇到异常时,优先回看接口返回体和终端日志,比反复改代码更有效。