每次回农村老家,总能在村卫生室门口看到几位老人,等着唯一的村医。村医不在时,他们要么忍着,要么得让子女请假带去县城——来回折腾一整天。
去年过年,隔壁的王叔(一位普通的老人)晚上突然胸闷,觉得“忍一忍就好”,结果第二天早上家人发现时,已经晚了。你可能不知道,中国有5000万空巢老人,分布在50多万个行政村。他们不擅长用智能手机挂号,看不清药品说明书的小字,身体不适的第一反应常常是“再等等”,而不是去医院。
我一直在想,AI能不能帮上忙?直到Google发布了Gemma 4。

我感觉这次可以了。我想做的不是那种需要联网、注册、打字的AI。我想要的体验是:拿起手机,说一句“我头疼”,就能得到回应的AI,而且完全不需要联网。要知道,很多老人可能连怎么开流量都不知道,不少农村地区的网络信号也极不稳定。
先来看看最终的效果:




什么才是好的用户体验?我认为就是在特定场景下,精准满足特定人群的需求。对于农村老人,简洁、直接、无需思考的交互,远比花哨的界面更重要。
技术选型:为什么是 Gemma 4 与端侧推理?
这个项目的核心约束非常明确:农村网络不靠谱。许多地方的4G信号时有时无,流畅调用云端大模型不现实。因此,AI必须能完全离线运行在手机本地。
Google近期发布的Gemma 4,其E2B(Efficient 2 Billion)版本提供了可能:
- 2.3B有效参数,经INT4量化后模型体积仅2.4GB。
- 在手机端推理速度足够快。
- 支持中文对话。
- 通过MediaPipe框架可以在绝大多数Android手机上运行。
这意味着,一部两三年前、拥有4GB运存的中端手机就足以运行。而农村老人手中子女淘汰下来的旧手机,恰恰是这类配置。
项目实现:村医AI的核心四功能
我将它做成了一个完整的Android应用,命名为“村医AI”。整个项目包含31个Kotlin文件,使用纯Jetpack Compose构建UI。核心功能围绕四个场景设计:
1. 语音问诊:说句话就行
老人无需打字。按住首页的大按钮,直接说“我这两天头晕,早上起来眼前发黑”,然后松手。注意,这里是将原始音频流直接发送给模型进行处理,因为Gemma 4支持音频输入,它不只是一个纯文本模型。
AI会分析症状,给出结构化判断:可能是什么情况、严重程度(1-5级)、以及处理建议。最关键的是,结果会自动语音播报——老人不看屏幕也能听清。
你的情况需要注意(危险等级:3/5)
根据描述,头晕伴晨起视物模糊,需要关注血压情况。
建议:
1. 尽快测量血压
2. 近期避免突然起身
3. 如症状加重请及时就医
2. 拍照识药:对准药盒拍一下
很多老人同时服用多种药物,容易混淆。用这个功能对准药盒拍照,AI会识别药品名称,并告知用法、用量及注意事项。
更关键的是内置了药物冲突检测。应用内置了一个本地药品数据库,能自动交叉检查老人正在服用的药物与新识别出的药物之间是否存在冲突风险。
3. 慢病管理:血压血糖随手记
老人(或远程指导的子女)可以每天记录血压、血糖、心率等数据。App内置了一个纯规则引擎,不依赖AI模型进行阈值判断:
血压 > 180/110 → 红色警报,建议立即就医
血糖 > 16.7 → 红色警报
连续3次血压上升 → 趋势预警
每周,App会基于这些数据自动生成一份简单的健康趋势周报。
4. 一键求救:30秒触达家人
一个鲜红色的SOS按钮永远固定在首页底部。按下后:
- AI自动汇总最近的症状记录,生成一条简短的求救短信。
- 通过运营商短信(不依赖微信等网络应用)发送给所有预设的紧急联系人。
- 最关键:不需要网络,只要手机有信号就能发出。
短信模板如下:
【村医AI紧急提醒】刘大爷于04月04日 15:30 感到胸闷气短、头晕
位置:杨柳村 请立即联系或前往
为老人设计的每一个细节
这不是一个面向开发者的Demo。为了让老人真正能用,UI进行了大量适老化设计:
- 最小字号18sp,标题28sp,确保老花眼能看清。
- 按钮最小高度120dp,方便手指粗大的用户点击。
- 高对比度配色:深绿底白字、红色警告,降低对色彩辨识度的依赖。
- 全程语音播报:每一条AI回复都会自动朗读。
- 无注册、无登录、无广告:打开即用。
技术架构:双引擎适配与安全兜底
实现端侧AI的一大挑战是设备碎片化。为此,我设计了一套双引擎架构,以兼顾性能与兼容性。
┌──────────────────────────────────────┐
│ GemmaManager │
│ (统一推理接口,自动切换) │
├──────────────┬───────────────────────┤
│ ML Kit AICore │ MediaPipe LLM │
│ (Pixel/Samsung/ │ Inference │
│ OPPO Find X8) │ (所有其他手机) │
│ 自动下载模型 │ 手动加载模型文件 │
│ 最佳性能 │ 通用兼容 │
└──────────────┴───────────────────────┘
引擎一:ML Kit GenAI Prompt API
如果用户手机支持Google AICore(如Pixel 9+、三星S25等新型号),应用会自动采用此路径。模型由系统自动下载和管理,能获得最佳推理性能,用户无需任何配置。
引擎二:MediaPipe LLM Inference
对于其他大多数手机,应用提供了一个“选择模型文件”的入口。用户需要先从HuggingFace等平台下载Gemma 4 E2B的量化模型文件(约2.4GB),然后通过系统文件选择器导入,应用会将其复制到内部存储并加载。
这里遇到了一个实际开发中的坑:Android 11+的Scoped Storage限制应用直接访问/sdcard/Download/目录。即使模型文件就在那里,File.listFiles()也会返回null。解决方案是使用Storage Access Framework (SAF),引导用户主动选择文件,再由应用复制到私有目录。
安全兜底:规则引擎不依赖AI
一个重要的设计原则是:危险判断不能只依赖大模型。AI可能存在“幻觉”或给出不准确的建议。因此,我们额外实现了一个纯规则引擎RulesEngine,使用硬编码的医学阈值进行最终的危险级别判定:
// 这些数字是写死的,不经过模型
血压收缩压 > 180 || 舒张压 > 120 → RED(立即就医)
血糖 > 16.7 || < 2.8 → RED(立即就医)
心率 > 150 || < 40 → RED
规则引擎的结果会覆盖AI的判断。即使模型说“问题不大”,只要血压超过200,应用也会强制弹出红色警报。同时,每一条AI建议下方都有一行固定提示:“AI建议仅供参考,不能替代医生诊断”。
项目产出概览
- 31个 Kotlin源文件。
- APK体积70MB(不含模型)。
- 模型体积2.4GB(INT4量化版)。
- 推理时内存占用约3-4GB,中端手机可运行。
- 完全离线运行,SOS短信通过运营商通道发送。
- 内置了15种农村常见药品信息及10条核心药物相互作用规则。
这意味着,一部拥有4GB运存的手机即可运行此应用,而这正是许多子女淘汰给父母使用的手机的典型配置。
不足与展望
坦率地说,这个产品远非完美:
- Gemma 4 E2B的中文医疗知识库有限,复杂病症判断可能不准(但基础健康咨询没问题)。
- 语音识别未做方言适配,普通话不标准的老人识别率可能受影响。
- 内置的15种药品数据库远远不够。
- 缺乏医学专业团队的审核,其普适性和准确性有待进一步验证。
但我觉得,它比“什么都没有”要好得多。 想象一下,一位空巢老人在半夜感到胸闷时,能对着手机说句话,立刻得到“情况较危急,已通知家人”的回应——哪怕只服务于这一个场景,也值得去实现。
模型获取与尝试
如果你想在自己的手机上体验:
- 前往HuggingFace,搜索模型
unsloth/gemma-4-E2B-it-GGUF。
- 下载
gemma-4-E2B-it-Q4_K_M.gguf 文件(约2.9GB)。
- 将文件传输到手机,在App内点击“选择模型文件”并找到它。
- 等待模型加载完成,即可开始使用。
最后的话
我不是医生,也不是公益专家。只是一个写代码的人,恰好老家在农村,又恰好看到了Gemma 4能跑在手机上的可能性。
技术本身没有温度,但我们可以选择让技术流向最需要它的地方。这个项目的实践过程,也让我对端侧AI的应用场景有了更深的理解。欢迎在云栈社区交流更多关于移动端AI实现的思路与挑战。