☰
wardrowbe 天气驱动选衣:Open-Meteo 穿搭推荐逻辑完全解析
2026/10/27 1:50:03 网站建设 项目流程
  • 后端
  • 前端
  • AI 应用
  • 本地部署

【免费下载链接】wardrowbe

Put your wardrobe in rows. Self-hosted AI-powered wardrobe management app.

项目地址:https://gitcode.com/gh_mirrors/wa/wardrowbe
点击查看免费下载

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 的坐标解析有三级优先级:

  1. 请求参数里直接带latitude/longitude;
  2. 用户档案里保存的location_lat/location_lon;
  3. 只有城市名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.

项目地址:https://gitcode.com/gh_mirrors/wa/wardrowbe
点击查看免费下载

相关推荐

上一篇:月下载 110 万、曾登日榜第一:supervision 凭什么成为 2026 年最稳的 CV 基建
下一篇:刚刚,周榜第18的no-ai-slop单日又涨2.1k:"去AI味"正在变成一门显学

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询