我奶奶最好的食谱从未被写下来过。

问她放多少盐,她说"ek mutthi。"问放多少酥油,答案是"thoda sa。"问要煮多久,答案是"jab tak khushboo aaye。"她的食谱存在于她的双手和记忆中,总有一天会随她一同消失。

我想把它们保存下来。但录下她并把音频上传到云端 AI 感觉不对。这些是我家人私密的声音,存放在我无法控制的服务器上。而且大多数云端模型会把她的印地英语压平成僵硬、机械的步骤,丢失了那些让食物成为她的食物的小谚语和故事。

所以为了 "Build for a Friend" 挑战赛,我为她做了一样东西。

我做了什么

Dadi ki Rasoi把她的语音笔记变成一本可打印的家庭食谱书。一切都在我自己的笔记本电脑上运行。

  1. 她做饭时说话,我录下来。
  2. faster-whisper在本地转写印地语/印地英语音频。
  3. 一个本地 LLM 运行在Ollama(Qwen 和 Llama)把转写文本变成结构化的食谱。
  4. 印度本土计量单位变成真实的用量。"Ek mutthi namak"变成以克为单位的近似重量,但她的原话始终紧挨在旁边。
  5. 她的谚语和故事被逐字保留在每份食谱的 "Dadi ki baat" 框里。
  6. 所有内容导出为一本可打印的 PDF 书,带有封面、索引,每页一份食谱,并支持天城文字体。

代码: https://github.com/vidishagupta/Dadi-ki-Rasoi
在线演示: https://web-omega-lac-94.vercel.app/
*视频链接:* https://youtu.be/ykddENDuHm4?si=EDGMLkfrp-iUk2Rd

关于在线演示的说明:Whisper 和 Ollama 是重型模型,无法在无服务器托管上运行。所以托管版本以 Demo Mode 运行,使用来自真实流水线的已保存结果。完整的离线 AI 流水线在本地运行,Decision.md 中有设置步骤。

为什么开源很重要

对这个项目来说,开源不是加分项。它就是全部意义所在。

开源模型(本项目) 闭源云端 API
隐私 她的声音从不离开我的笔记本电脑 音频上传到第三方服务器
离线 在飞行模式下也能用 需要联网
成本 免费运行 按请求付费
更换模型 在 Qwen 和 Llama 之间切换并比较 锁定在某一家厂商的模型上
控制权 我自己的提示词和我自己的测量表 定制受限

有三件事起了关键作用:

  • 隐私:家人的声音是私密的。使用本地的 Whisper 和 Ollama,根本不存在上传这一步。
  • 离线:整条流水线在关闭 Wi-Fi 的情况下也能运行,所以任何人都可以在飞行模式下验证它。
  • 模型切换:这个应用有一个对比视图,可以把同一份转录文本分别通过 Qwen 和 Llama 并排运行。不同的模型对“ek mutthi”和“thoda sa”的理解不同,而使用开源模型,我可以看到这一点并做出选择,而不是去信任一个黑箱。

我还自己写了一份印度本地计量单位对照表(mutthi、chutki、katori 等),并把它喂给模型,这样换算就能保持一致。这种控制力很难从封闭的 API 那里获得。

我学到了什么

诚实胜过自信。Dadi 的计量本质上都是估算。所以应用会标记出低置信度的食材,食谱编辑器会把原始转录文本显示在结构化食谱旁边,这样在打印之前,人可以修正任何内容。绝不允许 AI 凭空编造她没有说过的食材或步骤。

保留她的声音,而不只是她的步骤。一份食谱不只是用量。把她自己的话和小故事保留在书里,才让它成为她的书,而不是一张通用的食谱卡。

了解托管平台能做什么。重型本地模型无法适配无服务器平台,所以我为在线链接做了一个 Demo Mode,并把真正的流水线保持为本地优先,这本来也符合整个理念。

局限:Whisper 可能会听错地方性词汇,或在嘈杂的厨房里出错,较小的本地模型可能会漏掉一个步骤,而克数换算也是近似的。这就是为什么在打印之前,所有内容都保持可编辑。

真正的考验

这个项目是为一个真实的人而做的。目标从来都不是一个完美的演示。它是一本印出来、放在我 dadi 手里的书,里面是她用自己的话讲述的食谱,让她的孙辈们在很久以后仍能照着做菜。

下一步

更多地方语言、更好地处理嘈杂的厨房,以及在每道菜的食谱页上放一张照片。

这个项目是开源的,也对 Hacktoberfest 友好。如果你的家里也有只存在于某个人脑海中的食谱,fork 它,在它们失传之前把它们记录下来。

GitHub: https://github.com/vidishagupta/Dadi-ki-Rasoi
这是为以下活动提交的作品:Hacktoberfest 周末挑战:为朋友而构建

我构建了什么

演示

代码

我是如何构建的

为什么开放创新很重要?

我的智能体会话

奖项类别