一、教育公司的"小程序群岛"困境

公司过去几年在微信生态上做了十几个学科方向的小程序,覆盖考研、英语四六级、考公、财会、教师资格等。最初的想法是"按学科方向独立运营",每个学科有一个前端团队,分别迭代、分别发版。运营了 2-3 年后,问题集中暴露出来:

**第一个问题,重复工作多。**每个学科的 UI 布局、表单交互、列表页、答题页在重复开发。考研的小程序和考公的小程序,光是"题库列表页"这一种页面就有 5 套实现,组件命名都不一样。

**第二个问题,研发链路长。**从 UI 原型到前端实现,再到联调测试、提审、灰度,跨角色沟通成本高。设计师给的产品方案和最终上线版本经常有偏差,还原成本大。

**第三个问题,交付压力大。**业务方对敏捷迭代的需求越来越强,新学科方向上线周期希望压到 1-2 周内,纯原生开发模式很难响应。
在这里插入图片描述

到了 2026 年初,公司战略调整:把分散在微信、支付宝上的多类目小程序聚合到一个自有教育 APP,所有用户数据、账号体系、付费数据沉淀到自有平台。问题是——12 个学科方向的小程序完全重写一遍,工程量巨大;如果不重写,又面临"自有 APP 里怎么跑得动这些小程序"的技术选型问题。


二、技术选型——AI Coding + 小程序容器的组合方案

立项时摆在桌面上的技术方案有三个:完全原生重写、微信 H5 嵌入、AI Coding + 小程序容器。

完全原生重写被否掉的理由很直接:12 个学科方向,每个独立的小程序至少 30-50 个页面,加上账号体系、支付、灰度、合规审查,整体工作量是 6-12 个月团队投入。这条路适合大厂重做旗舰产品,不适合"半年内必须上线"的实际节奏。

微信 H5 嵌入被否掉的理由是性能:H5 调不到原生能力、支付/分享/拍照做起来勉强、加载速度慢。几个核心场景(答题、刷题、视频课程)一旦卡顿,用户立刻走人。

最终选了 AI Coding + 小程序容器的组合,核心思路是:让 AI 写 70% 的代码、工程师精调 30%,然后把所有小程序作为业务模块接入到自有 APP 容器里。这条路真正可行有 3 个前置条件:

  • AI Coding 在小程序语法上稳定。小程序代码是确定性的结构(JSON 配置 + WXML 模板 + JS 逻辑),不像 Native 代码那样涉及复杂的状态管理和 UI 风格工程问题。AI 生成的代码风格相对收敛,可控性强。
  • 小程序容器屏蔽多端差异。iOS/Android/鸿蒙三端各集成 FinClip SDK 后,小程序代码在三端运行,宿主 APP 不用为每个学科方向单独维护三套实现。
  • 可视化搭建加速模板复用。每个学科的 UI 有 70% 是公共模板(列表、答题、支付、会员中心),用可视化搭建工具能把这部分沉淀成"学科模板"。

整体技术架构图(从需求到上线):

产品经理(自然语言需求描述)
  ↓
AI Coding 工具(Cursor / Claude Code / FinClip Studio Copilot)
  ↓
小程序代码包(JSON + WXML + JS + CSS)
  ↓
FinClip Studio(代码 review + 可视化补充 + 私有组件库)
  ↓
管理平台(OpenAPI 自动上传 + 审核工作流 + 灰度发布)
  ↓
宿主 APP(iOS/Android/鸿蒙 三端 SDK 运行)

三、关键技术路径

3.1 需求拆解与模板化

12 个学科方向看似差异大,拆开看其实有大量共性。每个学科的页面可以归到 5 类:列表页(题库、课程、资讯)、详情页(题目详情、课程详情)、答题页、会员中心、个人中心。把这 5 类页面做成一组可配置模板,学科间的差异通过"业务字段"传递。
在这里插入图片描述

产品经理的需求输入从"写详细 PRD"变成"填模板字段"。例如下面是一个数学学科方向的需求模板:

