项目介绍
项目背景
最近,我家孩子非常喜欢听故事,就想着自己动手写一个儿童故事软件吧。 一方面为了试试各种 AI IDE,一方面试一试各种大模型的内容输出质量。
项目需求
- 首页的故事系列展示
- 故事播放列表
- 音乐播放器,支持后台播放
- 倒计时关闭
功能截屏
应用商店下载
- 苹果 App Store
- 安卓 Google Play
App 开放源代码
内容生成
儿童故事主要使用【扣子工作流】来实现。
主要流程为:
- 用豆包来给我们自动生成很多的故事标题
- 调用【大模型】节点来根据故事来生成完整的故事内容
- 调用【语音合成】节点将故事内容的文字转为语音文件
- 将以上所有信息整理到数据库中,然后写一个后台服务来提供这些内容让App去使用
工作流搭建好之后,我们就可以写一个Python脚本来批量生产儿童故事内容了。
这里提供一下自动生成内容并存入 csv 文件的 Python 脚本核心代码:
# Our official coze sdk for Python [cozepy](https://github.com/coze-dev/coze-py)
import csv
import json
import os
from cozepy import COZE_CN_BASE_URL, Coze, TokenAuth
coze_api_base = COZE_CN_BASE_URL
COZE_API_TOKEN = os.getenv('COZE_API_TOKEN')
WORKFLOW_ID = os.getenv('WORKFLOW_ID')
# 生成故事
coze = Coze(auth=TokenAuth(token=COZE_API_TOKEN), base_url=coze_api_base)
def generate_story(category, title) -> dict:
workflow = coze.workflows.runs.create(
workflow_id=WORKFLOW_ID,
parameters={
"input": f"{category} - {title}"
}
)
return json.loads(workflow.data)
category = "孙悟空"
titles = [
'大闹天宫',
]
# Define the path to the CSV file
csv_path = "data/stories.csv"
# Create the data folder if it doesn't exist
if not os.path.exists("data"):
os.makedirs("data")
# Write headers if file doesn't exist
if not os.path.exists(csv_path):
with open(csv_path, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(["category_name", "name", "url_gaoleng", "url_roumei", "url_wennuan", "url_yangguang"])
for index, title in enumerate(titles):
print(f"{index + 1}. {title}")
data = generate_story(category, title)
# Append the data to CSV file
with open(csv_path, 'a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow([category, title, data['url_gaoleng'], data['url_roumei'], data['url_wennuan'], data['url_yangguang']])
踩坑记录
- 苹果商店,这个儿童故事软件无法发布到 中国大陆。
- 因为根据中国法律规定,在网络上分发音频内容这种行为,需要提供图书出版资质证明。