一、教育公司的"小程序群岛"困境
公司过去几年在微信生态上做了十几个学科方向的小程序,覆盖考研、英语四六级、考公、财会、教师资格等。最初的想法是"按学科方向独立运营",每个学科有一个前端团队,分别迭代、分别发版。运营了 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来大幅度提升开发效率是一条可行的路径~