旅荐网

您现在的位置是:首页 > 国内旅游目的推荐 > 正文

国内旅游目的推荐

AI+旅游爆火!这个开源神器让你秒出旅行攻略!

admin2026年07月26日 21:13:03国内旅游目的推荐4
AI+旅游爆火!这个开源神器让你秒出旅行攻略!

📌 开源地址:https://github.com/xyds1025/SmartTrip

💡 关于许可证: 本项目采用 MIT License 开源协议,这意味着你可以免费使用、修改、分发甚至商用!没错,MIT 是最宽松的开源协议之一,你拿去二次开发、做成 SaaS 产品卖钱都合法合规,唯一要求就是保留原作者的版权声明。所以放心大胆地用,不用偷偷摸摸。


一、这玩意儿到底是啥?

你有没有过这样的经历——

想出去玩,打开小红书搜攻略,翻了一百篇笔记,每篇都是"绝绝子",结果信息互相矛盾,搞了三小时还不知道该去哪。

想问ChatGPT,它给你一个"建议去三亚玩三天"的笼统回答,连从哪坐车、住哪个酒店、每天几点去哪都说不清。

更别提老人小孩的出行需求了——你妈膝盖不好,你娃才四岁,那些"特种兵式旅游"攻略根本不适用。

红鱼智游(RedFish SmartTrip) 就是为解决这个问题而生的。

它是一个基于 AI 的智能旅游规划工具,你只需要输入一句话——比如"看海"、"亲子游"、"历史文化"——系统就会自动帮你推荐10个具体景点,每个景点都有完整地址、亮点标签、交通方式、参考费用。选定目的地后,它会自动采集天气、景点、餐厅、酒店、交通、人文风俗、实景图片等数据,然后调用大模型生成一份包含每日行程(精确到分钟)、预算明细、穿衣建议、美食推荐的完整出游计划,还能一键导出PDF!

先来看看界面长啥样:

二、它凭什么让我不用再翻攻略了?

✅ 智能推荐——一句话搞定目的地

你输入"看海",它不会给你推荐"西湖"(虽然早期版本确实有这个问题,现在已经优化了),而是精准匹配三亚亚龙湾、青岛栈桥、厦门鼓浪屿等真正适合"看海"的景点。每个推荐包含:

  • 完整地址
    :不是"三亚某海边",而是"海南省三亚市吉阳区亚龙湾国家旅游度假区"这种精确到门牌号的地址
  • 亮点标签
    :["海滨", "美食"] 一目了然
  • 多种交通方式
    :地铁、公交、出租车,给你多种选择
  • 参考费用
    :门票60元这种,出门前心里有数

✅ 一键生成计划——10步数据采集,全自动

选定目的地后,系统会自动执行10个采集步骤:

  1. 🌤️ 采集天气信息
  2. 🏛️ 搜索景点
  3. 🍜 搜索美食餐厅
  4. 🏨 搜索住宿信息
  5. 🚗 查询交通方案
  6. 📚 搜索人文环境
  7. 🎎 搜索风俗习惯
  8. 📸 搜索打卡地点
  9. 🎮 搜索游玩项目
  10. 🖼️ 获取实景图片

这些步骤全部通过SSE(Server-Sent Events)实时流式输出,前端会动态显示每一步的进度,告别"转圈圈盲等"的痛苦体验。

✅ 高度定制——老幼皆宜的行程安排

你可以设置出行人数(成人/儿童/老人),系统会根据团队构成自动调整:

  • 儿童需要适当的休息时间和适合的活动
  • 老人需要较少的步行、较多的休息、无障碍设施
  • 餐饮选择兼顾不同年龄段的喜好
  • 交通方式考虑老人和儿童的便利性(避免多次换乘)

✅ PDF导出——一键保存,方便分享

生成完计划后,一键导出为PDF文件,方便打印给家人看,或者发到群里炫耀你的规划能力。

✅ 全免费数据源

这是最良心的一点——无需付费订阅任何数据服务

  • 高德地图API:每日免费额度充足,个人使用绰绰有余
  • DuckDuckGo搜索:完全免费无限制,用来搜索图片和人文信息
  • 你只需要一个LLM API Key(OpenAI兼容接口即可)

三、技术架构——简单但优雅

先给不想看代码的朋友一个一句话总结:Python后端 + Flask Web服务 + 高德地图API + DuckDuckGo搜索 + 大模型推理 = 完整的AI旅游规划系统

想深入理解的朋友,跟我来拆解一下:

