🌸 所有App(整理猫儿、收纳猫、卡猫、宠物猫儿)今后每一个版本的迭代,都会同步公开完整的 PRD 产品需求文档。这是与大家分享设计心得和思考成果的小小约定。
独行快,众行远。愿与所有并肩同行的小伙伴们共勉。
正文字数:约8311字 | 阅读全文大约需要319375天

目录
1. 产品概述 2. 用户故事板 3. 业务流程 4. 需求详述 | 重点:AI词性标注与信息提取 5. 前置与后置条件 6. 实体模型 7. 业务场景 8. 非功能性需求 9. 交互设计规范 10. 多语言本地化 11. 数据埋点 12. 附录 |

1. 产品概述
1.1 背景
1.2 目标用户
1.3 核心价值
效率:说话即可录入物品数据,无需手动填写。 隐私:AI分析数据在设备端侧离线完成,不上传网络云端服务器。 准确性:本地词性分析模型专门针对物品/位置的语言场景标注训练,支持中英文双语。 容错:特殊场景环境,AI识别不完全时,提供分词选择物品名称的补救方法,也同样能提升输入效率。 迭代:陆续会增加更多语言,目前中文(简体/繁体)和英文AI模型经过10个多月的训练已初步可用。 普惠:本功能为基础服务,所有整理猫儿App的用户均可永久免费使用。
2. 用户故事板
故事1:快速记录刚放下的物品
注:如果识别出的物品名称和位置结果用户不满意,也可以点击“编辑”按钮,打开文字添加物品页继续修改。

故事2:AI未识别出物品名称时的补救
注:正常情况下AI模型应该可以识别出这句话中的物品名称和位置,这里只是举例。
故事3:英文语音识别成功添加物品

3. 业务流程
3.1 总体流程图

