项目名称: AI 童话编剧与绘本生成器

本阶段时间: 2026 年 6 月 1 日 — 2026 年 6 月 7 日(第 14 周)


一、引言

继第五篇团队博客完成「出图 Prompt 双 LLM 编排、英文语料离线流水线、前端体验焕新与答辩交付闭环」之后,团队进入 知识库真正接入生成链路出图侧多角色与 RAG 自增长听书能力从占位到可用提示词版本化 / RAG 可验收 并行的阶段。本期团队博客汇总四位成员本周个人博客成果,内容覆盖:

  • 蒋宇宸:扩展故事 Schema 为 配角表 + 每页出镜名单,以 reconcile_story_cast() 修补 LLM 漏登记;落地 出图 RAGimage_corpus.jsonl、每页正负例检索、向量+关键词混合、auto_harvest 自增长)与 纯文字冷启动灌库
  • 黄子祺:将第五篇 corpus.jsonl 接入 真实 LLM 生成链路——KnowledgeCorpusLoader 加载、retrieve_for_story 关键词打分与哈希兜底、reference_material 注入 v5 模板,并与 rag_context 安全校验、运维开关形成闭环;
  • 黄荣涵:接入 DashScope CosyVoice TTS,补齐 Job narrating 阶段、按音色目录落盘与 按需合成;阅读页支持 音色切换、听故事模式与翻页自动联播,删书时同步清理音频资产;
  • 李冰川:建立 提示词 v1→v5 版本管理体系(文件化模板 + prompt_loader + STORY_PROMPT_VERSION),并推进 RAG 验收化——/rag/status/rag/preview、中文主题 hint 映射、离线 rag_benchmark.py 与答辩对比文档。

四位成员分别从 出图精度与语料飞轮故事侧 RAG 最后一公里多模态听读体验工程可配置与可测 四条轴线同时推进,推动项目从「语料文件就绪、出图能跑」向「故事有参考、画面有多角色与参考书、朗读可听、开关与版本可验可对比」演进,为后续 中文语料扩展、向量检索升级与答辩 A/B 实验 提供稳定挂载点。


二、蒋宇宸:多角色分镜、出图 RAG 与语料自增长

2.1 工作背景

第五篇双流架构解决了「分镜与出图 prompt 各说各话」与出图 LLM 编排,但仍存在三类缺口:Qwen 虽支持多角色,应用层只有主角一条 characters[];旁白写了配角却未进 supporting_cast,出图自然漏人;出图编剧仍是「裸调 LLM」,缺少与故事侧类似的 参考书与失败反例,语料也无法随成功出图自动积累。

2.2 方案设计

在第五篇链路上横向扩展两层结构:

用户创作参数
    ↓
【LLM 1】generation.py
      → supporting_cast + appearing_characters(每页最多 2 人)
      → reconcile_story_cast() 兜底
    ↓
【出图 RAG】每页检索 image_corpus.jsonl(正例 / 反例分离)
    ↓
【LLM 2】image_prompt_generation.py
      → rag_positive / rag_avoid → 出图 JSON
    ↓
【Qwen】generator.py → PNG + VL 重试
    ↓
【RAG 回流】auto_harvest → 语料自增长

2.3 关键实现

  • 多角色 SchemaStoryResultLLM.supporting_cast 登记全书配角(含 visual_design);StoryPageLLM.appearing_characters 约束本页出镜名,最多 2 人。story_characters.py 解析为 Qwen 所需的 characters[](独立 id / prompt / face_enabled),参考图落 data/character_refs/{story_id}/
  • 登记兜底reconcile_story_cast() 扫描旁白/对白,发现 出现 ≥2 页的具名配角 补进 cast,并按页文案修复 appearing_characters,避免「旁白有小蓝鸟、payload 只有主角」类断点。
  • 出图 RAG:语料文件 image_corpus.jsonl;每页独立调用 retrieve_for_image_prompt(positive / negative 模式);Prompt 硬约束参考成功范例、避开反例坑;按画风、角色数、年龄段、VL 分加权;指纹去重保留高分条目。
  • 自动化运维:启动语料为空则 seed 模板;出图成功且 VL ≥ 阈值 → auto_harvest 写入;重试「先失败后成功」成对入库 bad/good。seed_image_corpus.py 支持 bulk / curated 纯文字灌库(不调用 Qwen),冷启动规模可达 400+ 条。

2.4 问题与取舍

问题 处理思路
LLM 漏登记配角 Prompt 规则 + reconcile_story_cast 后处理双保险
全书共用第一页 RAG 改为 每页单独检索,贴合当页 scene/action
冷启动语料过少 seed_image_corpus.py + 外部绘本风 curated 条目
Agent 失败路径 出图 Agent 优先,失败才 fallback 规则层(非每页先跑规则)

2.5 成果与总结