redfish-smarttrip/├── app.py                  # Flask 主应用,路由与流式接口├── config_loader.py        # 配置加载器(无全局变量)├── collector.py            # 免费数据采集(高德 + DuckDuckGo)├── analyzer.py             # LLM 分析器(调用 v1 接口)├── generator.py            # 计划生成协调器(含进度回调)├── config.json             # 配置文件├── requirements.txt        # Python 依赖├── templates/│   └── index.html          # 前端页面(完整 UI)└── screenshot-home.png     # 界面截图

整个系统分为三层:

📊 数据采集层(collector.py)

FreeTravelDataCollector 类负责所有数据采集工作,核心方法:

  • _get_weather()
    :调用高德天气API,获取实时和未来天气预报
  • _search_poi()
    :调用高德POI搜索,查找景点、餐厅、酒店,并自动拼接完整地址
  • _get_transport()
    :调用高德路径规划,获取公交/驾车/步行综合方案
  • _search_web()
    :通过DuckDuckGo文本搜索,获取人文、风俗、打卡信息
  • _search_images()
    :通过DuckDuckGo图片搜索,获取实景图片

🧠 AI分析层(analyzer.py)

LLMAnalyzer 类负责调用大模型生成旅游计划。它构建了一个非常详细的系统提示词,要求模型输出结构化JSON,包含:

  • 目的地概览(人文、风俗)
  • 天气及穿衣建议(特别针对老人儿童)
  • 完整往返交通方案(含班次、费用、换乘方式)
  • 每日行程(精确到分钟,含交通方式、耗时、地址)
  • 网红打卡推荐
  • 特色美食推荐
  • 游玩项目推荐
  • 详细预算(交通、住宿、餐饮、门票、购物、其他)
  • 实用贴士

🎯 协调层(generator.py)

TravelPlanGenerator 是整个系统的"指挥官",它串联数据采集和AI分析,并处理数据标准化、字段规范化等细节工作。它还负责将实景图片注入最终结果,并添加元数据(目的地、天数、生成时间、数据来源等)。

🌐 Web层(app.py)

Flask应用提供三个核心路由:

  • /
    :首页,渲染前端页面
  • /suggest
    :推荐目的地接口,POST请求,输入旅行意愿,返回10个推荐景点
  • /generate-stream
    :生成计划流式接口,POST请求,通过SSE实时推送进度和最终结果

四、本地部署保姆级教程

好了,说了这么多,来点实际的。手把手教你从零部署,保证你跟着做就能跑起来。

📋 前置条件

  • Python 3.9 或以上(别用3.7了,都2025年了)
  • 一个能联网的电脑(废话)
  • 一个高德地图Web API Key(免费申请)
  • 一个LLM API Key(OpenAI兼容接口)

Step 1:克隆代码

git clone https://github.com/xyds1025/SmartTrip.gitcd SmartTrip

如果你网络不好,也可以直接去GitHub页面下载ZIP包,解压后进入目录。

Step 2:创建虚拟环境

强烈建议用虚拟环境,别污染你的系统Python:

# 创建虚拟环境python -m venv venv# 激活虚拟环境# Linux/Mac:source venv/bin/activate# Windows:venv\Scripts\activate

激活成功后,命令行前面会出现 (venv) 标识。

Step 3:安装依赖

pip install -r requirements.txt

依赖非常精简,只有4个包:

包名
说明
flask
Web框架,提供HTTP服务和路由
openai
OpenAI官方SDK,用于调用大模型
requests
HTTP请求库,用于调用高德API
ddgs
DuckDuckGo搜索库,用于免费搜索图片和文本

如果下载慢,可以用国内镜像源:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

Step 4:申请API密钥

这一步是关键,别跳过。

🔑 申请高德地图API Key

  1. 前往 高德开放平台 注册账号
  2. 进入控制台,点击"创建新应用"
  3. 添加Key,服务平台选择"Web服务"
  4. 提交后即可获得一个Key,长这样:a1b2c3d4e5f6g7h8i9j0

⚠️ 注意:一定要选"Web服务"类型,不是"Web端(JS API)",也不是"Android/iOS"。选错了接口调不通。

高德Web服务API个人免费额度每天5000次,对于个人使用来说绰绰有余。你一天生成100个旅行计划都够用。

🔑 获取LLM API Key

这里有几个选择:

方案
base_url
模型名称
费用
OpenAIhttps://api.openai.com/v1gpt-4
按token计费
阿里云百炼https://dashscope.aliyuncs.com/compatible-mode/v1qwen-plus
有免费额度
智谱AIhttps://open.bigmodel.cn/api/paas/v4glm-4
有免费额度
本地部署(Ollama)http://localhost:11434/v1qwen2.5
完全免费