3.2 分支流程详述
分支1:AI直接识别出物品名称(item 非空)
将识别到的 item 赋值“物品名称”变量,location 赋值“存放位置”变量。若location为空,则使用本地化默认值“未指定位置”。 界面执行翻转动画,由录音状态切换为信息确认界面。 工具栏显示:关闭 | [弹性空间] | 编辑 | 完成。 用户可点击“编辑”跳转到文字添加物品页,同时向该页传值已经识别到的物品名称和存放位置;或直接点击“完成”提交入数据库。
分支2:AI未识别出物品,但提供了分词序列(item 为空且 tokens 非空)
临时位置值为空。 界面执行翻转动画,切换为分词选择界面。 所有 tokens 以可多选的标签形式展示,可点击。 工具栏:关闭 | [弹性空间] | 完成。 用户必须至少选中一个分词标签,“完成”按钮才可用。点击“完成”后,以所选分词拼接为物品名称、存放位置为空写入数据库。
分支3:模型完全未产出有效信息(item 为空且 tokens 为空)
提示文字变为“经AI分析,输入的内容中未包含物品名称”。 “下一步”按钮重新启用,点击关闭退出流程。 此分支不进入确认或选择界面,不执行数据入库。
4. 需求详述
4.1 语音录入与实时转写
功能描述
界面元素
声波动画视图:根据录音状态自动切换颜色与高度(空闲/就绪/监听/处理/错误)。
提示文本区:展示实时识别文本或状态提示。
交互规则
页面弹出后自动开始录音,无需额外点击。
用户说话期间文本实时更新,声波幅度随音量变化。
停止说话超过N秒自动结束录音;用户也可主动点击“下一步”或“关闭”按钮提前结束。
“下一步”按钮在文本内容非空时启用。
异常处理
权限未授予:声波动画变红,显示对应权限错误文案,无法录音。
超时(默认30秒无有效输入):自动停止,提示“识别超时”。
识别服务不可用:提示“语音识别服务不可用,请检查网络或稍后重试”。
4.2 AI词性标注与信息提取
功能描述
模型加载规则
调用检测文本主导语言,若语言代码为中文(含简/繁体)则加载中文模型 ,否则加载英文模型 。陆续会拓展更多语言模型。
模型文件查找设定的文件格式,如未找到则加载失败。
模型使用异步加载,计算单元配置为 CPU 与 GPU 共同参与,加载任务在专用串行队列中执行,避免阻塞主线程,导致UI卡顿影响用户体验。 模型异步加载,未就绪时最多重试9次(每次间隔0.35秒),最终失败则提示用户。
输入/输出
item:所有标签为物品 的 token 拼接结果(可能为 nil)。
location:所有标签为位置 的 token 拼接结果。
tokens:模型输出的分词序列,与 labels 一一对应;若模型未输出 tokens,则该字段不存在。
labels:每个词对应的标签序列。
序列解析规则
从模型输出中获取 labels 和 tokens 的 MLFeatureValue,特征类型必须为 MLFeatureTypeSequence。
输出特征键名由模型结构动态分析获得,同时支持备用键名查找:当默认键名(如 labels、tokens)无结果时,会遍历所有输出特征名,寻找包含 label 或 token 的键作为替代,保证与不同训练版本的模型兼容。
解析序列内容时,按以下顺序尝试:
若全部方法均无法获得有效数组,则 labels 解析失败视为预测失败;tokens 解析失败则跳过该字段,后续提取仅依赖 labels。
提取规则
标签匹配忽略大小写:标签包含 物品键值 的 token 拼接为物品名称,包含 位置键值 的 token 拼接为位置。
拉丁字符处理:检测 token 首字符是否属于扩展拉丁字母集(覆盖英、德、法、西、葡及北欧等特殊字母),若是则在拼接时自动在前方添加空格,保证西方语言单词间分隔;中文、日韩文 token 则直接拼接。(如后续仍有遗漏,请动态补充规则)
数量对齐:若 tokens 与 labels 数量不一致,取较小数量对齐后再提取,避免数组越界。
当 item 有值但 tokens 为空时,仍然返回提取到的 item 和 location,不依赖 tokens 存在。
当 item 为空但 tokens 非空时,会额外调用一次位置提取方法,将可能识别到的位置值缓存。
降级分词处理
若经过上述提取后仍未获得物品名称(item 为空),则采用系统通用分词器 CFStringTokenizer 对原始文本重新分词。
分词结果会替换原有的 tokens 字段,过滤纯空白 token。
若通用分词结果非空,则更新 tokens 并返回,供后续进入分词选择界面;若通用分词也为空,则移除 tokens 字段,最终视为无有效信息。
后处理与容错
若系统版本低于 iOS 14.0,直接返回错误并提示用户系统版本不支持。
若模型未加载完成,触发重试逻辑;若重试耗尽,提示模型未就绪。
所有预测异常(模型输出无 labels、解析失败、对齐后无可提取项)均返回统一错误码,并在界面提示“AI分析未成功”。
若最终 item 和 tokens 均为空(包括通用分词也失败的情况),视为无任何有效信息,提示用户“输入内容中未包含物品名称”。
4.3 信息确认界面(分支1进入)
功能描述
界面布局
顶部工具栏:关闭 | [弹性空间] | 编辑 | 完成。
中部:显示“物品名称”和“存放位置”两个标签及对应的文本值。
交互
点击“编辑”:关闭当前视图,将物品名和位置的值传出,由宿主页面打开完整的文字添加物品页编辑表单。
点击“完成”:直接提交数据入库,转入结果界面。
4.4 分词选择与位置编辑界面(分支2进入)
功能描述
界面布局
顶部工具栏:关闭 | [弹性空间] | 完成。
提示文本:“AI未识别出物品名称,请选择物品名称”。
分词标签区:所有 token 以圆角标签排列,支持多选,选中标签高亮(主题色填充)。
交互
点击标签选中/取消,已选词实时拼接并更新为物品名称。
“完成”按钮在至少选中一个标签时启用;点击后使用当前物品名称提交入库。
点击分词标签有细微的动效(同时有振动),取消选择无动效。
4.5 数据存储
功能描述
存储逻辑
调用 AddSpeechModel ,执行 SQL 插入 storagelist 表。 字段映射:
插入成功时返回最后插入的行 ID,供结果页“查看物品”跳转使用。
4.6 结果反馈界面
功能描述
界面元素
结果图标(成功显示 cat_success,失败显示 cat_failure)。 结果文字(“成功”或“未成功”)。 成功时:两个按钮“继续添加物品”和“查看物品”以从下方滑入的动画展示。 失败时:仅保留关闭按钮。
交互
“继续添加物品”:关闭当前视图,重新唤起语音添加界面。 “查看物品”:关闭当前视图,跳转到对应物品详情页(使用最后插入 ID)。 点击关闭或点击背景蒙层均可关闭整个流程。
5. 前置与后置条件
5.1 前置条件
设备系统版本 iOS 14.0 及以上。 用户在系统设置中已授权语音识别权限和麦克风权限。 设备支持语音识别(SFSpeechRecognizer 可用)。 本地已包含对应语言的设备端侧AI训练模型文件。
5.2 后置条件
若提交成功,storagelist 表中新增一条记录,物品列表可见该物品。 若用户选择“查看物品”,则导航到该物品详情页。 若用户选择“继续添加”,则重新进入语音添加界面。
6. 实体模型
6.1 数据库表storagelist

