使用微信云开发构建小程序 Skills,你无需编写 wx.request、无需自行搭建服务器、也无需维护 登录态——通过 wx.cloud.callFunction 即可直连云函数,用户身份 OPENID 由云开发的免鉴权能力自动注入。
写在开头
目前很多开发者都在关注最新推出的小程序 Skills 如何开发,所以我们快速搭好了三个开箱即用的小程序 SKILL 模板:
- todolist-skill(待办清单):查询、新增、完成切换、删除,基于云开发数据库直读,入门首选
- queue-skill(门店排队取号):门店搜索、排队状态查看、线上取号、排队进度查询
- drink-skill(咖啡饮品点单):推荐 / 搜索饮品 → 选规格 → 填地址 → 下单支付,完整点单链路
每个模板均基于微信云开发实现前后端逻辑,包含了完整的 SKILL.md 业务说明、接口链路图、约束规则和意图分流示例,覆盖了最常见的小程序场景。下面以 todolist-skill 为例,走一遍完整的开发流程。
一、小程序 Skills 是什么
微信小程序推出了 AI 开发模式:你可以把现有小程序的功能,封装成能被小程序 AI 在对话里调用的能力。这个能力单元就叫 SKILL。
跟过去「用户点按钮 → 跳页面 → 填表单」的流程不一样,小程序 Skills 把交互提前到了对话里:
[用户] 在小程序 AI 对话框说:"帮我记个待办:买牛奶"
↓
[小程序 AI] 理解意图,自动选中你的 addTodo 能力,填好参数 title="买牛奶"
↓
[你的代码] 执行写入,返回结构化数据
↓
[小程序 AI] 在聊天流里弹出一张你设计的「待办清单卡片」
你要做的事情就两件,剩下的——这句话该调哪个函数、参数怎么填、什么时候弹卡片——全交给 AI:
- 把功能写成函数(官方叫原子接口),就是真正做事的那段代码;
- 给函数配一张卡片(官方叫原子组件),把结果渲染成对话流里的 GUI 卡片。
小程序 Skill 的四件套
一个小程序 SKILL 放在独立分包里,包含四个核心文件:
| 文件 | 作用 |
|---|---|
mcp.json | 向 AI 声明:有哪些函数、参数怎么填、用哪张卡片展示 |
apis/*.js | 原子接口——真正做事的函数 |
index.js | 把函数注册给运行时 |
components/ | 原子组件——展示结果的卡片 |
SKILL.md(可选) | 业务 SOP,告诉 AI 这个场景的流程编排 |
底层是小程序 MCP 协议:微信客户端运行时与小程序 AI 后台之间基于该协议交互,你不用理解协议细节,按规范把 SKILL 实现完整就行。
注意:这个模式目前还在内测,暂时没开放代码提审。别把相关代码合进正式版本提交审核。
二、绕不开的问题:登录态怎么办
原子接口跑在微信客户端一个独立的 JS 环境里,跟小程序主环境是隔离的。AI 调你函数的时候,你得自己在函数里搞清楚「这个用户是谁」。
传统做法:自建后端 + 鉴权中间件
如果你的后端是自己搭的服务器,标准流程是这样的:
- 调
wx.login()拿临时 code; - 把 code 发给你的后端;
- 后端用 code + AppSecret 调微信的 code2session 接口换 openid 和 session_key;
- 后端生成自定义登录态 token 返回;
- 把 token 存进 storage,后续请求都带上;
- 多个原子接口都要走这套,于是你还得写一个中间件统一处理。
落到代码上就是下面这样——每个 Skill 都得维护这么一段:
// index.js —— 传统自建后端方案:必须写中间件维护登录态
const skill = wx.modelContext.createSkill('skills/todo-skill')
skill.registerAPI('addTodo', addTodo)
skill.use(async (ctx, next) => {
// 统一登录态:没 token 就走一遍换登录态流程
let token = wx.getStorageSync('token')
if (!token) {
const { code } = await wx.login()
const res = await wx.request({
url: 'https://your-server.com/login', // 你自己的后端
data: { code }
})
token = res.data.token
wx.setStorageSync('token', token)
}
await next()
})
然后后端还得写一套 code2session 的换取逻辑、session_key 的存储、token 的签发与校验。这部分代码跟业务没任何关系,纯粹是为了「知道用户是谁」而存在的样板。