kiro生成小程序商业案例

0 阅读13分钟

悦期记 · 技术分享文档

一个从需求到上线,全程由 AI(Kiro)辅助完成的微信小程序实践记录


前言: PRD产出,我把我的想法给了不同的模型,来产出PRD,然后进行对比,

image.png 分别在 Kimi、Gemini、豆包、kiro 都给了相同的提示词,产出了, 最终我采用了 kimi 输出的原型。Gemini的文档能力还是偏弱,图片能力是我用的这几个里面最强的,一般我做图片处理都是用 Gemini。

一、项目背景与定位

1.1 产品简介

悦期记是一款面向备孕女性、孕期妈妈和 0-6 岁宝妈的综合性母婴服务微信小程序。产品定位轻量、纯净,聚焦核心工具需求,不做信息过载的内容平台。

核心功能模块:

模块功能
首页(孕期)经期日历、排卵期预测、受孕概率计算
宝宝成长记录、疫苗接种、生长曲线
社区图文帖子、点赞评论、标签搜索
AI 助手多轮对话、个性化母婴建议、会话管理
我的个人资料、会员管理、设置

1.2 这个项目的特别之处

整个项目从零到上线,全程使用 Kiro 完成,包括:

  • 需求文档(PRD)撰写
  • 技术架构设计
  • 数据库 Schema 设计
  • 所有页面和组件开发
  • 云函数开发与调试
  • AI 功能集成
  • 支付功能接入
  • Bug 修复与迭代

这是一次真实的"AI 辅助全栈开发"实践,验证了 AI IDE 在完整项目生命周期中的能力边界。

功能截图:

image.png

image.png


二、技术栈选型

2.1 整体架构

┌─────────────────────────────────────────────────────┐
│                  微信小程序前端                      │
│         原生框架(WXML + WXSS + JavaScript)        │
├─────────────────────────────────────────────────────┤
│                  微信云开发平台                      │
│   云函数(Node.js)  云数据库  云存储               │
├─────────────────────────────────────────────────────┤
│                  第三方服务                          │
│   DeepSeek API(AI对话)  微信支付(会员充值)       │
└─────────────────────────────────────────────────────┘

2.2 选型理由

为什么选微信小程序原生框架而不是 Taro/uni-app?

  • 目标平台单一(只做微信),无需跨端
  • 原生框架对云开发支持最完整
  • 减少框架层的不确定性,AI 生成代码更稳定

为什么选微信云开发而不是自建服务器?

  • 零运维成本,无需购买服务器
  • 与微信生态深度集成(openid、支付回调等)
  • 云函数天然支持按量计费,适合初期产品
  • 数据库权限规则与 openid 绑定,安全性有保障

为什么选 DeepSeek 而不是 GPT/Claude?

  • 国内访问稳定,无需代理
  • 价格更低,适合 C 端产品控制成本
  • deepseek-chat 模型中文理解能力强

三、项目初始化与工程结构

3.1 目录结构

悦期记/
├── pages/                    # 主包页面(TabBar 页面)
│   ├── index/               # 首页(经期日历)
│   ├── baby/                # 宝宝首页
│   ├── community/           # 社区首页
│   ├── ai/                  # AI 助手页面
│   └── profile/             # 个人中心
├── packagePregnancy/         # 孕期功能分包
├── packageBaby/              # 宝宝功能分包
├── packageCommunity/         # 社区功能分包
├── packageProfile/           # 个人功能分包(独立分包)
│   ├── pages/
│   │   ├── membership/      # 会员管理页
│   │   ├── settings/        # 设置页
│   │   └── ...
│   └── components/
│       └── payment-modal/   # 支付弹窗组件
├── components/               # 公共组件
│   └── ai/
│       ├── chat-bubble/     # 消息气泡
│       ├── input-bar/       # 输入栏
│       ├── typing-indicator/ # 打字动画
│       └── quick-replies/   # 快捷回复
├── cloudfunctions/           # 云函数
│   ├── login/
│   ├── aiChat/              # AI 对话(核心)
│   ├── sessionManager/
│   ├── createOrder/         # 微信支付下单
│   ├── payNotify/           # 支付回调
│   ├── createPost/
│   ├── getPosts/
│   └── ...(共 20+ 个云函数)
├── services/                 # 服务层封装
│   └── ai.js
├── utils/                    # 工具函数
│   ├── aiCache.js
│   └── validator.js
└── assets/                   # 静态资源

3.2 分包策略

小程序主包限制 2MB,总包限制 20MB。采用按功能模块分包:

分包类型说明
主包-仅含 5 个 TabBar 页面 + 公共组件
packagePregnancy普通分包经期详情、排卵期、统计图表
packageBaby普通分包宝宝详情页、生长曲线、疫苗
packageCommunity普通分包帖子详情、发布、搜索
packageProfile独立分包个人设置、会员管理(可独立运行)