7. 业务场景
家庭收纳:日常用品快速语音记录,随用随记不遗漏。 仓储管理:快速语音登记货物存放位置。 搬家整理:一边打包一边语音记录物品所在箱子。 办公用品管理:语音录入物品存放于哪个柜子或抽屉。 药店货架管理:语音录入药品名称及其摆放的货架层号。 后厨食材管理:语音记录食材存放的冷藏柜或干料区位置。 零售门店盘点:语音录入商品名称及所在货架位置。
汽修工具管理:语音登记工具归还至哪个工具箱或挂板,保持工位整洁可追溯。 宠物用品收纳:将零食、玩具、药品等分类存放时,语音记录物品位置,避免混淆过期用品。 户外露营装备:语音录入帐篷、炉具、灯具等存放的收纳箱或储物架,下次出发快速查找。 个人证件管理:将护照、户口本、合同等重要文件分类存放后,语音记录具体抽屉或文件袋,紧急时精准定位。
8. 非功能性需求
8.1 性能
语音转写延迟 < 200ms。 端侧模型每次加载 < 500ms,识别 < 100ms。 界面翻转动画时长 0.25 秒,帧率保持 60fps。
8.2 可用性
不支持 iOS 14 以下设备时给出明确提示。 权限拒绝时给出具体文案,引导用户前往设置。 所有文案支持多语言本地化。
8.3 可靠性
模型加载失败具备重试机制,避免单次失败导致功能不可用。 数据库写入失败时展示“未成功”结果,不阻塞后续操作。
8.4 安全性
9. 交互设计规范
9.1 整体容器与背景
iPhone竖屏:贴近屏幕底部,底部留有安全距离(自动计算安全区高度)。
iPad:锁定竖屏水平垂直居中。
9.2 视图切换动画(卡片翻转)
翻转前等待:用户点击“下一步”后,语音识别结束。此时系统开始调用本地AI模型分析文本内容,界面会在当前视图短暂停留约1秒,给用户一个阅读识别文本、感知系统正在处理的心理缓冲。等待结束后,卡片随即执行翻转动画,呈现分析结果。
收缩阶段(约0.09秒):卡片垂直方向快速压扁至几乎一条线,同时透明度轻微降低、表面出现极淡的阴影。
内容替换阶段:在卡片被压扁的瞬间,替换内部显示的视图(如隐藏录音波纹、显示物品信息)。
恢复阶段(约0.16秒):卡片从压扁状态缓缓展开并恢复原形,带有自然的轻微弹性,展开过程呈现出略带“呼吸感”的回弹效果,最终完全平整。
9.3 声波动画效果
未激活/空闲:灰色渐变,条高度保持在较低位置,有缓慢的呼吸起伏。
等待说话:中青色渐变,条高度上升且呈现更明显的波浪式摆动,模拟“竖耳聆听”的感觉。
正在收听:主色渐变,条高度随说话音量实时跳动,音量越大跳动越高,中间几条跳动幅度略大,形成类似均衡器的效果。
处理中:青色渐变,条高度从较高位置缓慢回落,仿佛在逐渐安静下来。
出错/权限拒绝:红色渐变,条高度保持较低,有轻微脉动。
9.4 按钮与工具栏
“下一步”:只有当麦克风捕捉到文字内容后才变为可用,点击后立刻置灰防止误触。 信息确认界面的“完成”:始终可用。 分词选择界面的“完成”:只有选中至少一个词语后才可用。 “编辑”按钮:仅出现在至少物品名称识别成功的信息确认界面界面。
9.5 分词选择组件
默认:浅灰色背景(深色模式下为深灰色),带有浅色边框,文字为标准阅读色。 选中:背景变为主色,无边框,文字变为白色(深色模式下文字变为黑色),形成明显的选中状态。
9.6 成功提交后的动画序列
图标带着微小的弹跳向上移动到卡片顶部区域,移动过程有自然的回弹感。 移动到位后,图标会做一次极小幅度的上下浮动,仿佛是轻轻落下的气泡。
“继续添加物品”按钮从卡片底部边缘外滑入,透明度由0变为完全不透明。
“查看物品”按钮在约0.1秒后以相同方式滑入。
两个按钮滑入时均采用轻快的缓出节奏,不显突兀。
9.7 音效反馈

