`Python + 三智能体银发旅游推荐系统开源 | 完整覆盖健康+安全+适老化全链路`
本文介绍一个完整的银发旅游 AI 推荐系统开源项目——SilverJourney AI,技术栈包括 Python 3.9+、Flask、SQLAlchemy、Streamlit、微信小程序原生开发。项目完整开源,包含三智能体推荐引擎、适老化 Web 界面、微信小程序(老人端+子女端)、完整 pytest 测试套件和 GitHub Actions CI 配置。
>
> **GitHub 地址**:https://github.com/adayu68/SilverJourneyAI
## 为什么要做这个项目?
去年陪家里老人出去旅游,用携程帮他订景点——字小到他根本看不清,搜索框更是不知道怎么用。好不容易订好,景区里的台阶把膝盖不好的他折腾得够呛,原本开心的旅行变成了受罪。
那一次回来,我就在想:**2.8 亿老年人,旅游市场万亿规模,但现有的旅游产品有没有一个是真正为老人设计的?**
答案是:几乎没有。
于是花了几个月时间,做了这个项目:**SilverJourney AI**。
---
## 现有平台到底哪里不行?
| 痛点 | 现状 | 影响 |
|------|------|------|
| 字体太小 | 普通 12-14px,配色对比度低 | 老年人看不清,放弃使用 |
| 忽略健康需求 | 不考虑慢性病、行动能力 | 推荐超出老人体力的目的地 |
| 安全无保障 | 子女无法实时了解老人状态 | 独自出行风险高,家属焦虑 |
| 交互门槛高 | 需要打字搜索 | 数字鸿沟,老年人根本用不来 |
| 出行材料缺失 | 无定制化出行材料 | 老人出行前准备不足 |
| 推荐不精准 | 通用算法不懂银发需求 | 推荐结果不适用 |
---
## SilverJourney AI 是什么?
一句话:**让老人安心出行,让子女放心放手。**
核心能力:
- 🎤 **语音交互**:Whisper 支持普通话 + 方言(粤语/川话/闽南话),老人说话就能用
- 🤖 **三智能体评分**:健康 Agent + 安全 Agent + 兴趣 Agent,三维度联合评分
- 🛡️ **安全守护**:医疗资源距离 + 实时天气 + 人流密度,低于 2 星自动过滤
- 📱 **子女小程序**:GPS 实时位置同步 + 异常自动预警推送
- 📦 **出行包生成**:大字版行程图片 + 慢速语音导览 + 紧急联系卡
---
## 三智能体架构是核心,说说设计思路
这是项目最有意思的地方。
传统推荐系统用一个模型打分,银发旅游的问题是**评价维度完全不同于普通用户**:
- 普通用户关心:好玩、拍照好看、性价比
- 老年用户关心:**走多少步?有没有台阶?附近有没有医院?子女能不能联系到我?**
所以我设计了三个独立 Agent,每个负责一个维度:
```
┌──────────────┐
│ 用户输入 │
│(语音/文字) │
└──────┬───────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────┐ ┌──────────────┐
│ HealthAgent │ │SafetyAgent│ │InterestAgent │
│ 康养适配 │ │ 安全评估 │ │ 兴趣匹配 │
│ │ │ │ │ │
│ · 慢性病匹配 │ │· 医疗距离 │ │· 历史足迹 │
│ · 步行强度 │ │· 天气风险 │ │· 同龄偏好 │
│ · 无障碍设施 │ │· 人流密度 │ │· 文化习惯 │
└──────┬───────┘ └────┬─────┘ └──────┬───────┘
│ │ │
└──────────────┼──────────────┘
▼
┌────────────────┐
│ Moderator │
│ 裁判器/融合器 │
│ 加权融合评分 │
│ 安全过滤兜底 │
└────────┬───────┘
▼
┌────────────────┐
│ Top-K 推荐结果 │
│ + 出行包生成 │
└────────────────┘
```
### HealthAgent 怎么工作的?
```python
@dataclass
class HealthProfile:
"""用户健康画像"""
age: int = 65
mobility_score: float = 3.0 # 行动能力 1-5
chronic_diseases: List[str] = None # ["高血压","糖尿病","心脏病","关节炎"]
health_level: str = "good" # excellent/good/moderate/limited
travel_companion: str = "family" # alone/family/group_tour
@dataclass
class POIHealthData:
"""POI健康评估所需数据"""
estimated_daily_steps: int = 5000 # 预估日均步数
stair_count: int = 0 # 台阶数量
nearest_hospital_km: float = 5.0 # 最近医院距离
has_wheelchair_access: bool = False # 轮椅通道
has_rest_area: bool = True # 休息区
wellness_index: float = 3.0 # 康养指数
```
HealthAgent 会把用户的健康画像和 POI 数据交叉评估,比如:
- 有**心脏病**的用户 → 过滤掉日均步数超过 8000 步的景区
- 有**关节炎**的用户 → 台阶超过 100 级自动降分
- **独自出行** → 最近医院必须在 3km 以内,否则安全分直接扣满
### Moderator 裁判器的设计
三个 Agent 各自给出 0-5 星评分后,Moderator 负责融合:
```
最终分 = 健康分 × 0.4 + 安全分 × 0.35 + 兴趣分 × 0.25
```
**但有一个兜底规则**:安全分 < 2.0 星,无论其他维度多高,**直接过滤,不进推荐列表**。
这个设计的逻辑是:对于老年人,安全是底线,不是可以被「综合分」拉高的维度。
---
## 适老化的细节
这部分是我花时间最多的,也是最容易被忽视的。
### 界面设计规范
| 元素 | 普通标准 | 银发标准 | 说明 |
|------|---------|---------|------|
| 正文字号 | 14px | **18px+** | 老年人视力退化 |
| 最小触控面积 | 44×44px | **60×60px** | 手抖、关节炎用户 |
| 颜色对比度 | 4.5:1 | **7:1** | 白内障/老花眼 |
| 行间距 | 1.4 | **1.8** | 阅读疲劳 |
| 按钮文字 | 图标为主 | **文字为主** | 老人不懂图标含义 |
### 语音交互
用 OpenAI Whisper 做语音识别,特别优化了:
- 方言识别(粤语/四川话/闽南话)
- 慢语速处理(老年人说话较慢,断句多)
- 兜底文字提示(语音识别失败时,放大文字输入框)
### 出行包生成
这是用户反馈最好的功能。老人出发前,系统自动生成:
1. **大字版行程图片**(微信可直接分享给子女)
2. **语音版行程导览**(慢速 TTS,用老人熟悉的语气)
3. **紧急联系卡**(景区急救电话 + 子女电话 + 最近医院)
---
## 微信小程序:子女端的设计
老人在外,子女最担心的就是联系不上。
子女端小程序做了:
- **实时位置**:老人授权后,GPS 每 5 分钟同步一次位置
- **异常预警**:超过预设安全区域 → 自动微信推送给子女
- **一键呼叫**:子女端一键拨打老人电话
这个功能是我问了十几位老人家属后加进去的,他们几乎每个人都说「这个最重要」。
---
## 技术栈
```
后端
├── Python 3.9+
├── Flask(RESTful API)
├── SQLAlchemy + SQLite(POI数据库)
└── ReportLab(PDF出行包生成)
AI 层
├── 三智能体规则引擎(无需外部大模型,可本地运行)
├── OpenAI Whisper(语音识别,本地部署)
└── Moderator 加权融合器
前端
├── Streamlit(老人端 Web APP,大字体深色主题)
└── 微信小程序原生(WXML/WXSS/JS,子女端)
工程化
├── pytest(完整单元测试套件)
├── GitHub Actions CI(多Python版本测试+Codecov)
└── i18n 国际化(中/英双语)
```
---
## 和主流平台的对比
| 维度 | 携程 / 飞猪 | **SilverJourney AI** |
|------|------------|----------------------|
| 界面适老化 | 普通字号 | ✅ 18px+ · 高对比度 · 大按钮 |
| 健康评估 | 无 | ✅ 慢性病 · 步行量 · 无障碍设施 |
| 安全评估 | 无 | ✅ 医疗距离 · 天气 · 人流密度 |
| 子女联动 | 无 | ✅ 实时位置 + 异常预警 |
| 语音交互 | 普通话 | ✅ Whisper 多方言 |
| 出行材料 | 无 | ✅ 大字版行程 + 语音导览 |
| 推荐架构 | 单一协同过滤 | ✅ 三智能体协作 + 裁判器 |
| 开源 | 完全闭源 | ✅ MIT,可二次开发 |
---
## 快速上手
```bash
# 克隆项目
git clone https://github.com/adayu68/SilverJourneyAI.git
cd SilverJourneyAI
# 安装依赖
pip install -r requirements.txt
# 启动 Web 界面(老人端)
streamlit run app.py
# 启动 API 服务(子女小程序后端)
python api_server.py
```
浏览器打开 `http://localhost:8501`,就能看到完整界面。
---
## 项目结构
```
SilverJourneyAI/
├── silverjourney/
│ ├── agents/
│ │ ├── health_agent.py # 康养评估 Agent
│ │ ├── safety_agent.py # 安全评估 Agent
│ │ ├── interest_agent.py # 兴趣匹配 Agent
│ │ └── moderator.py # 裁判器/结果融合
│ ├── database/
│ │ ├── models.py # SQLAlchemy 数据模型
│ │ └── seed_data.py # 13 城市 POI 种子数据
│ └── utils/
│ └── base_agent.py # Agent 抽象基类
├── miniprogram/ # 微信小程序源码
│ ├── pages/
│ │ ├── index/ # 老人端首页
│ │ ├── recommend/ # 推荐结果页
│ │ ├── family/ # 子女端
│ │ └── travel-pack/ # 出行包页面
│ └── cloudfunctions/ # 云函数
├── tests/ # pytest 测试套件
├── app.py # Streamlit 主入口
├── api_server.py # Flask API 服务
└── requirements.txt
```
---
## 当前进度和路线图
**v1.0.0(已发布)**
- [x] 三智能体核心引擎
- [x] Streamlit Web 界面(适老化)
- [x] 微信小程序(老人端 + 子女端)
- [x] 13 城市 POI 数据库
- [x] PDF 出行包生成
- [x] 完整测试套件
**v1.1(开发中)**
- [ ] 接入真实天气 API(中央气象台)
- [ ] 更多城市 POI 数据(50 城)
- [ ] 出行包支持更多格式
**v2.0(规划中)**
- [ ] 接入 LLM,实现自然语言对话式规划
- [ ] 老年人旅游保险联动
- [ ] 社区功能(同龄旅伴匹配)
---
## 最后
这个项目还有很多可以完善的地方,但我更希望它能**作为一个起点**,让更多开发者关注银发群体的数字化需求。
老年人用不来智能手机,不是他们的问题,是我们没做好。
如果你觉得这个方向有意义,欢迎:
- ⭐ 给项目点个 Star
- 🐛 提 Issue 反馈问题
- 🔧 提 PR 贡献代码
- 📣 分享给身边关注银发科技的朋友
**仓库地址**:https://github.com/adayu68/SilverJourneyAI
---
*如果你身边有老人用过类似产品,或者有更好的设计思路,欢迎在评论区分享——这个项目需要更多真实用户的声音。*
掘金文章:https://juejin.cn/post/7621127969692467227
在线体验:https://silverjourneyai-ebbajzza3o3rswyhswnqrf.streamlit.app/
GitHub:https://github.com/adayu68/SilverJourneyAI
更多推荐



所有评论(0)