packageProfile 设为独立分包的原因:会员支付页面可能通过分享链接直接打开,独立分包无需依赖主包即可运行。

3.3 自定义 TabBar

由于需要 5 个 Tab(原生最多支持 5 个,但样式定制受限),使用自定义 TabBar:

// app.json
"tabBar": {
  "custom": true,
  "list": [...]
}

自定义 TabBar 组件在 custom-tab-bar/ 目录,每个页面的 onShow 生命周期中调用 this.getTabBar().setSelected(index) 同步选中状态。


四、云开发配置

4.1 初始化

app.js 中初始化云开发:

App({
  onLaunch() {
    if (!wx.cloud) {
      console.error("请使用 2.2.3 或以上的基础库");
      return;
    }
    wx.cloud.init({
      env: "your-env-id", // 云环境 ID
      traceUser: true, // 将用户访问记录到用户管理
    });
  },
});

4.2 数据库集合设计

项目共使用以下数据库集合:

基础功能:

集合名用途权限
users用户信息仅自己读写
cycle_records经期记录仅自己读写
daily_records每日症状记录仅自己读写
pregnancy_records孕期信息仅自己读写
babies宝宝档案仅自己读写

社区功能:

集合名用途权限
posts帖子所有人可读,自己可写
post_likes点赞记录仅自己读写
post_comments评论所有人可读,自己可写

AI 功能:

集合名用途权限
ai_sessions会话记录仅自己读写
ai_messages消息记录仅自己读写
ai_user_quotaToken 用量统计仅管理端写,自己读

支付功能:

集合名用途权限
orders订单记录仅管理端读写

4.3 数据库权限规则

微信云开发数据库支持基于 openid 的细粒度权限控制:

// 用户只能读写自己的数据
{
  "read": "doc.openid == auth.openid",
  "write": "doc.openid == auth.openid"
}

// 所有人可读,自己可写(社区帖子)
{
  "read": true,
  "write": "doc.openid == auth.openid"
}

// 仅管理端(云函数)可读写(订单、支付数据)
{
  "read": false,
  "write": false
}

4.4 云函数部署

所有云函数在微信开发者工具中右键 → 上传并部署:云端安装依赖

需要配置环境变量的云函数:

云函数环境变量说明
aiChatDEEPSEEK_API_KEYDeepSeek API 密钥
createOrderWX_APPID WX_PAY_MCH_ID WX_PAY_SERIAL_NO WX_PAY_PRIVATE_KEY WX_PAY_API_V3_KEY WX_PAY_NOTIFY_URL微信支付配置
payNotify同上(除 NOTIFY_URL)支付回调处理

五、核心模块开发

5.1 首页:经期日历与排卵期预测

排卵日计算算法:

排卵日 = 下次月经预计日 - 14天
排卵期 = 排卵日前5天 ~ 排卵日后4天(共10天)
黄金受孕期 = 排卵日前2天 ~ 排卵日后1天

受孕概率按距排卵日天数分级(-5天到+4天,概率从10%到50%)。

云函数 getCyclePrediction 根据历史经期数据预测未来3个月经期,getOvulationData 计算当月排卵期数据,前端日历组件根据返回数据渲染不同颜色标记。

5.2 社区模块

社区采用小红书风格的图文帖子流,核心云函数:

  • createPost:发布帖子,支持分类、标签、图片
  • getPosts:分页查询,支持按分类/标签筛选
  • searchPosts:全文搜索(标题+内容)
  • likePost:点赞/取消点赞(幂等操作)
  • commentPost:评论,支持回复

所有云函数统一响应格式:

// 成功
{ success: true, data: { ... } }

// 失败
{ success: false, error: '错误信息' }

5.3 AI 助手模块

这是项目最复杂的模块,也是 Kiro 辅助开发投入最多的部分。

架构设计
小程序前端(AI页面)
    ↓ wx.cloud.callFunction
aiChat 云函数
    ↓ 内容过滤 → 提示词生成 → DeepSeek API
    ↓ 异步写入数据库(不阻塞返回)
返回 AI 回复给前端

关键设计决策:数据库操作全部异步后台执行,不阻塞主流程返回,将云函数响应时间从 3-5 秒降低到 API 本身的响应时间(1-2 秒)。

提示词系统

根据用户所处阶段(备孕/孕期/育儿)动态生成系统提示词:

