一个反着做的天气应用
大多数天气应用的目标是让你多刷一会儿。PLOT 的目标正好相反:看完就走。
你选一个地点,或者直接共享定位,真实天气数据加载进来。然后 TabPFN——一个开放的表格基础模型——把你这一天的天气当成表格里的一行来读,给出三个答案之一:等一等、去散步、去打理花园。
接着它给你三条具体步骤,然后指望你关掉屏幕出门。整个界面的任务,被压缩在一分钟以内。
它到底给谁用
目标用户说得很直白:家里有院子、有阳台,或者附近就有公园,但习惯把天气预报翻来覆去地看、却迟迟不出门的那批人。
这个定位本身就挺有意思。它不解决"天气怎么样"的问题,它解决"知道了天气之后你到底动不动"的问题。
数据是真的,不是编的
这个项目最在意的部分,是训练数据。没有假温度。
数据来自 Open-Meteo 的历史接口(ERA5),覆盖 12 座城市、7 年的逐日记录。经过特征工程后,落成一张真实表格 outdoor_history.csv。
特征包括几项:
- 距上次霜冻的天数,由最低温 0℃ 推算
- 土壤湿度
- 风速
- 日照时长
标签不是模型瞎猜的,而是来自一套透明的园艺经验规则,写在 labels.py 里——无霜日、降水、风速边界。TabPFN 学的是这张表里的模式,不是聊天文本。作者自己也把这一点讲得很清楚。
流程拆开看就四步
第一步,你选城市或用定位,前端向 Open-Meteo 请求真实天气。
第二步,后端拿到今日气温、降水、风速、土壤数据,同时拉取 92 天的霜冻窗口。
第三步,TabPFN 做分类,输出 wait、walk、garden 三个类别以及各自的概率。比如演示里给出的结果是 garden,置信度 83%。
第四步,界面给你一张三步清单,然后结束。清单的终点是门口。
技术选型上的几个取舍
TabPFN 用的是开放权重版本,通过 tabpfn_client 调用,fit 真实行、predict_proba 出结果。作者强调的一点是:这个模型可以换掉,而不用重写整个产品。
天气接口有主备两条路。主路是 Open-Meteo 预报,带 past_days=92 拿霜冻历史;备用路是在免费托管被限流时,取最近城市的真实 ERA5 行,对应今天的日历日。
部署在 Render 上,用 render.yaml 蓝图,健康检查在 /api/healthz,TABPFN_TOKEN 放在环境变量里,从不提交。
界面刻意做得很克制:没有聊天气泡,没有紫色渐变,一个品牌、一个行动按钮、一张结果卡。城市预设覆盖 12 种气候,支持浏览器定位,支持刷新实时天气。
为什么这件事值得用表格模型
作者给出的理由很直接:霜冻和种植决策本身就是表格形态的数据。它们属于电子表格,不属于聊天线程。
一个封闭的聊天接口,拿到"距上次霜冻 208 天"这种字段,未必知道该怎么处理。而 TabPFN 就是为这种列而生的。
隐私方面,定位不被存储,天气按请求实时拉取。训练表随仓库一起发布,可以审计。离线路径也留了:CSV 加开放模型的组合,意味着在缓存了数据行的情况下,一台笔记本就能在野外跑起来。
顺带一提,首次在 Render 免费层加载,服务唤醒大约需要 30 秒。
它想让你做的事只有一件
PLOT 是 Hacktoberfest 第一周"Touch Grass"主题的参赛项目。它的口号是:离开屏幕,照料土地。
热门跟贴