💡 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 准备工作

  1. 注册账号:去微信公众平台注册个小程序账号(个人号就行,免费)。
  2. 搞定数据:去和风天气(或任何免费天气 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 (降水概率) 判断。
// 迭代 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
  • ✨ 核心进化点:
    1. 🤖 AI 驱动的大脑: 抛弃死板的 if-else,接入 OpenAI。它能理解“体感温度”,能根据湿度和风力生成更有“温度”、更幽默的建议。
    2. 🛡️ 全栈架构:
      • 后端: FastAPI (Python) —— 快速、高效。
      • 前端: Vue 3 + Tailwind CSS —— 现代、美观。
    3. 📧 主动推送: 增加了邮件定时推送功能。不用打开 App,每天早上 8 点,贴心的穿衣建议准时躺在你的邮箱里。

如果你对如何从 MVP 进化到 AI 驱动的全栈应用感兴趣,欢迎 Star ⭐️Fork 🍴 这个项目!

🎯 结语

你看,从一个简单的痛点出发,到画图构思,到 MVP 实现,再到引入 AI 升级。我们并没有一开始就陷入技术细节的泥潭,而是始终围绕着“解决穿衣难题”这个核心价值。

我们用最少的代码(Code),传递了最核心的价值(Vibe)。

这就是 Vibe Coding 的魅力:不为写代码而写代码,只为解决问题而写代码。

现在,拿起你的键盘,去构建属于你的 Vibe 吧!🚀


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。