// cloudfunctions/aiChat/prompts.js
function getScenePrompt(stage, context) {
  switch (stage) {
    case "preparing":
      return PREPARING_PROMPT;
    case "pregnant":
      return PREGNANT_PROMPT + `\n当前孕周:${context.pregnancyWeek}周`;
    case "parenting":
      return PARENTING_PROMPT + `\n宝宝年龄:${context.babyAge}个月`;
    default:
      return PREPARING_PROMPT;
  }
}

提示词明确要求模型:不提供医疗诊断、严重问题建议就医、可回答非母婴话题。

内容安全过滤

contentFilter.js 实现两层过滤:

  1. 输入过滤:30个禁止关键词(自伤/暴力/毒品/违法/色情/赌博),命中即拒绝
  2. 输出处理:检测 AI 回复中的医疗关键词(20类),自动附加免责声明
可靠性机制
// 重试配置
const RETRY_CONFIG = {
  maxRetries: 2,
  retryDelay: 1000,
  retryableStatusCodes: [408, 429, 500, 502, 503, 504],
};

// 熔断器:失败5次后触发,60秒后自动恢复
const CIRCUIT_BREAKER_CONFIG = {
  failureThreshold: 5,
  timeout: 60000,
  halfOpenRequests: 1,
};
Token 配额管理

每用户设置 100 万 tokens 免费额度,存储在 ai_user_quota 集合:

// 每次 API 调用后异步累加
await db
  .collection("ai_user_quota")
  .doc(id)
  .update({
    data: { totalTokens: db.command.inc(tokensUsed) },
  });

超出配额时返回 quotaExceeded: true,前端弹窗提示。

多会话 Tab 管理

