Skip to content

feat: 跨会话用户风格记忆 + 通用化改进 — 让 polish 越用越懂你 #46

@appergb

Description

@appergb

背景

当前 OpenLess 每次 polish 调用都是「无记忆、无个性」的:同一个用户、同一个产品语境,每次都从零开始让 LLM 理解。词汇表已经存了用户的术语,但用词偏好、句长习惯、收尾风格、敏感词回避这些更深层特征没有被利用。

目标

让 polish 输出在无人工调教的情况下,逐次趋近用户的"自然写法"

  • 风格指纹:从历史 DictationSession.finalText 中归纳几条用户高频特征(句长 / 标点偏好 / 是否爱用句末助词 / 列表风格 / 中英混排习惯),作为 system prompt 后缀附加到 polish 请求
  • 跨会话词汇增强:词汇表已有,但只是机械替换;扩展为「正确写法 + 上下文示例」,命中后 LLM 知道为什么这么写
  • 场景模板(通用性):识别口述场景(IM 短句 / 邮件 / 代码注释 / 会议纪要),自动选择更贴合的 polish 取向

实现路径(建议)

polish.rs
  └─ user_profile.rs (新增)
       ├─ 周期性从 history.json 抽样最近 N 条 finalText
       ├─ 用本地启发式 + 一次性 LLM 抽取(可选)生成 ~150 字的 "USER_STYLE_FINGERPRINT"
       └─ 缓存到 preferences.json / user_style.json,每 50 段 dictation 重算一次
  └─ compose_system_prompt
       ├─ base prompt
       ├─ + hotwords block (现有)
       ├─ + USER_STYLE_FINGERPRINT (新增,≤200 字,避免吃光上下文)
       └─ + scene hint (新增,根据 active app bundle 推断)

开放设计问题

  • 隐私: 风格指纹归纳是否走云端 LLM?建议仅在用户开启 polish 通道的同一 provider 上跑,且只跑一次/批量
  • 冷启动: 历史 < 20 条时跳过指纹注入,避免基于噪声的过拟合
  • 可回退: 指纹是否会拉低输出质量?在设置中给一个总开关 + 一键清除指纹缓存
  • 场景判定: 用 active app bundle id 还是 polish 前快速 LLM 判定?前者更便宜也够用 80%

验收标准(可分步交付)

  • user_style.json schema + 增量更新机制
  • compose_system_prompt 接受指纹片段
  • 设置 → 个性化 / 风格 中加「学习我的写法」开关
  • 历史详情页可见「本段是否使用了风格指纹」标记,便于反馈

非目标

  • 模型微调 / LoRA:成本与产品定位不符
  • 多 profile 切换(工作风格 vs 个人风格):先把单一指纹跑通

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions