有钛度的 AI 观察 — 每周四 08:00更新 EST. 2026 · GETAITI.COM
深度 · 原创 · 周更 AITi WEEKLY · 有钛度

归档 / NO.002 · 本地 AI · 数字伴侣 · 一手实测

我在 Mac 上养了一个完全本地的 AI 伴侣

一台 MacBook、一套完全本地的 ASR + LLM + TTS + 数字人 + 记忆:我把一个「AI 数字伴侣」从 Demo 做成了能对话的东西,以及它让我重新想明白的两条产品路线。

作者 Jeffrey Hu 2026.08.27 约 8,100 字 阅读 10 分钟
本文章节 · CONTENTS 10
  1. 01 一开始,其实只是想把语音放到本地
  2. 02 先在 Mac 上试试看
  3. 03 然后,一个 AI 女友的视频把事情带偏了
  4. 04 真人,还是二次元?
  5. 05 但真正让我觉得它像一个「伴侣」的,不是数字人
  6. 06 4B 到底够不够?
  7. 07 它已经知道今天几号了,但还不够
  8. 08 做着做着,我开始想:这个东西能不能卖?
  9. 09 同一套东西,如果放到边缘设备上呢?
  10. 10 参考与资源

「有什么电影值得看?」我问它。

它刚开口推荐,说到一半被我打断:「算了,今天不聊电影,给我讲讲最近有什么新闻。」

它停住,等我说完,然后顺着新话题接了下去——没有一丝卡顿,就像真的在听你说话。

这不是任何云端的 AI。语音识别、大模型、声音、形象、记忆,全部跑在我手边这台 MacBook 里。数据不出门,模型不联网。

最近一两个星期,我一直在折腾一件事:做一个完全本地运行的 AI 数字伴侣。

所谓完全本地,就是语音识别、本地大模型、语音合成、数字人、记忆,全部在自己的电脑上完成,数据不出去,也不依赖云端 API。

现在已经做出了一个初步能用的版本。可以跟它直接说话,它会听、会想、会回答,有自己的声音和形象;说到一半可以打断它;聊过的一些事情,它下次还能记得。

MacBook M4 Max 上实际运行的 AI 数字伴侣完整界面
MacBook M4 Max 上实际运行的 AI 数字伴侣

当然,现在离真正的「数字伴侣」还差得很远。但把这套东西做下来以后,我发现里面有些东西,比我一开始想的有意思得多。

而且说起来,我最开始根本没想做什么「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 同样在本地完成。

本地语音交互完整链路:Mic → VAD → ASR → LLM + Memory → TTS → Speaker
本地语音交互完整链路:所有模型和数据均在本地运行

真正跑起来以后,效果比我预期的好,尤其是延迟。它第一次让我觉得,纯本地实时语音交互,好像已经不是一个「理论上能做」的东西了,开始有一点「能用」的感觉。

本地模型实际运行截图:Terminal、模型加载日志与 MLX 推理输出
开发阶段的真实运行状态:Terminal、模型加载与推理输出

这里其实还有一个选择。我当时也考虑过,要不要直接做 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,不同发音对应不同口型;又给它加了一些状态。我说话的时候,它在听;模型生成的时候,它在思考;它回答的时候,嘴型跟着语音动。什么都不做的时候,也不能像死机一样杵在那里,所以还得有一些待机的小动作和表情。

数字人角色的四个状态:Listening / Thinking / Speaking / Idle
四个角色状态:Listening / Thinking / Speaking / Idle

这些东西单独拿出来都不是什么很高级的技术。但挺有意思的是,当这些细节拼到一起以后,它突然开始有一点「活着」的感觉。

后来我又加了实时打断。它说话的时候,我可以直接插话。

这件事情看起来很小,但对体验影响特别大。现实中的对话,本来就不是「你说完 30 秒,我再说 30 秒」,人会打断,会停顿,会接话。如果 AI 一开口你就只能等它念完,那还是在「使用一个软件」,很难真的产生聊天的感觉。

实时语音对话 + 中途打断 Demo(15~30 秒)

但真正让我觉得它像一个「伴侣」的,不是数字人

是记忆。

这个问题我之前其实没有特别认真想过,直到我看到一些 AI 角色产品的用户反馈。

大家刚开始可能觉得角色很漂亮,声音也不错,聊几次以后却发现,它不记得你。

昨天说过的事情,今天又要重新说;你的习惯不知道;你们之间发生过什么,它也不知道。那这个所谓的「陪伴」,其实每次打开都差不多是第一次见面。

这就有点奇怪了。

所以我后来花了不少时间做记忆。最开始想自己写,然后很快发现,这个坑比想象中深。

记忆不是把聊天记录存进数据库就结束了。什么应该记,什么不应该记?什么时候拿出来?记错了怎么办?同一件事情后来发生变化了怎么办?哪些是用户事实,哪些是发生过的事件,哪些又是两个人之间形成的关系?

最后我没有继续完全自己造这个轮子,而是用了 Mem0,再在上面做自己的处理。

现在大概会有几类东西:短期上下文、长期记忆、用户 Profile、事实型记忆、事件型记忆、关系型记忆。

