← 返回文章列表

手机上跑大模型?我的 Hermes 本地部署踩坑记

在手机上跑 AI Agent + 本地大模型,听起来很酷? 我试了,然后我醒了。


起因

事情是这样的。

我手机上一直跑着 Termux——Android 上的 Linux 终端模拟器。在这上面我部署过各种东西:llama.cpp 跑过本地模型、sing-box 搭过代理、甚至折腾过 Navidrome 流媒体服务器。

之前看到 Hermes Agent 觉得挺有意思,官方安装脚本甚至还写了 Termux 专有路径,于是决定试试。

结果官方的一键安装脚本 curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash 因为网络原因老是卡在半路,装了多次都没装全。

越装不上我就越来劲。

Flag 就此立下。

Hermes 是什么?

Hermes Agent 是 Nous Research 出品的开源 AI Agent,支持 Telegram、Discord、WhatsApp 等多平台接入,能写代码、搜网页、看图说话,还能派生子 agent 并行干活。

功能很强,官方安装脚本甚至还写了 Termux 专有路径——这让我信心大增。

开局:之前一键安装的残留

今天再次通过 ADB 连上手机一看,好家伙,~/.hermes/ 目录都在,llama-server 进程还跑着——原来之前装了好几次,早就留下痕迹了。

只不过环境有点乱:

  • 两个 hermes-agent 代码目录,一个在 ~/.hermes/hermes-agent/(安装脚本放的),一个在 ~/hermes-agent/(手动克隆的)
  • venv 虚拟环境里的 Python 包基本没装全
  • hermes 命令的启动脚本路径写死了系统路径,Android 上根本跑不起来

好,修复工作开始。


第一关:修好 hermes 命令

手动验证发现:

$ hermes --version
/system/bin/sh: /usr/bin/env: bad interpreter: No such file or directory

Android 上哪来的 /usr/bin/env

打开启动脚本一看:

#!/usr/bin/env bash
exec /path/to/venv/bin/hermes "$@"

Termux 的 bash 在 /data/data/com.termux/files/usr/bin/bash。顺手把 HOME 环境变量也写死进去,免得还要猜用户目录。

改完再试:

$ hermes --version
Hermes Agent v0.18.1 (2026.7.7) · upstream c30c9753
Project: /data/data/com.termux/files/home/.hermes/hermes-agent
Python: 3.13.13

亮了。


第二关:Python 依赖地狱

版本号能看了,但执行任何命令都报 ModuleNotFoundError——缺 pyyaml、缺 dotenv、缺这缺那。

最理想的方案是 pip install -e .[termux-all] -c constraints-termux.txt,一行命令全搞定。

然而现实是——手机编译 Rust 扩展慢到令人发指。

pydantic-corejiter 这两个 Rust 写的 Python 包,用 pip 装一次就要 10-15 分钟。ADB 命令超时断连,后台进程也各种幺蛾子。

试了几个路子:

路数一:从系统 Python 复制包 系统里装了 pyyaml,但 venv 没有。直接 cp -r 过去——嗯,能用了。但 openai、pydantic 这些包系统里也没有,复制大法不灵。

路数二:下载 ARM64 预编译 wheel PyPI 上有 manylinux2014_aarch64 的 wheel,下载下来推到手机上。pip 一装就报错:

pydantic_core-2.47.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
is not a supported wheel on this platform.

Termux 用的是 Android 的 bionic libc,Linux 的 glibc wheel 不兼容。强行解压改名后尝试导入:

ImportError: dlopen failed: library "libgcc_s.so.1" not found

死心。

路数三:在手机上硬编译 手机有 Rust、有 clang,但 pip install 一次 10 分钟起。折腾了不知道多少轮,终于把包都装上了。


第三关:64K 上下文的诅咒

依赖装完,模型配好,llama-server 重启上线。信心满满地输入:

$ hermes chat -q "1+1=?" -Q

等待回复……

等……

然后:

Model has a context window of 2,048 tokens,
which is below the minimum 64,000 required by Hermes Agent.

一盆冷水。

llama-server 之前用 -c 2048 启动的,而 Hermes 硬性要求 至少 64K 上下文

理论上 Qwen3.5-2B 的原生上下文支持 262K,完全够。问题在于物理内存:

上下文KV cache 估算能否运行
2K~200MB✅ 飞快
8K~1.9GB✅ 可以
32K~7.5GB⚠️ 勉强
64K~15GB❌ 手机只有 8GB 内存

15GB 的 KV cache + 1.2GB 的模型权重,8GB 的手机直接原地去世。

最后的妥协方案是:服务端用 -c 8192 实际运行,配置里写 context_length: 65536 骗过 Hermes 的校验检查。

嗯,能骗过检查,但骗不了物理定律。


第四关:跑起来了,但 4 分钟才出第一个字

改完上下文,再次启动 Hermes:

session_id: 20260708_133605_0e228f

然后……没动静了。

查看 llama-server 的日志:

prompt processing, n_tokens =   2048, progress = 0.15, t =  65.77 s
prompt processing, n_tokens =   4096, progress = 0.30, t = 152.90 s
prompt processing, n_tokens =   6144, progress = 0.45, t = 241.19 s

Hermes 的系统提示词有 6000 多个 token。 每次启动要先处理这 6000 个 token,在手机 CPU 上需要整整 4 分钟

4 分钟啊。

而且这还是每轮对话都要发生的事情。真用起来,问一句话等 4 分钟才响第一个字,这体验基本告别实用。

推理速度方面:

prompt processing: ~25 tokens/s
generation:        ~18 tokens/s

纯 CPU,无 GPU 加速(POCO F2 Pro 的 Adreno GPU 没被 llama.cpp 支持),这个速度在手机上其实算不错了——只是 Hermes 的提示词实在太大了。


总结:梦醒了

验证的结论

❌ Hermes Agent + 本地模型不适合纯手机部署,原因有三:

  1. 内存天花板:64K 上下文最低要求 + 模型权重 ≈ 16GB,手机只有 8GB,差了整整一倍
  2. 无 GPU 加速:25 tokens/s 的推理速度,配合 6000+ token 的系统提示词,首响应 4 分钟
  3. Agent 本身就是重量级选手:Hermes 功能强大但提示词巨大,天然为桌面/服务器设计

反过来,什么方案可行?

  • 远程 API:手机跑 Hermes 客户端,调用云端模型 —— 恢复之前的配置就行了,又快又省电
  • 手机做推理服务器:如果未来手机有 16GB+ RAM + GPU/NPU 加速,加上更轻量的 Agent,或许可行
  • 纯推理(不用 Agent):只跑 llama-server 做 API 服务,用其他轻量客户端调用,体验会好很多

不后悔

这次折腾虽然没成功,但收获不少:

  • 学会了 Android NDK 下交叉编译 Rust 扩展的门道
  • 知道了 manylinux wheel 和 Android bionic libc 不兼容
  • 对 KV cache 的内存占用有了直观认识
  • Hermes 配置结构也摸了一遍

而且你看,折腾这些事儿的过程,本身不就是玩手机的乐趣所在吗?


本文首发于我的个人公众号,记录在 Termux 上折腾 AI 的故事。 设备:POCO F2 Pro (LineageOS) · 8GB RAM · 骁龙 865