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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions