docs: freeze clipboard voice command one-page plan
Capture the product decisions for long-press clipboard instruction mode before implementation.
This commit is contained in:
@@ -0,0 +1,123 @@
|
|||||||
|
# 剪贴板语音指令(Clipboard Voice Command)一页规划
|
||||||
|
|
||||||
|
> **文档状态**:产品规划(**决策已冻结**,未进入实现)
|
||||||
|
> **适用范围**:iOS 主 App + 键盘扩展(复用现有 Flow / ASR / 润色管线)
|
||||||
|
> **创建日期**:2026-08-07
|
||||||
|
> **关联能力**:Flow 会话、PiP 保活、Polish Style Packs、字段指纹插入
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 一句话定义
|
||||||
|
|
||||||
|
用户复制一段材料到剪贴板后,**长按麦克风**口述处理意图;系统以「剪贴板快照 = 材料、ASR = 指令、当前风格包 = 底色」生成结果,并直接写入当前输入框。短按始终回到普通听写。
|
||||||
|
|
||||||
|
覆盖场景:**社交回复**(委婉拒绝、温暖安慰)与 **文档处理**(精简、总结)共用一条管线。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. 冻结决策
|
||||||
|
|
||||||
|
| 项 | 选择 |
|
||||||
|
|----|------|
|
||||||
|
| 入口 | **复用麦克风**:短按 = 听写;长按 = 剪贴板指令 |
|
||||||
|
| 提示文案 | 有开场资格时改为:**「点击说话,长按处理剪贴板」** |
|
||||||
|
| 开录时机 | 长按达标后 **立刻录音**,不插确认动画 |
|
||||||
|
| 开场资格时钟 | 复制后 **30 秒内** 可进入 |
|
||||||
|
| 指令会话时钟 | 开场成功起 **30 秒**;每轮 **成功上屏** 刷新 30 秒;失败不刷新 |
|
||||||
|
| 材料快照 | 开场瞬间冻结;会话中剪贴板变更不影响本会话 |
|
||||||
|
| 首轮写入 | 空框写入;非空追加 |
|
||||||
|
| 连续改写 | **干净 → 替换上轮产物**;**不干净 → 追加**(用户自删) |
|
||||||
|
| 会话中短按 | **结束指令会话 → 听写** |
|
||||||
|
| 风格 | 共享基础润色契约;当前 Style Pack 作底色;**本轮指令优先** |
|
||||||
|
| 预览 | 直接上屏,不强制确认 |
|
||||||
|
| 翻译开关 | 指令模式 MVP **忽略**(语言需求由口述指令携带) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. 交互主路径
|
||||||
|
|
||||||
|
```text
|
||||||
|
复制文本
|
||||||
|
→ 开场资格 30s 内且通过材料过滤
|
||||||
|
→ 提示:「点击说话,长按处理剪贴板」
|
||||||
|
→ 长按 → 立刻录音,冻结 clipboardSnapshot,开启指令会话
|
||||||
|
→ ASR(指令) + Snapshot(材料) + StylePack(底色) → LLM
|
||||||
|
→ 空框写入 / 非空追加;记录本轮插入区间
|
||||||
|
→(可选)会话未到期再长按连续改写:
|
||||||
|
干净则删上轮产物再写新版;否则追加
|
||||||
|
→ 短按 / 会话到期 / 切框 / 收起键盘 → 结束会话,丢弃快照
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 开场过滤(不开放指令入口)
|
||||||
|
|
||||||
|
命中任一条 → UI 保持「点击说话」,长按按 **听写** 处理:
|
||||||
|
|
||||||
|
- 长度 **< 10** 字
|
||||||
|
- 明显是数字(电话、订单号等)
|
||||||
|
- 无意义字符 / 乱码 / 单符号重复
|
||||||
|
- 验证码形态(短字母数字码等)
|
||||||
|
- 非文本、安全输入框、无 Full Access 读不到剪贴板
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. 写入与「干净」判定
|
||||||
|
|
||||||
|
**可替换(干净)须同时满足:** 同一指令会话、字段指纹未变、有上轮插入记录、光标仍在上轮产物末尾、上轮文本未被用户改动。
|
||||||
|
|
||||||
|
**推荐执行顺序:** LLM 成功拿到新文本 → 再删旧 → 再插新;删后插失败则尽力写回旧文本。不确定时 **只追加或不插,绝不误删用户原文**。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. 失败态与边界(优先级)
|
||||||
|
|
||||||
|
1. **不丢用户原文**(替换不确定 → 追加或不插)
|
||||||
|
2. **不把指令 ASR 当听写上屏**(ASR/LLM 失败均不插入指令原文)
|
||||||
|
3. **不静默滥用剪贴板**(无资格 = 听写;仅长按开场时读一次)
|
||||||
|
4. **软失败可重试但不续期**(没听清 / 生成失败:不插入、会话保持、时钟不刷新)
|
||||||
|
5. **少打断**(弱提示,不弹模态)
|
||||||
|
|
||||||
|
| 场景 | 策略 |
|
||||||
|
|------|------|
|
||||||
|
| 剪贴板过期后长按 | 弱提示「剪贴板已过期」→ 听写 |
|
||||||
|
| 无有效语音 / ASR 空 | 不调用 LLM;不插入;会话保持 |
|
||||||
|
| 指令不可解析 | 提示说明要怎么处理;不插入 |
|
||||||
|
| LLM 超时/拒绝/空结果 | 不插入;可重试;不刷新时钟 |
|
||||||
|
| 字段切换 / 收起键盘 | 结束会话;已上屏保留 |
|
||||||
|
| 会话中剪贴板被覆盖 | 本会话仍用旧快照 |
|
||||||
|
| 密码框 | 禁止指令模式 |
|
||||||
|
|
||||||
|
**隐私:** 快照仅内存,会话结束丢弃;不写历史明文;不后台轮询剪贴板。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. 与现有架构的关系
|
||||||
|
|
||||||
|
| 可复用 | 必须新建(实现期) |
|
||||||
|
|--------|-------------------|
|
||||||
|
| Flow 命令/结果桥、PiP、ASR、插入器、字段指纹 | 剪贴板开场资格与材料过滤 |
|
||||||
|
| `PolishingService` / LLM 调用层、Style Pack 底色 | **新 prompt 契约**(指令模式;不可复用「ASR 绝不当命令」的听写 R6) |
|
||||||
|
| 会话超时与冷启动 handoff | 指令会话状态、上轮插入区间、干净替换逻辑 |
|
||||||
|
|
||||||
|
**非目标(本期):** 后台监听剪贴板、强制预览确认、独立「回复」大按钮、把指令模式混进现有 transcript-polish 路径。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. 成功标准(验收)
|
||||||
|
|
||||||
|
1. 复制合格文本 30s 内,提示变为「点击说话,长按处理剪贴板」。
|
||||||
|
2. 长按后口述「委婉拒绝 / 精简 / 总结」等,结果直接进入当前输入框。
|
||||||
|
3. 会话内再长按改写:未手改则替换上轮产物;手改则追加。
|
||||||
|
4. 会话中短按恢复听写,且不会把上一段指令会话状态带到听写。
|
||||||
|
5. 过短/数字/验证码等材料不会出现指令提示。
|
||||||
|
6. ASR/LLM 失败时输入框不被指令原文污染。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. 下一步
|
||||||
|
|
||||||
|
1. 补一页状态机(听写 / 开场资格 / 指令录音 / 生成 / 可连续改写 / 结束)。
|
||||||
|
2. 定长按阈值与材料过滤的具体启发式。
|
||||||
|
3. 设计指令模式 prompt 与听写 polish 的分流接口。
|
||||||
|
4. 产品确认后进入实现(键盘提示 → 主 App 会话 → Shared prompt → 插入替换)。
|
||||||
Reference in New Issue
Block a user