⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Fight/android-ollama-local-llm/ 「芋道源码」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

我每天要处理一堆碎活,汇总 RSS、给相册里的照片打标签、接几条智能家居过来的指令。这些活单次几秒就完,但需要一个东西一直挂在那里。为这个专门开一台电脑不划算。

后来在 GitHub 上翻到 OlliteRT,作者是按「安卓上的 Ollama」这个思路做的。装到手机上,手机就能跑模型,同时在同一网络里开一个 OpenAI 兼容接口,别的设备上的软件填个地址就能调。

它到底是什么,为什么值得翻出抽屉里的旧手机

仓库页实拍,Star 与 Fork 计数可见

底层用的是谷歌的 LiteRT-LM 运行时,推理跑在手机自己的 GPU 或者 CPU 上,对外是一个 HTTP 服务,Apache-2.0 协议开源。项目本身是基于谷歌另一个开源项目 AI Edge Gallery 改出来的,不是从零手搓。

模型下载好之后,断网也能用。手机上处理的东西不会传到别的地方去,官方在隐私这块写得很清楚,不收集数据,也没有统计代码。

能跑哪些模型,多大的手机跑得动

模型来源有三条路。最省事的是应用里内置的清单,看中哪个点一下就下载,文件托管在 HuggingFace 的 LiteRT 社区;也可以把手机里已有的 .litertlm 文件导进来;还能自己加模型源,填一个 JSON 文件或者一个 URL,加了以后大概每 24 小时刷新一次。

官方模型清单界面,点一下就能下载

内置清单里目前有七个模型,把官方那张表抄下来是这样。

模型 大小 最低内存 上下文 能力
Gemma 4 E2B 2.4 GB 8 GB 32K 文本、图片、音频、思考、工具、MTP
Gemma 4 E4B 3.4 GB 12 GB 32K 同上
Gemma 3n E2B 3.4 GB 8 GB 4K 文本、图片、音频
Gemma 3n E4B 4.6 GB 12 GB 4K 文本、图片、音频
Gemma 3 1B 0.5 GB 6 GB 1K 纯文本
Qwen 2.5 1.5B 1.5 GB 6 GB 4K 纯文本
DeepSeek-R1 1.5B 1.7 GB 6 GB 4K 纯文本

这张表里有个地方要划重点。标题说 6GB 的手机能跑,那说的是最低门槛,能跑的只有最下面那三个小模型。官方推荐的 Gemma 4 E2B 最低要 8GB 内存,E4B 要 12GB,这两个是多模态的,能看图、能听音频,回答之前还会先给一段推理过程。所以手机内存只有 6GB 的话,别一上来就点 E2B。

Gemma 4 还带一个叫 MTP 的功能,一次预测好几个词,出字速度会快不少,需要在模型的设置里手动打开。

现成的客户端基本不用改

这是它做得比较突出的地方。OpenAI 那边的 chat/completions、completions、responses 都有,音频转写接口也在,连 Anthropic 的 messages 接口都兼容了,流式和非流式都能用。模型列表和健康检查这类端点也在。

所以手头现成的工具基本不用动。Python 里用 OpenAI 官方 SDK,把 base_url 指到手机就行;curl 直接调也没问题;Open WebUI 填个地址就能连上。有人把 NAS 上几个定时任务的接口地址改了一下,任务就跑起来了。

两个地方要提前知道。工具调用目前还是实验性质,在 Gemma 4 上效果最好,小模型不一定能稳定按格式返回;默认走 schema 注入,不行可以在设置里关掉,退回到用提示词解析的老办法。另外 Home Assistant 目前还需要装额外的自定义集成,语音指令还要再配一个转写组件,不是填个地址就完事。

状态、日志和指标,该看的都摆出来了

官方状态页,实时数据与接口地址都在这一屏

服务器跑起来之后,状态页上有实时数据,跑了多久、处理了几个请求、输入输出多少 token、出字速度与峰值、最近一次和平均的首字延迟、成功率。另外还有一个可以拖着走的悬浮窗,手机扔在一边当服务器用的时候,瞟一眼就知道它还在不在跑。

官方日志页,每条都带耗时与流式标记

日志页每次请求和响应都记。想找某一条可以按方法或者状态码过滤,也能搜关键词,JSON 带语法高亮。每条日志下面有一排小标记,能看出这次花了多少毫秒、是不是流式、有没有开思考、估算的输入 token 占了上下文多少,快占满的时候那个数字会变黄变红。

