归档 / NO.002 · 本地 AI · 数字伴侣 · 一手实测
我在 Mac 上养了一个完全本地的 AI 伴侣
一台 MacBook、一套完全本地的 ASR + LLM + TTS + 数字人 + 记忆:我把一个「AI 数字伴侣」从 Demo 做成了能对话的东西,以及它让我重新想明白的两条产品路线。
本文章节 · CONTENTS 10
「有什么电影值得看?」我问它。
它刚开口推荐,说到一半被我打断:「算了,今天不聊电影,给我讲讲最近有什么新闻。」
它停住,等我说完,然后顺着新话题接了下去——没有一丝卡顿,就像真的在听你说话。
这不是任何云端的 AI。语音识别、大模型、声音、形象、记忆,全部跑在我手边这台 MacBook 里。数据不出门,模型不联网。
最近一两个星期,我一直在折腾一件事:做一个完全本地运行的 AI 数字伴侣。
所谓完全本地,就是语音识别、本地大模型、语音合成、数字人、记忆,全部在自己的电脑上完成,数据不出去,也不依赖云端 API。
现在已经做出了一个初步能用的版本。可以跟它直接说话,它会听、会想、会回答,有自己的声音和形象;说到一半可以打断它;聊过的一些事情,它下次还能记得。
当然,现在离真正的「数字伴侣」还差得很远。但把这套东西做下来以后,我发现里面有些东西,比我一开始想的有意思得多。
而且说起来,我最开始根本没想做什么「AI 伴侣」。
一开始,其实只是想把语音放到本地
这件事情最早还是来自我最近在做的一个产品。
产品里面有一个语音助手,叫「小宝语音」。最开始我们的方案比较常规,语音交互走云端。效果其实不错,开发也快,但很快就遇到了两个非常现实的问题:一个是隐私,另一个是成本。
特别是当语音交互变成一个高频功能以后,ASR、TTS,再加上大模型调用,云端 API 的成本其实并不低。
所以我们一直想把更多东西放到本地。我们已经把语音服务的 Server 端放到了边缘设备上,但真正尝试把 ASR 和 TTS 也搬到本地时,问题就来了:以前那些能在本地跑的模型,能跑和好用,其实是两回事。
我陆续试过 FunASR、Whisper,还有一些 TTS 方案。有些识别效果还可以,有些速度还可以,但放到实时语音交互里面,总觉得差那么一点。
而语音这个东西很奇怪。文字聊天慢一秒,你可能没什么感觉。但两个人面对面说话,你说完一句,对面愣两三秒再回答,那种感觉马上就不对了。
所以这件事后来一直放在那里,没有真正解决。
直到我看到了 Qwen3-ASR 和 Qwen3-TTS。它们都有 0.6B 这样很小的版本,我突然觉得,这件事情好像可以重新试一下了。
先在 Mac 上试试看
公司产品用的是 Intel Core Ultra 5 225H 平台,但我没有一开始就在产品硬件上折腾。
因为我自己的 MacBook M4 Max 有 128GB 内存,而且 Apple 有 MLX 这一套针对 Apple Silicon 的推理框架。所以我的想法很简单:先别想那么多,先在 Mac 上把它跑起来看看。
于是我很快做了一个 Demo。ASR 用本地模型,大模型也放本地,TTS 同样在本地完成。
真正跑起来以后,效果比我预期的好,尤其是延迟。它第一次让我觉得,纯本地实时语音交互,好像已经不是一个「理论上能做」的东西了,开始有一点「能用」的感觉。
这里其实还有一个选择。我当时也考虑过,要不要直接做 Voice-to-Voice,也就是现在大家很喜欢讲的端到端语音模型。
理论上这条路线更漂亮:声音直接进去,声音直接出来,中间不再经过传统的 ASR → LLM → TTS。
但最后我还是没这么做。
一方面,本地端到端语音模型现在可选的成熟方案还不算多;另一方面,我更看重整个链路的可控性。ASR 错了,我知道是 ASR 的问题;大模型回答不对,我可以调 Prompt、换模型;声音不好,我可以单独调 TTS。
做 Demo 的时候,这种看起来「笨一点」的架构,反而让我更踏实。所以最后还是用了 ASR → LLM → TTS。
技术上不算性感,但能用。
做产品久了以后,我越来越觉得,最先进的方案和最适合产品的方案,经常不是一个东西。
然后,一个 AI 女友的视频把事情带偏了
语音跑通以后,我原本只是想验证一下本地语音方案。
结果有一天刷小红书,看到有人做了一个 AI 女友。具体项目叫什么我已经记不清了,印象比较深的是,他用了《火影忍者》里的一个女性角色,你可以和她说话、互动,让她做出各种回应。
我当时第一反应倒不是「AI 女友挺有意思」,而是:这个东西如果完全在本地运行,会不会有点意思?
因为陪伴类产品有一个很特殊的问题——你跟它说的话,可能比你跟普通 AI 说的话私密得多。如果所有语音、聊天记录、记忆,甚至你和这个角色之间形成的关系,都在自己的电脑里呢?
这个想法一下把事情从「本地语音助手」推到了另外一个方向。
后来我又想到一些游戏里已经出现的 AI 角色。它们让我越来越觉得,单纯有一个声音还是不够。如果真的叫「伴侣」,它应该有一个你能看到的形象。
于是我开始给它加数字人。
真人,还是二次元?
这一段其实也踩了不少坑。
我一开始想做的其实是真人数字人。最直接的参照是 Call Annie 那种——一个真人形象跟你实时对话;也研究过 AVTR 这类真人形象的数字人方案。想象确实美好:一个看起来像真人的 AI 陪着你聊。
但这条路我很快就打消了念头。问题不在技术实现,而在预期:只要它长得像真人,人对它的要求马上就变了。嘴型差一点,会觉得不自然;表情慢一点,不自然;眼神不对,也不自然。越像真人,任何一点瑕疵都会被放大成「假」——这不是哪个方案不行,是真人路线天生的包袱。
所以我转头看虚拟形象,具体是两条路:Live2D 和 VRM。
Live2D 是让二维立绘动起来,天生没有「像不像真人」的问题;VRM 是 3D 虚拟形象的事实标准格式,生态更完整。不过实际操作下来,Live2D 那一套在 Mac 上并没有想象中顺,最后我选了 VRM 的二次元模型。
我开始调它的嘴型,AEIOU,不同发音对应不同口型;又给它加了一些状态。我说话的时候,它在听;模型生成的时候,它在思考;它回答的时候,嘴型跟着语音动。什么都不做的时候,也不能像死机一样杵在那里,所以还得有一些待机的小动作和表情。
这些东西单独拿出来都不是什么很高级的技术。但挺有意思的是,当这些细节拼到一起以后,它突然开始有一点「活着」的感觉。
后来我又加了实时打断。它说话的时候,我可以直接插话。
这件事情看起来很小,但对体验影响特别大。现实中的对话,本来就不是「你说完 30 秒,我再说 30 秒」,人会打断,会停顿,会接话。如果 AI 一开口你就只能等它念完,那还是在「使用一个软件」,很难真的产生聊天的感觉。
但真正让我觉得它像一个「伴侣」的,不是数字人
是记忆。
这个问题我之前其实没有特别认真想过,直到我看到一些 AI 角色产品的用户反馈。
大家刚开始可能觉得角色很漂亮,声音也不错,聊几次以后却发现,它不记得你。
昨天说过的事情,今天又要重新说;你的习惯不知道;你们之间发生过什么,它也不知道。那这个所谓的「陪伴」,其实每次打开都差不多是第一次见面。
这就有点奇怪了。
所以我后来花了不少时间做记忆。最开始想自己写,然后很快发现,这个坑比想象中深。
记忆不是把聊天记录存进数据库就结束了。什么应该记,什么不应该记?什么时候拿出来?记错了怎么办?同一件事情后来发生变化了怎么办?哪些是用户事实,哪些是发生过的事件,哪些又是两个人之间形成的关系?
最后我没有继续完全自己造这个轮子,而是用了 Mem0,再在上面做自己的处理。
现在大概会有几类东西:短期上下文、长期记忆、用户 Profile、事实型记忆、事件型记忆、关系型记忆。
它当然还很初级。但加入记忆以后,我对「AI 伴侣」这件事情的理解发生了一点变化:陪伴类 AI 最重要的可能不是它有多聪明,而是它能不能和你形成连续的关系。
模型、声音、角色以后其实都可以换,但如果有一天它把你忘了,前面建立起来的很多东西,好像一下就没了。
4B 到底够不够?
目前我用的是一个本地 4B 模型。为了搞清楚「更聪明」和「更快」到底怎么换,我在自己的 MacBook(M4 Max / 128GB / MLX)上,把 4B、8B、14B 三个尺寸放在完全相同的条件下实测了一遍:同一句提示词、同样生成 256 个 token、每个模型跑 3 轮取中位数。
结果比我预想的更有意思。
先说速度。4B 从说完到开口只需要 100 毫秒出头,生成速度 160 token/s;8B 首 Token 160 毫秒,速度掉到 98 token/s;14B 首 Token 253 毫秒,速度只剩 31 token/s。生成同样长度的回复,三个模型分别用时 1.7 秒、2.8 秒、8.5 秒。
看到这里你可能会问:14B 要 8.5 秒才生成完,用户岂不是要盯着数字人冷场八秒半?
不是的。这条链路是流式的:模型生成出第一个 token,TTS 就立刻开始合成,声音几乎是边想边说。真正决定「它什么时候开口」的,是首 Token 延迟,而不是总生成时长——14B 的首 Token 是 253 毫秒,加上流式 TTS 的起播,开口并不慢。
那 14B 的问题在哪?在思考。8B 和 14B 会先在内部「想」一会儿再回答——生成思考内容的那几秒里,还没有真正要说的文本流出来,TTS 无话可说,数字人只能干等。真正让人觉得停顿的,不是它说得慢,而是它开口前想得久。
所以 8B 是甜点位,理由也在这里:思考更短、语速够快,整体节奏最接近真人对话。
再说能力。4B 的边界确实很明显:你问它一个稍微复杂的问题,它能给你一个工整的框架,但经不起追问。8B 和 14B 会先「想」一会儿再回答,答案也明显更周到。内存占用的账同样摆在那里:4B 只要 2.4GB,8B 是 4.7GB,14B 直接到 15GB。
所以我的初步结论是:对数字伴侣来说,8B 可能是甜点位——速度还在对话能接受的范围内,能力比 4B 上一个台阶;14B 更适合跑在算力更充裕的边缘设备上,而不是个人电脑。
(这份对比是我的机器、我的量化配置下的结果,只能代表我自己。测试方法我也放在了网站上,你也可以在自己机器上跑一遍。)
它已经知道今天几号了,但还不够
本地模型本身不知道现在几点、今天几号。所以前段时间,我先给它加了两个最简单的工具:日期和时间。
现在你问它「今天几号」「几点了」,它能直接告诉你——不是背出来的,是它真的调用了工具,去读系统时间。
这听起来没什么,但对一个本地模型来说挺关键:它第一次拥有了「当下」。
接下来要加的东西还有很多:天气、日历、日程提醒、这台 Mac 的硬件状态……但这里我给自己定了一个原则:这些东西绝不写死在系统里,全部做成工具插件,让 AI 按需调用。
因为今天这个东西运行在 Mac 上,明天也许会跑在 Windows,或者跑到一台边缘 AI 设备上。平台相关的能力必须是可插拔的——核心不动,插件跟着平台换。
还有一个我最近碰到的问题也挺有意思。我和它聊天的时候,旁边电视里有人说话,它也会以为有人在跟它说话,甚至电视里的声音都有可能把它打断。
所以接下来我还准备加声纹识别,让它至少能够分辨,这是我在说话,还是旁边电视里的人在说话。
做到这里以后,我也慢慢发现,真正要做好一个数字伴侣,问题已经不再只是「本地跑一个大模型」。语音、记忆、角色、状态、打断、声纹、工具调用……这些东西组合起来,最后才是用户实际感受到的体验。
做着做着,我开始想:这个东西能不能卖?
这是我现在还没有想清楚的问题。
一个比较直接的方向,是把它做成一个 Mac 上的付费软件。下载安装到自己的电脑上,所有模型、声音、角色和记忆都在本地。
可以有一个免费的基础版本,比如基础角色、基础模型、基础语音。付费以后可以选择更好的模型、更多角色、更好的声音,或者声音克隆、声音定制,以及更完整的记忆能力。
甚至我觉得它不一定非要订阅。
因为「完全本地」这件事情,本身和买断制其实挺搭的。用户买的是一个真正属于自己的 AI,而不是每个月向某个平台租一个伴侣。
当然,这只是一个方向。
这两天我又想到另外一个可能。
同一套东西,如果放到边缘设备上呢?
个人数字伴侣跑在一台 Mac 上,一次服务一个人。
但如果把同样的底层能力放到一台算力更强的 Edge AI Server 上,让它同时服务很多人呢?那它一下就变成了另外一个东西:AI 语音客服。
这个时候,数字人的形象甚至可以直接去掉。保留 ASR、LLM、TTS、打断、记忆这些底层能力,再加上企业知识库和客户资料。
电话打进来以后,通过电话号码知道这个客户是谁;微信进来以后,通过微信账号知道这个客户以前咨询过什么。AI 不只是回答知识库里的问题,它还知道这个客户是谁、以前发生过什么、现在正在解决什么问题。
这样,同一套技术底座就出现了两个完全不同的方向。
往个人电脑上走,是 AI 数字伴侣;往边缘服务器上走,是企业本地 AI 语音客服。
我现在还没有决定哪一条路更好,也没觉得一定要二选一。这是我目前看到的两个可能性,后面也许还会冒出第三个、第四个。
把这个 Demo 真正做出来以后,我反而越来越觉得,我现在想验证的已经不只是一个「AI 女友」,也不只是一个语音助手。
我更想知道的是:今天的本地模型,到底能不能支撑起一套真正可用的、本地运行的语音智能系统?
它可以听,可以说,有一个本地大脑,有记忆,能调用工具,知道谁在跟它说话,也可以有自己的形象。
如果这些能力都可以在一台个人电脑,或者一台边缘 AI 设备上完成,那很多以前必须依赖云端的 AI 产品,也许真的值得重新做一遍。
这个事情,我现在也才刚刚开始。
下一步我准备把默认模型换成 8B,再把天气、日历、日程这些插件继续做起来,声纹和记忆也要接着完善。
等踩完下一轮坑,再回来写。
参考与资源
模型与框架(本文实际用到的 MLX 版本)
- Qwen3-ASR / mlx-community 量化版 — 本地流式语音识别
- Qwen3-TTS / mlx-community 量化版 — 12Hz 流式语音合成
- Qwen3-4B(4bit) · Qwen3-8B(4bit) · Qwen3-14B(8bit) — 本文实测的本地大模型
- MLX / mlx-lm — Apple Silicon 推理框架
- VRoid Studio — VRM 二次元角色建模工具,数字人形象的来源
同方向的开源项目
- moeru-ai/airi — 本地运行的 Live2D AI 伴侣,与本文路线最接近的项目之一
- xikhar/persona — 本地 AI 陪伴程序,带语音与记忆
- 78/xiaozhi-esp32 — 小智:开源硬件语音助手,国内最活跃的同类项目
- openbmb/MiniCPM-o — 端到端本地实时语音模型
- KoljaB/RealtimeSTT / KoljaB/RealtimeTTS — 本地实时语音识别与合成的经典组合
- QwenLM — Qwen 系列模型官方仓库(LLM / ASR / TTS)
订阅 · SUBSCRIBE
扫码关注公众号
文章每周四更新,网站和公众号「AITi智能」同步发布。 想在微信里第一时间看到,扫码关注。
- 01 微信搜索「AITi智能」
- 02 关注并加星标
- 03 每周四 08:00,准时见
扫码关注 · 每周一篇