1. 背景与约束
粲粲小故事面向 3–8 岁家庭:免费网页、无需注册、插画 + 旁白 + 轻互动,单次 3–8 分钟。 真正难的不是生成一段文本,而是约束叠在一起还能持续更新:
- 声音:家长不想读,孩子要听得进——音色、语速、分段都要可控;
- 画面:系列风格要稳(科普黏土风 / 回忆写实风),不能每篇换一张脸;
- 上线:发布必须可重复、不把密钥和草稿推上公网。
难点不在「能不能生成一段文本」,而在「能否每周稳定产出可上线的故事包」——文案、音频、封面、播放页、目录数据、部署,六件事同一条流水线。
2. 技术架构
工具链经历过 WorkBuddy 起盘 → Cursor 工程化 → 阿里云生成与托管三个阶段。当前形态分三层:
图 1 · 技术架构:生产在本地,生成在云端按量计费,分发走 OSS + CDN。
- 生产层:原生 HTML / CSS / JS,无前端框架。每个故事是自包含目录(文案、音频、封面、播放页),目录数据集中在
src/js/stories-data.js,首页只读数据。 - 生成层:旁白用 Qwen3-TTS-Flash(童声 Bella / 回忆男声 Ethan 等),插画用 DashScope 文生图。API 只在本地脚本里调用,产物随故事包入库——线上没有实时生成,也没有暴露 Key。
- 分发层:OSS 静态托管 + CDN;
tools/deploy.sh是唯一发布入口。
3. 生产流程:从选题到上线
文案:先锁规则,再生成
科普系列强调拟人化与短句;成语系列按二三年级可读性写;回忆系列用第三人称东北童年小事 +「猜猜看」互动。 Agent 可以起草,但系列口径、年龄、互动形态必须先写进 brief / scene-sheet,否则后面的图和声都会跟着漂。
图:角色卡 + 风格锁 + 负面词
批量出图靠三层约束而不是逐张改 prompt:角色卡固定角色外形,风格锁统一系列美学(黏土定格 / 写实封面), 负面词挡住写实 NASA、恐怖氛围、文字水印等儿童产品禁忌。系列之间允许换风格,系列内部不允许换脸。
声:云端预制,浏览器降级
主路径是本地脚本调 DashScope,把旁白预生成成音频文件随故事包发布;播放失败时降级到 Web Speech。 线上首屏因此不依赖任何实时合成服务。
4. 运行数据与成本
截至 2026-07-31,从仓库与日志可复核的数字:
| 指标 | 数值 | 口径 / 来源 |
|---|---|---|
| 上线故事 | 53 篇(成语 27 · 科普 15 · 回忆 6 · 宇宙 4 · 生活 1) | src/js/stories-data.js 条目数 |
| 预制音频 | 257 段 · 123 MB,覆盖 20 个故事目录 | stories/*/audio/ 文件统计 |
| 入库插画 | 7 张 · 5.5 MB | stories/*/images/;早期互动篇走 CSS 呈现 |
| 旁白成本 | 单篇约 1,400–2,000 字符 ≈ 0.11–0.16 元 | Qwen3-TTS-Flash 刊例 ¥0.8 / 万字符 |
| 单次增量部署 | 147 个文件 · 7.5 MB · 87 秒 | 2026-07-17 部署日志 |
成本结构很简单:TTS 按字符、文生图按张、OSS 按存储与流量。目前全部云端旁白折合约 3.4 万字符, 按刊例价累计 3 元以内;插画用量极小(7 张)。对一个小体量静态站,生成与托管合计是「几元级」月度成本—— 这也是选择「本地预制 + 静态分发」而不是「在线实时生成」的直接原因。
价格为 2026 年 7 月刊例,以阿里云百炼官方页为准;本文只用它说明量级,不构成报价。
5. AI 协作方式
Agent 最有用的不是「替你讲完故事」,而是把重复劳动变成可审查的产物,让人只在关键节点拍板。
澄清产品边界
免费 / 无账号 / 短时长 / 亲子共听。边界先定,后面「要不要加社区、要不要实时生成」才不会把架构拖歪。
起草与对照
大纲、分支点、旁白分段、封面提示词并排草案;人听一遍、看一遍,再锁定定稿。
批量改工程
口径一锁:生成脚本、播放页、stories-data、部署排除规则一起改——改的是工厂,不是单篇稿子。
发布复盘
方法写回 AI实践(本页)。产品站给人听故事,知识站给人复用方法,两条线分开运营。
6. 发布工程
线上只走阿里云 OSS → kukuhalu.com,入口永远是 tools/deploy.sh。细节决定能不能「每天敢点一次」:
- 先筛再传:ossutil 的 exclude 不支持目录路径,故先用 rsync 筛到暂存目录,再上传;
- 默认排除:
.git、docs、archive、*.py、*.md、.env、工具链本身——草稿与密钥不上线; - 增量 + 强制刷新:日常
--update;首页、目录数据、Ivan 页等 10 个入口强制覆写并带Cache-Control: no-cache; - 认证本地化:优先
~/.ossutilconfig,密钥不进仓库。
7. 踩过的三个坑
都是真实发生过的故障,按「现象 → 原因 → 修复」记录:
- 新故事发布了,首页看不到。 轮播曾要求每篇必须有封面图,无封面的新故事被静默过滤。 修复:轮播改为按日期排序,无封面时用渐变 + emoji 回退;分类列表同步按日期降序。
-
部署命令报错无法上传。
ossutil 的
--exclude不接受目录路径(如tools/*)。 修复:改用 rsync 先把文件筛进暂存目录,ossutil 只负责上传——排除规则从此可靠。 -
用户端内容陈旧。
PWA service worker 长期持有旧缓存,新部署不可见。
修复:
sw.js缓存版本号随发布递增,入口文件强制no-cache。
三条教训指向同一件事:内容工程的风险大多不在生成质量,而在「最后一公里」的缓存、筛选与目录数据。
8. 方法清单与线上入口
- 先锁产品边界(谁用、多久、要不要账号),再谈模型与特效。
- 故事做成「故事包」:文案 + 图 + 声 + 页 + 目录数据,缺一不算完成。
- 云 API 只做本地批处理;产物入库;密钥不进前端与公网。
- 系列内锁风格:角色卡 / 音色 / 负面词写进脚本,而不是每次口头描述。
- Agent 流程固定:澄清 → 草案 → 人锁定 → 改工厂与页面。
- 部署入口唯一;先筛再传;关键入口强制刷新缓存。
产品本身已经在跑:粲粲小故事 · 作者页 · AI实践。 如果你在做类似方向——内容工程、AI 批量生成与发布管线——欢迎带着你的场景来交流(作者页有邮箱)。