“会议结束,大家说一句‘辛苦了’就散了,只有秘书还坐在那儿,对着录音写纪要。”伊斯雷尔(Israel)是拉各斯的一名学生开发者,在他那个十来人的学习小组“Flexbox”里,他顶着群聊里最危险的职位:秘书。
他给自己造了个替班工具——Sloth Secretary(树懒秘书),一个离线运行的 Python 命令行小工具。用法就一行:sloth pod-call.m4a。丢给它任意通话应用导出的音频或视频文件,它吐出两行 TL;DR、决定事项与待解问题、按人分组的待办(有人说了截止日期就带上),外加一份 Markdown 文件和一段可直接粘贴到 WhatsApp/Telegram 的消息。
听的部分用开放 Whisper 权重,写的部分交给 Gemma。没有 API key,什么都不上传,也没人给他寄账单。想更懒一点,还有 sloth --watch ~/Recordings/pod-calls:录音丢进文件夹,人走开,纪要自己出现在旁边。
真实小组的通话内容他不外放,于是写了个虚构的四分钟站会:Pod Baobab 的 Chiamaka、Tunde、Ngozi 和 Emeka 在做 DanfoFare,一个众包拉各斯公交票价的应用。脚本用 Piper TTS 离线转成音频,每人一个开放语音,然后跑真实流水线。
他对输出做了个诚实的评分。Gemma 3 4B 抓到了全部 8 项任务,每项负责人都对;但它把投影室放到了周三(实际是周四),漏掉了 Emeka 那个 Supabase 任务的周日截止,还漏了一项决定(“演示里不放真实电话号码”)和一个待解问题(“谁来演示?”)。
所以树懒秘书从不自己发送任何东西:先打印预览,--edit 用编辑器打开草稿,改完 sloth x.minutes.json 重新渲染。它写草稿,你花三十秒检查。
流水线是五个朴素步骤,全部开源:ffmpeg 把各种格式转成 16 kHz 单声道 WAV;faster-whisper(small、CPU、int8)带时间戳转写,语音活动检测跳过“能听见吗……你静音了”这类长空白;Gemma 经 Ollama 读转写稿,返回必须匹配 schema 的 JSON,小模型也跑不偏成小作文;长通话走 map-reduce,切成约十分钟一块、块间重叠两行,避免“Tunde,你能……?”丢了“好,周三前”;最后是一个不信任模型的校验器,去重、把 TL;DR 压到两行,发现“决定”和待解问题重叠、任务负责人写成“我”、或出现转写稿里没有的名字时,加一段“⚠️ 请复核”。
校验器来自第一次翻车。Whisper 不认识 Ngozi,写成了“Gozi”;Emeka 成了“Imeka”,Supabase 成了“Superbase”。Gemma 还很热心地列出一条“使用 30 天数据”的决定,而小组当时说的是“先别定”。于是他加了 --names(或监听文件夹里放个 sloth-names.txt),名字进 Whisper 的初始提示和热词,校验器再把听错的名字对回真名。第二次跑,名字全对,假决定也没了。
树懒这个名字是硬挣来的。第一次在 8 GB 测试机上跑满一小时,内存耗尽,Gemma 4B 在第 3 块(共 6 块)被 OOM 杀掉。现在 Whisper 跑在子进程里,先交还内存再加载 Gemma;模型进程崩了有一次耐心重试;每完成一块就缓存。断电中断后,同一条命令接着跑。慢,但能跑完。
整个项目不到 1000 行 Python,只有一个必需依赖 faster-whisper。Ollama 走裸 urllib,监听模式就是轮询,等文件不再变大才动手,免得抓到还在从手机拷贝的录音。
为什么要在意开放创新?他的答案很具体:队友的声音不该由他上传,小组通话里有人说“我去参加婚礼了”“我还没开始”“我笔记本快没电了”,秘书该保护这些;音频、转写稿和纪要从不离开笔记本,模型下载完之后断网也能跑。在拉各斯,流量是真金白银,上传一小时音频在云 API 出账单之前就先烧掉数据;这里模型只下载一次,之后每次通话零成本。停电和断网不看你的冲刺排期,云工具一断就停,这个在电池上继续跑。学生预算里没有“转写订阅”这一项。换脑子也简单,出了更好的开放模型,改一个 flag 就行,没人能下架他的秘书。
代价也是真的。CPU 上的 4B 模型比云端大模型更慢更含糊,Gemma 3 1B 更快,但会写出“票价表更新(负责人:进行中)”这种句子。对他来说,本地、私密、免费赢了,前提是最后一眼由人来把关——预览步骤就是设计的一部分。
2026 年 10 月 16 日,他的小组开了一场约 53 分钟的头脑风暴,他当秘书。第一次用 Whisper base 本地转写,结果断断续续,但至少证明最难的部分能在自己机器上跑,当晚这个项目就开始了。
实测数字来自一个纯 CPU 沙箱(2 个 ARM vCPU、8 GB 内存、无 GPU):Whisper 约 5 分钟处理完一小时音频,因为 VAD 跳过了静音;Gemma 花约 17 分钟读完十一块并合并,中途崩过一次,重试自己接上了。整场通话在无人看管的情况下、用两个 CPU 核心,22 分钟交回一份草稿。
秘书这份活从一晚上的苦差变成了一个咖啡休息。他启动它,泡杯茶,回来看到草稿,认真扫一遍,改掉错的,粘进群聊。“树懒拿走那一小时,我留住我的晚上。”
热门跟贴