第六篇把第五篇「能出图」推进到 「能出多角色、有参考书、语料会自己长」:双角色页日志可见 👥 本页角色数量: 2,RAG 正负分离使出图 LLM 有结构可学。新增 story_characters.pyimage_rag/curated_prompts.py 等模块,与 generation.pyimage_prompt_generation.py 形成完整飞轮。


三、黄子祺:故事 RAG 加载、检索注入与生成链路闭环

3.1 工作背景

第五篇已把 fairy_tales 打成 corpus.jsonl,但 仅有文件不会让模型自动变聪明——必须在 Chat 调用前完成:可靠加载、可控检索(Top-K / 字数上限)、契约稳定的 prompt 注入,且 mock 与 LLM 路径边界清晰,未配语料时不应拖垮演示。

3.2 方案设计

刻意 不把向量库绑在演示路径上:第一版用 英文 token 关键词打分 + SHA256 确定性兜底,保证纯中文请求也能拿到英文参考节选(结构启发为主);对外 API 与前端契约不变,后续仅替换 retrieve_for_story 内部实现即可。

3.3 关键实现

  • 加载层KnowledgeCorpusLoader 解析 data_root()/knowledge/{corpus_filename};按行 KnowledgeRecord 校验,坏行 skip;进程内按 mtime 缓存,变更后 load(force=True) 自动刷新。
  • 运维开关rag_enabled(默认 false)、rag_top_krag_max_context_charsrag_max_excerpt_chars_per_recordrag_fallback_when_no_match 等经 settings / .env 配置,避免未准备语料同学误以为生成异常。
  • 检索策略:从 scene、protagonist、extra_prompt、interest_tags 等抽取 ≥3 字母英文 token;title/theme_tags 加权高于 body;不足 Top-K 时用请求内容哈希在语料数组上确定性跳跃取样;打 rag_retrieval INFO 日志(ids、scores、truncated_total)。
  • 生成接入_reference_material_for_generation 在 RAG 关闭或语料空时返回占位句;v5 模板显式写入 禁止抄袭/大段直译,输出语言仍服从 {language}仅在 LangChain 就绪分支 执行检索与 assert_text_safe(..., phase="rag_context"),避免 mock 路径反复读大文件。

3.4 问题与取舍

问题 解决方案
中文查询 vs 英文语料 关键词弱命中 + 哈希兜底;中文 hint 见李冰川篇
语料行损坏 单行 skip,不拖垮全库
参考文本触审核 rag_context 与输入/输出同一套关键词审核
未来向量检索 generation 只消费字符串块,retriever 可插拔替换

3.5 成果与总结

语料、开关、提示词、审核与日志形成 可部署、可观测 的闭环。价值不在于「检索有多准」,而在于 最后一公里边界清楚——mock 与 LLM 各走各的,RAG 开启后 reference_material 稳定进入编剧 Agent,为答辩开/关对比实验提供同一注入点。


四、黄荣涵:CosyVoice TTS、按需合成与阅读页听书体验

4.1 工作背景

此前 StoryPage.audio_url 虽指向 /api/v1/assets/audio/{story_id}/{页码}.mp3,磁盘无 MP3、assets.py 返回 404 占位;阅读页点击插图 audio.play() 静默失败——用户看得到「AI 朗读中」文案,却 听不到声音,听书能力处于「有 UI 无能力」状态。

4.2 方案设计

DashScope CosyVoice 为合成后端,统一 story_tts.py 入口;音频按 data/audio/{story_id}/{voice_id}/{页码}.mp3 落盘,支持 多音色目录缓存 + 按需合成——切换偏好不必重跑全书 Job;阅读页补齐 音色下拉、听故事模式、翻页自动联播

4.3 关键实现

  • 合成服务SpeechSynthesizer 非流式 call(),MP3 22050Hz mono;Key 回退链 TTS_API_KEY → DASHSCOPE_API_KEY → IMAGE_API_KEY;默认音色 longxiaochun_v2,占位值 default-child-friendly 自动映射。
  • 音色目录tts_voices.py 白名单(龙小春活泼童声、龙婉温柔女声、龙安阳沉稳男声等),每 ID 绑定对应 CosyVoice 模型版本,避免 voice/model 不匹配。
  • APIGET /api/v1/tts/voices 返回列表与 tts_configuredGET .../assets/audio/{story_id}/{page}.mp3?voice={id} 读缓存,不存在则读 DB 取 page.text 现场合成再返回;voice 参数白名单校验,目录名防路径注入。
  • 阅读页:音色偏好存 localStoragestorybook.ttsVoice);听故事模式开关(storybook.listenMode);renderPage 结束自动 playCurrentPage;当前页播完自动翻页续播;切换音色时若正在朗读则立即用新音色重播当前页。
  • 资产清理:删书时 purge_story_image_assets 扩展为同时删除 data/audio/{story_id}/,保留 page_attempts 审计与 RAG 语料。

4.4 问题与解决方案