前端实现了类似浏览器标签页的多会话管理:

  • 支持新建、切换、关闭、重命名会话
  • 支持 ‹ › 按钮调整 Tab 顺序
  • 会话数据持久化到本地存储(wx.setStorageSync
  • customTitle 标志位:手动命名的 Tab 不会被自动覆盖标题

5.4 会员支付模块

支付流程
前端点击购买
    ↓
调用 createOrder 云函数(统一下单)
    ↓ 调用微信支付 JSAPI 接口
    ↓ 写入 orders 集合(status: pending)
返回 prepay_id 和签名参数
    ↓
前端调用 wx.requestPayment
    ↓ 用户完成支付
微信服务器回调 payNotify 云函数
    ↓ AES-256-GCM 解密回调数据
    ↓ 验证 trade_state === 'SUCCESS'
    ↓ 更新 orders 状态(paid)
    ↓ 更新 ai_user_quota(写入会员信息,重置 usedCount)
关键实现细节

签名生成(createOrder 云函数):

// 请求签名(调用微信支付 API 用)
function buildRequestSign(method, url, timestamp, nonce, body, privateKey) {
  const message = `${method}\n${url}\n${timestamp}\n${nonce}\n${body}\n`;
  const sign = crypto.createSign("RSA-SHA256");
  sign.update(message);
  return sign.sign(privateKey, "base64");
}

// 支付签名(返回给前端调起支付用)
function buildPaySign(appId, timestamp, nonceStr, prepayId, privateKey) {
  const message = `${appId}\n${timestamp}\n${nonceStr}\nprepay_id=${prepayId}\n`;
  const sign = crypto.createSign("RSA-SHA256");
  sign.update(message);
  return sign.sign(privateKey, "base64");
}

回调解密(payNotify 云函数):

function decipherGcm(ciphertext, associatedData, nonce, apiV3Key) {
  const key = Buffer.from(apiV3Key, "utf8");
  const ciphertextBuf = Buffer.from(ciphertext, "base64");
  const authTag = ciphertextBuf.slice(ciphertextBuf.length - 16);
  const data = ciphertextBuf.slice(0, ciphertextBuf.length - 16);
  const decipher = crypto.createDecipheriv(
    "aes-256-gcm",
    key,
    Buffer.from(nonce, "utf8"),
  );
  decipher.setAuthTag(authTag);
  decipher.setAAD(Buffer.from(associatedData, "utf8"));
  return JSON.parse(
    Buffer.concat([decipher.update(data), decipher.final()]).toString("utf8"),
  );
}

payNotify 需要开启 HTTP 访问服务,在云开发控制台 → 云函数 → payNotify → HTTP访问服务 → 开启,获得公网 URL 填入 notify_url

幂等处理:回调可能重复触发,通过检查 order.status === 'paid' 防止重复处理。


六、开发迭代记录

Git 提交历史

e6fb601  init: 初始化基本页面布局
704235c  init: 基础框架搭建完成
5550e37  feat: 个人信息页面功能添加
52fe0ba  feat: 首页基础功能
40d94db  ui: 完善UI
f891b4a  feat: 完善首页功能
55c198f  feat: 增加分享功能
8ea8d10  feat: 增加宝宝功能
7b2f41a  feat: 增加社区功能
c163c4a  fix: 修改分享功能的title
c92f4c1  feat: 增加AI 会话功能
49fd45a  feat: AI功能使用上限添加
747da56  feat: 增加支付代码

各阶段说明

阶段一:基础框架(init)

使用 Kiro 的 Spec 功能,先写需求文档(requirements.md),再写设计文档(design.md),最后生成任务列表(tasks.md)逐步实现。基础框架包括:app.json 配置、TabBar、分包结构、全局样式。

阶段二:首页与个人信息(feat)

首页经期日历是核心功能,涉及日历组件渲染、经期标记、排卵期计算。个人信息页包含微信授权登录(open-type="chooseAvatar")、用户信息存储。

阶段三:社区与宝宝模块(feat)

社区模块云函数较多(5个),Kiro 统一设计了响应格式和错误处理规范。宝宝模块以静态知识内容为主,结合云数据库存储成长记录。

阶段四:AI 助手(feat)

AI 模块是迭代最多的部分,经历了:

  • 基础对话 → 会话管理 → 多会话 Tab
  • 简单提示词 → 分阶段提示词系统
  • 无配额限制 → Token 配额管理
  • 无登录检查 → 登录态守卫

阶段五:支付(feat)

微信支付接入涉及证书管理、签名算法、回调处理,全部通过云函数实现,无需自建服务器。


七、Kiro 辅助开发实践总结

7.1 Spec 驱动开发

Kiro 的 Spec 功能将开发流程结构化为三个阶段:

.kiro/specs/ai-assistant/
├── requirements.md   # 需求文档(用户故事 + 验收标准)
├── design.md         # 设计文档(架构 + 接口 + 数据模型)
└── tasks.md          # 任务列表(可逐条执行)

这种方式的好处:

  • 需求和设计有文档沉淀,不会"只在对话里"
  • 任务粒度可控,每次只做一件事
  • 设计文档可以作为后续迭代的上下文

7.2 上下文管理

长对话中 Kiro 会通过"上下文转移摘要"保持连续性,关键信息(已完成的任务、重要决策、文件路径)会被提炼保留,避免重复解释背景。

7.3 适合 AI 辅助的场景

效率提升最明显:

  • 重复性代码(多个相似云函数)
  • 样式编写(WXSS)
  • 数据模型设计
  • 错误处理和边界情况

需要人工把控:

  • 业务逻辑的正确性(排卵期算法、支付签名)
  • 微信平台特有的坑(独立分包限制、TabBar 选中状态)
  • 第三方 API 的最新文档(微信支付 v3 接口)

7.4 踩过的坑

问题原因解决方案
AI 云函数超时默认超时 3 秒,DeepSeek 响应需要 5-10 秒云开发控制台手动设置超时为 60 秒
TabBar 选中状态不同步自定义 TabBar 需要手动调用 setSelected每个页面 onShow 中调用
独立分包无法调用主包组件独立分包的限制payment-modal 组件放在 packageProfile 内
支付回调无法接收payNotify 没有公网 URL开启云函数 HTTP 访问服务
多会话 Tab 标题被覆盖自动更新标题逻辑没有判断是否手动命名增加 customTitle 标志位

八、部署上线清单

8.1 云开发配置

  • 创建云开发环境,记录环境 ID
  • app.js 中填入环境 ID
  • 创建所有数据库集合并设置权限规则
  • 部署所有云函数(右键 → 上传并部署:云端安装依赖)
  • 配置 aiChat 环境变量:DEEPSEEK_API_KEY
  • 配置 createOrder / payNotify 环境变量(微信支付相关)
  • 开启 payNotify 的 HTTP 访问服务,获取回调 URL

8.2 微信支付配置

  • 商户平台开通 JSAPI 支付
  • 下载 API 证书(apiclient_cert.pem / apiclient_key.pem)
  • 设置 API v3 密钥
  • 将证书内容和密钥配置到云函数环境变量
  • 将 payNotify 的 HTTP URL 填入 createOrder 的 notify_url

8.3 小程序发布

  • 在微信开发者工具上传代码
  • 填写版本号和更新说明
  • 提交微信审核
  • 审核通过后发布

九、后续规划

  • 会员体系完善:支付成功后解锁更多 AI 对话次数,会员到期提醒
  • AI 功能增强:支持图片识别(宝宝辅食、症状图片)、语音输入
  • 社区运营:内容审核机制、热门帖子推荐、话题活动
  • 数据分析:用户行为统计、AI 使用报告、经期数据可视化
  • 消息推送:经期提醒、疫苗接种提醒、社区互动通知

文档编写时间:2026年4月 项目状态:持续迭代中 开发工具:Kiro(AI IDE)