PM PRD Product Solution
本 skill 用于把 PRD 中最容易写散的「产品方案」沉淀成可评审、可研发对齐、可测试拆用例的章节。
它继承 FayeMax/Quokka SOP 的写法:结论前置、逻辑直接、表格化并列信息;参考 Quokka v1.1-v1.4 系列 PRD 的产品方案样式,核心表格通常是:
| 功能/页面 | 需求详情 | 参考图 |
| :--- | :--- | :--- |
也可根据旧文档使用 需求点 | 需求详情 | 示意,但同一篇文档内保持一种表头。
更细的历史模式见 references/quokka-product-solution-patterns.md。当需求涉及模板、+号入口、相册页、Generate、Enhance、remake、外部模型时,先读该 reference 再写。
前置读取
开始写作前,先读取并遵守:
../pm-writing-style-fayemax/SKILL.md../pm-writing-style-fayemax/references/part1-canonical.md../pm-prd-doc/SKILL.md- 若涉及模型接入 / Generate / 参数能力冻结,再读
../pm-prd-requirement-details/SKILL.md - 若需要同步飞书,再读
../lark-doc/SKILL.md及其 fetch/update 相关 reference
如果用户给了参考飞书文档,优先用 lark-cli docs +fetch --api-version v2 --scope keyword --keyword "产品方案|功能/页面|需求详情|参考图|示意" 拉取局部,不要整篇全文拉取。
工作流程
1. 先定产品方案边界
先从当前 PRD 或用户输入中提取:
- 本次做什么:新增入口、流程改造、模型接入、模板能力、相册资产、Generate 参数等
- 影响范围:App / Web / 海外 / 国内
- 上游路径:用户从哪里进入
- 核心操作:用户点什么、选什么、上传什么、提交什么
- 下游逻辑:进入哪个页面、发起什么请求、生成什么结果、写入哪些资产
- 约束条件:会员、素材数量、参数合法性、频控、不可用态
- 兜底:失败态、空态、服务端未下发配置、老版本兼容
不要一上来写大段正文。先把这些口径映射到表格行。
2. 选择表格行维度
先判断需求类型,再选表格行维度。优先用「功能/页面」拆行,适合页面流明显的 Quokka PRD:
- 起始页 / 首页入口
- 参数面板 / 模型选择器
- 相册页 / 素材选择
- 创作页 / Generate 面板
- 结果页 / 视频详情 / 资产页
- 会员权益 / 订阅拦截
- 其他兼容 / 失败态 / 重新生成
如果需求更偏能力点,而不是页面流,改用「需求点」拆行:
- 入口展示
- 参数选择
- 素材限制
- 模型联动
- 积分计费
- 生成失败
- 埋点 / 后台联动
拆行原则:每一行都应该能被研发或测试单独评审。不要把多个页面硬塞进一行,也不要把一个很小的按钮拆成多行。
按 Quokka 历史 PRD 的类型路由:
| 需求类型 | 优先拆行 |
|---|---|
| 模板 / 图片资产 / 双图模板 | 模板首页、模板详情页、+号模板选择页、上传图片、模板创作页、资产页、运营后台 |
| +号入口 / 相册页 | +号功能入口面板、相册页、最近使用、本地相册&资产、选择引导框、项目选择器、大图模式、边界场景 |
| Generate / 视频生成 / 外部模型 | 前置逻辑、起始页、上传图片、创作面板、参数面板、会员权益、其他兼容 |
| Enhance / 超分 / 大文件上传 | 功能使用权限、上游路径、Enhance起始页、相册页、创作页-图片、创作页-视频、裁剪页、上传等待态、资产队列 |
| remake / 详情页迭代 | keyframe迭代、视频详情页展示生成详情、支持重新生成、低版本/会员/模板/模型边界 |
3. 写「需求详情」单元格
单元格内使用固定层次:
<p><b>展示逻辑</b></p>
<ul>
<li>谁能看到 / 什么时候展示 / 默认态是什么</li>
</ul>
<p><b>交互逻辑</b></p>
<ul>
<li>用户操作 → 页面反馈 → 下游动作</li>
</ul>
<p><b>下游逻辑</b></p>
<ul>
<li>参数如何继承 / 数据如何写入 / 是否进入资产或会话</li>
</ul>
<p><b>异常与兜底</b></p>
<ul>
<li>不合法、失败、无权限、服务端无配置时怎么处理</li>
</ul>
不是每行都必须四段齐全;但涉及链路或端能力时,至少写清「展示/触发」和「下游/兜底」。
写法要求:
- 用「上游路径 → 操作 → 下游逻辑」线性描述,避免跳跃。
- 展示条件、触发时机、默认值、限制、兜底必须明确。
- UI 文案用中文引号或反引号标出,例如
Unlock access to {model_name}。 - 参数或字段用代码样式,例如
base_cost、audio、duration。 - 不写「优化体验」「保持一致」这种无法验收的空话;若沿用线上,写「同 v1.4.0 重新生成流程」或「同线上全局失败态」。
- 图还没给时,不等待 UI 图,先写可评审版,并在参考图列写
TBD(待补 xxx UI 图)。 - 产品方案表格里的「需求详情」必须使用分组标题 + 缩进无序列表,不要用
<br>-把多条规则堆在同一个长段落里。这样本地 Markdown 和飞书都更容易阅读、评审和后续局部修改。
小点化写法是硬规则:
- 一级 bullet 只放逻辑分组,不承载一整坨结论。优先用
判定规则:、状态:、排列规则:、回退逻辑:、示例:这类短标签。 - 二级 bullet 写可执行规则;一条只写一个条件、动作或结果。遇到「同时、并且、若...则...否则...」时,优先拆成多条二级 bullet。
- 若某条一级 bullet 超过 45-60 个中文字符,或包含两个以上判断条件,必须下沉为二级 bullet。
- 状态类规则按「可用时 / 不可用时 / 已选变不可用时」拆;排序类规则按「组间排序 / 组内排序」拆;回退类规则按「触发条件 / 回退目标 / 同步刷新项」拆。
- 复用旧逻辑时,不要写成一句长描述;用
判定规则:下挂两条:沿用 xxx 逻辑、本期变化:xxx。 - 示例单独成点,放在规则之后;示例只用于解释规则,不替代前面的规则定义。
- 单个表格单元格建议 3-6 个粗体分组;每个分组 2-5 个一级 bullet;每个一级 bullet 最多 2-4 个二级 bullet。超过这个密度,拆到新的表格行或新的粗体分组。
针对不同需求类型补充:
- 模板类要写清模板类型标识、运营后台排序、上传张数、模板创作页输入区和资产页分类。
- 相册类要写清相机/相册授权、最近使用、本地相册、Asset、项目选择器、大图模式、跨来源无需去重但共享数量上限。
- Generate 类要写清单图/双图/三图模式,Reference vs Keyframe,prompt、
@调用、参数面板、Create 积分。 - Enhance 类要把图片和视频分开写,尤其是上传时机、非会员裁剪、免费次数/积分/付费引导判断顺序、上传队列。
- remake 类要写前置场景、生效场景、详情页展示、工程信息继承和各种下线/过期边界。
4. 参考图列处理
有 UI 图时:
- 本地 Markdown:写图片链接、Figma 链接或占位说明。
- 飞书文档:保留原有
<img>/ 素材块,不要全文覆盖;只局部替换文字。
没有 UI 图时:
TBD(待补起始页模型选择 / 参数面板 UI 图)
占位要具体到页面或状态,方便设计后续补图。
5. 与其他 PRD 章节分工
产品方案负责「端上行为和可验收规则」,不要把所有内容塞进来:
- 模型能力、参数、成本:优先放在「模型清单 / 冻结字段」。
- 计费公式:只在产品方案开头保留一句,结果以服务端为准。
- 埋点:独立成「埋点方案」,产品方案里只提醒需要埋点,不展开事件表。
- 运营后台:独立成「运营后台」,产品方案里只写端上依赖。
- 设计图:放「参考图」列或「设计方案」章节。
标准输出模板
用于本地 Markdown。优先使用 HTML table,保证表格单元格内的无序列表缩进能被稳定渲染:
### 2. 产品方案
**计费**:总消耗 = 模型基础消耗 × 分辨率倍率 × Audio 系数 × 时长(向上取整);展示结果以服务端下发为准。
<table>
<thead>
<tr><th>功能/页面</th><th>需求详情</th><th>参考图</th></tr>
</thead>
<tbody>
<tr>
<td>起始页</td>
<td>
<p><b>选择模型</b></p>
<ul>
<li>默认值:首次进入默认选中 PixVerse V6.5</li>
<li>展示规则:
<ul>
<li>厂商 Tab 与 Model series 分两行展示。</li>
<li>不支持的模型不隐藏,改为外显置灰。</li>
</ul>
</li>
</ul>
<p><b>参数面板</b></p>
<ul>
<li>...</li>
</ul>
<p><b>下游逻辑</b></p>
<ul>
<li>...</li>
</ul>
</td>
<td>TBD(待补起始页 UI 图)</td>
</tr>
<tr>
<td>创作面板</td>
<td>
<p><b>继承逻辑</b></p>
<ul>
<li>进入创作面板时:
<ul>
<li>继承起始页已选模型与参数。</li>
<li>仅展示当前图片数量与 Use for 可支持的模型。</li>
</ul>
</li>
</ul>
<p><b>模式与模型联动</b></p>
<ul>
<li>...</li>
</ul>
<p><b>积分数值</b></p>
<ul>
<li>...</li>
</ul>
</td>
<td>TBD(待补创作面板 UI 图)</td>
</tr>
<tr>
<td>其他兼容</td>
<td>
<p><b>重新生成</b></p>
<ul>
<li>...</li>
</ul>
<p><b>生成失败</b></p>
<ul>
<li>...</li>
</ul>
<p><b>异常与兜底</b></p>
<ul>
<li>...</li>
</ul>
</td>
<td>TBD(待补失败态 UI 图)</td>
</tr>
</tbody>
</table>
如果参考文档使用 需求点 | 需求详情 | 示意,可以保留该表头,但内容组织不变。
同步飞书
若当前本地 PRD front matter 有:
feishu: https://...
默认在本地修改后同步飞书,除非用户明确说「先别同步」。
同步原则:
- 优先局部更新「产品方案」章节,不用全文 overwrite。
- 如果云端「参考图」列已经有
<img>/ 素材块,只替换「需求详情」列的文字 block;不要整段替换表格或章节,避免误删图片、画板、附件等资源。 - 若是纯文本章节且没有图片资源,可用
docs +update --doc-format markdown --command str_replace --pattern "### 产品方案...### 设计方案"。 - 若要把
<br>-格式调整为无序列表,优先用docs +fetch --scope section --detail with-ids找到表格单元格 block,再用block_replace将该单元格替换为<p><b>分组标题</b></p><ul><li>...</li></ul>。 - 更新后必须
docs +fetch --scope keyword --keyword "产品方案|起始页|创作面板|会员权益"校验。 - 汇报飞书 revision,告诉用户已同步。
自检清单
交付前检查:
- 表格行是否覆盖入口、核心操作、下游、兜底。
- 每一行是否能被研发/测试独立评审。
- 是否没有空泛词:优化体验、保持一致、逻辑同上。
- 「需求详情」是否使用分组标题 + 缩进无序列表,而不是
<br>-长段落。 - UI 图缺失时,参考图列是否有具体 TBD 占位。
- 与模型清单 / 计费 / 会员规则没有数字冲突。
- 若有飞书链接,是否已局部同步并拉取校验。