今天在网上冲浪的时候突然看到乔木老师发的一篇推文,大意是说:
学外语时可以让 AI 把一些常用词写成文章,当文章滚瓜烂熟后,常用词汇就学全了

刚好最近看完《仁医》,叕激起了我一个间歇性努力的人想要学日语的心。
那既然有这样一个词库,又有现成的视频,我就在想——我完全可以做个东西,把字幕文件丢进去就直接告诉我:你距离看懂这集的 95%,还差哪几个词。
怎么做的
我在 OpenCode 里跟 DeepSeek V4 Flash 7.31 说:
我想做一个“我离看懂这部作品还有多远”的项目,请给我一个足够简单又足够明确的提示词应用,要有目标和必要引导、验证,当我把这个提示词发给任意编程 Agent 就已经成功了 99%。
经过几个回合,下面就是 DeepSeek 给出的提示词:
请实现一个名为「还差几个词」的 macOS 本地应用(Swift,macOS 14+)。它只解决一个问题:用户拖入一份日语字幕或带字幕的视频,应用估算用户距离达到目标词汇覆盖率还需要掌握多少个词,并在视频播放时直接标出这些词出现的位置。具体要求:1. 支持拖入 `.srt`、`.vtt`、`.txt` 字幕文本,以及常见的本地视频文件。拖入视频后可以直接播放;应用应自动查找同名日语字幕,并允许用户手动选择字幕。可以支持视频内嵌的文本字幕,但不得依赖联网字幕服务。2. 内置一份可靠的日语高频词表,至少覆盖前 5000 个常用词(通过 wkei/jlpt-vocab-api https://github.com/wkei/jlpt-vocab-api 基于 Tanos JLPT 权威数据库获取),并保留数据来源、版本和许可信息。结合日语分词和词形还原,将「食べました」「食べる」等形式识别为同一个词。不要用简单字符串切割或少量硬编码规则冒充日语分词。3. 用户通过一个简单的滑块设置:假设自己已经掌握前多少个高频词。默认值为 1000。用户还可以选择 90%、95% 或 98% 的目标词汇覆盖率,默认值为 95%。4. 词汇覆盖率按照字幕中词语实际出现的次数计算,而不是只统计不同词的数量。应用需要明确显示: * 当前词汇覆盖率; * 距离 90%、95% 和 98% 覆盖率分别还差多少个词; * 达到当前目标所需的最短补词清单; * 每个词的读音、全局词频排名、在本片中的出现次数及代表性字幕例句。 推荐词应优先选择能够消除最多未知词出现次数的词,使用户用尽量少的新词获得尽量大的覆盖率提升。5. 支持用户把某个词手动标记为「认识」或「不认识」。用户的手动判断优先于高频词滑块,并保存在本机。修改后,覆盖率、剩余词数、补词清单和视频困难区域应立即重新计算。6. 视频播放器使用应用自己的字幕显示层。当前字幕出现时: * 已掌握词正常显示; * 未掌握词醒目高亮; * 未匹配到高频词表的词和专有名词使用不同状态展示; * 保持原始字幕的标点、顺序和内容; * 点击一个高亮词时暂停视频,并显示该词的信息和「认识 / 不认识」操作。7. 在视频时间轴上标记词汇困难片段,使用户在播放前就能看到哪些位置包含较多未掌握词。点击标记可以跳转到相应字幕附近。用户掌握状态改变后,时间轴标记也应同步更新。8. 普通 SRT 或 VTT 通常只有整句字幕的开始和结束时间。在没有词级时间戳时,只高亮当前字幕中的未知词,不要伪造卡拉 OK 式逐词同步效果。未来可以增加本地语音转写和词级时间对齐,但首个可用版本不应依赖云端语音识别、LLM 或外部 API。9. 页面和交互保持极简。核心流程应当一眼就能理解: 拖入字幕或视频 → 设置已掌握高频词数量 → 看到「距离 95% 词汇覆盖率还差 47 个词」 → 播放视频并查看未知词和困难片段 不要加入账户、社交、课程、打卡、复习算法、字幕编辑、翻译、视频下载、视频剪辑或其他与核心目标无关的功能。10. 所有视频、字幕、词表和用户掌握记录只在本机处理。不要上传文件,不要静默联网,不要修改用户的原始视频或字幕。11. 应用必须明确说明:「这是基于字幕文本计算的词汇覆盖率估算,不是实际理解率。它不测量语法、听力速度、发音、文化背景或实时语言处理能力。」不得将「95% 词汇覆盖率」描述成「能看懂 95%」。12. 提供可以直接构建、运行和安装的完整项目。包含必要的数据许可说明、测试和少量示例文件。## 如何验证不要只根据代码存在或界面能够打开判断完成。必须使用可重复的测试数据验证应用的关键结论。至少准备:* 一份很短、结果可以人工计算的日语字幕;* 一份包含动词活用、重复词、专有名词和未收录词的字幕;* 一段能够与字幕同步播放的短视频;* 一份存在明显错误或异常格式的字幕文件。验证以下行为:1. 对人工可计算的字幕,独立手算有效词数、已知词数、覆盖率和达到目标所需的最少词数,确认应用结果完全一致。2. 调整高频词滑块后,已知词范围、当前覆盖率和剩余词数应按照预期变化;使用相同文件和相同设置重复分析时,结果必须一致。3. 验证常见日语活用形式能够归并到正确的词典形,并检查实际分析结果,而不是只验证预先写好的示例。4. 验证覆盖率按照词的实际出现次数计算。一个重复出现十次的未知词,应比只出现一次的词产生更大的覆盖率影响。5. 将补词清单中的词依次视为已掌握,确认达到目标时不存在数量更少的可行词集。如果使用的是确定性贪心结果而非数学上的全局最优,界面和文档中必须准确说明。6. 手动把一个高频未知词标记为「认识」,确认以下内容同步变化: * 当前覆盖率; * 距离目标还差的词数; * 补词清单; * 当前字幕高亮; * 时间轴困难标记。 重新启动应用后,该状态仍应保留。7. 播放测试视频,验证字幕在正确时间出现和消失;暂停、继续播放、拖动进度和点击时间轴跳转后,字幕都必须立即与当前播放位置一致。8. 验证当前字幕中的已知词、未知词、专有名词和未匹配词能够被清楚区分,同时原始文字、标点和顺序没有被修改。9. 验证普通句级字幕不会产生虚假的逐词时间同步效果。10. 验证未找到同名字幕、存在多个候选字幕、字幕格式异常、空文件和无法播放的视频时,应用给出明确结果,不崩溃,也不静默改用联网服务。11. 在断网环境下完成一次字幕分析和一次视频播放,确认核心功能仍然正常。检查运行期间没有上传视频、字幕或用户词表。12. 构建正式 `.app`,从干净环境启动并完成一次完整流程,而不只是从开发工具内运行。完成后报告:* 使用了哪些验证文件;* 哪些结果经过人工独立计算;* 实际执行的构建和测试命令;* 自动测试结果;* 端到端验证结果;* 发现并修复了哪些问题;* 哪些行为仍未验证及原因;* 当前已知的分词、词形还原、字幕格式和视频兼容性限制。请先检查当前目录和已有文件,采用最小而直接的实现完成这个应用。不要引入没有实际使用的框架、服务或抽象。除非存在会从根本上改变产品方向的缺失信息,否则不要停下来提问;完成后报告构建结果、测试结果、验证证据、关键限制以及尚未实现的后续能力。你可以把这个提示词发给任意 Ai,让他根据你的需求进行定制
我把这段提示词发给 OpenCode 之后一共按了 5 次回车,都是在授予写入权限,10 分钟都不要,总共耗费 170 万 token,官网价大概3块多,一个边看剧边学日语的 App 就做出来了。
试了一下
做出来之后拿《仁医》的片段测了一下,看上去就像是这样:
已关注
关注
重播 分享 赞
就像提示词里描述的那样——
它会告诉你当前的词汇覆盖率是多少,距离 90%、95%、98% 分别还差几个词,以及一份补词清单。
播放时,字幕里不同的字体代表着不同的掌握进度,黄色背景的是高频词表里有但还不认识的词;紫色的是没有匹配到的专有词;白色字体则表示这个词已经会了。
想了一下,这个项目还有不少可玩性,例如引入一些本地的Asr模型就可以实现任意视频字幕的识别,再引入 ytdlp 就能翻译在线视频,再加入一个视频烧录导出/推送的能力甚至能直接发布到视频平台。
项目已经开源在了 https://github.com/bilppppp/WordsShort ,感兴趣的可以去翻翻看。
(ps:绫濑遥/咲真是太好看了)
夜雨聆风