在写完我开始懂Hermes Agent的好了之后,我感觉 Hermes 可以成为一个很好的本地助手,让我更好地了解手上的设备、发挥它们的最大潜力,于是想着,在手机上部署个 Hermes,会怎样呢?
我果断在手机上打开 termux,输入了部署命令。termux 是一款轻量级 linux 模拟器,能够跑绝大多数 debian 系 linux 能跑的命令,我甚至在里面还装过一个 linux 系统,当然没什么卵用就是了。
部署完成后,我把它当手机清理工具,让它删了点手机垃圾,还让它在 termux 里直接安装了我在穷鬼博主的内网穿透选择里提到的 tailscale,这样连接和调试都更方便。但由于 termux 的权限限制,没有 root 的话,我没办法让它和其他 app 进行交互。
这样就结束了吗?
那肯定没有。手机上有 GPU,又有大内存,不跑点本地模型什么的好像有点浪费。有了本地模型,就可以做文字总结、转录语音、做点图像识别。创造了一些好像也不算鸡肋的需求。
于是我又在 termux 里装上了 llama.cpp,然后从 modelscope 和 hf-mirror 上下载 3B 到 4B 的模型,不过跑起来之后,发现速度不尽如人意,查了下,发现是 termux 里的 llama.cpp 似乎无法调用我这个 Pixel 手机的 GPU 加速。纯用 CPU 跑的话太慢了,果断放弃。
然后我又试了一个叫作 pocketpal 的 app,可以直接在里面下载并加载模型,等于是在 llama.cpp 的基础上多了个前端,但还是不能 GPU 加速,于是也还是作罢。
经过我的不懈努力,终于发现谷歌有一个 google ai edge gallery 的 app 能够满足我的要求。里面可以原生跑 gemma 4 的模型,我试了下 E4B 模型,能够调用 GPU 后速度果然飞快,体验非常不错。更好的是,里面不光能用谷歌自己的 gemma 系列模型,还可以从本地导入其他的。
不过美中不足的是,模型格式只支持 .tlm 格式,更常用的 .gguf 格式并不支持。本来 uncensored 或 abliterated 模型数量就有限,这种格式的就更少了。我上 huggingface 搜了下,满足条件的一共就只有三个。
雪上加霜的是,谷歌对在 app 里跑的模型设置了非常严苛的上下文限制:聊天模式只有 1024,智能体模式也就 4096。这么点上下文玩个 der 啊。不过我当时并不知道这么设置的用意,只觉得这个 app 纯粹就是用来测试模型的。
然而这个也难不倒我。爱马仕给了我一个惊艳的方案:edge gallery 是一个开源的 android app,完全可以修改源码,去掉或抬高上下文的限制。本地没有也不想装 android studio 也没关系,靠着 gitHub actions 直接在云端完成编译,然后把生成的 apk 下到本地就 OK 了。
我试了下,改完的 app 确实没了上下文的限制,context 直接拉到 1024 的 16 倍。不过也就是这时候我才发现了谷歌的良苦用心:上下文大到一定程度,手机内存就爆了,然后所有应用都闪退了,动态壁纸都爆没了。:)
总的来说,这个方案简直为我打开了一个新世界,原来做或改一个安卓 app 这么简单,结合这次的折腾经历,感觉将来也可以做很多事情,不光是手机上,也可以是树莓派这样的开发板,或者其他硬件设备。