如果你不想花钱,推荐用Ollama本地部署,完全免费,离线也能用。安装Ollama后,拉一个模型:

ollama pull qwen2.5:7b

然后用 http://localhost:11434/v1 作为base_url,模型名填 qwen2.5:7b 即可。

如果你想用国内大模型的免费额度,阿里云百炼和智谱AI都提供免费额度,注册即可使用。

Step 5:配置文件

项目根目录下有一个 config.json 文件,用你喜欢的编辑器打开它:

{    "llm": {        "api_key""你的LLM API Key",        "base_url""https://api.openai.com/v1",        "model""gpt-4"    },    "amap": {        "api_key""你的高德Web API Key"    },    "travel": {        "default_days"3,        "max_poi_per_category"10    }}

各配置项说明:

配置项
说明
示例
llm.api_key
你的LLM API密钥
sk-xxxxx
llm.base_url
API地址(需符合OpenAI v1格式)
https://api.openai.com/v1
llm.model
模型名称
gpt-4
glm-4qwen-plus
amap.api_key
高德Web服务API Key
a1b2c3d4e5f6...
travel.default_days
默认旅行天数
3
travel.max_poi_per_category
每类POI最大搜索数量
10

如果你用的是Ollama本地部署,配置大概长这样:

{    "llm": {        "api_key""ollama",        "base_url""http://localhost:11434/v1",        "model""qwen2.5:7b"    },    "amap": {        "api_key""你的高德API Key"    },    "travel": {        "default_days"3,        "max_poi_per_category"10    }}

💡 小提示:api_key 随便填个字符串就行,Ollama不校验这个字段。

Step 6:启动应用

python app.py

看到以下输出就说明启动成功了:

 * Serving Flask app 'app' * Debug mode: on * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000

打开浏览器,访问 http://127.0.0.1:5000,就能看到那个漂亮的首页了!


五、使用指南——从零到生成一份完整攻略

第一步:输入旅行意愿

在首页填写以下信息:

  • 旅行意愿
    :这是最重要的,比如"看海"、"亲子游"、"历史文化"、"美食探店"
  • 出发地
    :可选,填了会帮你规划往返交通
  • 天数
    :计划玩几天,默认3天
  • 人数
    :成人、儿童、老人各多少
  • 偏好
    :比如"轻松"、"紧凑"、"爱吃辣"

点击"推荐目的地"按钮。

第二步:浏览推荐

系统会返回10个具体景点卡片,每个卡片包含:

  • 景点名称和所属城市
  • 完整详细地址(省市区县街道门牌号)
  • 景点简介和亮点标签
  • 从出发地到目的地的大致距离
  • 建议交通方式和旅行时长
  • 多种交通方式选择
  • 参考门票或人均消费

第三步:生成计划

点击你感兴趣的景点卡片上的"生成计划"按钮,后端开始工作:

  1. 首先采集天气、景点、餐厅、酒店、交通等10类数据
  2. 然后调用大模型生成结构化攻略
  3. 每一步都有实时进度反馈,你不会在黑暗中等待

第四步:预览与导出

计划生成后,你会看到:

  • 📋 目的地概览(人文、风俗)
  • 🌤️ 天气及穿衣建议
  • 🚄 完整往返交通方案
  • 📅 每日行程(精确到分钟!)
  • 📸 网红打卡推荐
  • 🍜 特色美食推荐
  • 💰 详细预算(交通、住宿、餐饮、门票、购物、其他)
  • 💡 实用贴士

点击"导出PDF"按钮,即可保存为PDF文件。


六、常见问题排雷

Q1:推荐的目的地不准确怎么办?

最新版代码已经优化了提示词,设置了 temperature=0.1 和 seed=42 来保证稳定性。如果还有偏差,建议:

  • 使用更强大的模型(如GPT-4)
  • 更清晰地描述意愿,比如"适合亲子游的海边度假"而不是简单的"看海"

Q2:生成计划时报错 _search_web() missing 1 required positional argument

请确认你使用的是最新版本的 collector.py,其中 _search_web 方法已包含 max_results 默认参数。更新代码后重启服务即可。

Q3:需要付费购买高德或DuckDuckGo服务吗?

不需要。 高德Web服务API每日免费额度充足,DuckDuckGo搜索完全免费无限制。你唯一可能需要花钱的地方就是LLM API调用,但如果你用Ollama本地部署,连这个钱都省了。

