- 后端
- 前端
- AI 应用
- 本地部署
【免费下载链接】wardrowbe
Put your wardrobe in rows. Self-hosted AI-powered wardrobe management app.
wardrowbe 是一款自托管的 AI 衣橱管理应用,它的核心亮点之一是「天气驱动选衣」:基于Open-Meteo免费天气接口获取的实时气温、降水、湿度等数据,结合你的衣橱单品、风格偏好与温度敏感度,自动筛出最适合当下天气的候选衣物,再交给 AI 组合出完整穿搭。本文将从数据获取、温度打分到提示词注入,完整解析这套推荐逻辑是如何运转的。
一、为什么 wardrowbe 要做天气驱动选衣
「今天该穿什么」是衣橱应用最真实的痛点。wardrowbe 的思路不是让用户自己翻衣柜,而是把天气作为第一变量:
- 气温决定穿厚穿薄,降水决定要不要带外套,季节决定整体基调;
- 天气数据来自 Open-Meteo 免费接口,无需任何付费 Key,自托管也能稳定运行;
- 推荐结果会随天气变化而变化——上午晴、傍晚转雨,推荐就会倾向可拆卸的外套。
下面拆解这条数据链路。
二、天气数据从哪来:Open-Meteo 免费接口
天气能力的核心实现在 weather_service.py,对外暴露的两个接口定义在 weather.py。
2.1 实时天气与 WMO 天气代码
GET /weather/current会向 Open-Meteo 请求一组实时字段:气温、体感温度、相对湿度、降水量、天气代码、风速、是否白天、紫外线指数等。
其中condition并不是接口原样返回的文字,而是把 Open-Meteo 的WMO 天气代码(如63→rain、71→light snow、95→thunderstorm)翻译成人能读懂的描述。这套映射表在 weather_service.py 里以WMO_CODES字典维护。
2.2 地理编码:把城市名变成坐标
天气接口只认经纬度。wardrowbe 的坐标解析有三级优先级:
- 请求参数里直接带
latitude/longitude; - 用户档案里保存的
location_lat/location_lon; - 只有城市名
location_name时,调用OpenStreetMap Nominatim做地理编码,把 "London, UK" 变成坐标。
如果三级都拿不到坐标,接口会返回400,提示你先在设置里配置位置。
2.3 缓存策略:一小时天气只取一次
为降低对外部接口的压力,wardrowbe 用Redis 做两层缓存:
- 天气数据缓存
1 小时(CACHE_TTL = 3600),同一坐标一小时内直接命中缓存; - 地理编码结果缓存
30 天,查不到的城市名只缓存1 小时负结果,避免反复打爆 Nominatim。
三、温度打分:候选衣物如何被筛选
拿到天气后,真正的筛选发生在打分器 item_scorer.py。它的任务是把整个衣橱按「当前天气下的适配度」排序。
3.1 冷热阈值与温度敏感度
每件衣物会先被判进一个温度带。默认阈值来自 scales.json:冷阈值 10°C、热阈值 25°C。你可以在设置里改这两个值,还能调「温度敏感度」:
| 敏感度设置 | 冷阈值变化 | 热阈值变化 | 效果 |
|---|---|---|---|
| 怕冷/热(high) | +5°C | −5°C | 阈值向中间收紧,更早触发保暖/降温 |
| 不敏感(low) | −5°C | +5°C | 阈值向外放宽,更宽容 |
判进温度带后,打分规则大致如下:
| 温度带 | 判定 | 高分单品 | 低分单品 |
|---|---|---|---|
| 冷 | 低于冷阈值 | 毛呢/抓绒、保暖层、冬季单品(1.0) | 短裤/背心/凉鞋(0.05) |
| 热 | 高于热阈值 | 棉麻丝、夏季单品(1.0) | 保暖层/靴子(0.05) |
| 温和 | 介于两者 | 一律 1.0 | — |
💡 一件厚打底裤(thermal tights)会被识别为保暖单品,在冷天加权重、在热天降权重——wardrowbe 甚至区分了「透明打底」和「保暖打底」。
3.2 着装窗口:为「接下来一整天」做推荐
wardrowbe 有个很有想法的细节:着装窗口(wearing window)。它不只用「此刻」的气温,而是计算「从现在到晚上 9 点」这一段的最高/最低温。
- 如果窗口内温差 ≥ 8°C,说明早晚凉、中午热,推荐会倾向可增减的叠穿单品;
- 如果只剩不到 2 小时的窗口(比如深夜),则退回到只看当前读数。
- 判断「是否全天都比热阈值还高」时,一旦成立,推荐会主动去掉打底裤这类下装,避免大热天硬塞一双厚裤袜。
这套逻辑让 wardrowbe 的推荐更贴近「这一天你实际会经历的温度」,而不是某个瞬间的快照。
3.3 下雨与大风:加分项
- 降水概率 > 50% 时,夹克、大衣、卫衣这类防雨外层额外 +0.1 分;
- 季节还会根据纬度自动判断南北半球(南半球 1 月是夏天),再用天气修正:热天的夏季单品、冷天的冬季单品都会拿满分。
最终的天气分会和「正式度分、季节分、近期穿着分、偏好分」等相乘,得到每件单品的综合得分,再取Top 70进入下一步的 AI 推荐。
四、AI 推荐:把天气写进提示词
筛选出的候选会被编号,连同天气一起注入提示词 recommendation.txt,由 recommendation_service.py 组装。
4.1 天气信息注入 Prompt
提示词的上下文头部会写明:
- 场合(occasion)、一天中的时段;
- 天气:X°C(体感 Y°C)、天气状况、降水概率;
- 若着装窗口温差大,还会追加一句「接下来温度将在 A°C 到 B°C 之间大幅波动,优先选择两端都合适的叠穿单品」。
同时,候选衣物按适配度预排序——越靠前越合适,AI 被明确叮嘱「优先选列表靠前的单品」。这样 AI 不只是一个「搭配师」,而是在一套已经过天气筛选的候选池里做最优选择。
4.2 分层穿搭与换季逻辑
提示词里的造型原则直接把天气考虑进去:
- 面料匹配天气:「温暖天用亚麻/棉,寒冷天用毛呢/针织」;
- 叠穿思路:天冷/有雨时主动加外层,基础层 + 中层 + 外层都要能在脱掉外层后依然成立;
- 时段适配:清晨偏清爽实用,夜晚偏深色精致,全天则选可调整的百搭单品。
AI 最终返回 3 套不同主单的完整搭配。多出来的完整方案会被缓存供「换一套」按钮使用——但只有当温度仍在 ±3°C 以内、且处于同一温度带时,缓存才会被复用;一旦天气变了,wardrowbe 会重新生成,而不是把过时的推荐塞给你。
五、明天穿什么:提前一天的天气推荐
wardrowbe 的定时提醒(notifications.py)支持「提前一天通知」。这时推荐不再用实时天气,而是走 weather_service.py 里的get_tomorrow_weather:
- 拉取 2 天日预报,取第二天的数据;
- 用「当日最高/最低温的平均值」作为代表气温,最高温作为体感(按白天穿搭考虑);
- 时段标记为
full_day,让 AI 按「全天通用」来搭配。
拿不到预报时会优雅降级为当前天气,提醒不会因此失败。
六、在界面上设置地点与手动覆盖天气
6.1 在设置中配置位置
天气功能依赖位置。打开「设置 → Location」(settings/page.tsx),你可以:
- 填入城市名(选填)+ 经纬度,或点「Use My Location」用浏览器定位自动获取;
- 选择时区,点Save Location保存。
配置好之后,仪表盘首页会直接显示「Today's Weather」卡片,并给出Get Outfit Suggestion一键入口(dashboard/page.tsx)。
6.2 手动覆盖天气
如果你不在本地、或者只是想测试效果,可以在「Suggest Outfit」页面打开天气覆盖开关(suggest/page.tsx),手动设定温度与晴天/多云/雨天,再触发推荐。这套weather_override数据会绕过实时天气直接喂给推荐流程,方便调试与演示。
七、常见问题(FAQ)
问:wardrowbe 的天气数据要花钱吗?不用。天气来自 Open-Meteo 免费接口,地理编码来自 OpenStreetMap,均为免费公开服务,自托管零成本。
问:为什么推荐和我看到的实时气温略有出入?wardrowbe 用的是「着装窗口」温度(从现在到晚 9 点的范围),而非单点快照;且天气结果有 1 小时缓存,属于正常现象。
问:没有设置位置能生成推荐吗?不能。系统会提示你先在设置里配置位置,或手动覆盖天气。
问:推荐结果会变吗?会。天气、你的偏好、以及近 7 天穿过的组合都会影响结果,wardrowbe 还会自动排除当天已被你拒绝的单品。
📌延伸阅读
- 天气服务与地理编码:backend/app/services/weather_service.py
- 温度打分逻辑:backend/app/services/item_scorer.py
- 推荐服务与提示词组装:backend/app/services/recommendation_service.py
- 推荐提示词模板:backend/app/prompts/recommendation.txt
- 前端天气 Hook:frontend/lib/hooks/use-weather.ts
- 后端
- 前端
- AI 应用
- 本地部署
【免费下载链接】wardrowbe
Put your wardrobe in rows. Self-hosted AI-powered wardrobe management app.
相关推荐
wardrowbe:自托管AI衣橱管理神器,拍照识别+天气穿搭推荐完整指南
wardrowbe:自托管AI衣橱管理神器,拍照识别+天气穿搭推荐完整指南 wardrowbe 是一款免费的自托管 AI 衣橱管理应用:拍照上传衣物,AI 自动
后端前端AI 应用本地部署搭建专属天气数据服务:Open-Meteo平台完全指南
搭建专属天气数据服务:Open Meteo平台完全指南 还在为天气API的收费限制而烦恼吗?想要拥有完全掌控的天气数据服务?Open Meteo开源天气数据平台
后端Open-Meteo 开源天气API:免费搭建个人天气服务的终极指南
Open Meteo 开源天气API:免费搭建个人天气服务的终极指南 还在为商业天气API的高昂费用发愁吗?想要拥有完全自主控制的天气数据服务吗?Open Me
后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考