我在飞行模式下跑通了 AI:一次 Flutter 端侧模型的真实踩坑记录
过去两年,我一直以为“移动端 AI = 调 API”。
直到我的 Flutter 应用在相机启动时一次次被系统杀掉,我才意识到:
我对端侧 AI 的理解,一直都是错的。
一、那个让我尴尬的崩溃
那天我终于把准备了几个星期的 Demo 跑起来了:
Flutter 应用 ✅
模型成功加载 ✅
聊天界面干净漂亮 ✅
我打开相机 —— 这是我整个 Demo 最期待的功能 —— 对准桌上的东西,然后……
应用直接闪退。
不是 Dart 异常,也不是红色错误页,而是整个进程被系统干掉了。
我盯着我的 Redmi Note 7 Pro 愣了几秒,重启、重试、再重启 —— 结果一模一样。
只要模型已加载 + 打开相机,Android 一定会杀掉我的 App。
二、我过去对 AI 架构的认知
过去两年,每当我要在 App 里加 AI 能力,答案几乎是条件反射式的:
聊天机器人 → API
图像识别 → API
文本总结 → API
几行 Dart 代码,请求发出去,智能结果就回来了。
它太好用了,以至于我从未质疑过这套架构。
但我慢慢意识到,它有三个永远成立的前提:
1️⃣ 必须有网络
地铁隧道、飞机上、信号差的地方,你的 AI 功能直接失效。
用户不会给你报 Bug,他们只会默默卸载。
2️⃣ 每一次调用都要花钱
1 万用户
每人每天 50 次请求
按 token 计费
小规模时你感觉不到,规模上来后,这不是成本问题,而是产品决策问题。
3️⃣ 用户数据一定会离开设备
健康记录、财务描述、私密日记 ——
“数据会上传到我们的服务器(希望是加密的)”
对很多产品来说,这不是脚注,而是致命问题。
三、端侧 AI 为什么以前不可行?
以前不是没人想过在手机上跑模型,而是三个条件没对齐:
条件 | 过去 | 现在 |
|---|---|---|
模型大小 | 几十 GB | 1–2 GB(量化后) |
硬件能力 | 无专用芯片 | NPU / Neural Engine |
工具链 | 极度原始 | 成熟 SDK + Flutter 插件 |
四、Gemma:端侧 AI 的真正转折点
Google 现在有两个同源的模型家族:
Gemini:云端、强、闭源、按次收费
Gemma:端侧、开源、免费、你说了算
可以把它们理解为:
Gemini = 五星级餐厅,吃一次付一次
Gemma = 你口袋里的菜谱,买一次,无限做
五、2026 年的现实:三者同时到位
✅ 模型层面:Gemma 4(Apache 2.0)
约 1.3 GB(4-bit 量化)
原生支持 文本 / 图像 / 音频
可在 6 GB RAM 手机上稳定运行
Hugging Face 下载量 超过 1.5 亿次
我实际使用的是 Gemma 3n E2B(当时 flutter_gemma 尚未支持 G4)。
✅ 硬件层面
Apple Neural Engine
Qualcomm Hexagon
Google Tensor
过去两年发布的旗舰和中高端机,几乎全部标配 NPU。
✅ 工具链层面:flutter_gemma
flutter_gemma把 Google 的 LiteRT-LM 推理引擎封装成了干净的 Dart API:
✅ GPU 加速
✅ 流式响应(token streaming)
✅ 多模态(Vision / Audio)
✅ Function Calling
✅ Android / iOS / Web / Desktop 一套代码
你只需要写 Dart。
六、那个崩溃的真正原因
Gemma 3n E2B ≈ 3 GB RAM
Android Camera Pipeline ≈ 1.5 GB RAM
再加上系统开销
在一台 6 GB RAM 的手机上,这根本装不下。
Android 的内存管理器做出了唯一正确的决定:
杀掉你的 App。
我换成相册选择图片后,Demo 正常工作了。
这次崩溃教会我一件事:
☁️ 云端 API 把资源成本藏起来了
📱 端侧 AI 把资源成本摆在你面前
你不能再假装不知道自己在消耗什么。
七、我从中学到的经验
经过测试,我给自己定了一些粗略规则:
设备内存 | 可行性 |
|---|---|
6 GB | 勉强,需精心规划,避免实时相机 |
8 GB | 常规流程稳定 |
12 GB | 实时相机完全可行 |
八、我最终做出来的东西
这个 App 的能力包括:
✅ 文本聊天(流式输出)
✅ 图库图片理解
✅ 全程离线运行
有三个瞬间让我印象最深:
第一次在飞行模式下得到回复
模型完全不在乎有没有网,推理就在手机上发生。
相机崩溃
它不是一个 Bug,而是一条信息:
我以前写的很多 AI 功能,从未认真思考过内存。
别人主动开飞行模式测试
这说明了一件事:
用户对“真的离线 AI”还有多少不信任。
九、端侧 AI 的真实取舍(不忽悠版)
在太多演讲里,“端侧 AI 是未来”听起来像童话。
以下是我在实战中愿意对朋友说的实话。
⚠️ 下载成本是真实存在的
即使是 1.3 GB 的模型,也是一次性不小的下载。
你必须:
做好下载 UI
检测 Wi-Fi
明确告诉用户:这是一次性的
诚实的用户,比你想象中更讲道理。
⚠️ 中端机内存压力是真实的
我的相机崩溃不是异常,而是 Android 的正确行为。
请在你要支持的最便宜的设备上测试。
⚠️ 质量很好,但不是最强
✅ 总结、分类、翻译、结构化问答、图像理解:
Gemma 4 E2B 非常优秀
❌ 复杂多步推理(GPT-4o / Gemini Ultra 级别):
仍然需要云端
现实架构 = 混合:
日常智能 → 端侧
重型推理 → 云端
⚠️ 模型更新需要提前规划
当更好的模型发布时,用户需要重新下载。
从第一天起就要考虑:
远程配置模型地址
后台下载
平滑切换
不要事后补救。
十、什么时候端侧 AI 才是正确选择?
不是所有场景都适合,但以下情况特别值得:
🔐 隐私不是加分项,而是底线
医疗、法律、金融类产品:
数据不出设备 是云 AI 永远给不了的承诺。
✈️ 离线比你想的重要得多
在印度、东南亚、非洲等市场,
网络是“时有时无”,而不是“永远在线”。
一个能在地铁里工作的 AI 功能,本身就是产品差异。
💸 按次计费会摧毁你的单位经济
一个笔记 App,如果每一条记录都要付费推理,
那它的商业模式从诞生起就岌岌可危。
⏱ 可预测的延迟很重要
云端 AI 有:
限流
冷启动
偶发故障
端侧 AI 没有这些。
模型加载一次,一直可用。
十一、结语
这次踩坑之后,我对 Flutter + AI 的看法彻底变了:
**端侧 AI 不会让云端消失,
但它会逼你成为一个更清醒的架构师。**
如果你也在做 Flutter + AI,
建议你至少试一次:
在没有网络的情况下,让模型真正跑起来。
那种感觉,和你调一百次 API,完全不同。
夜雨聆风