Q4:支持国内大模型吗?

支持! 只要你的模型接口兼容OpenAI v1格式,并在 base_url 中填入对应地址即可。已验证支持的包括:

  • 智谱 GLM-4
  • 阿里云百炼 Qwen系列
  • 百度文心一言
  • Ollama本地部署的任何模型

⚠️ 部分模型可能不支持 response_format 参数,如果报错,可以在 analyzer.pyL109 中注释掉 response_format={"type": "json_object"} 这一行。

Q5:生成的PDF乱码或不完整?

确保浏览器允许跨域加载图片(实景图片来自外部),建议使用Chrome或Edge最新版本,并检查网络连接。

Q6:推荐结果每次都不一样?

代码中已设置 temperature=0.1 和 seed=42,大幅降低随机性。若仍有差异,可检查你的LLM服务端是否支持 seed 参数。

Q7:能不能自定义行程的松紧程度?

在"偏好"输入框中注明(如"轻松"、"紧凑"),大模型会根据描述调整每日景点数量和时间安排。

Q8:想增加推荐数量怎么办?

在 app.pyL39 的 /suggest 路由中,修改提示词中的"10个"为所需数量,并同步调整 max_tokens 参数以保证输出长度。


七、进阶玩法

🎮 玩法一:命令行模式

除了Web界面,项目还提供了命令行模式,入口在 main.py

python main.py

然后按提示输入目的地、出发地、天数、偏好即可。生成的计划会以JSON格式打印到终端,并保存到文件。

🎮 玩法二:接入更多大模型

项目使用OpenAI SDK,兼容任何OpenAI v1格式的接口。你可以尝试接入:

  • DeepSeek
    https://api.deepseek.com/v1,性价比极高
  • 月之暗面(Kimi)
    https://api.moonshot.cn/v1
  • MiniMax
    https://api.minimax.chat/v1

只需修改 config.json 中的 base_url 和 model 即可。

🎮 玩法三:自定义提示词

如果你想调整生成计划的内容和风格,可以修改 analyzer.pyL29-L61 中的系统提示词。比如:

  • 增加更多语言风格要求("请用幽默风趣的口吻")
  • 增加特定主题("请重点关注摄影打卡点")
  • 增加预算限制("总预算控制在5000元以内")

🎮 玩法四:Docker部署

如果你想在服务器上部署,可以用Docker:

# 创建Dockerfilecat > Dockerfile << 'EOF'FROM python:3.9-slimWORKDIR /appCOPY requirements.txt .RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simpleCOPY . .EXPOSE 5000CMD ["python", "app.py"]EOF# 构建并运行docker build -t smarttrip .docker run -d -p 5000:5000 -v $(pwd)/config.json:/app/config.json smarttrip

八、项目亮点总结

说实话,这个项目虽然代码量不大,但设计得相当精巧,有几个地方值得学习:

1. 配置管理不使用全局变量

config_loader.py 实现了一个简洁的 Config 类,支持层级取值,比如 config.get('llm', 'api_key'),干净利落,没有全局变量污染。

2. SSE流式传输

app.pyL95-L148 的 /generate-stream 接口使用SSE实现实时进度反馈,用 queue.Queue + threading 实现线程间通信,简单有效。前端不需要轮询,数据来了就推送。

3. 数据采集与AI分析分离

collector.py 和 analyzer.py 各司其职,通过 generator.py 协调。这种设计让你可以单独替换数据源或AI模型,而不影响其他部分。

4. 全免费数据源

整个项目没有使用任何付费数据源,高德API免费额度充足,DuckDuckGo搜索完全免费,这对于个人开发者来说太友好了。


九、写在最后

AI旅游规划这个赛道,市面上已经有一些产品了,但大多要么收费、要么功能有限、要么不开源。红鱼智游作为一个开源项目,提供了完整的解决方案,代码简洁、架构清晰、界面精美,MIT协议随便用,这在开源社区里算是一股清流了。

如果你是:

  • 旅行爱好者
    :直接部署使用,省去做攻略的痛苦
  • 开发者
    :学习它的架构设计,或者二次开发
  • 创业者
    :基于它做产品,MIT协议允许商用

别光收藏不行动,赶紧 git clone 下来试试吧!

git clone https://github.com/xyds1025/SmartTrip.git

如果觉得好用,给个Star⭐不过分吧?


红鱼AI · 让AI为你的每次出发赋能 🐠

本文由红鱼AI原创,转载请注明出处。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~