{
  "subject_code": "math-junior-1",
  "subject_name": "数学-初一",
  "template_version": "edu-base-v3",
  "pages_config": {
    "list_page": {
      "title": "每日一题",
      "data_source": "/api/v1/math/questions",
      "filter_fields": ["知识点", "难度", "时间"],
      "card_style": "image-title-tags"
    },
    "detail_page": {
      "layout": "question-stem-options-explanation",
      "interaction": "single-choice"
    }
  },
  "components_required": ["list", "filter", "card", "tag", "button"]
}

12 个学科方向按这个模板填一遍参数,工作量从"按学科开发 12 套"压缩到"按学科填 12 张表"。

3.2 AI Coding 工作流(70% AI + 30% 人工精调)

AI Coding 工具我们最终选的是 **Cursor + FinClip Studio Copilot(FinMUSE)**的组合。Cursor 负责"从 0 到 1"生成小程序代码,FinClip Studio Copilot 负责"从 1 到精"做规范校验和私有组件库适配。两者通过代码包交换。

Cursor 的工作流:产品经理用自然语言描述需求,Cursor 生成小程序的 JSON 配置 + WXML 模板 + JS 逻辑。例如输入:

创建一个初一数学每日一题列表页,支持按知识点筛选,
点击进入答题页,下拉加载更多,每页 20 条

Cursor 输出的代码包(节选 pages/math/list.json):

{
  "usingComponents": {
    "list": "/components/list/list",
    "filter": "/components/filter/filter",
    "card": "/components/edu-card/edu-card"
  },
  "data": {
    "questions": [],
    "filter": {
      "knowledge_point": null,
      "difficulty": null
    },
    "page": 1,
    "pageSize": 20,
    "loading": false
  },
  "onLoad": "fetchQuestions",
  "onPullDownRefresh": "fetchQuestions",
  "onReachBottom": "loadMore",
  "filterChange": "onFilterChange",
  "itemClick": "goDetail"
}

fetchQuestions 函数的实现:

Page({
  data: { questions: [], page: 1, loading: false },

  async fetchQuestions() {
    this.setData({ loading: true });
    const res = await ft.request({
      url: '/api/v1/math/questions',
      method: 'GET',
      data: {
        page: 1,
        pageSize: 20,
        ...this.data.filter
      }
    });
    this.setData({
      questions: res.data.list,
      loading: false
    });
  },

  async loadMore() {
    const nextPage = this.data.page + 1;
    const res = await ft.request({
      url: '/api/v1/math/questions',
      method: 'GET',
      data: { page: nextPage, pageSize: 20, ...this.data.filter }
    });
    this.setData({
      questions: [...this.data.questions, ...res.data.list],
      page: nextPage
    });
  },

  goDetail(e) {
    const id = e.currentTarget.dataset.id;
    ft.navigateTo({ url: `/pages/math/detail?id=${id}` });
  }
})

另一个加速能力是截图生成组件。设计师给一张设计稿截图(PNG/JPG),AI 工具能直接识别界面元素,输出对应的小程序组件配置:

{
  "components": [
    {
      "type": "header",
      "props": { "title": "每日一题", "background": "#1AAD19", "back": true }
    },
    {
      "type": "filter-bar",
      "props": { "fields": ["知识点", "难度", "时间"], "value": "{{filter}}" }
    },
    {
      "type": "list",
      "props": {
        "data": "{{questions}}",
        "itemTemplate": "edu/card-question",
        "onItemClick": "goDetail"
      }
    }
  ]
}

3.3 FinClip Studio Copilot 二次校验

Cursor 生成的代码不一定能直接上线。AI 写代码有 3 个常见问题:私有组件库不复用、UI 风格发散、复杂业务逻辑靠"看起来对"实现。这部分要靠 **FinClip Studio Copilot(FinMUSE)**做二次校验。

Copilot 集成在 FinClip Studio 里,依赖 FinClip 小程序生成大模型算法(已在网信办备案,备案编号 440304042830501240017 号),可以直接理解小程序代码上下文。

最常用的两个快捷键:

  • cmd+l(Mac)/ ctrl+l(Windows):选中代码块后引用到 Copilot 聊天窗口。例如选中 fetchQuestions 函数,按 cmd+l,输入"/edit 给这个函数加上错误重试机制",Copilot 自动返回修改后的代码:
