diff --git a/openless-all/app/src-tauri/src/polish.rs b/openless-all/app/src-tauri/src/polish.rs index 535bb1d3..8877d745 100644 --- a/openless-all/app/src-tauri/src/polish.rs +++ b/openless-all/app/src-tauri/src/polish.rs @@ -1910,7 +1910,13 @@ pub mod prompts { const OUTPUT_BLOCK: &str = "# 输出\n\ 直接输出最终文本正文。需要结构化时直接从标题 / 段落 / 编号开始。\n\ 禁止以\u{201C}根据你/您给的内容\u{201D}\u{201C}我整理如下\u{201D}\u{201C}以下是整理后的内容\u{201D}\u{201C}优化如下\u{201D}\u{201C}结构化整理如下\u{201D}等句式开头。\n\ - \u{4E0D}加解释、总结、客套话、代码围栏(\\`\\`\\`)或 markdown 元注释。"; + \u{4E0D}加解释、总结、客套话、代码围栏(\\`\\`\\`)或 markdown 元注释。\n\ + \n\ + # 反 AI 自述式表达(强约束)\n\ + - \u{4E0D}加 AI 自评 / 自述视角的语句:\u{201C}\u{6211}\u{4EEC}\u{770B}\u{4E86}\u{4E00}\u{4E0B}\u{201D}\u{201C}\u{6211}\u{4EEC}\u{53D1}\u{73B0}\u{201D}\u{201C}\u{7ECF}\u{8FC7}\u{5206}\u{6790}\u{201D}\u{201C}\u{7EFC}\u{5408}\u{6765}\u{770B}\u{201D}\u{201C}\u{603B}\u{4F53}\u{800C}\u{8A00}\u{201D}\u{201C}\u{6574}\u{4F53}\u{6765}\u{8BF4}\u{201D}\u{201C}\u{4F9D}\u{6211}\u{6240}\u{89C1}\u{201D}\u{201C}\u{6839}\u{636E}\u{60C5}\u{51B5}\u{201D}\u{201C}\u{4ECE}\u{7ED3}\u{679C}\u{6765}\u{770B}\u{201D}\u{7B49}\u{3002}\n\ + - 保持原句的人称视角:原句是\u{201C}\u{6211}\u{201D}就用\u{201C}\u{6211}\u{201D},原句没有\u{201C}\u{6211}\u{4EEC}\u{201D}/\u{201C}\u{54B1}\u{4EEC}\u{201D}就\u{4E0D}凭空引入。\n\ + - 直陈用户的实际诉求:原句说\u{201C}没问题\u{201D}就输出\u{201C}没问题\u{201D},\u{4E0D}扩写为\u{201C}\u{6211}\u{4EEC}\u{770B}\u{4E86}\u{4E00}\u{4E0B}\u{6CA1}\u{4EC0}\u{4E48}\u{5927}\u{95EE}\u{9898}\u{201D}\u{3002}\n\ + - \u{4E0D}加修饰副词或铺垫句(\u{201C}\u{503C}\u{5F97}\u{4E00}\u{63D0}\u{7684}\u{662F}\u{201D}\u{201C}\u{503C}\u{5F97}\u{6CE8}\u{610F}\u{201D}\u{201C}\u{503C}\u{5F97}\u{8003}\u{8651}\u{201D}\u{7B49}\u{6F2B}\u{8C08}\u{8FC7}\u{6E21}\u{53E5})\u{3002}"; pub fn system_prompt(mode: PolishMode) -> String { let task_and_example = match mode { @@ -1928,14 +1934,32 @@ pub mod prompts { 去掉明显口癖、重复、无意义停顿;补充自然标点。\n\ 保留用户原意、语气和表达习惯;\u{4E0D}扩写、\u{4E0D}创作。\n\ \n\ - # 示例\n\ + **工程化直陈**:开发协作 / 任务清单 / 技术沟通 / 工作汇报等场景下,按\u{4E3B}\u{8C13}\u{5BBE}陈述事实,\ + \u{4E0D}加修饰副词、铺垫句、AI 自述(\u{201C}\u{6211}\u{4EEC}\u{770B}\u{4E86}\u{4E00}\u{4E0B}\u{201D}\u{201C}\u{603B}\u{4F53}\u{6765}\u{8BF4}\u{201D}等)。\ + 输出长度尽量贴近原句字数(± 20% 以内),\u{4E0D}让\u{8F7B}\u{5EA6}\u{6DA6}\u{8272}变成扩写。\n\ + \n\ + # 示例 1\n\ 原:那个我觉得这个方案吧大概可以但是可能在性能上还要再看看\n\ - 出:我觉得这个方案大概可以,但性能上还要再看看。", + 出:我觉得这个方案大概可以,但性能上还要再看看。\n\ + \n\ + # 示例 2(工程化直陈,\u{4E0D}加 AI 自述)\n\ + 原:嗯我们目前看了一下没什么大问题就是缓存策略可能要改一下\n\ + 出:目前没什么大问题,缓存策略需要调整。\ + \u{200B}(注意:原句\u{6CA1}\u{6709}\u{660E}\u{786E}\u{7684}\u{201C}\u{6211}\u{4EEC}\u{201D}\u{4F5C}\u{4E3A}\u{96C6}\u{4F53},不引入\u{201C}\u{6211}\u{4EEC}\u{770B}\u{4E86}\u{4E00}\u{4E0B}\u{201D}\u{8FD9}\u{79CD}\u{81EA}\u{8FF0}\u{8868}\u{8FBE})", PolishMode::Structured => "# 任务(清晰结构)\n\ 把口述整理为脉络清晰、可直接复制走的结构化文本:保留用户的口语引子(润色后作为首行过渡),\ 主动按语义把扁平事项归类成 2\u{2013}4 个主题,用双层格式呈现,尾巴查询用自然收尾句。\n\ \n\ + **默认行为:双层 list。判断事项的标准**:\ + 以下任意一种都算一个事项 \u{2192} \u{4E0D}\u{4F9D}\u{8D56}\u{7528}\u{6237}\u{662F}\u{5426}\u{660E}\u{8BF4}\u{201C}\u{7B2C}\u{4E00}\u{201D}\u{201C}\u{7B2C}\u{4E8C}\u{201D}\u{201C}\u{53E6}\u{5916}\u{201D}\u{7B49}\u{8FDE}\u{63A5}\u{8BCD}\u{3002}\n\ + \u{2003}\u{2003}1) 可独立成句的陈述(\u{4E3B}+\u{8C13}+\u{5BBE},如\u{201C}\u{300A}\u{67D0}\u{4E1C}\u{897F}\u{300B}\u{8FD8}\u{662F}\u{767D}\u{8272}\u{201D})\n\ + \u{2003}\u{2003}2) 一个独立的请求 / 建议 / 处理方案(\u{5982}\u{201C}\u{8BA9}\u{5B83}\u{6D88}\u{5931}\u{201D}\u{201C}\u{6539}\u{6210}\u{5B9E}\u{9A8C}\u{6027}\u{201D})\n\ + \u{2003}\u{2003}3) 一个状态判断 / 结论(\u{5982}\u{201C}\u{6CA1}\u{4EC0}\u{4E48}\u{5927}\u{95EE}\u{9898}\u{201D})\n\ + \u{2003}\u{2003}4) 一个针对模块 / 主题 / 实体的描述\u{6216}\u{6307}\u{6307}\u{8981}\u{6C42}\n\ + 把上述事项数清,\u{2265}3 强制双层化,\u{4E0D}允许把多个独立陈述合\u{6210}一段连贯文字。\n\ + 即使输入听起来像\u{201C}一段顺着说下来\u{201D}的口播,只要能拆出 \u{2265}3 个独立关注点也必须双层化。\n\ + \n\ **不可降级到轻度润色**:本任务的最低输出形态是双层 list 结构,\u{4E0D}允许只补标点 / 断句 / 去口癖然后输出连贯段落。\ 即使原始转写听起来像是一段连贯叙述、即使你判断用户只想要\u{201C}读起来通顺\u{201D},只要事项 \u{2265}3 就必须双层化输出。\ 输出连贯段落 = 失败。\n\ @@ -2034,9 +2058,17 @@ pub mod prompts { \u{4E0D}引入空泛客套(\u{201C}希望您一切顺利\u{201D}\u{201C}祝商祺\u{201D}等);\ \u{4E0D}擅自承诺或扩写事实;邮件场景自动识别问候 / 落款。\n\ \n\ - # 示例\n\ + **工程化正式**:正式 ≠ 扩张。直陈用户原意,\u{4E0D}展开为商务铺垫,\u{4E0D}加\u{201C}\u{7ECF}\u{8FC7}\u{5206}\u{6790}\u{201D}\u{201C}\u{7EFC}\u{5408}\u{6765}\u{770B}\u{201D}\u{201C}\u{503C}\u{5F97}\u{6CE8}\u{610F}\u{7684}\u{662F}\u{201D}\u{7B49}\u{4EE3}\u{5165}\u{7B2C}\u{4E09}\u{65B9}\u{89C6}\u{89D2}\u{7684}\u{8BED}\u{53E5}\u{3002}\ + 输出长度尽量贴近原句字数(± 30% 以内),\u{4E0D}让\u{6B63}\u{5F0F}\u{5316}\u{6269}\u{5F20}\u{5230}\u{4E24}\u{500D}\u{957F}\u{5EA6}\u{3002}\n\ + \n\ + # 示例 1\n\ 原:那个老板我跟你说下今天的发布我们可能要推迟因为测试还没跑完\n\ - 出:今天的发布需要推迟,原因是测试尚未完成。", + 出:今天的发布需要推迟,原因是测试尚未完成。\n\ + \n\ + # 示例 2(工程化正式,\u{4E0D}加铺垫与代入语)\n\ + 原:嗯这次发版前我们看了一下其实问题不大但还是建议把缓存改一改\n\ + 出:本次发版整体问题不大,建议调整缓存策略。\ + \u{200B}(注意:\u{4E0D}写\u{201C}\u{6211}\u{4EEC}\u{770B}\u{4E86}\u{4E00}\u{4E0B}\u{201D}\u{201C}\u{7ECF}\u{8FC7}\u{8BC4}\u{4F30}\u{201D}\u{4E4B}\u{7C7B}\u{4EE3}\u{5165}\u{8BED})", }; format!( diff --git a/openless-all/app/src/components/Capsule.tsx b/openless-all/app/src/components/Capsule.tsx index b1373af3..4e5dd076 100644 --- a/openless-all/app/src/components/Capsule.tsx +++ b/openless-all/app/src/components/Capsule.tsx @@ -195,19 +195,18 @@ function Pill({ os, state, level, insertedChars, message, onCancel, onConfirm }: > - {IS_WINDOWS && ( - -
- {t('localAsr.qwenUnavailableOnWindows')} -
-
- )} + {/* v1.3.1-6 用户反馈:Windows 顶部"暂不支持"banner 白底太显眼。已经整段 opacity/grayscale + + inert 灰显 + 不可交互了,banner 是 noise,直接删。AT 仍可通过区域 aria-disabled + + 灰显视觉判断不可用。 */}
)} -
- {t('localAsr.qwenTitle')} +
+ {/* v1.3.1-6 用户拍板:千问3 ASR 改为「实验性」分组,独立于 Foundry/云端 ASR。 + 浅 amber badge 跟 thinking 扫光暖色调一致。 */} + {t('localAsr.qwenExperimentalBadge')} +
+ {t('localAsr.qwenTitle')} +
@@ -912,12 +917,9 @@ export function LocalAsr({ embedded = false }: LocalAsrProps = {}) { ))}
) : ( - /* Windows 灰显占位:后端列表为空,给一个静态 Card 表明这里"本该是模型列表"。 */ - -
- {t('localAsr.qwenUnavailableOnWindows')} -
-
+ /* v1.3.1-6: Windows 列表为空时不再画白底 banner Card(用户反馈"白色显眼"), + 留个低调的灰色 placeholder 维持容器高度。整段已 inert + 灰显,AT 用户感知到的也是"不可用"。 */ +
)}
)}