我让 AI 帮我构建了一个工具,用来找出夜里吵醒我的原因
摘要
作者详细介绍了如何使用 AI 编程助手构建一个定制的智能家居工具,该工具通过关联音频录音、传感器数据和睡眠指标来识别夜间干扰源。这个 DIY 项目将树莓派、麦克风、Home Assistant 和 Garmin 手表整合到一个个性化的网页仪表板中。
暂无内容
查看缓存全文
缓存时间: 2026/05/11 21:54
# 我让 AI 帮我做了一个工具,用来找出深夜醒来的真正原因
来源:https://martin.sh/i-let-ai-build-a-tool-to-help-me-figure-out-what-was-waking-me-up-at-night/
阅读时间 9 分钟 | 2026 年 5 月 11 日
凌晨 3 点醒来,你却完全不知道是什么吵醒了你。等大脑终于反应过来,声音早就消失了。所以我决定让 AI 帮我开发一个工具,终于找出那个问题的答案,并根据答案采取行动。
我让 AI 帮我做了一个工具,用来找出深夜醒来的真正原因(下方为真实截图)我习惯关注那些影响生活质量的小事。当有东西持续困扰我时,我会去调查、找出可能的原因,并着手解决。
最近发生的变化在于*我愿意为此构建什么*。借助 AI 工具,几年前我还会因为“投入产出比太低”而放弃的项目,现在一个周末就能搞定。所以每当我在日常生活中遇到问题时,都会忍不住想:“其实,我可以做个小工具来研究一下这个。”
这篇文章讲的就是其中一个问题:**我的睡眠。**
## 问题所在
我住在一个嘈杂的城市。有些夜晚我在凌晨 3 点醒来,完全不知道是什么吵醒了我。还有些夜晚我并没有完全清醒,但第二天早上手表却显示,凌晨 3:32 有什么东西把我从深度睡眠中拉了出来。
> 最让人抓狂的是,你几乎永远不知道原因。当声音把你吵醒时,大脑还在从当前的睡眠阶段中过渡,需要一点时间才能完全“上线”。等你终于搞清楚状况时,噪音已经消失了。除非它重复发生*(打雷、响个不停的汽车警报)*或者事后留下线索*(雷鸣后的闪电)*,否则你只能在困惑中醒来,原因依旧成谜。
如果找不到确切原因,就没法彻底解决。是公寓内部?外部?邻居?卡车?还是门?你尝试的任何“解决方案”都只是在瞎猜,而盲目尝试的代价通常很高。
于是,我开始了一项行动 😏
## 宏观上看我构建了什么
先交代一个背景:我已经用 Home Assistant 搭建了一套智能家居系统,公寓里装满了各种传感器*(人体移动、门窗、灯光、温度、湿度、CO2、空气质量)*。这个项目需要的大部分数据其实已经在收集了。我只需要加入音频模块,接入我的睡眠数据,然后把所有东西串联起来。
我只补充了以下几样东西:
- 两个廉价的 USB 麦克风,一个放在公寓内,一个放在窗外面向街道
- 一台 Raspberry Pi*(微型计算机)*负责监听,但仅当我在家且躺在床上时才会启动
- 来自我 Garmin* 手表的睡眠数据
- 部署在我家庭实验室里的一个 Web 应用,用于整合音频、睡眠数据和现有的传感器事件
当 Pi 听到足够响亮、值得关注声音时,它会保存一段短视频,包含事件前后几秒的上下文。整个检测模式受 Home Assistant 控制:Pi 将自己暴露为一个 Home Assistant 集成,只有当自动化脚本判断我在家、在床上且处于常规睡眠时间时,才会开启它。在不满足这些条件的情况下,它会被完全禁用,麦克风完全无法访问。这正是我想要的行为,即使是在我自己的家庭网络上也是如此。
Web 应用才是真正发挥价值的地方。每天的记录像音乐编辑器里的音轨一样排列:一条用于睡眠阶段,一条用于心率和 HRV,几条用于传感器事件,还有一条用于加载音频的噪音事件。
**响应式设计,也支持移动端。音轨可以像音乐 DAW 一样放大缩小。** 迄今为止最有用的功能是,它用视觉方式标记了我睡眠阶段转换或醒来的时刻。这就是切入点。我快速浏览一夜的数据,找到高亮标记*(红色)*的时刻,点击即可收听。
还有一个贴心细节:前端是一个支持 Web Push 的渐进式 Web 应用(PWA),仅在家庭网络内提供服务。我早上醒来拿起手机的那一刻,就会收到通知,提示昨夜的数据已准备好供我查看。所有数据都不离开家庭网络,这点我非常喜欢。
## AI 做了什么,没做什么
为了明确预期:**正是 AI 让这个周末就能完成的项目变得切实可行。** 整个项目大约花了 8 小时,随后几天又做了些小优化。如果没有 AI 工具,我根本不会开始。
但我并*没有*用 AI 来识别实际的声音*(至少目前还没有)*。听音辨物,比如区分门、碗碟还是摩托车,依然全靠我戴着耳机自己听。这个工具只是把值得听的时间点指给我看。
在工作流方面:我刻意选择*不读代码*。我测试运行结果,当发现偏差时直接给出反馈,并让 AI 通过截取我浏览器中运行着的应用截图来验证它自己的输出。
在微型计算机端,我更进一步。Raspberry Pi 是全新干净的镜像,所以我给了 AI 编程助手 SSH 访问权限,让它在设备上直接测试。它会设置实验,让我喊叫、掉落物品或打开厨房水龙头,录制样本,然后替我分析,有时还会拉出频谱图。我最初需要明确指示它按这种方式工作,但一旦设定好,这种迭代循环确实相当有趣。
对于运行在自己硬件上的个人项目,这套流程已经绰绰有余。
这里有趣的转变并非 AI 替我解决了问题,而是 AI 降低了开发成本,让我自己能构建出解决自身问题的工具。
## 关于睡眠数据的一点说明
我的睡眠数据来自 Garmin* 手表。每款手表和戒指的睡眠算法都有些微差异,老实说,我并不完全相信它们在任意时刻判定的具体睡眠阶段。
但它们相对擅长的是**检测你真正醒来的时刻**。这些清醒事件,加上阶段之间的大致转换,才是我真正关心的。它们并非临床级真理,而是视觉标记,告诉我*“这个时刻值得调查”*。没有它们,我可能得硬着头皮听完几小时的冰箱嗡嗡声和邻居啥也没干的白噪音。
我不是在做睡眠科学研究。我只是想找出那些有时导致我早上感觉糟糕的原因。
## 我发现了什么,以及我做了什么
一旦开始实际使用,规律很快就浮现出来了。常见的罪魁祸首:
- **门。** 邻居摔门声,或者公寓里有人去洗手间时没太注意关门。
- **碗碟。** 它们会发出尖锐的高频声音,穿透公寓的能力出奇地好,无论来自自家厨房还是邻居。
- **街道。** 摩托车、踏板车、卡车,以及路过的垃圾清运车……*(猜猜我住在哪个国家)*
- 偶尔有些来自室内的声音我之前却怪到了室外头上*(反之亦然)*。
有了实际数据,我终于可以自信地采取行动,而不是盲目猜测:
- 我加装了正规的隔音板*(宜家那种用于办公区划分会议室的款式效果出奇地好)*
- 我在卧室门和窗户周围加了额外的密封条*(硅胶、橡胶等)*
- 对于部分室内噪音,解决办法与其说靠硬件,不如说靠一次简短的沟通 😄
当然不完美*(毕竟城市就是城市)*,但改善效果已经体现在我早上的体感以及 Garmin* 随时间推移的数据中了。
#### 给好奇者:底层实际工作原理
对技术感兴趣的朋友,这里补充一些细节:
- **Pi 持续将录音写入滚动内存缓冲区******(仅当通过 Home Assistant 启用检测时)***。在音量超过阈值之前,没有任何数据会写入磁盘。
- **输入信号上叠加了降噪配置,力求将环境本底噪声压到最低****。它主要过滤掉持续的背景音**(远处的车流声、冰箱运行声之类)***,从而避免阈值被误触发。这大幅减少了误报。
- **当阈值被突破****时,音频片段**(含前后上下文)***会连同时间戳一起保存,同时一个小 JSON 文件记录事件轨迹。片段也会被压缩成较小的音频文件,以便存储多晚的数据。
- **Pi 上运行着一个轻量级 Web 服务器****,向我的 Web 应用暴露噪音事件和音频片段,此外还有一个独立的、基于 Token 授权的控制端点用于更改录音状态。
- 该控制端点被一个我让 AI 编程助手编写的****小型自定义 Home Assistant 集成****消费。正是这个集成让我的 Home Assistant 自动化流程能够真正切换检测开关。
- ****Garmin* 睡眠数据:**** 有一些优秀的开源库可以处理 Garmin Connect 的认证。一个小定时任务运行认证请求,拉取当天的活动存档,从中我提取睡眠阶段、心率、HRV 以及其他一些生物指标,这些也能轻松作为数据轨道展示。
- Web 应用从三个来源拉取数据:Garmin**(睡眠数据)**、Home Assistant**(传感器事件)**和 Pi**(噪音事件和音频片段)**。所有内容被缝合到一个同步的时间轴上,每个来源作为独立的视觉轨道。
- 我试过的现成音频播放器无法按我想要的方式处理多轨道同步,所以我最终自己写了一个。
- 睡眠阶段转换和清醒事件会进行视觉高亮,这也是我最依赖的部分。
- 前端是一个支持 Web Push 的 PWA,仅在家庭网络内提供服务。
## 我酝酿中但尚未实现的想法
现有的功能已经足够。我能据此采取行动,这才是最重要的。不过还有几个扩展想法,我未来可能会去实现:
- **仅在有需要查看的内容时通知。** 目前只要昨晚数据就绪就会推送,不管内容是什么。在安静的夜晚跳过通知会更智能。
- **相似声音聚类。** 使用模型将相似的音频片段分组,然后一次性标记聚类*(门、碗碟、摩托车等)*。久而久之,工具甚至能自动猜出新事件的来源。
- **可视化聚类。** 即使不做分类,仅看到声音的分组方式也能大幅加快听音效率。还能辅助数据标注工作。
- **条件警报。** 仅当可能有东西干扰睡眠时才提醒我。否则保持静默。
每个想法可能又需要一个周末,这某种程度上也是本文更宏观的主旨。我迟早会去弄,也可能不会,因为现有的东西已经能解决问题了。
## 我为什么分享这个
对我来说,这个具体项目远不如背后的模式重要。有一整类小型个人问题,过去通常被归类在*“挺好,但不值得动手”*的范畴。借助 AI 工具,许多这类项目已经跨入*“行啊,为什么不呢,花个周末搞定”*的区域。
从这个项目中我总结出几点:
- **先测量,后解决。** 我差点就下单了新床垫,并开始看更厚重的窗帘。它们可能确实有帮助,但没有数据,我既无法精准定位解决方案,也无法事后验证是否真的有效。
- **上下文胜过原始数据。** 单纯的噪音日志用处不大。同一个事件,如果你的心率飙升、有门开了,或者你当时处于深度睡眠,讲述的故事就截然不同。
- **选择足够好用的最简信号。** Garmin 的睡眠阶段划分并不完美,但它的清醒检测已经足够精准,能指出值得我去听的时间点。这对我来说已经够了。
- **AI 工具降低了个人工具的开发门槛。** 现在每当有什么小事开始困扰我,我第一反应就是*“我能建个小系统来更好地理解它吗?”*。过去答案通常是*“可能不值得”*。而现在,答案是*“能”*的频率高多了。
## 关于构建方式的一些注意事项
关于我的背景:我出身于软件工程。这是我能在 8 小时内搞定这件事的主要原因。我知道**该提什么要求**,也清楚**何时该对返回的结果保持怀疑**。另一方面,音频处理是我涉足较浅的领域*(我用过 Logic Pro 和几个插件,但仅此而已)*,该部分的大多数内容我是在毫无基础的情况下构建的。
话说回来,我不会直接将这份代码发布到任何地方。它仅基于结果进行测试,没有经过正规的代码审查。但这对我个人来说没问题,因为它运行在我的家庭实验室中,我可以将其锁定并限制其访问权限。
## 小小免责声明
我不是睡眠科学家,本文也不是为了提供优质睡眠指南。我只是一个试图关注影响日常生活质量的小事,并在能力范围内采取行动的人。生活中有许多大小事务我都以这种方式处理。这只是其中之一。
如果你也住在嘈杂的城市,且睡眠追踪器总是告诉你*“你昨晚睡得不太好”*却不说原因,我真心推荐你试试这个方案的某个版本。你不需要完全照搬我的做法。哪怕只是把麦克风放在床边,第二天早上查看一下音频峰值,就已经能教你很多了 🤗。
剧情反转:既然我给窗户和门加了更多密封条,现在我得想个聪明点的方法降低 CO2 浓度了……
---
*注:我不喜欢 Garmin,我认为这是一家系统性侵犯消费者权利的欺诈公司,我正在寻找替代品。已经成功安利了几个人转投 Coros。*
### 订阅我的博客
让最新文章直接送达你的收件箱。
[[email protected]](https://martin.sh/i-let-ai-build-a-tool-to-help-me-figure-out-what-was-waking-me-up-at-night/#/portal/signup)
相似文章
我让AI在我睡觉时经营我的业务。结果是这样的。
一位构建者分享了他是如何在夜间使用AI代理工具,在睡觉时自主完成了20项重大业务和平台任务,包括文档编写、数据审计、客户就绪计划和监控蓝图。
我让AI助手将6个月Apple Watch睡眠数据转换成睡眠门诊要求的日志。数据中的陷阱相当棘手。
一位用户详述了使用AI助手将6个月Apple Watch睡眠数据转换为睡眠门诊日志格式时遇到的挑战,包括时区转换、日期偏移和捏造的值。这篇文章分享了正确解读医疗表单健康数据来源的经验教训。
AI系统,让您监督和指导研究
作者构建了一款AI研究工具,通过严格编排和约束工程减少幻觉,使用户能够监督研究决策并验证来源。
我构建了一个了解我思维的AI——我的目标、我的恐惧、我的自我破坏模式。已有650人复刻了它。
作者构建了一个个性化的AI,它能理解用户的目标、恐惧和自我破坏模式,并且已被他人复刻了650次。
构建了一个JARVIS风格的助手:具备唤醒词、视觉模式、本地语音克隆和LLM生成的系统命令
一位开发者构建了一个名为CYBER的JARVIS风格个人助手,具备唤醒词激活、通过XTTS v2的本地语音克隆、视觉模式以及LLM生成的系统命令,全部在本地运行,无需云端依赖。