记忆系统架构:短期上下文 / 用户 Profile / 事实 / 事件 / 关系 → Memory Manager → 召回 → 注入 LLM 上下文
记忆系统:短期上下文、用户 Profile、事实、事件、关系 → 召回 → 注入上下文
记忆系统调试页面与数据库记录
记忆系统的实际运行记录

它当然还很初级。但加入记忆以后,我对「AI 伴侣」这件事情的理解发生了一点变化:陪伴类 AI 最重要的可能不是它有多聪明,而是它能不能和你形成连续的关系。

模型、声音、角色以后其实都可以换,但如果有一天它把你忘了,前面建立起来的很多东西,好像一下就没了。

4B 到底够不够?

目前我用的是一个本地 4B 模型。为了搞清楚「更聪明」和「更快」到底怎么换,我在自己的 MacBook(M4 Max / 128GB / MLX)上,把 4B、8B、14B 三个尺寸放在完全相同的条件下实测了一遍:同一句提示词、同样生成 256 个 token、每个模型跑 3 轮取中位数。

4B / 8B / 14B 本地模型实测对比:首 Token 延迟、生成速度、内存占用、总耗时(MacBook M4 Max / 128GB / MLX)
4B / 8B / 14B 本地模型实测(统一提示词,每模型 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 设备上。平台相关的能力必须是可插拔的——核心不动,插件跟着平台换。

Local AI Core + Plugin Architecture:Core(ASR / LLM / Memory / TTS)+ Plugins(Time / Weather / Calendar / Reminder / System)
插件化架构:本地核心不变,天气、日历、日程、系统状态等能力可插拔

还有一个我最近碰到的问题也挺有意思。我和它聊天的时候,旁边电视里有人说话,它也会以为有人在跟它说话,甚至电视里的声音都有可能把它打断。

所以接下来我还准备加声纹识别,让它至少能够分辨,这是我在说话,还是旁边电视里的人在说话。

做到这里以后,我也慢慢发现,真正要做好一个数字伴侣,问题已经不再只是「本地跑一个大模型」。语音、记忆、角色、状态、打断、声纹、工具调用……这些东西组合起来,最后才是用户实际感受到的体验。

做着做着,我开始想:这个东西能不能卖?

这是我现在还没有想清楚的问题。

一个比较直接的方向,是把它做成一个 Mac 上的付费软件。下载安装到自己的电脑上,所有模型、声音、角色和记忆都在本地。

可以有一个免费的基础版本,比如基础角色、基础模型、基础语音。付费以后可以选择更好的模型、更多角色、更好的声音,或者声音克隆、声音定制,以及更完整的记忆能力。

甚至我觉得它不一定非要订阅。

因为「完全本地」这件事情,本身和买断制其实挺搭的。用户买的是一个真正属于自己的 AI,而不是每个月向某个平台租一个伴侣。

当然,这只是一个方向。

这两天我又想到另外一个可能。

同一套东西,如果放到边缘设备上呢?

个人数字伴侣跑在一台 Mac 上,一次服务一个人。

但如果把同样的底层能力放到一台算力更强的 Edge AI Server 上,让它同时服务很多人呢?那它一下就变成了另外一个东西:AI 语音客服。

这个时候,数字人的形象甚至可以直接去掉。保留 ASR、LLM、TTS、打断、记忆这些底层能力,再加上企业知识库和客户资料。

电话打进来以后,通过电话号码知道这个客户是谁;微信进来以后,通过微信账号知道这个客户以前咨询过什么。AI 不只是回答知识库里的问题,它还知道这个客户是谁、以前发生过什么、现在正在解决什么问题。

这样,同一套技术底座就出现了两个完全不同的方向。

往个人电脑上走,是 AI 数字伴侣;往边缘服务器上走,是企业本地 AI 语音客服。

同一套 Local AI Core,两个产品方向:个人端 AI 数字伴侣 / 企业端 AI 语音客服
同一套 Local AI Core,两个产品方向:个人端 AI 数字伴侣 · 企业端 AI 语音客服

我现在还没有决定哪一条路更好,也没觉得一定要二选一。这是我目前看到的两个可能性,后面也许还会冒出第三个、第四个。

把这个 Demo 真正做出来以后,我反而越来越觉得,我现在想验证的已经不只是一个「AI 女友」,也不只是一个语音助手。

我更想知道的是:今天的本地模型,到底能不能支撑起一套真正可用的、本地运行的语音智能系统?

它可以听,可以说,有一个本地大脑,有记忆,能调用工具,知道谁在跟它说话,也可以有自己的形象。

如果这些能力都可以在一台个人电脑,或者一台边缘 AI 设备上完成,那很多以前必须依赖云端的 AI 产品,也许真的值得重新做一遍。

这个事情,我现在也才刚刚开始。

下一步我准备把默认模型换成 8B,再把天气、日历、日程这些插件继续做起来,声纹和记忆也要接着完善。

等踩完下一轮坑,再回来写。

参考与资源

模型与框架(本文实际用到的 MLX 版本)

同方向的开源项目

订阅 · SUBSCRIBE

扫码关注公众号

文章每周四更新,网站和公众号「AITi智能」同步发布。 想在微信里第一时间看到,扫码关注。

  1. 01 微信搜索「AITi智能」
  2. 02 关注并加星标
  3. 03 每周四 08:00,准时见
公众号「AITi智能」二维码

扫码关注 · 每周一篇