问题 解决方案
占位 URL 无文件 按需合成 + 按音色分目录缓存
全书重跑换音色成本高 阅读时按页 lazy 合成
翻页听书断裂 听书模式 + onended 自动下一页
非法 voice 参数 VOICE_CATALOG 白名单 + 目录名正则

4.5 成果与总结

TTS 从占位 URL 变为 可听、可选音色、可续播 的完整体验,与第五篇视觉焕新后的 reader.html 形成「看 + 听」闭环。CosyVoice 与出图共用 DashScope 账号,降低答辩环境配置成本。


五、李冰川:提示词版本管理与 RAG 验收化

5.1 工作背景

计划书要求 提示词可版本化、可对比,以及 RAG 可开关、可预览、可测命中率。此前 generation.py 内嵌长模板,RAG 虽已有语料与 retriever,但默认 RAG_ENABLED=false,且缺少 不调用 LLM 也能验 的工具,答辩难以填开/关对比表。

5.2 方案设计

  • 提示词:v1(最小闭环)→ v5(RAG 参考块 + 防长文循环),每版独立 md 文件 + CHANGELOG;代码经 prompt_loader.load_story_prompt_template(version) 加载,STORY_PROMPT_VERSION 可配置。
  • RAG 验收:新增 status/preview API;capabilities 自检增强;retriever 增加 中文主题 hint;离线 benchmark 脚本输出 Top-K 与命中数,写入 docs/rag-eval/

5.3 关键实现

  • 五版模板prompts/story/v1.md ~ v5.md):含相对上版变更说明与 PROMPT_TEMPLATE_START/END 间 LangChain 正文;v5 为当前默认,承载 {reference_material} 与防「第 9–12 页重复第 1–4 页」约束。
  • 文档体系prompts/CHANGELOG.mdprompts/README.mddocs/prompt-eval/COMPARISON.md(答辩填表 + 截图模板)。
  • RAG APIGET /api/v1/rag/status 返回语料路径、条数、开关、Top-K;POST /api/v1/rag/preview 给定创作参数预览检索(无需 LLM),支持 force_retrieve: true 在 RAG 关闭时仍做对比实验。
  • 检索改进:中文场景/兴趣映射英文 hint(如 森林→forest/fairy),提高 demo payload 对英文语料命中率;rag_benchmark.py 对固定样例输出 benchmark-results.json(如神秘森林 Top-3:ft_en_0060 等)。

5.4 问题与解决方案

问题 解决方案
提示词改一处牵全身 文件化版本 + loader,generation 不再内嵌
RAG 效果难证 preview API + 离线 benchmark + REPORT/COMPARISON 文档
中文输入英文语料 retriever hint 映射 + 黄子祺篇哈希兜底
答辩不知当前版本 capabilities 返回 story_prompt_version 与可用列表

5.5 成果与总结

团队拥有 可 diff 的提示词演进史零 LLM 成本的 RAG 预览/基准工具链,使「开 RAG 是否更好」从主观感受变为 可填表、可截图、可复跑 的验收项,与黄子祺篇注入点、蒋宇宸篇出图 RAG 形成故事侧 / 出图侧双轨可测结构。


六、团队共识与总结

本阶段(第 14 周),AI 童话绘本生成器团队在 知识注入出图飞轮听读体验工程可验收 上取得同步进展:

  1. 故事 RAG 真正进 prompt:加载—检索—注入—审核—日志闭环,mock 与 LLM 路径分离,默认关、按需开,不破坏未配语料同学的演示。
  2. 出图从单角色到多角色 + 参考书:配角表、每页出镜、reconcile 兜底与 image_corpus 正负检索、auto_harvest 自增长,使画面人物与叙事一致、语料越用越厚。
  3. 多模态体验补齐:CosyVoice 按需合成 + 阅读页听书联播,产品从「能看绘本」延伸到「能听故事」。
  4. 版本与验收有据:提示词 v1→v5 文件化,RAG status/preview/benchmark 可独立验证,答辩对比实验有工具、有文档、有基准数字。

下一阶段计划: 推进 中文语料与 jieba 检索向量检索 / rerank 替换关键词实现创作进度 UI 与 narrating 阶段前端对齐RAG 开/关与提示词 v4/v5 的 LLM 对比实验固化;并继续细化 imaging / narrating 在 Job 编排中的可观测性与超时策略


团队成员个人博客

成员 主题 链接
黄子祺 故事 RAG:corpus 加载、检索与 reference_material 注入 https://blog.csdn.net/2301_80232378/article/details/161167897
蒋宇宸 多角色分镜、出图 RAG 与语料自增长 https://blog.csdn.net/yu_chen_xiang/article/details/161936276
黄荣涵 CosyVoice TTS 与阅读页听书体验 https://blog.csdn.net/2503_94171936/article/details/162142788
李冰川 提示词版本管理与 RAG 验收化 https://blog.csdn.net/2403_82681167/article/details/162015465
Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