swx-ai-quiz-generator · AI 自动出题版刷题小程序生成器
把「给一个学科名 → AI 自动生成约100道题目 → 产出一款能上线的刷题小程序」做成一键复现的流程。
与旧版 subject-quiz-generator 的唯一区别:题库不用用户自备,由 AI 依据学科考纲直接命题。
🎯 核心卖点(也是上架 skillhub 的差异化)
- 用户只说学科名(如「英语」「中考数学」)即可,不用准备任何题目。
- 默认自动生成 100 道选择题(单选+多选、带解析),覆盖该学科核心章节与难度梯度。
- 一键产出学科无关、可配置、可远程更新题库的微信小程序工程(刷题/错题/收藏/我的/模拟考试)。
- 页面逻辑完全学科无关——换
config.js几个字段即换学科。
> ⚠️ 免费版声明:本技能当前以 Free 形态发布到 skillhub,默认生成 100 道题。
> 后续若切到「按次收费 / Pro」形态,只需在 skillhub 上架页改价格档位;若要做免费额度限制,可把 gen_questions.js 的 --count 默认值作为免费上限、另设 Pro 上限。详见文末「分发与变现」。
> 免费版生成的刷题小程序默认带「题工坊」全屏水印(极淡、不挡操作,既是品牌传播也是付费转化墙);Pro 版加 --pro 生成无水的印版本(WATERMARK_ENABLED 自动置 false)。
🚀 主路径(Agent 执行流程)
用户说「帮我做个英语刷题小程序」时,按下面 4 步走:
步骤 1 · 确认范围(轻量)
- 必填:学科名(已给)。
- 可选、最多追问 1 句:考试层级 / 地区 / 是否偏重某模块。用户没提就按该学科最通用考纲命题。
- 默认数量 = 100 道(用户用
--count可改)。
步骤 2 · AI 生成题库草稿
- 严格按
references/ai-question-gen.md命题:先搭 8–12 个章节骨架,把 ~100 题铺开;难度约 4:4:2(基础:中等:较难),题型约 8:2(单选:多选)。 - 把全部题目写成 JSON 数组,用 Write 工具写到
bank_draft.json。 - 原创/改编命题,禁止照搬真实考试真题或机构版权题(版权风险)。知识点不确定时用 WebSearch 核实「范围与事实」,不搜现成题。
步骤 3 · 校验并写出标准题库
node tools/gen_questions.js bank_draft.json --subject 英语 --count 100 --out <工程>/data/questions.js
- 校验器会剔除非法题(答案错、选项重复、缺题干等)并打印原因。
- 数量不足 100 会告警,可补题后重跑。
步骤 4 · 脚手架生成小程序工程
# 最简:只给学科名(会先 scaffold,再把步骤3的题库覆盖进去)
node generate.js --subject 英语
# Pro 付费版:加 --pro 自动关闭「题工坊」水印(配合 300 题更香)
node generate.js --subject 英语 --pro
# 连考试名 / AppID / 远程题库地址一起给
node generate.js --subject 英语 \
--exam "2026考研英语(一)" \
--appid wx1234567890abcdef \
--bankurl https://env-xxxx.tcloudbaseapp.com/cloudbank
- 若已先 scaffold,把步骤 3 的
--out直接指向<生成工程>/data/questions.js覆盖占位示例题即可。
步骤 5 · 交付
告诉用户:用微信开发者工具 → 导入项目,目录选生成的工程;填好 AppID(如生成时未给)即可预览。
完整流程 / 远程题库 / 变现 / 提审见 references/ 下的对应文档。
📦 工程架构(开箱即用,从模板拷贝)
app.js / app.json / app.wxss 全局配置、tabBar(刷题/错题/收藏/我的)
project.config.json / sitemap.json
pages/quiz/ 无限刷题主页(每页一题,单选+多选,答完出解析)
pages/wrong/ 错题本
pages/favorites/ 收藏夹
pages/profile/ 我的(设置 + 题库来源开关 + 会员入口)
pages/exam/ 模拟考试(限时、答题卡、自动判分)
pages/member/ 会员中心(去广告 + 真题包解锁 + 微信支付)
components/question-card/ 题目卡片组件
utils/config.js ★ 所有学科/变现/远程开关都在这里
utils/store.js 本地存储(错题/收藏/进度/设置/题库开关)
utils/questionSource.js 题库数据源(本地兜底 + 远程增量合并)
utils/privacy.js 隐私授权(__usePrivacyCheck__ 接入)
services/payment.js 微信支付封装(服务端下单)
services/membership.js 会员状态与购买
data/questions.js 本地题库(由 gen_questions.js 生成,module.exports={questions})
tools/quiz-gen.js 题目纯文本 → 标准题库解析器(备用:用户已有文本题时)
tools/export-remote.js 本地题库 → 远程托管目录(cloudbank/)
tools/build-bank.js 真题年度增量打包
🎛️ 学科无关的关键:utils/config.js
改这几个字段即可换学科,页面代码一行不用动:
SUBJECT_NAME: '英语', // 导航栏/标题用
EXAM_NAME: '2026考研英语(一)', // 「我的」顶部展示
DEFAULT_BANK_URL: '', // 官方远程题库根地址(零配置自动更新)
DEFAULT_BANK_ENABLED: true,
AD_ENABLED: false, AD_BANNER_UNIT_ID: '', // 流量主广告位(开通后填)
MEMBER_ENABLED: false, MEMBER_DEV_MOCK: false, // 会员;上线前保持 false
MEMBER_TIERS: [ {id:'month',...}, {id:'year',...} ]
> 模板默认 AD_ENABLED:false / MEMBER_ENABLED:false / MEMBER_DEV_MOCK:false(上线安全态)。
> 想开流量主/会员,按本文件注释与 references/monetize.md 操作。
📐 题目标准 schema(data/questions.js)
module.exports = { questions: [
{
id: 1, // 数字,本地题 1 起
type: 'single', // 'single' 单选 | 'multiple' 多选
chapter: '英语基础',
difficulty: 1, // 1 简单 / 2 中等 / 3 困难
title: '题干……',
options: [ { key: 'A', text: '…' }, … ],
answer: ['B'], // 正确选项 key 数组(多选含多个)
analysis: '解析……'
}
] };
完整文本格式与 quiz-gen.js 解析规则见 assets/QUESTION_FORMAT.md。
🔄 远程增量更新协议(不发版扩题库)
根目录放两个文件,由 tools/export-remote.js 生成:
- version.json → { "version": 2 }(自增整数)
- questions.json → { "questions": [ ...标准 schema... ] }
小程序启动时静默拉取:远程同 id 覆盖本地、新 id 追加。用户零配置(开发者把地址写进 DEFAULT_BANK_URL 即可)。详细见 references/remote-bank.md。
📘 产品使用手册(交付买家 / 运营方必读)
生成出的小程序是交给买家或运营负责人日常使用的,他们不需要懂代码。把 references/product-manual.md(《【学科名】刷题小程序 · 产品使用手册》)一并交付,里面用大白话讲清了:
- 用户侧:刷题 / 错题 / 收藏 / 模拟考试 / 我的 四大 Tab + 各模块的点击使用规则;
- 运营侧:题库两种形态、三种来源模式如何切换、如何免发版更新远程题库、会员 / 广告开关在哪改、内容安全与合规提醒。
⚠️ 注意事项
- 题库务必自行编写/改编,不要直接抓取机构原题,避免版权风险;本技能走「AI 生成 + 依考情校准」的内容模式,原创性归运营方。
- 微信个人主体可发版 + 接流量主;微信支付需企业/个体工商户资质,个人号不可开通支付。
- 所有网络请求必须 HTTPS + 微信后台域名白名单;开发期可勾「不校验合法域名」。
- 启动耗时、包体积、隐私合规是过审三大关,详见
references/launch-sop.md。
🔒 内容安全(远程地址 + 远程题库闸)
刷题小程序有两个内容风险入口,本技能已内置两道闸:
1. 远程题库地址(--bankurl)校验:generate.js 在生成时校验地址——必须 https、且不能是 localhost / 内网 IP / 非 http(s) 协议(防 SSRF)。非法地址直接报错退出。
2. 远程题库内容扫描:生成出的工程自带 utils/safety.js + utils/sensitive-words.js,对每题做政治敏感 / 色情扫描,命中则过滤。
> 两道闸都是本地粗粒度闸。正式上架务必再接 微信内容安全 API(msgSecCheck) 做权威审核。
💰 分发与变现(Free 现在 / Pro 以后)
- 当前 Free:以 Free 上架 skillhub,默认生成 100 道题,功能完整无阉割。
- 免费版默认带「题工坊」全屏水印(
utils/config.js的WATERMARK_ENABLED=true)。水印极淡、不挡操作,既是品牌传播渠道(用户分享即帮打广告),也是付费转化墙。 - 切 Pro(去水印 + 商用 + 扩题):在 skillhub 上架页把价格档位改为 Paid 即可,代码无需改动——生成时加
--pro参数会把WATERMARK_ENABLED置 false,水印自动消失。 - 建议档位:Pro ¥9.9 = 300 道题 + 去「题工坊」水印 + 商业授权(生成的刷题小程序可商用 / 转售)。
- 免费额度限制由出题步骤控制:Free 出 ~100 题;Pro 出 ~300 题(校验器
gen_questions.js --count已支持任意数量)。 - 小程序本身的变现(流量主 / 会员 / 代做「题工坊」)与技能定价是两件事:技能收费是「生成工具」的授权费;小程序上线后的广告/会员是「终端产品」的营收,详见
references/monetize.md。