Files
dreamweaver/docs/product/job-search-relaunch-prd.md

475 lines
19 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.
# Product Requirements Document: DreamWeaver 求职版产品重启与重构
**Version**: 1.0
**Date**: 2026-04-17
**Author**: Sarah (Product Owner)
**Quality Score**: 91/100
---
## Executive Summary
DreamWeaver 当前已经具备一个 AI 儿童故事产品的基础能力,包括故事生成、绘本生成、封面图生成、语音合成、孩子档案、故事宇宙、记忆系统与供应商路由能力。从“功能数量”上看,这个项目并不空,但从“产品完成度”上看,当前版本的核心问题是价值主线分散、工作流不统一、供应商体系复杂度过高,导致产品体验不够聚焦,项目故事也不够适合面试场景快速讲清楚。
本次重启不以“继续堆功能”为目标,而以“构建一个求职可展示、逻辑可讲述、体验可闭环的 AI 产品版本”为目标。求职版 DreamWeaver 将聚焦为一个“面向 3-8 岁亲子场景的个性化 AI 绘本与陪伴式讲述产品”,突出三个核心价值:个性化连续性、稳定的生成工作流、可感知的声音体验。
本 PRD 旨在为后续 2 周至 4 周的产品重构提供明确的目标、范围、优先级与阶段计划。文档同时兼具两个用途:一是作为当前项目的重启执行依据;二是作为转型 AI 产品经理时可模仿的标准化产品文档样本。
---
## Problem Statement
**Current Situation**
DreamWeaver 目前存在以下产品层与系统层问题:
1. 产品主线不清晰。系统同时在讲“儿童故事产品”“成长记忆产品”“多供应商 AI 编排平台”三个故事,但没有一个故事被打磨到足够完整。
2. 关键工作流分裂。普通故事生成、完整生成、绘本生成分别走不同实现,验证、上下文、保存、资产生成与后处理逻辑重复,难以稳定演进。
3. 供应商体系职责混杂。Provider 路由层同时承担默认配置、Key 映射、路由策略、熔断、成本统计、执行入口等多项职责,维护成本高,后续扩展风险大。
4. 演示链路不够稳。Storybook 阅读器依赖内存状态,刷新后无法恢复;音频未做缓存;管理端构建失败会阻碍全量部署。
5. 工程观感不统一。后端测试可通过,但 lint 历史债务较多,前后端重复代码较多,项目成熟度展示受影响。
**Proposed Solution**
将项目收敛为“求职版 DreamWeaver MVP”围绕一个可讲清楚的核心闭环进行重构
`选择孩子档案 -> 输入主题/教育目标 -> 生成故事或绘本 -> 生成封面/语音 -> 保存进入故事库与成长时间线`
系统层同步推进两项重构:
1. 将故事/绘本/资产生成统一到一套 Generation Workflow 中。
2. 将供应商体系重构为清晰的 Capability / Provider / Routing Policy 分层结构。
**Business Impact**
本轮重构完成后,项目在求职场景中的价值将从“会调用多个模型的功能集合”提升为“有明确价值主张、闭环体验和系统设计取舍的 AI 产品案例”,更适合作为 AI 产品经理岗位的核心项目展示。
---
## Current Product Diagnosis
| 诊断项 | 当前表现 | 对产品的影响 | 判断 |
|------|------|------|------|
| 核心价值主张 | 功能较多,但主线分散 | 面试官难以快速理解产品价值 | P0 问题 |
| 生成工作流 | 故事、完整生成、绘本三套路径并存 | 需求扩展成本高,失败处理不一致 | P0 问题 |
| Provider 架构 | 路由、配置、凭证、监控耦合 | 后续优化与说明成本过高 | P0 问题 |
| Storybook 体验 | 依赖前端内存状态,无法按 ID 恢复 | 阅读体验中断,演示不稳 | P0 问题 |
| 音频体验 | 支持实时生成,但无缓存与复用 | 性能与成本不可控 | P1 问题 |
| Admin 前端 | 构建失败,影响完整部署链路 | 一键启动和展示受阻 | P0 问题 |
| 代码质量信号 | 后端测试通过,但 lint 债务明显 | 降低项目成熟度感知 | P1 问题 |
| 前端表现力 | 可用但较轻,缺少状态设计与产品表达 | 难以承载“生成中/失败/降级成功”等体验 | P1 问题 |
---
## Product Positioning
### 产品定位
DreamWeaver 是一款面向 3-8 岁亲子场景的个性化 AI 绘本与陪伴式讲述产品,通过孩子档案、成长主题和故事宇宙上下文,为家庭生成连续、可回看、可聆听的儿童故事体验。
### 求职版定位
求职版 DreamWeaver 不是“最全功能版本”,而是“最能体现产品思考与系统设计能力的版本”。
该版本重点体现以下能力:
- 能围绕明确用户价值做产品收敛,而不是单纯堆功能。
- 能把多模型、多供应商能力整理成稳定、可解释的 AI 工作流。
- 能把声音体验、个性化连续性和失败降级机制变成真正的产品能力。
### 核心价值主张
1. **个性化连续性**:故事不是一次性生成,而是围绕孩子档案与世界观不断积累。
2. **陪伴式体验**:文本、绘本和语音不是孤立能力,而是一套完整的亲子阅读体验。
3. **生成稳定性**:用户不需要理解底层模型,只需要感受到“能稳定出结果,失败也可恢复”。
---
## Success Metrics
**Primary KPIs**
- **故事生成成功率**:核心生成链路成功完成率 >= 90%
测量方式:生成请求中完成文本输出并成功保存主记录的比例。
- **首个结果可见时长**:用户发起生成后,首个可见结果出现时间 <= 15 秒
测量方式:文本结果或“部分完成”状态首次返回时间。
- **完整体验完成率**:文本、封面、语音至少完成其二的比例 >= 80%
测量方式:故事生成后资产完成状态统计。
- **个性化命中率**:在内部评审样本中,>= 80% 的故事能明显体现孩子档案/宇宙上下文
测量方式:人工评估打分表。
- **演示可用率**:求职演示关键链路 10 次连续演示成功率 = 100%
测量方式:内部演示脚本回归。
**Validation**
- 第 1 阶段验证:以“是否能完成端到端故事闭环”为准。
- 第 2 阶段验证:以“是否能稳定支持绘本与语音回放体验”为准。
- 对外验证:以面试演示反馈和项目讲解清晰度为准。
---
## User Personas
### Primary Persona: 家长 / 监护人
- **Role**: 3-8 岁儿童的家长或监护人
- **Goals**:
- 为孩子快速生成有趣、温暖、可教育的故事
- 让孩子成为故事主角,形成陪伴感
- 在睡前、亲子共读等场景中使用语音或绘本
- **Pain Points**:
- 一次性生成内容容易同质化
- 缺少与孩子长期成长相关的连续性
- 语音与插图往往不是同一套体验的一部分
- **Technical Level**: 初中级
### Secondary Persona: 产品拥有者 / 运营管理员
- **Role**: 产品负责人、创作者或系统维护者
- **Goals**:
- 稳定控制模型调用效果、成本和失败降级
- 保持产品演示链路稳定
- 对系统结构有解释力,便于招聘场景展示
- **Pain Points**:
- Provider 配置复杂,难以讲清楚
- 多条工作流重复演化,维护成本高
- 工程质量与展示价值不匹配
- **Technical Level**: 中高级
---
## User Stories & Acceptance Criteria
### Story 1: 快速生成个性化故事
**As a** 家长
**I want to** 基于孩子档案和教育主题生成一个故事
**So that** 我能快速得到适合孩子的阅读内容
**Acceptance Criteria**
- [ ] 用户可以选择孩子档案并输入主题或教育目标
- [ ] 系统能结合档案与宇宙上下文生成故事文本
- [ ] 故事保存后可在故事库中查看
- [ ] 当图片或语音生成失败时,故事文本仍可正常保留并查看
### Story 2: 生成并阅读绘本
**As a** 家长
**I want to** 生成一个多页绘本并在前端顺畅阅读
**So that** 我能获得更强的陪伴和共读体验
**Acceptance Criteria**
- [ ] 系统支持多页绘本生成
- [ ] 绘本可通过唯一 ID 被再次打开,而不是只依赖前端内存状态
- [ ] 页面刷新或重新进入时,绘本内容仍能恢复
- [ ] 若部分页面插图失败,文本页仍可正常展示
### Story 3: 听故事
**As a** 家长
**I want to** 播放故事语音
**So that** 我可以在睡前或陪伴场景下使用
**Acceptance Criteria**
- [ ] 故事详情页支持加载和播放语音
- [ ] 同一故事音频应支持缓存或复用,避免重复生成
- [ ] 音频生成失败时,页面应给出明确状态与重试方式
### Story 4: 管理模型供应与成本风险
**As a** 产品拥有者
**I want to** 以清晰的方式管理不同能力对应的供应商
**So that** 我能解释系统架构,并稳定控制成本与故障
**Acceptance Criteria**
- [ ] Provider 配置以能力、供应商、模型配置的方式组织
- [ ] 路由策略与凭证管理职责分离
- [ ] 系统能清楚展示失败降级逻辑
- [ ] 管理端或配置文档能说明当前有效供应链路
---
## Functional Requirements
### Core Feature 1: 统一的生成工作流
- **Description**: 将普通故事、完整故事、绘本生成统一到一套生成任务模型中。
- **User Flow**:
1. 用户发起生成
2. 系统校验档案与宇宙关系
3. 系统构建 memory/context
4. 系统生成文本或绘本结构
5. 系统保存主记录
6. 系统异步生成封面与语音
7. 系统回写状态
- **Edge Cases**:
- 用户未选择孩子档案
- 故事宇宙与孩子档案不匹配
- 部分资产生成失败
- **Error Handling**:
- 文本失败:返回明确错误,不保存空故事
- 图片失败:标记为部分完成,可后续重试
- 音频失败:不阻塞文本阅读
### Core Feature 2: 个性化上下文注入
- **Description**: 将孩子档案、成长主题、故事宇宙和记忆系统统一视为内容上下文,而不是附属配置。
- **User Flow**:
1. 用户选择档案
2. 系统聚合角色、兴趣、成长主题、宇宙设定、记忆
3. 生成结果体现上下文
- **Edge Cases**:
- 没有档案时,允许通用生成
- 没有宇宙时,允许使用基础档案
- **Error Handling**:
- 某类上下文缺失不应阻塞生成,只进行降级
### Core Feature 3: 绘本与语音的可恢复体验
- **Description**: 阅读器和音频播放应支持重新进入、状态恢复与降级处理。
- **User Flow**:
1. 用户打开故事详情或绘本详情
2. 系统按 ID 拉取内容
3. 页面展示当前已完成资产
4. 用户按需触发图片或音频补全
- **Edge Cases**:
- 页面刷新
- 资产未生成完成
- 资产生成失败
- **Error Handling**:
- 以状态展示替代“空白失败”
- 保留重试入口
### Core Feature 4: 简化后的 Provider Orchestration
- **Description**: 供应商系统应服务于“稳定生成”,而不是暴露为产品主角。
- **User Flow**:
1. 系统根据能力类型加载 provider 列表
2. 根据 routing policy 选择执行顺序
3. 调用成功即返回结果,失败则自动切换
4. 记录成本、耗时与错误
- **Edge Cases**:
- 没有可用 provider
- provider 凭证缺失
- 同类 provider 全部失败
- **Error Handling**:
- 返回聚合错误
- 支持 degraded completion
### Core Feature 5: 演示级前端关键体验
- **Description**: 前端优先完成关键状态设计,而不是先追求大规模视觉升级。
- **Required States**:
- 初始化
- 生成中
- 文本已完成、资产处理中
- 部分完成
- 全部完成
- 失败与重试
- **UI Principles**:
- 用户始终知道系统当前在做什么
- 用户始终知道下一步能做什么
- 页面刷新后体验不中断
### Out of Scope
- 新增大量供应商类型或复杂负载均衡策略
- 多租户 Provider 管理
- 复杂高可用部署优化作为本轮核心目标
- 高保真商业化支付、会员与订阅系统
- 花大量时间做纯视觉层重做
---
## Technical Constraints
### Performance
- 文本生成应在 15 秒内给出首个可用结果或明确状态
- 图片/语音资产生成可异步完成,但前端必须有可见状态
- 绘本详情和故事详情需支持按 ID 快速恢复
### Security
- 继续使用现有 JWT + httpOnly Cookie 认证方案
- Provider 密钥应保持加密管理,不在前端暴露
- 管理端仅保留必要入口,默认不作为求职版核心展示对象
### Integration
- **Text Providers**: Gemini / OpenAI 作为文本能力候选
- **Image Providers**: CQTAI / Antigravity 作为图片能力候选
- **TTS Providers**: MiniMax / ElevenLabs / Edge TTS 作为语音能力候选
- **Background Jobs**: Celery + Redis 负责后处理与异步任务
### Technology Stack
- **Backend**: FastAPI + SQLAlchemy Async + PostgreSQL + Celery/Redis
- **Frontend**: Vue 3 + TypeScript + Pinia + Tailwind CSS
- **Design Principle**: 先完成状态与流程设计,再做界面强化
---
## MVP Scope & Phasing
### Phase 1: MVP (2 周)
**目标**: 做出一个求职可演示、逻辑清晰、体验闭环的 AI 故事产品版本
**MVP Scope**
- 统一故事 / 完整生成 / 绘本生成的工作流抽象
- 将 Storybook 页面改为支持按 ID 恢复
- 修复管理端构建问题,或明确降级为非核心链路
- 清理 Provider 概念层,去掉历史别名与混杂职责
- 为图片/音频生成增加明确状态与重试入口
- 清理关键 lint 与工程观感问题
**MVP Definition**
用户可以稳定完成一次“选择孩子档案 -> 生成故事/绘本 -> 获取封面/语音 -> 回看或继续阅读”的完整体验,且系统结构可以被清晰讲述。
### Phase 2: Enhancements (4 周)
- 音频缓存与复用
- 记忆系统与时间线联动优化
- Provider 健康状态与成本摘要
- 演示级前端优化,包括结果页、状态页和阅读页体验
- 补齐缺失测试,提升工程可信度
### Future Considerations
- 更细粒度的叙事风格与音色策略
- 睡前模式 / 陪伴模式
- 教师场景或课程场景扩展
- 更复杂的成本路由与多租户配置
---
## Prioritization Matrix
| Priority | 事项 | 目标 | 原因 |
|------|------|------|------|
| P0 | 收敛产品主线 | 明确“个性化 AI 绘本与陪伴讲述”定位 | 决定后续所有范围 |
| P0 | 统一生成工作流 | 消除故事/绘本/资产生成的分裂实现 | 是系统稳定性的核心 |
| P0 | Provider 概念重构 | 拆清 Capability / Provider / Routing Policy | 是系统可解释性的核心 |
| P0 | Storybook 可恢复体验 | 支持按 ID 加载与刷新恢复 | 是演示稳定性的核心 |
| P0 | 修复 admin-frontend 构建或明确降级 | 保证一键启动或明确非核心范围 | 避免部署阻塞 |
| P1 | 音频缓存与重试 | 强化声音体验和成本控制 | 与你的背景强相关 |
| P1 | 前端状态设计 | 让生成中、失败、部分完成可感知 | 提升产品成熟度 |
| P1 | 补测试与 lint 清理 | 提升工程可信度 | 有助于面试展示 |
| P2 | 增加更多 Provider | 扩展覆盖面 | 当前不是关键短板 |
| P2 | 管理后台复杂可视化 | 增强运维能力 | 不是求职版核心 |
| P2 | 大规模视觉升级 | 提升表层观感 | 应晚于闭环与稳定性 |
---
## Delivery Plan
### 第 1 阶段2 周执行清单
#### Week 1
- 完成产品主线和展示口径收敛
- 定义统一的 Generation Job 状态模型
- 拆分 Provider 层职责,输出新概念模型
- 决定 admin 端保留范围
- 修复 Storybook 依赖内存状态的问题
#### Week 2
- 将前端关键页面补齐状态与重试
- 打通故事生成与绘本生成的统一流程
- 输出一版稳定演示脚本
- 清理关键 lint 问题
- 完成一轮端到端回归测试
### 第 2 阶段4 周执行清单
#### Week 3
- 上线音频缓存与复用
- 让时间线、记忆、故事结果之间形成更清晰关联
- 增加失败降级与资产补全机制
#### Week 4
- 完善前端结果体验与语音体验
- 补齐缺失测试
- 输出项目说明文档、架构图和演示话术
- 完成求职版 Demo 包装
---
## Risk Assessment
| Risk | Probability | Impact | Mitigation Strategy |
|------|------------|--------|---------------------|
| 重构范围失控 | High | High | 严格限制本轮只服务一个核心闭环,不新增大功能 |
| Provider 重构导致兼容性问题 | Medium | High | 先保留兼容层,再逐步迁移配置 |
| Storybook/音频链路改动引入回归 | Medium | High | 补关键回归测试与演示脚本 |
| 前端优化挤占后端重构时间 | High | Medium | 前端只做状态和关键体验,不做全量视觉翻新 |
| 求职展示与真实产品目标冲突 | Medium | Medium | 将“求职版”定义为独立阶段目标,不追求商业化全量能力 |
---
## Dependencies & Blockers
**Dependencies**
- 现有后端数据库模型和迁移能力
- 现有 Provider Adapter 体系
- Vue 前端页面与 Pinia 状态管理
- 可用的测试与构建环境
**Known Blockers**
- 管理端前端当前构建失败
- Storybook 阅读器缺少按 ID 恢复能力
- 音频未缓存,体验和成本不可控
- Provider Router 耦合度高,任何修改都容易牵动多处逻辑
---
## Appendix
### Assumptions
- 本轮目标以求职展示为第一优先级,而非商业化上线。
- 目标用户仍然是 3-8 岁儿童家庭场景。
- 当前技术栈保持不变,不进行大规模框架迁移。
- 管理后台是辅助能力,不作为本轮展示主角。
### Glossary
- **Generation Workflow**: 从用户输入到文本、图片、语音完成的一整套生成流程。
- **Capability**: 底层 AI 能力分类,如文本、图片、语音。
- **Provider**: 具体供应商,如 Gemini、OpenAI、MiniMax。
- **Routing Policy**: 供应商选择与降级策略。
- **Degraded Completion**: 资产部分失败但主结果可用的完成状态。
### 如何模仿本类文档
当你以后写自己的 PRD 或产品方案时,可以复用这套骨架:
1. 先写 Executive Summary说明产品现在为什么要做这件事。
2. 再写 Problem Statement拆清当前问题、方案与业务影响。
3. 给出 Success Metrics避免文档只有想法没有验证标准。
4. 用 Persona 和 User Story 把“用户价值”写实,而不是只写功能点。
5. 在 Functional Requirements 里同时写 happy path、edge case 和 error handling。
6. 用明确的 Out of Scope 防止范围不断膨胀。
7. 用 P0/P1/P2 或阶段计划体现产品判断,而不是罗列任务。
8. 最后补风险、依赖和假设,让文档更像真正可执行的产品方案。
### References
- `backend/app/services/provider_router.py`
- `backend/app/services/story_service.py`
- `frontend/src/views/StorybookViewer.vue`
- `frontend/src/stores/storybook.ts`
- `backend/tests/`
---
*This PRD was created as a job-search-oriented product reboot plan, with emphasis on product focus, AI workflow clarity, and portfolio-ready execution quality.*