feat: 输入框「✨优化提示词」按钮(按需触发,预览 diff 不强制替换)
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
**提交人**: HalFree
**客户端版本**: 0.1.58
---
## 使用场景 / Use case
用户常把模糊、过短或过长混合的需求直接甩进输入框。现状下模型靠隐式澄清补足,但:
- 短输入缺上下文 → 多轮追问,打断心流。
- 没有「在发送前就让 AI 帮我把需求写清楚」的显式入口。
## 当前痛点 / Pain
- 长输入一次性粘贴时,模型容易囫囵吞枣、遗漏子任务(相关 issue #2503 也提到「长输入缺拆解」)。
- 没有轻量、按需、非侵入的方式在发送前结构化润色用户输入。
## 诉求 / Ask
在输入框工具栏增加轻量「✨优化提示词」按钮,**用户主动点按才触发**,对当前草稿做一次性结构化润色(补约束 / 拆子任务 / 消歧),并**预览 diff,经用户确认后才替换输入框内容**——不自动发送、不强制改写。
## 建议方案 / Proposal
**入口**:`apps/desktop/src/renderer/components/new-chat/ChatInput.tsx` 工具栏,紧邻已有 VoiceInput 按钮,复用其按钮范式(`VoiceInput*` 组件族 + `composerNarrowToolbarContract` 布局)。
**触发**:
- 按钮仅在有非空草稿时可用;
- 点击 → 调一次 LLM 改写(复用现有模型通道,不新增 provider);
- 输出以**预览态**回填草稿区(或气泡/弹层展示 before→after),用户「应用 / 丢弃」二选一。
**关键约束(取舍)**:
1. **绝不自动发送**,只替换草稿或展示预览。
2. **可降级**:改写失败/超时 → 保留原草稿 + toast,不影响发送。
3. **设置项**:与 `VoiceInputSection` 同级新增 `OptimizePromptSection`,提供开关 + 快捷键(参考 `useComposerSendShortcutPreference`、`usePromptRecommendationPreference` 的偏好 hook 写法)。默认关闭(用户手动开启)——此点待讨论。
4. **不污染历史**:优化动作本身不入消息流,只改草稿文本。
**复用点**:
- 模型调用:现有 composer/send 通道,无需新建 IPC。
- 偏好存储:`apps/desktop/src/renderer/hooks/usePromptRecommendationPreference.ts` 已存在「提示词推荐」偏好范式,可类比扩展。
## 不做 / Out of scope
- ❌ 全局自动优化(侵入性强、易惹反感)。
- ❌ 改写系统 prompt / 记忆(本功能只针对「用户当前输入框草稿」)。
- ❌ 多轮迭代优化(一期仅单次改写)。
## 关联
- 相关痛点:#2503(长输入缺拆解);记忆/稳定性类 issue 优先级高于本 feat。
- 同类范式:VoiceInput 按钮、Prompt Recommendation 偏好。
## 验收 / Acceptance
- [ ] 工具栏出现「✨优化提示词」按钮,空草稿时禁用。
- [ ] 点击后调模型改写,以预览态呈现 before→after。
- [ ] 「应用」替换草稿,「丢弃」还原,二者都不自动发送。
- [ ] 改写失败/超时优雅降级,原草稿与发送不受影响。
- [ ] 设置页有开关 + 可选快捷键(默认关,可讨论)。
- [ ] 覆盖基础单测(参考 `chatInput*`、`composerSuggestion*` 测试)。
---
**版本区域**: CN
**OS**: win32 x64 (10.0.26200)
**界面语言**: zh-CN
Contributor guide
Research direction
Start with apps/desktop/src/renderer/components/new-chat/ChatInput.tsx, the VoiceInput component family, and composerNarrowToolbarContract; compare the preference patterns in usePromptRecommendationPreference.ts and useComposerSendShortcutPreference. Review chatInput* and composerSuggestion* tests, then verify the acceptance checklist: opt-in toolbar action, before/after preview, apply/discard without sending, graceful failure, settings support, and coverage.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- desktop, frontend
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100