除了应用里能看到的,它还有一个 /metrics 端点,能吐出 29 个 Prometheus 格式的指标,家里跑着 Grafana 可以直接接进去画图。Home Assistant 那边除了接模型,还能通过它内置的 REST 接口远程看状态、切模型、改设置。

它还有一个内置的 Benchmark,同一台手机上把几个模型挨个测一遍,谁处理长输入快、谁出字快、谁加载快,一比就知道。

要让它常驻,有几个开关得打开

官方推理参数设置,参数按模型单独存

每个模型可以单独存一套推理参数,温度、top-k、top-p、最大输出长度都按模型保存,重启之后还在。加速器能在 GPU 和 CPU 之间切,默认是 GPU,出问题再换 CPU 试。改最大输出长度或者加速器会触发模型重载。

要让它像个小服务器一样常驻,有三个开关值得打开。一个是闲置自动卸载,设一个时间,比如 5 分钟没收到请求就把模型从内存里卸掉,内存还给系统,下一个请求进来会自动重新加载,代价是这一次会慢几秒。手机平时还要干别的,这个开关就很有用。

另一个是开机自启,选一个默认模型打开开关,手机重启之后服务自己就起来。这里有个前提,记得把它的电池优化关掉,不然安卓后台可能直接把它杀掉。

第三个是常驻通知,它靠一个前台通知保住后台服务,通知上直接有停止服务和复制地址两个按钮。这三个配完,这台手机基本就是个不用管的设备。

装起来三步,但别把它放到公网上

整个过程没什么门槛。从 GitHub 的 Releases 页下载 APK 装上,打开以后在模型列表里挑一个下载,下好了点模型卡片上的 Start Server,状态页上就能看到地址,一般是 http://手机IP:8000/v1 这个样子,把这个地址填进客户端,完事。

有一点要提醒,目前发出来的包都是 beta 版本,最新那个是 v0.9.7-beta.1,安装包三十几 MB,介意的话可以再等等。

硬件要求有这么几条。安卓 12 以上,必须是 arm64 架构,内存最低 6 GB,想跑多模态模型最好 8 GB 往上。2017 年以后的安卓机基本都是 arm64,但模拟器和 x86 设备不行。

接口可以开 bearer token 验证,开了以后没带 token 的请求直接返回 401。还能设客户端 IP 的访问规则,只放行家里那几个设备,监听范围也能调。

官方文档里有句话得单独拿出来说,不要通过端口映射把它暴露到公网。它没有 HTTPS,token 验证也只是基础手段。它合适的使用场景就是局域网,别往公网放。

先接受这几条硬限制,再决定挂不挂机

一次只能加载一个模型,请求也是一个接一个排队处理,想拿它当多人共用的服务不现实。只支持 .litertlm 格式,不认 GGUF,网上那些给 llama.cpp 和 Ollama 准备的模型文件在这儿用不了,别下错了。

接口返回的 token 计数是按字符数除以四估算的,英文还行,代码和多语言内容会偏,拿这个数去算费用是不行的。从本地导入模型的时候文件会被复制一份到应用目录,相当于占了双倍空间,导入完记得把原文件删了。因为跑在移动端运行时上,logprobs、语法约束输出、重复惩罚、LoRA 这类进阶玩法都没有。

只跑推理的话,它还是够用的。把这三条放在一起看,所谓安卓上的 Ollama 能不能成立,取决于运行时、模型格式和手机硬件这三样能不能同时凑齐。要是打算让它 7×24 小时跑着,官方的建议是插着电用,把手机壳摘了帮助散热,放在阴凉硬实的平面上,隔段时间看看有没有发烫、电池有没有鼓包。功耗方面,模型生成的时候大概 5 到 10 瓦,闲着的时候接近零,跟显卡服务器动辄三百瓦往上比,省电是真省电。

它适合当什么用

指望它替代一台正经的推理机器是不行的,一次只能跑一个模型、请求排队处理,这个限制绕不开。

但放在特定场景下刚好。活儿碎、量小、不想专门开电脑、也不想数据往外走,监控、日志、权限、自启又都有,当一个常驻服务用没什么问题。家里有闲置安卓机的话,可以装一个试试。

开源地址是 https://github.com/NightMean/OlliteRT 。

文章目录
  1. 1. 它到底是什么,为什么值得翻出抽屉里的旧手机
  2. 2. 能跑哪些模型,多大的手机跑得动
  3. 3. 现成的客户端基本不用改
  4. 4. 状态、日志和指标,该看的都摆出来了
  5. 5. 要让它常驻,有几个开关得打开
  6. 6. 装起来三步,但别把它放到公网上
  7. 7. 先接受这几条硬限制,再决定挂不挂机
  8. 8. 它适合当什么用