async fetchQuestions() {
  this.setData({ loading: true });
  try {
    const res = await ft.request({
      url: '/api/v1/math/questions',
      method: 'GET',
      data: { page: 1, pageSize: 20, ...this.data.filter }
    });
    this.setData({ questions: res.data.list, loading: false });
  } catch (err) {
    console.error('fetchQuestions failed:', err);
    // Copilot 自动补的错误处理:重试 3 次 + 降级到本地缓存
    if (this.retryCount < 3) {
      this.retryCount = (this.retryCount || 0) + 1;
      return this.fetchQuestions();
    }
    const cached = ft.getStorageSync('questions_cache') || [];
    this.setData({ questions: cached, loading: false });
  }
}
  • cmd+i(Mac)/ ctrl+i(Windows):选中代码块直接弹出快速编辑框。适合做小范围重命名、风格统一、组件替换。

除了 Copilot,FinClip Studio 还提供了低代码可视化建模能力。可以用它补充 AI 生成的代码——尤其是那种"表单提交"“列表展示”"数据看板"这类高度模板化的页面。左侧拖组件、右侧写配置,开发同学 1-2 小时就能搭出一个完整页面,比手写 WXML 快 3-5 倍。

低代码工具的"直连数据源"能力很关键:组件不需要写 API 封装,直接把后端 API 拖到组件上就能用,运行时自动处理鉴权、loading、错误。

3.4 多端构建 + 管理平台自动化

在这里插入图片描述

小程序代码开发完后,要打包并接入到 iOS/Android/鸿蒙三端宿主 APP。这一步的关键是 SDK 集成和 OpenAPI 自动化。

iOS SDK 集成(Swift)

import FinClip

class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        FinAppClient.init(with: FinClipConfig.Builder()
            .appId("your-app-id")
            .apiKey("your-api-key")
            .build())
        return true
    }

    func openMiniProgram(appId: String, path: String) {
        let request = FATAppletRequest()
        request.appletId = appId
        request.path = path
        FinAppClient.startApplet(request, in: self.window?.rootViewController) { result in
            // 处理启动结果
        }
    }
}

Android SDK 集成(Kotlin)

import com.finogeeks.finclip.FinAppClient

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        FinAppClient.init(this, FinClipConfig.Builder()
            .setAppId("your-app-id")
            .setApiKey("your-api-key")
            .build())
    }

    fun openMiniProgram(appId: String, path: String) {
        val request = FinAppletRequest().apply {
            appletId = appId
            this.path = path
        }
        FinAppClient.startApplet(this, request) { result ->
            // 处理启动结果
        }
    }
}

管理平台 OpenAPI 自动上传

curl -X POST "https://api.finclip.com/v1/applets/upload" \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@./math-list-v1.0.0.zip" \
  -F "name=数学-每日一题" \
  -F "version=1.0.0"

CI/CD 流水线把这 3 步串起来:AI Coding 生成的代码包 → 走 FinClip Studio 校验 → 调 OpenAPI 上传到管理平台 → 自动触发审核工作流 → 按用户群灰度发布。整个流程从"开发完成"到"线上可见"压缩到分钟级。

3.5 真实效果数据

效果数据按月维度看,差异显著:

  • 开发周期:每个学科方向小程序从平均 2 周(前端 + 联调)压缩到 3 天
  • 批量效率:12 个学科方向同时启动,3 天内 12 个全部进入灰度阶段
  • 研发成本:前端 + 联调人力 -60%
  • 代码质量:AI 生成 + Copilot 校验后,单元测试覆盖率从 40% 提升到 75%
  • 多端覆盖:iOS/Android/鸿蒙 三端同时上线,不再有"鸿蒙版要等 2 周"的尴尬

借用可视化搭建领域一个常见描述:“月级提升到周级”。我们的实际数据更激进一些——从周级(2 周一个)压缩到天级(3 天 12 个)。

目前来看,后续可以借助AI来大幅度提升开发效率是一条可行的路径~


感兴趣的话可以在Gitee上详细了解:Gitee 代码地址

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