坦白说,我偶尔会下厨做饭。所有经常做饭的人都会遇到一个场景:菜谱做到一半,手上沾满面粉,突然想查点东西。算不上什么要紧大事,就是临时冒出个疑问:比如地球直径是多少、章鱼是不是真的有三颗心脏、麝香猫咖啡的制作工艺与由来。 这时候不想洗手、不想解锁手机,只希望立刻得到答案。
或是做饭中途想起要往共享购物清单里加披萨、一把新锅铲,甚至随便记个零碎事项。如果等收拾完再拿手机,转头绝对忘得一干二净。
恰逢几个契机促成了这个项目:之前闲置了一台树莓派 5,同时一大批适配边缘设备、性能够用的轻量化大模型接连发布。
项目初衷并非对标谷歌智能家居、亚马逊 Alexa 这类成品设备,目标非常明确:打造一台完全由我掌控的厨房语音助手。没有订阅费用,不会持续消耗云端计费 Token,麦克风数据不会上传至第三方服务器。仅靠树莓派硬件,搭配能塞进设备本地运行的大语言模型。
本项目绝大部分代码由 Claude Code 辅助编写。 分工很清晰:我负责整体构思、方案设计、架构与需求规划,Claude Code 负责落地编码。注意:请将 Claude Code 更新到最新版本。
我还借这个项目实践规约驱动开发(BMAD 等相关方法论),这部分内容后续会单独发文详述。
硬件清单(必备 & 可选配件)
先列出所用物料,也是大家最常关心的部分。
大部分零件都是我往期项目留存的库存配件,没有哪一样属于硬性刚需:NVMe 固态硬盘可以换成普通 SD 卡,显示屏、扬声器也可随意替换型号。16GB 内存版本提升体验十分明显:多次问答之间模型常驻内存,能省去每次启动 70 秒左右的冷加载耗时。如果只单跑一个大模型、不做多模型并行部署,8GB 内存版树莓派 5 完全够用。
散热至关重要,远超预想,一开始我用树莓派 5 官方标配风冷散热器,但大模型持续推理会让四颗 CPU 核心满载,即便不超频,处理器也会触发降频,性能肉眼可见下滑。后续更换为 52Pi 冰塔散热器,水冷方案也已经列入待做清单,后续会出一期手工装机教程。
AI语音处理流程:工作原理详解
整套链路逻辑清晰,每一个环节都可单独替换组件: 唤醒词 → 语音转文字 STT → 大模型 LLM 推理 → 工具调用 → 流式语音合成 TTS
唤醒词模块:基于 OpenWakeWord 框架自定义训练唤醒口令 Pundyk(乌克兰语原词Пундик,指代纸杯蛋糕类甜点)。 该词汇发音音节简短清晰、元音辨识度高,不会和常用英文词汇混淆,日常说话不容易误触发。 自定义唤醒模型训练调参耗时久,必须精准控制触发逻辑。项目开启唤醒事件录音功能,收集误唤醒样本用于迭代微调。 麦克风底噪、风扇杂音、环境噪音都会严重影响模型识别效果,因此必须使用本机实际收音样本训练,才能适配真实使用环境。
语音转文字 STT:采用 faster-whisper,CPU 运行 base.en 基础英文模型。 说完话后等待 3~6 秒出文字结果,日常使用完全可以接受。 也可选用更小的 tiny.en 模型,识别精度略降,但速度能直接翻倍。
大语言模型 LLM:核心核心环节,单独展开说明。
语音合成 TTS:使用 Piper 语音合成,音频直接交由 aplay 播放器输出,不落地生成音频文件。 开启逐句流式播报:大模型刚生成第一句话就立刻朗读,不用等全文输出完毕,大幅降低体感延迟。
程序架构:整套程序由有限状态机 FSM调度流转,状态闭环: 闲置 → 会话校验 → 收音监听 → 推理思考 → 回到闲置 结构整洁便于排错,能妥善处理超时、程序异常、中途静音等各类边界问题,一改初期杂乱无章的代码逻辑。
大模型选型:筛选适配树莓派的最优模型
需要同时满足两类完全不同的使用场景:
1.工具调用:新增购物清单、设置 20 分钟倒计时、查询明日天气。这类任务要求输出标准 JSON 格式、指令执行稳定,1B 参数量小模型即可胜任。
2.开放式问答:章鱼有几颗心脏、酸面团发酵原理、阿拉比卡与罗布斯塔咖啡豆区别。这类问题需要知识储备与逻辑推理,1B 小模型极易生成虚假信息(幻觉)。
因此目标锁定:体积最小、同时具备充足理解能力的边缘模型。 项目开发期间轻量化端侧模型持续更新迭代,选型一直在动态调整。
模型选择过程
以下是在RPi5上测量的基准测试结果:
通义千问 Qwen3、DeepSeek-R1 等模型默认会开启深度思考模式,即便添加参数 (--reasoning-budget 0, {enable_thinking: false})关闭推理,也无法百分百稳定生效。
最终敲定最优选择:gemma4:e2b 混合专家架构模型。 综合智力强于普通纯 2B 参数模型,推理速度基本持平;反观 Qwen3.5:2B 实测运行速度偏慢。该模型还支持多模态输入,便于后续拓展功能。
Ollama → llama.cpp
最开始用 Ollama 做本地推理,上手简单适合前期调试。
后续直接在树莓派部署 llama.cpp 服务端,Token 吞吐效率提升 10%~20%。 关键优化:开启cache_prompt: true复用上下文 KV 缓存,同一段对话内后续提问首词生成耗时从 70 秒压缩至 5 秒以内,整体吞吐量提升 16%。
局域网 GPU 加速
日常我会用台式机 GTX1070(8G 显存,十年前老显卡)在局域网内搭建 Ollama 服务,树莓派通过内网调用显卡算力推理。
对比纯树莓派 CPU 运行,延迟差距非常明显,且全程属于本地闭环方案,数据不会流出家庭内网、无任何 API 计费、无需登录账号。
端到端延迟:口头提问→口头回答的第一个词
STT和TTS在所有后端上都是相同的—相同的硬件,相同的型号。只有LLM TTFT改变了。平均超过5次语音助手提示。
如果你想从纯RPi设置中获得更高的性能,我认为专用的AI加速器会比10个y.o. GPU(即Hailo-10H AI HAT+2)更好
从技术上讲,这仍然是一个完全本地化的解决方案。GPU PC在本地网络中。没有令牌成本,没有数据离开我的家庭网络,没有帐户。
整套程序预设 4 种推理后端,纯语音指令即可无缝切换:
直接说「调用 Claude 解释美拉德反应」,本条单次请求定向调用 Claude Haiku 云端接口,结束后自动切回默认策略;指令「切换至 Gemini」则锁定后端为 Gemini,直到下达切回指令。
优先级调度规则: 手动语音指定后端 > 会话锁定后端 > 自动策略(台式机 GPU 在线则内网调用,否则本机 llama.cpp) 云端接口一旦密钥失效 / 断网报错,会自动降级切换成本地模型,断网环境助手依旧可以正常使用。
工具:它实际上能做什么?
内置可用工具集(共 13 项,全部免费)
天气查询:Open-Meteo 免费接口,无需密钥
网页搜索:DuckDuckGo 匿名搜索,免注册
购物清单:Todoist 免费版同步清单
倒计时计时器:本地计时并语音提醒
记忆知识库:个人偏好与事实存入 Markdown 文档,会话摘要存入 SQLite 数据库
网络电台:基于 Radio Browser 开源电台库 + mpv 播放器,内置 3 万个电台频道,语音点播爵士、西班牙语电台即可直接播放
菜谱库:对接 Notion 数据库调取菜谱
原本考虑接入 YouTube 音乐,但 OAuth 授权、接口配额、账号维护流程繁琐,加之设备仅搭配廉价单声道 USB 音箱,厨房场景使用网络电台更贴合需求,因此放弃音乐平台对接。
外壳定制:3D 打印外壳踩坑心得
裸板树莓派放在厨房既不美观也不安全,需要定制机箱。我的设计思路:复古小型显示器,屏幕微微朝上倾斜。
先用 Gemini 生成多版建模方案,结果创意有余但结构无法 3D 打印、比例怪异,只能作罢。随后选用 TinkerCAD 徒手建模,本以为只是带开孔的简易方盒,实际耗时极久。
TinkerCAD 面向少儿简易建模,用来做工业结构设计非常别扭。虽然最终成品外壳可以正常装机使用,但如果从头学习 Fusion 360 建模,算上学习时间整体效率反而能翻倍。
经验总结:选用专业适配工具,看似捷径的简易方案往往事倍功半。
机箱核心设计要点:
麦克风前置正对使用者
扬声器后置远离收音口避免啸叫
机身侧面与顶部大量开槽增强散热通风。
可视化界面:复古 CRT 终端风格
助手可无界面后台静默运行,我额外搭配一块 5 英寸触摸屏做可视化面板。
界面基于 PyQt6 独立子线程绘制,状态机逻辑运行在工作线程,主线程负责 UI 渲染,通过 Qt 信号完成进程间通信。视觉主题复刻老式 CRT 终端:黑底绿字,采用 Press Start 2P 像素字体,面板实时展示 CPU、内存、温度、生成速度 TPS。
UI 视觉规范交由 Claude Design 辅助设计,迭代排版后输出详细可落地设计文档,协作效率远超预期。 设备闲置 60 秒后屏幕自动息屏,触摸屏幕或唤醒词触发即可点亮;仅做信息展示,无触控菜单操作,定位始终是语音助手而非平板。
实测真实运行性能
树莓派 5 性能瓶颈完全卡在 CPU 算力。即便超频至 2.8GHz,搭配 llama.cpp 全套缓存优化,语音问答依旧存在可感知延迟。
端到端全程耗时(话音结束 → 播报第一句回复)平均 7.3 秒
拆解耗时:语音转文字约 3 秒 → 大模型首词输出 1.6 秒 → 语音合成启动 2.6 秒。 对标手机语音助手算不上极速,但厨房场景完全够用。
我也测试过 Qwen3–30B-A3B 大模型,树莓派可以正常加载推理,生成速度和 4B 级别模型差距不大;但常驻内存后系统剩余资源会被几乎占满。
语音转写与语音合成环节依旧有很大优化空间,后续会持续迭代提速。
后续拓展规划
按优先级排序:
接入 Home Assistant 智能家居 API,实现家电语音控制
对接日历日程,查询当日待办事项
联动 n8n 搭建更复杂的自动化流程
加装专用 AI 加速扩展板,降低纯树莓派推理延迟
给主机加装水冷散热
新增多语种识别与问答
迭代优化语音识别与语音合成模块
不会做的方向:打造全能通用型超级助手,坚守极简够用原则。固定 13 项核心功能、调用零额外费用、数据完全本地存储,满足个人使用需求就足够。
收尾总结
创客项目没有绝对意义上的 “彻底完工”,还有大量功能想法待落地,会利用空余时间逐步更新维护。目前设备日常稳定使用:查天气、管理购物清单、定时提醒、朗读菜谱,偶尔解答各种冷知识脑洞问题。项目最大瓶颈始终是 CPU 算力,原本预想内存会是主要限制,实际树莓派平台 CPU 才是短板。
最有效的优化:从 Ollama 迁移至 llama.cpp;最惊喜的体验:AI 辅助 UI 规范设计效率极高;最大的弯路:选用 TinkerCAD 做结构建模。项目算不上大型硬核工程,开发初衷更多是动手折腾的乐趣,服务场景精准贴合个人使用需求。
217