Files
sundynix-radio-be/Plan.md
T
2026-02-27 13:54:01 +08:00

98 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
《“早安电台”项目完整架构设计与开发计划书》
一、 产品愿景与垂直领域选择
1. 垂直领域对比与 MVP 推荐
文档中提出了四个垂直方向:【硬核职场】、【效率健康】、【极简生活】与【知识胶囊】 2-4。MVP 阶段(两周内)最推荐方向:【硬核职场】AI 商业机会与搞钱情报站 1。
推荐理由:
自动化实现成本最低:该方向的数据源(如 GitHub API、Product Hunt API)高度结构化,极易通过 Go 后端定时任务抓取并交给 LLM 处理 1, 5。
目标用户契合度极高:数据显示,63.3%的中文长音频听众是21-35岁的年轻精英群体,且72.1%的用户订阅是因为内容的“专业性”或“干货多” 6。AI 商业情报完美契合这批高价值用户的痛点。
2. 目标用户画像及其核心痛点
用户画像:21-35岁的一线/新一线城市开发者、产品经理、渴望通过 AI 变现的职场精英 2, 6。
核心痛点:
信息差焦虑:AI工具爆发,缺乏时间筛选信息,需要在早餐、通勤等“脱手”场景下实现“零点击”的信息获取 2, 7。
情绪过渡与陪伴:早安电台处于从睡眠向职业场景过渡的交汇点,需提供缓解早起焦虑的“情绪价值”与专业陪伴感 8。
二、 数据抓取与 AI 场景感知流水线 (Data Pipeline)
整个后台流转依托“专家灵魂 + AI 躯干”的自动化生成模式 9,核心链路如下:
3. 自动化数据抓取 (Cron Job)
设定 Go 后端定时任务,每 2 小时运行一次 10。
GitHub API 调用 (补充架构细节):调用 GET /search/repositories。后端构建查询参数 q=topic:ai+created:>YYYY-MM-DD&sort=stars&order=desc,筛选近24小时星标增长最快的AI项目 5,提取前 3 个项目描述。
Product Hunt API 调用 (补充架构细节):通过 POST 请求调用其 GraphQL 接口,获取 posts(first: 10, order: RANKING),提取每日 Upvote 前10的产品的 description 5。
4. 数据清洗与 AI 提炼
Goquery 清洗:抓取到的 README 或网页文本包含大量无效 HTML 标签,必须使用 Goquery 库进行剥离,仅保留核心文本,大幅降低 LLM Token 消耗 10。
大模型介入:将清洗后的 10 个产品和 3 个开源项目发送给 DeepSeek/OpenAI 模型,通过 Prompt 强制要求:“提取出今日可落地的 3 个变现点或核心业务逻辑,并改写为适合口播的连贯短句” 2, 7。
5. TTS 语音合成与 MinIO 私有化存储
利用 TTS 技术,每日更新的音频边际成本几乎为零 9。
腾讯云 TTS (建议配置):选择带有“睿智专业”风格的虚拟主播音色 9,指定输出为 aac 格式,采样率 16000Hz,以匹配微信最优音频规范 8。
MinIO 落库 (补充架构细节)
后端接收到 TTS 音频流后,通过 minio-go SDK 直接上传至自建 MinIO 的 sundynix-audios Bucket 中。
文件命名:文件使用生成的唯一 UUID 命名(如 123e4567-xxx.aac),防止内容重复 10。
网络合规与分发 (核心风险应对,补充细节):因微信小程序强制要求 HTTPS 且需白名单拦截,MinIO 前端必须部署 Nginx 反向代理并配置 SSL 证书。为应对早高峰并发,Nginx 域名上必须套用公有云 CDN 服务进行边缘缓存加速 8, 11。
三、 核心架构设计与技术规范
6. 数据建模 (核心表结构)
表名必须以 sundynix_开头,主键统一为 UUID 字符串 10, 12。(Go 结构体转 JSON 时统一使用 camelCase)。
表名 (Table),字段 (Column),类型,说明
sundynix_audio_content,id (PK),String(UUID),唯一音频ID 10
,title,String,音频标题,用于锁屏界面展示 8
,audio_url,String,绑定 CDN 的 MinIO AAC 音频链接
,epname,String,专辑名 (如:早安电台 - 硬核职场) 8
sundynix_play_record,id (PK),String(UUID),播放记录ID (外部扩展)
,audio_id,String(UUID),关联音频
,progress_sec,Integer,播放进度(秒),用于 startTime 恢复 8
sundynix_user_medal,id (PK),String(UUID),勋章记录ID (外部扩展)
,medal_type,String,勋章标识 (如: EARLY_BIRD_7) 12
7. 核心后端 API 接口设计 (camelCase 响应)
API 1: 获取音频列表
Route: GET /api/v1/audios?scene=morning&limit=5
Response:
{
"code": 200,
"message": "success",
"data": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"title": "今日 GitHub 热榜:3个 Agent 变现线索",
"audioUrl": "https://cdn.sundynix.com/sundynix-audios/123e4567-e89b-12d3-a456-426614174000.aac",
"epname": "早安电台 - 硬核职场",
"duration": 180
}
]
}
API 2: 更新播放状态 (含勋章触发逻辑) (扩展功能 13)
Route: POST /api/v1/play-status
Body: {"audioId": "123e...", "progressSec": 180, "isCompleted": true}
Response:
{
"code": 200,
"data": { "saved": true, "newMedalUnlocked": "EARLY_BIRD_7" }
}
API 3: 获取用户勋章 (扩展功能 13)
Route: GET /api/v1/users/{userId}/medals
Response: 返回解锁的勋章数组及图标。
8. 逾期逻辑处理 (NextRunTime 计算) (外部扩展设计 13)
如果用户错过了“清晨任务”,在下午完成了收听,系统在计算 NextRunTime 时,绝对不能采用 当前时间 + 24小时。必须采用基于“自然日锚点”的对齐策略,将下一次触发重置为“第二天的清晨 05:00”,从而死守产品的“晨间唤醒与规律伴随”核心心智 6。
四、 微信小程序端深度整合
BackgroundAudioManager 是小程序的底层核心,必须妥善设计以保障弱网及锁屏体验 8:
参数合规:获取 API 1 的响应后,必须将 audioUrl 赋值给 src。同时,必须配置 title、epname 和 coverImgUrl,这三者直接决定了系统锁屏播放控件的展示质量,是建立品牌心智的关键 8。
断点续传设计:若用户播放被闹铃中断,前端需记录进度。下次恢复时,将 API 2 中存储的 progressSec 传入 startTime 属性,实现帧级别的无缝续播 8。
五、 分阶段开发计划 (2周 MVP 周期)
第 1-3 天:后端基础及数据爬取
搭建 Go 后端,配置 sundynix_ 前缀数据库和 UUID 10, 14。
编写定时任务(Cron Job),完成 GitHub 和 Product Hunt 数据抓取及 Goquery 标签清洗 5, 10。
第 4-7 天:AI 接入与存储链路构建
接入大模型 API 完成洗稿提炼 7。
集成 TTS 服务,完成音频生成。
搭建自建 MinIO 服务器,配置 Nginx HTTPS 反向代理与云端 CDN,使用 Go SDK 实现音频直推 MinIO 19, 补充。
第 8-10 天:小程序端播放器攻坚
搭建核心 UI,将 CDN 音频地址下发给小程序。
深度整合 BackgroundAudioManager,完成 startTime 断点续传逻辑和锁屏封面展示配置 8。
第 11-14 天:联调、扩展系统与合规审查
完成后端 API 与小程序联调。实现勋章成就系统的前端触发动画 14。
在显著位置增加“AIGC 生成内容”标识,完成政策合规 11。
六、 风险评估与对策
弱网延迟打断收听体验 11
对策:除了依赖自建 MinIO 前置的 CDN 节点加速外,小程序前端必须利用 BackgroundAudioManager 的机制,提前请求下一段音频的 src,实现主动缓冲。若检测到网络极差,动态请求备用的 MP3 低码率链接 8, 11。
系统级中断导致进度丢失 8
对策:妥善监听后台音频管理器的 onPause、onStop 和 onEnded 回调,实时向后端 API 2 上报 progressSec 8。
AIGC 政策合规风险 11
对策:严格遵循《网络视听数据质量及 AIGC 内容管理要求》,在前端 UI 必须带有清晰的 AI 标识,确保平台审核顺利通过 11。