9.8 文字样式与颜色适配
界面中的标题文字(如“物品名称”)使用常规字重17pt,颜色较浅(浅灰色)。 赋值文字(如具体的物品名称)使用常规字重25pt,醒目突出。 提示文字、结果文字使用常规字重17pt。 按钮文字使用17pt主题色。 分词标签文字使用17pt。 所有颜色均已适配深色模式,在深色背景下自动切换为适合暗环境的颜色方案,保证文字清晰、对比度舒适。
9.9 提示文案与异常反馈
录音引导:“请说...” 实时转写:直接显示当前识别到的文字内容,不额外提示。 权限未开启:根据具体缺失的权限,清晰提示“语音识别权限未开启”“麦克风权限未开启”或“设备不支持”等,引导用户前往设置。 识别超时:提示“识别超时”。 服务不可用:提示“语音识别服务不可用,请检查网络或稍后重试”。 AI未成功提取信息:提示“AI分析未成功”。 未识别到物品:提示“经AI分析,输入的内容中未包含物品名称”。 模型未就绪:提示“AI分析模型未加载完成,请稍后重试”。 系统版本过低:提示“当前系统版本不支持此功能”。
9.10 通用操作规则
关闭或退出该功能时,会自动结束正在进行的语音识别,释放麦克风资源。 若在分词选择界面未完成选择就关闭,所有已选状态不会被保留,下次打开将重新开始。 在任何需要等待的过程(如AI分析),相关按钮自动变为不可点击状态,防止重复操作。
10. 多语言本地化
10.1 本地化文案清单







10.2 设计注意事项
以上文案覆盖了部分用户可见的文本,确保在各个分支路径中均无硬编码的非本地化字符串。 长度明显增加的英文文案(如错误提示)应在 UI 设计上预留足够的文本空间,避免截断;必要时可支持多行显示。 后续新增语种时,仅需补充以上 Key 的对应翻译即可,无需修改代码逻辑。
11. 数据埋点
注:为尊重用户隐私,真正发布到App Store的本新版本App并未添加任何数据埋点。本内容目前只做技术和产品需求讨论。
11.1 事件清单

转化漏斗:入口点击 → 录音成功 → AI分析 → 提交成功 → 后续操作,观察每一步流失率。 模型质量:通过 result_type 和 has_location 统计AI直接识别成功率,结合 processing_time_ms 监控性能。 提交成功率:结合 item_source 对比AI直接识别与手动分词选择的提交成功率。 用户行为终点:统计“继续添加”“查看物品”“关闭”的占比,了解用户后续意图。
11.2 参数通用规范
所有事件需上报时间戳和用户唯一标识(去标识化)。 文本类参数(如最终物品名称)严格保护隐私,仅保留字符串长度,禁止记录敏感信息。 耗时类参数单位为毫秒,保留整数。 枚举类参数使用小写字母和下划线,严格对照事件说明中的取值。
11.3 数据分析用途概览
转化漏斗:从入口点击 → 录音成功 → AI分析 → 提交成功 → 后续操作,衡量每一步的流失率。 AI 模型效果:统计 item_found、tokens_only、empty 的占比,评估模型准确率;结合 model_ready_retries 评估加载成功率。 用户修正行为:分析编辑按钮点击率及分词界面使用频率,发现交互瓶颈。 错误监控:通过错误类型分布快速定位权限、网络、模型等常见问题,指导版本优化。
12. 附录
12.1 术语表
12.2 参考资料

iOS/鸿蒙 原生应用开发、小程序开发 UI/UX 设计、品牌平面设计、AIGC智能视觉创作 端侧 AI 模型定制训练 产品需求分析、商业研究报告、融资计划书撰写 低代码平台架构解决方案 —— 咨询与实施
夜雨聆风