💡 Vibe Coding 实战:手把手教你写个“穿衣助手” (附 AI 进阶版)
Posted on Sat 06 December 2025 in Tech
| Abstract | Journal on 2025-12-06 |
|---|---|
| Authors | Walter Fan |
| Category | learning note |
| Status | v1.1 |
| Updated | 2025-12-06 |
| License | CC-BY-NC-ND 4.0 |
🚀 前言:什么是 Vibe Coding?
在之前的文章 Vibe Coding from 0 to 1 中,我们聊到了一个做产品的核心逻辑:先爱上问题,再寻找方案。
简单来说,"Vibe Coding" 不是让你去学什么枯燥的新语言,而是一种编程的“氛围感”和“心态”。 * 它不追求上来就整微服务、K8s 集群。 * 它追求的是:快速验证,直击痛点,爽就完事了。
今天,咱们不整虚的,直接实战!我们的目标只有一个:解决“明天到底穿多少才不会冻成狗”这个千古难题。🐶
Step 0: 需求分析 (Refine the Vibe)
动手写代码前,先来个“灵魂拷问”。很多程序员喜欢上来就建数据库表,千万别!
- 😱 痛点是什么?
- 天气 App 告诉我“明日 18 度”。18 度是啥概念?穿衬衫冷吗?穿羽绒服热吗?这个数字没有感情。
- 👥 用户是谁?
- 早上起不来、出门急匆匆、对温度没概念的“打工人”和“学生党”。
- 💎 核心价值是啥?
- 别废话,告诉我穿几件衣服就行。一秒钟做决策。
- 📱 用什么做?
- 微信小程序。为什么?因为不用下载,用完即走,随手转发。
📝 MVP (最小可行性产品) 功能清单: 1. 在哪儿? (获取当前位置) 2. 冷不冷? (获取明日气温) 3. 穿什么? (核心逻辑:气温 -> 衣服) 4. 看结果。 (展示建议)
Step 1: 系统设计 (Design the Solution)
“简单”不代表“简陋”,逻辑得通顺。
1.1 用例设计 (User Case)
用户只需要做一个动作:点开小程序。其他的,系统全包了。
usecaseDiagram
actor User as "早起懵逼的用户"
package "穿衣助手小程序" {
usecase "一键获取穿衣建议" as UC1
}
User --> UC1
note right of UC1
1. 自动定位 (你在哪)
2. 获取天气 (冷不冷)
3. 智能推荐 (穿什么)
end note
1.2 极简架构 (Architecture)
考虑到我们是 MVP,别整什么后端服务了,直接在小程序里调免费 API,快字当头!
- 前端:原生微信小程序 (WXML, WXSS, JS) —— 够用就好。
- 数据源:和风天气 (QWeather) —— 免费、准。
- 大脑:本地规则引擎 (JS 写的
if-else逻辑) —— 简单粗暴。
sequenceDiagram
participant User
participant MP as 小程序 (Mini Program)
participant WeatherAPI as 天气 API (Cloud)
User->>MP: 打开小程序 (睡眼惺忪)
MP->>MP: wx.getLocation (定位中...)
MP->>WeatherAPI: GET /weather/forecast (明天冷吗?)
WeatherAPI-->>MP: { Min: 15, Max: 22 }
MP->>MP: 🧠 规则匹配: 15-22°C -> 衬衫+外套
MP-->>User: 展示:"老铁,明天穿衬衫配薄外套!"
Step 2: 核心代码实现 (Code the Vibe)
好了,打开你的 IDE,我们开始撸代码。这里不需要复杂的框架,原生小程序反而是最快的。
2.1 准备工作
- 注册账号:去微信公众平台注册个小程序账号(个人号就行,免费)。
- 搞定数据:去和风天气(或任何免费天气 API)申请个 Key。
2.2 配置文件 (app.json)
极简主义,我们只需要一个页面。
{
"pages": [
"pages/index/index"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "明天穿什么",
"navigationBarTextStyle": "black"
},
"permission": {
"scope.userLocation": {
"desc": "我们需要知道你在哪,才能告诉你明天会不会冻着🥶"
}
}
}
2.3 界面设计 (pages/index/index.wxml)
界面要干净!重点是建议,别搞得花里胡哨像个仪表盘。
<view class="container">
<!-- 头部:定位信息 -->
<view class="header">
<text class="location">📍 {{locationName}}</text>
</view>
<!-- 核心卡片 -->
<view class="main-card">
<view class="recommendation">
<text class="title">明天建议穿:</text>
<!-- 这里是重点,字体要大! -->
<text class="clothing-text">{{clothingAdvice}}</text>
</view>
<view class="weather-info">
<!-- 辅助信息,给不放心的人看 -->
<text>🌡️ 气温:{{tempMin}}°C - {{tempMax}}°C</text>
<text class="weather-desc">{{weatherText}}</text>
</view>
</view>
<view class="footer">
<text class="tips">💡 温馨提示:别为了风度不要温度哦</text>
</view>
</view>
2.4 大脑逻辑 (pages/index/index.js)
这是我们的核心。注意 getClothingAdvice 函数,这就是我们的“规则引擎”。虽然它只是一堆 if-else,但它比复杂的 AI 更稳定、更可控(目前阶段)。
const weatherAPI = require('../../utils/weather.js');
Page({
data: {
locationName: '定位中...',
clothingAdvice: '正在计算...', // 给用户一点期待
tempMin: '--',
tempMax: '--',
weatherText: '--'
},
onLoad: function () {
this.initWeather();
},
initWeather: function () {
const that = this;
// 1. 获取位置
wx.getLocation({
type: 'wgs84',
success(res) {
const { latitude, longitude } = res;
that.fetchWeather(latitude, longitude);
},
fail() {
that.setData({ locationName: '定位失败,请授权 😭' });
}
});
},
fetchWeather: function (lat, lon) {
const that = this;
// 模拟调用天气 API
// 在真实项目中,这里会是一个 wx.request
weatherAPI.getForecast(lat, lon).then(data => {
// 算出建议
const advice = that.getClothingAdvice(data.tempMin, data.tempMax);
that.setData({
locationName: '当前位置', // 实际可以用逆地理编码换成 "北京市"
tempMin: data.tempMin,
tempMax: data.tempMax,
weatherText: data.text,
clothingAdvice: advice
});
});
},
// --- 🧠 核心规则引擎 (The Brain) ---
// 这里可以根据个人体质调整,怕冷的就把阈值调高点
getClothingAdvice: function (min, max) {
const avg = (parseInt(min) + parseInt(max)) / 2;
if (avg >= 30) {
return "背心、短裤、防晒霜。热死啦!☀️";
} else if (avg >= 25) {
return "短袖 T 恤、薄裙子。清凉为主!🍦";
} else if (avg >= 20) {
return "长袖衬衫、薄卫衣。不冷不热刚刚好。🍁";
} else if (avg >= 15) {
return "厚卫衣、风衣、牛仔外套。早晚有点凉哦。🧥";
} else if (avg >= 10) {
return "毛衣、夹克、秋裤警告!👖";
} else {
return "羽绒服!棉裤!怎么暖和怎么穿!🐧";
}
}
});
Step 3: 迭代与反馈 (Loop the Vibe)
代码写完了,发布上线?不,这只是开始。
Vibe Coding 的精髓在于反馈循环。拿着这个简陋的小程序,去发给你的朋友、室友、女朋友(如果你有的话)。
- 场景 1:朋友吐槽:“我觉得 20 度穿长袖热死个人!”
- Action:说明他是“火体质”,你可以在设置里加个“体质偏好”选项。
- 场景 2:朋友问:“下雨怎么办?我想知道带不带伞。”
- Action:好问题!在 API 返回中加上
pop(降水概率) 判断。
- Action:好问题!在 API 返回中加上
// 迭代 V1.1:增加下雨提醒
if (isRaining || pop > 60) {
advice += " 另外,出门别忘带伞!☔️";
}
Step 4: 进阶 - AI 赋能与完整实现 (Level Up)
MVP 验证了核心价值,大家觉得好用。但这时候你发现,if-else 写的规则太死板了,怎么让它更像个“人”呢?比如结合当下的时尚趋势,或者根据风力、湿度给更细腻的建议?
这时候,AI (LLM) 就该登场了!
我基于 Vibe Coding 的理念,把这个小 demo 进化成了一个功能更完整的开源项目:AI Dress Recommender。
- 🏗️ 项目地址: https://github.com/walterfan/ai-dress-recommender
- ✨ 核心进化点:
- 🤖 AI 驱动的大脑: 抛弃死板的
if-else,接入 OpenAI。它能理解“体感温度”,能根据湿度和风力生成更有“温度”、更幽默的建议。 - 🛡️ 全栈架构:
- 后端: FastAPI (Python) —— 快速、高效。
- 前端: Vue 3 + Tailwind CSS —— 现代、美观。
- 📧 主动推送: 增加了邮件定时推送功能。不用打开 App,每天早上 8 点,贴心的穿衣建议准时躺在你的邮箱里。
- 🤖 AI 驱动的大脑: 抛弃死板的
如果你对如何从 MVP 进化到 AI 驱动的全栈应用感兴趣,欢迎 Star ⭐️ 和 Fork 🍴 这个项目!
🎯 结语
你看,从一个简单的痛点出发,到画图构思,到 MVP 实现,再到引入 AI 升级。我们并没有一开始就陷入技术细节的泥潭,而是始终围绕着“解决穿衣难题”这个核心价值。
我们用最少的代码(Code),传递了最核心的价值(Vibe)。
这就是 Vibe Coding 的魅力:不为写代码而写代码,只为解决问题而写代码。
现在,拿起你的键盘,去构建属于你的 Vibe 吧!🚀
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。