面向 3 到 10 岁儿童及其家长的中国风 AI 绘本创作工具。孩子可以通过语音、关键词或草图表达灵感,系统会生成一个包含故事正文、分镜插画和朗读音频的互动绘本。
本项目同时服务于“文化发掘”课程目标:系统不会直接复述传统故事,而是从自建中国传统文化语料库中检索适合儿童化改写的文化主题、价值观和视觉意象,再把这些内容作为创作约束注入故事策划。
tongqu-projects/
├── README.md
├── chinese-stories-database/ # 自建中国传统文化 markdown 语料库
│ └── stories/
├── tongqu-agent-backend/ # FastAPI 后端与中枢 Agent
│ ├── main.py # HTTP / WebSocket API
│ ├── agent/
│ │ ├── tongqu_agent.py # ReAct 中枢 Agent
│ │ └── tools.py # Function Calling 工具和 Prompt
│ ├── services/
│ │ ├── culture_rag.py # 文化 RAG 检索
│ │ ├── story_pipeline.py # 配图、TTS、终审成书流水线
│ │ ├── sketch_service.py # 草图语义合并
│ │ └── asr_service.py # 实时语音识别桥接
│ ├── core/ # 安全中间件、模型协议、真实 API 客户端
│ └── tests/ # 文化 RAG 与链路测试
└── tongqu-magic-book/ # React + TypeScript 前端
└── src/
前端
├─ 语音:录音 -> ASR -> 文本意图
├─ 关键词:选择主题词和风格
└─ 草图:上传儿童画 + 可选文字说明
后端 /api/storybook/create 或 /api/storybook/create/stream
-> TongquAgent 中枢 Agent
-> 输入安全过滤
-> 文化 RAG 初检索 safe_keywords + sketch_text
-> 如果有草图:Qwen-VL analyze_sketch
-> 文化 RAG 补检索 safe_keywords + sketch_text + visual_semantics
-> draft_story 注入 culture_context 生成故事策划
-> review_safety 文本安全审查
-> generate_storyboard 生成 3 到 4 个分镜
-> finish_creation 提交结构化成稿
-> Gemini 逐镜配图
-> DashScope CosyVoice 合成朗读音频
-> 本地 SafetyMiddleware 终审与价值观对齐
-> 返回绘本结果和文化发掘元数据
语料库位于 chinese-stories-database。每个文化条目是一个 markdown 文件,文件头部使用 YAML frontmatter 描述可检索字段,正文只用于人工阅读和展示。
检索时只使用这些 frontmatter 字段:
titlesourcecategorytagsthemesrag_keywordscore_ideachild_friendly_takeawayvaluesvisual_motifs支持的 RAG 字段包括:
culture_typerag_keywordscore_ideachild_friendly_takeawayvaluesvisual_motifsusable_story_seedsavoid_direct_copysafety_notesintegration_prompt当前检索实现是“字段加权关键词 + BGE-large-zh embedding”的混合检索:
rag_keywords、visual_motifs、title、tags 等强文化意象字段。BAAI/bge-large-zh-v1.5,只对 frontmatter 构造的短文本向量化,不读取 markdown 正文。0.55 * keyword_score + 0.45 * embedding_score 融合。故事策划 Prompt 会明确要求模型:
avoid_direct_copy 中列出的内容必须规避。| 模块 | 技术与服务 |
|---|---|
| 前端 | React、TypeScript、Vite、Tailwind CSS、Framer Motion |
| 后端 | Python、FastAPI、Pydantic、asyncio |
| 中枢编排 | Sandboxed ReAct、OpenAI 兼容 Function Calling |
| 文本生成 | DashScope Qwen |
| 草图理解 | Qwen-VL |
| 语音识别 | DashScope ASR WebSocket |
| 插画生成 | Gemini Image |
| 语音合成 | DashScope CosyVoice |
| 内容安全 | SafetyMiddleware、本地文本风险检查 |
| 文化检索 | Markdown frontmatter RAG |
cd tongqu-agent-backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
填写 .env 中的密钥:
DASHSCOPE_API_KEYDASHSCOPE_COMPAT_BASE_URLGOOGLE_API_KEY 或 GEMINI_OPENAI_API_KEY / GEMINI_OPENAI_BASE_URL启动服务:
uvicorn main:app --reload --host 0.0.0.0 --port 8000
健康检查:
curl http://127.0.0.1:8000/health
cd tongqu-magic-book
npm install
创建 tongqu-magic-book/.env,写入:
VITE_API_BASE_URL=http://127.0.0.1:8000
启动:
npm run dev
浏览器访问 Vite 输出的本地地址,通常是 http://localhost:5173。
POST /api/storybook/create
Content-Type: application/json
{
"keywords": "月亮、小兔、想家",
"style": "ink-wash",
"creation_source": "keywords",
"enable_style_keyword_enhancer": true
}
{
"keywords": "孩子画了一条河边的小船",
"style": "paper-cut",
"creation_source": "sketch",
"sketch_image_base64": "data:image/png;base64,...",
"sketch_text": "我画的是和朋友一起划龙舟"
}
{
"ok": true,
"creation_source": "keywords",
"title": "月光小车回家",
"story_text": "……",
"scenes": [
{
"scene_no": 1,
"text": "……",
"image_prompt": "traditional Chinese ink wash painting..."
}
],
"image_urls": ["https://..."],
"audio_urls": ["data:audio/mpeg;base64,..."],
"style_keywords": ["留白", "淡墨晕染", "宣纸质感"],
"image_prompt_enhancements": [
{
"scene_no": 1,
"style": "水墨",
"selected_keywords": ["留白", "淡墨晕染", "宣纸质感"],
"selected_fragments": [
"generous negative space",
"soft diluted ink wash diffusion",
"visible xuan paper texture"
]
}
],
"culture_rag_used": true,
"culture_hits": [
{
"title": "嫦娥奔月",
"category": "myths-legends",
"score": 1.0,
"core_idea": "望月寄托思念,珍惜家人相伴与团圆时刻。",
"child_friendly_takeaway": "想家的时候,可以把思念变成温柔的祝福,也可以和家人、朋友分享月亮与心愿。",
"visual_motifs": ["圆月", "玉兔", "桂花树", "月饼", "灯笼", "夜空", "家庭围坐"]
}
],
"culture_context": "1. 命中文化主题:嫦娥奔月……",
"culture_integration_note": "本次参考了「嫦娥奔月」的核心思想与视觉意象。创作时仅作为灵感约束,围绕用户输入重新设计角色、情节与分镜,避免直接复述原始故事。"
}
流式接口:
POST /api/storybook/create/stream
返回 application/x-ndjson,包含:
progress:阶段进度。result:最终绘本结果。error:生成失败信息。done:流结束标记。后端测试:
cd tongqu-agent-backend
python -m unittest tests/test_culture_rag.py
python -m compileall agent services core main.py config.py tests
前端构建检查:
cd tongqu-magic-book
npm run build
这个项目不是简单地把用户输入丢给一个 LLM。更值得展示的是:
本项目用于课程设计、学习和原型演示。使用第三方 AI 与云服务时,请遵守对应平台的服务条款、内容安全规范和当地法律法规。儿童内容生成结果仍建议由家长或教师陪伴查看。
面向 3 到 10 岁儿童及其家长的中国风 AI 绘本创作工具。孩子可以通过语音、关键词或草图表达灵感,系统会生成一个包含故事正文、分镜插画和朗读音频的互动绘本。
本项目同时服务于“文化发掘”课程目标:系统不会直接复述传统故事,而是从自建中国传统文化语料库中检索适合儿童化改写的文化主题、价值观和视觉意象,再把这些内容作为创作约束注入故事策划。
tongqu-projects/
├── README.md
├── chinese-stories-database/ # 自建中国传统文化 markdown 语料库
│ └── stories/
├── tongqu-agent-backend/ # FastAPI 后端与中枢 Agent
│ ├── main.py # HTTP / WebSocket API
│ ├── agent/
│ │ ├── tongqu_agent.py # ReAct 中枢 Agent
│ │ └── tools.py # Function Calling 工具和 Prompt
│ ├── services/
│ │ ├── culture_rag.py # 文化 RAG 检索
│ │ ├── story_pipeline.py # 配图、TTS、终审成书流水线
│ │ ├── sketch_service.py # 草图语义合并
│ │ └── asr_service.py # 实时语音识别桥接
│ ├── core/ # 安全中间件、模型协议、真实 API 客户端
│ └── tests/ # 文化 RAG 与链路测试
└── tongqu-magic-book/ # React + TypeScript 前端
└── src/
前端
├─ 语音:录音 -> ASR -> 文本意图
├─ 关键词:选择主题词和风格
└─ 草图:上传儿童画 + 可选文字说明
后端 /api/storybook/create 或 /api/storybook/create/stream
-> TongquAgent 中枢 Agent
-> 输入安全过滤
-> 文化 RAG 初检索 safe_keywords + sketch_text
-> 如果有草图:Qwen-VL analyze_sketch
-> 文化 RAG 补检索 safe_keywords + sketch_text + visual_semantics
-> draft_story 注入 culture_context 生成故事策划
-> review_safety 文本安全审查
-> generate_storyboard 生成 3 到 4 个分镜
-> finish_creation 提交结构化成稿
-> Gemini 逐镜配图
-> DashScope CosyVoice 合成朗读音频
-> 本地 SafetyMiddleware 终审与价值观对齐
-> 返回绘本结果和文化发掘元数据
语料库位于 chinese-stories-database。每个文化条目是一个 markdown 文件,文件头部使用 YAML frontmatter 描述可检索字段,正文只用于人工阅读和展示。
检索时只使用这些 frontmatter 字段:
titlesourcecategorytagsthemesrag_keywordscore_ideachild_friendly_takeawayvaluesvisual_motifs支持的 RAG 字段包括:
culture_typerag_keywordscore_ideachild_friendly_takeawayvaluesvisual_motifsusable_story_seedsavoid_direct_copysafety_notesintegration_prompt当前检索实现是“字段加权关键词 + BGE-large-zh embedding”的混合检索:
rag_keywords、visual_motifs、title、tags 等强文化意象字段。BAAI/bge-large-zh-v1.5,只对 frontmatter 构造的短文本向量化,不读取 markdown 正文。0.55 * keyword_score + 0.45 * embedding_score 融合。故事策划 Prompt 会明确要求模型:
avoid_direct_copy 中列出的内容必须规避。| 模块 | 技术与服务 |
|---|---|
| 前端 | React、TypeScript、Vite、Tailwind CSS、Framer Motion |
| 后端 | Python、FastAPI、Pydantic、asyncio |
| 中枢编排 | Sandboxed ReAct、OpenAI 兼容 Function Calling |
| 文本生成 | DashScope Qwen |
| 草图理解 | Qwen-VL |
| 语音识别 | DashScope ASR WebSocket |
| 插画生成 | Gemini Image |
| 语音合成 | DashScope CosyVoice |
| 内容安全 | SafetyMiddleware、本地文本风险检查 |
| 文化检索 | Markdown frontmatter RAG |
cd tongqu-agent-backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
填写 .env 中的密钥:
DASHSCOPE_API_KEYDASHSCOPE_COMPAT_BASE_URLGOOGLE_API_KEY 或 GEMINI_OPENAI_API_KEY / GEMINI_OPENAI_BASE_URL启动服务:
uvicorn main:app --reload --host 0.0.0.0 --port 8000
健康检查:
curl http://127.0.0.1:8000/health
cd tongqu-magic-book
npm install
创建 tongqu-magic-book/.env,写入:
VITE_API_BASE_URL=http://127.0.0.1:8000
启动:
npm run dev
浏览器访问 Vite 输出的本地地址,通常是 http://localhost:5173。
POST /api/storybook/create
Content-Type: application/json
{
"keywords": "月亮、小兔、想家",
"style": "ink-wash",
"creation_source": "keywords",
"enable_style_keyword_enhancer": true
}
{
"keywords": "孩子画了一条河边的小船",
"style": "paper-cut",
"creation_source": "sketch",
"sketch_image_base64": "data:image/png;base64,...",
"sketch_text": "我画的是和朋友一起划龙舟"
}
{
"ok": true,
"creation_source": "keywords",
"title": "月光小车回家",
"story_text": "……",
"scenes": [
{
"scene_no": 1,
"text": "……",
"image_prompt": "traditional Chinese ink wash painting..."
}
],
"image_urls": ["https://..."],
"audio_urls": ["data:audio/mpeg;base64,..."],
"style_keywords": ["留白", "淡墨晕染", "宣纸质感"],
"image_prompt_enhancements": [
{
"scene_no": 1,
"style": "水墨",
"selected_keywords": ["留白", "淡墨晕染", "宣纸质感"],
"selected_fragments": [
"generous negative space",
"soft diluted ink wash diffusion",
"visible xuan paper texture"
]
}
],
"culture_rag_used": true,
"culture_hits": [
{
"title": "嫦娥奔月",
"category": "myths-legends",
"score": 1.0,
"core_idea": "望月寄托思念,珍惜家人相伴与团圆时刻。",
"child_friendly_takeaway": "想家的时候,可以把思念变成温柔的祝福,也可以和家人、朋友分享月亮与心愿。",
"visual_motifs": ["圆月", "玉兔", "桂花树", "月饼", "灯笼", "夜空", "家庭围坐"]
}
],
"culture_context": "1. 命中文化主题:嫦娥奔月……",
"culture_integration_note": "本次参考了「嫦娥奔月」的核心思想与视觉意象。创作时仅作为灵感约束,围绕用户输入重新设计角色、情节与分镜,避免直接复述原始故事。"
}
流式接口:
POST /api/storybook/create/stream
返回 application/x-ndjson,包含:
progress:阶段进度。result:最终绘本结果。error:生成失败信息。done:流结束标记。后端测试:
cd tongqu-agent-backend
python -m unittest tests/test_culture_rag.py
python -m compileall agent services core main.py config.py tests
前端构建检查:
cd tongqu-magic-book
npm run build
这个项目不是简单地把用户输入丢给一个 LLM。更值得展示的是:
本项目用于课程设计、学习和原型演示。使用第三方 AI 与云服务时,请遵守对应平台的服务条款、内容安全规范和当地法律法规。儿童内容生成结果仍建议由家长或教师陪伴查看。