本文介绍一个完整的银发旅游 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

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