ForthWrite:用编辑距离反馈学习用户文风的邮件 AI
Show HN 项目 ForthWrite 通过 RAG 检索历史邮件,以编辑距离反馈循环校准文风,并引入 LCS 词级…
- 重要性
- 30
- 新颖性
- 42
- 影响面
- 25
- 可信度
- 55
- 实质性
- 55
ForthWrite 是一款面向 Gmail 的 Chrome 扩展,以 Show HN 形式发布。它试图解决当前 AI 邮件助手普遍存在的「不像你写」的问题:通过 RAG 检索用户真实发信历史,并以编辑距离作为反馈信号,让模型在每次发送后持续校准文风。
核心思路:RAG 检索 + 编辑距离反馈
作者指出,市面上大多数「学习你文风」的邮件 AI 实际上只是把系统提示当作风格说明书,模型并不会随用户写作习惯的变化而更新。ForthWrite 选择的是另一条路径:
- 首次连接 Gmail 时批量导入「已发送」文件夹中的邮件,经清洗(去除 HTML、转发内容、签名)后,用 OpenAI text-embedding-3-small 嵌入并存入 Postgres + pgvector。
- 每次起草时,对来信线程做嵌入,以余弦相似度在向量库中召回候选集,再用 MMR(最大边际相关性)重排序,避免返回高度雷同的样本导致风格覆盖过于集中。
- 用户编辑 AI 草稿后发送时,系统同时记录「生成版」与「发送版」,计算两者之间的归一化 Levenshtein 编辑距离:分数接近 1 表示近乎原文发送,分数接近 0 则意味着用户大幅重写。
低分对(重写较多)会送入异步优化器,用于分析差距并建议系统提示更新;高分对(近乎原样发送)则进入检索语料库,作为后续 RAG 召回的正向少样本。若召回结果未通过最低置信度阈值,系统宁可注入空样本也不强行加入无关示例。
「措辞矿工」:LCS 词级对齐
作者强调,编辑距离对「整段重写」很敏感,但对「只换两个词」的近错失草稿几乎无感。例如把「no worries at all」改成「no worries」,整体编辑距离依然很高,不会被标为「坏样本」,而用户实际偏好却未被捕获。
为解决这一盲区,ForthWrite 引入独立的「措辞矿工」步骤:
- 用词级最长公共子序列(LCS)对齐 AI 草稿与最终发送版;
- 统计所有删除与替换操作,记录哪些措辞在用户历史中反复被改动;
- 当某一替换的频率与一致性超过阈值时,写入系统提示,作为显式的「避免」或「偏好」规则。
该步骤不调用任何 LLM,仅做确定性 diff,目的是捕捉用户「手改但说不清」的细微习惯。
技术栈与成本控制
- 前端 Chrome 扩展,使用 esbuild 打包;
- 后端 Next.js 16 API;
- 存储使用 Supabase(Postgres + pgvector);
- 主模型为 Anthropic Claude,配合系统块的 prompt caching,将用户画像、措辞规则与少样本在同一会话内缓存一小时复用;
- 检索使用 OpenAI text-embedding-3-small。
作者特别指出,prompt caching 对成本结构影响显著——系统块在同一会话多次起草中保持稳定,缓存命中后每小时只计费一次,是该产品能在消费级定价下盈利的关键。
一个待解的开放问题
这套设计带来一个悖论:模型越好,用户编辑越少,反馈信号随之稀疏,优化器最终会「因成功而饿死」。目前的应对是让措辞挖掘按时间周期独立运行,而非绑定编辑距离分数,使处于稳态(高准确率、少编辑)的用户依然能获得定期精炼。作者将这一稀疏正反馈下的收敛问题视为更普遍的开放议题,希望了解做 RLHF 或偏好建模的同行如何处理类似场景。
ForthWrite 提供 14 天免费试用,无需信用卡即可开始使用。
