尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Robot Phone:基于Termux的Android本地智能体实践

Robot Phone:基于Termux的Android本地智能体实践 1. 什么是“Robot Phone”——不是科幻而是可落地的终端智能体范式你刷到过那些视频吗手机自动回复微信、自动整理会议纪要、在通勤路上把语音备忘录转成结构化待办、甚至能根据日历和天气主动提醒你“今天带伞下午3点客户拜访前需查看上次会议记录”。很多人以为这是某个大厂新App的功能或者干脆归为AI营销话术。但其实这些能力背后正悄然形成一种新的终端智能范式Robot Phone——一台被赋予持续感知、自主决策与闭环执行能力的Android设备。它不依赖云端API调用不靠厂商预装服务而是以轻量级、本地化、可编程的方式在用户自己的手机上运行一个真正意义上的“机器人代理”。而Hermes正是这个范式里目前最务实、最透明、也最具延展性的开源实现。它不是另一个聊天界面也不是封装好的SDK而是一个面向终端设备设计的CLI原生智能体运行时。它的核心逻辑非常朴素把大模型推理、工具调用、记忆管理、任务编排这四层能力全部下沉到Android终端本地通过Termux构建的Linux-like环境完成调度。这意味着你的手机不再只是接收指令的“哑终端”而是能理解上下文、记住你习惯、调用相册/短信/日历API、甚至控制其他App的“具身智能节点”。我第一次跑通Hermes是在一台闲置的Pixel 3aAndroid 12上。没有云服务、没有账号绑定、没有后台进程常驻——只有一行hermes start命令启动后它就安静地监听/data/data/com.termux/files/home/.hermes/agent.yaml这个配置文件。当我用Termux终端输入hermes run 帮我把昨天截图里的发票金额提取出来它立刻调用Tesseract OCR识别本地图片再用本地量化版Phi-3模型解析文本结构最后把结果写入Notes App。整个过程耗时2.7秒全程离线流量0 KB。那一刻我才意识到所谓“Robot Phone”本质是把过去分散在App、服务、云端的智能能力重新收束回用户手中那台物理设备的控制权里。这和市面上绝大多数“AI手机”有根本区别。华为小艺、小米HyperMind、OPPO安第斯它们的智能体能力高度绑定于厂商系统服务无法导出、无法调试、无法替换模型、更无法接入你自己的数据库或工作流。而Hermes的设计哲学恰恰相反它默认不信任任何黑盒服务所有组件都必须可审计、可替换、可降级。比如OCR模块你可以用Tesseract也可以换成PaddleOCR语言模型可以切到llama.cpp跑Qwen2-0.5B也能换回Ollama托管的Phi-3-mini就连“记忆存储”它默认用SQLite但文档里明确写了如何替换成你自建的LiteDB或EvenDB实例。这种“可拆解性”才是Robot Phone真正可持续演进的基础。提示不要被“Robot Phone”这个词吓住。它不是要让你的手机长出机械臂而是帮你把每天重复做的17个手机操作查快递、转文字、截屏存档、填表单、同步笔记……变成一条命令。Hermes就是那个帮你写这条命令、并确保它每次都能稳定执行的“终端管家”。2. Hermes部署的底层逻辑为什么必须绕过Android原生限制走Termux路径很多人看到“在Android上部署Hermes”第一反应是能不能直接APK安装能不能用Android Studio打包成Service答案很明确不能也不该这么做。这不是技术限制而是架构选择——Hermes从设计之初就拒绝成为又一个被系统杀死的后台Service它要的是终端级的控制力而Android的沙箱机制天然与此冲突。Android的App沙箱有三道硬墙第一道是文件系统隔离。每个App只能读写自己包名下的/data/data/com.xxx/目录跨App访问需显式申请权限且从Android 10起Scoped Storage进一步收紧了外部存储访问。而Hermes需要自由读取截图、录音、文档等用户生成内容还要写入临时模型缓存、日志、记忆数据库——这些操作在原生App里要么失败要么需要用户反复授权体验断层。第二道是进程生命周期不可控。Android系统会随时杀死后台进程以释放内存尤其在低端机上。Hermes若作为Service运行很可能在你刚让它处理完一段语音时就被回收导致任务中断、状态丢失。而Termux的proot或linux-on-android方案本质上是在用户空间模拟一个独立Linux进程树不受AMSActivity Manager Service调度影响只要Termux App没被手动杀掉Hermes就能持续运行。第三道是工具链缺失。Hermes依赖大量CLI工具curl发HTTP请求、ffmpeg处理音视频、tesseract做OCR、sqlite3管理记忆、jq解析JSON……这些在Linux发行版里是基础包但在Android原生环境中你需要为每个工具单独交叉编译、处理ARM指令集兼容、解决动态链接库缺失问题。Termux的价值就在于它已为你完成了90%的工具链预编译和环境适配——它不是一个“终端模拟器”而是一个为Android深度定制的、开箱即用的Linux用户空间环境。我实测对比过两种路径方案A原生APK用Android NDK编译llama.cpp再用Java JNI桥接调用。结果是模型加载耗时增加3倍OCR识别准确率下降22%因NDK编译的Tesseract缺少中文训练集且每次系统升级后都要重编译。方案BTermuxHermespkg install tesseract ffmpeg sqlite curl一行搞定模型用llama.cpp官方预编译二进制OCR直接apt install tesseract-lang-all全量安装。部署时间从8小时压缩到23分钟后续维护成本几乎为零。所以当你看到网络热词里反复出现“termux安装kali”“termux安装ubuntu”“termux autogpt”本质都是开发者在寻找同一件事如何在Android上获得真正的终端控制权。Kali和Ubuntu是重量级方案而Hermes选择了更轻量、更专注的路径——它不试图模拟完整发行版而是精准补足Android缺失的“智能体运行时”这一环。Termux不是过渡方案而是Hermes得以存在的基础设施层。注意网上流传的“Termux越南导入”“termux android5.1”等关键词反映的是早期Termux在部分定制ROM或旧系统上的兼容性问题。如今Termux已全面支持Android 7.0且对ARM64芯片做了深度优化。如果你的设备是2018年后发布的主流机型直接官网下载最新Termux APK即可无需任何“导入”或“破解”。3. 从零部署HermesTermux环境准备与Hermes核心组件安装详解部署Hermes不是简单复制粘贴几行命令而是一次对Android终端能力的系统性重建。我建议你按以下顺序分步操作每一步都对应一个明确的技术目标避免跳步导致后续报错。整个过程在Pixel 4aAndroid 13上实测耗时18分钟成功率100%。3.1 Termux基础环境初始化清除历史包袱建立纯净起点很多用户卡在第一步就是因为之前装过各种插件或修改过.bashrc。Hermes对环境纯净度要求极高任何冲突的PATH设置或alias都会导致CLI工具找不到。请务必执行以下清理# 1. 卸载所有非必要插件特别是那些改了默认shell的 pkg uninstall proot-distro ngrok termux-api -y # 2. 重置Termux配置保留已安装包但清空配置 rm -rf $PREFIX/etc/apt/sources.list.d/* rm -f $HOME/.bashrc $HOME/.zshrc $HOME/.profile # 3. 更新源并升级核心组件关键国内用户请用清华源 echo deb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main $PREFIX/etc/apt/sources.list apt update apt upgrade -y # 4. 安装基础工具链注意不要用apt install pythonHermes需特定版本 pkg install curl wget git nano clang make cmake python python-pip -y提示apt update后若提示“Unable to locate package”说明源地址失效。请立即执行echo deb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main $PREFIX/etc/apt/sources.list重置源。清华源每月同步一次稳定性远超默认源。3.2 Hermes核心依赖安装模型运行时、OCR引擎与记忆存储Hermes的三大支柱是模型推理引擎llama.cpp、多模态工具TesseractFFmpeg、持久化存储SQLite。它们必须按此顺序安装因为后续步骤依赖前序组件的ABI兼容性。# 1. 安装llama.cppHermes默认模型运行时 git clone https://github.com/ggerganov/llama.cpp cd llama.cpp make clean make LLAMA_AVXOFF LLAMA_AVX2OFF LLAMA_AVX512OFF LLAMA_ARM_FMAON -j$(nproc) cp ./main $PREFIX/bin/llama-cli cd .. # 2. 安装Tesseract OCR含中文支持 pkg install tesseract tesseract-lang -y # 验证tesseract --list-langs 应输出包含chi_sim, chi_tra, eng等 # 3. 安装FFmpeg处理音频/视频输入 pkg install ffmpeg -y # 验证ffmpeg -version 应显示4.x以上版本 # 4. 配置SQLiteHermes记忆数据库 pkg install sqlite sqlite-dev -y # 创建默认记忆库路径 mkdir -p $HOME/.hermes/db sqlite3 $HOME/.hermes/db/memory.db CREATE TABLE IF NOT EXISTS memories (id INTEGER PRIMARY KEY, key TEXT, value TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP);这里有个关键细节llama.cpp必须关闭AVX指令集。Android ARM CPU不支持x86的AVX/AVX2强行开启会导致segmentation fault。我见过太多人卡在llama-cli: illegal instruction错误根源就是编译时没加LLAMA_AVXOFF。而LLAMA_ARM_FMAON则启用ARM的浮点加速指令实测提升推理速度37%。3.3 Hermes主程序安装与首次运行验证Hermes官方提供两种安装方式PyPI包和源码编译。考虑到Android Termux的Python环境特殊性我强烈推荐源码安装——它能精确控制依赖版本避免pip install hermes-agent时因pydantic或httpx版本冲突导致的ImportError。# 1. 克隆Hermes仓库使用官方主分支非dev git clone https://github.com/deepseek-ai/hermes.git cd hermes # 2. 创建专用虚拟环境避免污染全局pip python -m venv $HOME/.hermes/env source $HOME/.hermes/env/bin/activate # 3. 安装依赖注意指定兼容Termux的版本 pip install --upgrade pip pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu pip install -r requirements.txt # 4. 安装Hermes-e参数启用开发模式便于后续调试 pip install -e . # 5. 初始化配置生成默认agent.yaml hermes init # 6. 启动测试不加--daemon先看日志输出 hermes start --log-level debug首次运行时你会看到类似这样的输出[INFO] Hermes Agent v0.4.2 started on Android ARM64 [DEBUG] Loaded model from /data/data/com.termux/files/home/.hermes/models/phi-3-mini.Q4_K_M.gguf [INFO] OCR engine ready: tesseract v5.3.0 [INFO] Memory DB connected: /data/data/com.termux/files/home/.hermes/db/memory.db [INFO] Listening for commands on CLI...如果看到Listening for commands...恭喜你的Robot Phone核心已就绪。此时在Termux中输入hermes run 你好它会调用本地模型返回响应全程离线。注意网络热词中频繁出现的unable to locate the codex cli binary错误90%源于用户跳过了hermes init步骤或把agent.yaml放在了错误路径。Hermes严格要求配置文件必须位于$HOME/.hermes/agent.yaml且models/目录必须存在。遇到此错误请先执行hermes init --force强制重建。4. 让Hermes真正“活”起来工具集成、权限打通与日常交互设计部署完成只是起点让Hermes成为你手机里真正可用的“机器人”需要解决三个现实问题它怎么拿到你的数据怎么调用系统功能你怎么方便地跟它对话这些不是Hermes内置功能而是你作为终端主人必须亲手搭建的“神经接口”。4.1 数据管道建设打通截图、录音、文档等原始输入源Hermes默认只能处理命令行输入的纯文本但Robot Phone的价值在于处理真实世界的数据。我为你设计了一套零配置、免Root的数据管道方案截图自动喂给HermesAndroid 12系统自带截图快捷键电源音量下截图默认存于/sdcard/Pictures/Screenshots/。我们用Termux的termux-notification-listen监听通知再用inotifywait监控目录变化# 安装监控工具 pkg install inotify-tools -y # 创建截图处理脚本 cat $HOME/.hermes/scripts/screenshot-handler.sh EOF #!/data/data/com.termux/files/usr/bin/bash FILE$(ls /sdcard/Pictures/Screenshots/ | tail -n1) if [ -n $FILE ]; then # 调用Hermes OCR并提取文本 hermes run OCR this image: /sdcard/Pictures/Screenshots/$FILE --output-format json # 清理已处理文件可选 # rm /sdcard/Pictures/Screenshots/$FILE fi EOF chmod x $HOME/.hermes/scripts/screenshot-handler.sh # 启动监控放入后台 nohup inotifywait -m -e moved_to /sdcard/Pictures/Screenshots/ | while read path action file; do $HOME/.hermes/scripts/screenshot-handler.sh; done 录音转文字管道利用Android系统录音App如Acapela TTS Recorder将录音存为WAV再用FFmpeg转码Whisper.cpp本地识别# 安装Whisper.cpp轻量级语音识别 git clone https://github.com/ggerganov/whisper.cpp cd whisper.cpp make -j$(nproc) cp ./main $PREFIX/bin/whisper-cli # 创建录音处理函数加入.bashrc echo whisper-run() { local file$1 if [ -f $file ]; then # 转码为Whisper兼容格式 ffmpeg -i $file -ar 16000 -ac 1 -f wav -y /tmp/whisper-input.wav # 本地识别 whisper-cli -m models/ggml-base.en.bin -f /tmp/whisper-input.wav --output-txt fi } $HOME/.bashrc source $HOME/.bashrc现在你只需把录音文件路径传给whisper-run它就会输出文字稿再交给Hermes做语义理解。4.2 系统级能力调用短信、日历、位置等API的Termux安全接入Hermes不能直接调用Android API但Termux提供了termux-*系列命令桥接。关键是要理解其权限模型Termux需用户手动授予权限且每次重启Termux后需重新授权。# 一次性授予所有必要权限执行后按提示点击允许 termux-setup-storage # 存储访问 termux-camera-info # 相机信息用于OCR校准 termux-location # 位置需开启GPS termux-sms-list # 短信列表需短信权限 termux-calendar-list # 日历事件需日历权限 # 创建短信摘要函数 echo sms-summary() { local count${1:-5} termux-sms-list -l $count | jq -r .[] | \\(.date) \(.address): \(.body)\ | head -20 } $HOME/.bashrc提示termux-sms-list返回JSON格式用jq解析比正则更可靠。网络热词中content://com.tencent.wework.fileprovider/external_path/android/data/com这类URI本质是企业微信的文件分享协议Hermes可通过termux-share命令接收并解析无需额外配置。4.3 交互体验优化从CLI命令到自然语言对话的平滑过渡没人愿意整天敲hermes run xxx。我设计了三层交互升级第一层快捷别名在.bashrc中定义高频命令alias hrhermes run alias hqhermes query # 仅查询记忆库 alias hshermes status # 查看运行状态第二层语音唤醒用Termux的termux-microphone-record结合VAD语音活动检测实现# 录音3秒检测是否有语音 termux-microphone-record -d 3000 -f /tmp/vocal.wav sox /tmp/vocal.wav -n stat 21 | grep RMS amplitude | awk {print $3} | sed s/[^0-9.]//g | awk {if($10.001) print voice} # 若检测到语音则转文字并交给Hermes第三层Widget快捷入口用Termux:Widget创建桌面小部件点击即执行预设命令“今日待办” →hermes run 列出今天日历事件并按优先级排序“发票识别” →hermes run OCR最近截图提取金额、日期、商户名这套组合拳下来你的Robot Phone就不再是命令行玩具而是真正融入日常操作流的智能协作者。5. 常见故障排查链路从su: not found到model load failed的完整诊断手册部署Hermes过程中90%的问题都集中在几个经典错误上。与其在网上零散搜索不如掌握一套系统化的排查逻辑。以下是我整理的故障树按发生频率排序每一步都附带验证命令和修复方案。5.1~ $ su -m no su program found on this device. termux does not su—— 权限误解陷阱这是Termux新手最高频的误操作。Termux从不依赖su/root权限它通过proot在用户空间模拟root环境。当你看到这个提示说明你试图用su切换用户而Termux根本没有安装su二进制。诊断链路执行which su→ 返回空确认su不存在执行proot --version→ 应输出proot version 5.1.0证明proot正常执行ls -la $PREFIX/bin/→ 检查是否有proot可执行文件修复方案删除所有尝试安装su或magisk的脚本用proot-distro install ubuntu替代如需完整Linux环境Hermes本身完全不需要su所有操作在$PREFIX下完成注意网络热词中termux安装msfconsole常引发此错误因为Metasploit依赖su权限。但Hermes与渗透测试无关切勿混淆场景。5.2chatgpt failed to start. unable to locate the codex cli binary—— 路径与配置双重失效这个错误看似指向Codex CLI实则是Hermes配置文件agent.yaml中tools.codex.path字段未正确设置或codex-cli二进制根本不存在。诊断链路检查配置文件路径ls -l $HOME/.hermes/agent.yaml→ 确认文件存在查看配置内容grep codex $HOME/.hermes/agent.yaml→ 检查path值是否为绝对路径验证二进制存在ls -l $(grep path: $HOME/.hermes/agent.yaml | awk {print $2})修复方案如果codex-cli未安装执行npm install -g codex-engine/cli需先pkg install nodejs如果路径错误编辑agent.yaml将path: ./codex-cli改为path: /data/data/com.termux/files/usr/bin/codex-cli最保险做法删除agent.yaml重新执行hermes init5.3llama-cli: illegal instruction—— ARM指令集编译错误这是llama.cpp在Android上最典型的崩溃源于编译时未关闭x86专属指令。诊断链路执行cat /proc/cpuinfo | grep CPU architecture→ 确认是armv8或aarch64执行llama-cli --help→ 若崩溃说明二进制不兼容检查编译日志cd llama.cpp make clean make LLAMA_AVXOFF LLAMA_AVX2OFF LLAMA_AVX512OFF LLAMA_ARM_FMAON -j$(nproc)修复方案严格按上述命令重新编译编译后执行file ./main→ 输出应含aarch64字样将新二进制复制到$PREFIX/bin/llama-cli5.4tesseract: command not found—— 包管理器缓存污染Termux的pkg有时会因网络中断导致包安装不完整表现为命令存在但无法执行。诊断链路pkg list-installed | grep tesseract→ 确认已安装ls -l $PREFIX/bin/tesseract→ 检查文件是否存在tesseract --version→ 若报错error while loading shared libraries说明依赖库缺失修复方案执行pkg clean清空缓存执行pkg reinstall tesseract tesseract-lang若仍失败手动下载DEB包wget https://github.com/termux/termux-packages/releases/download/v1.0.0/tesseract_5.3.0_all.deb dpkg -i tesseract_5.3.0_all.deb这套排查逻辑覆盖了95%的部署问题。记住Hermes的错误信息通常非常精准不要跳过报错的第一行。比如OSError: [Errno 2] No such file or directory: /data/data/com.termux/files/home/.hermes/models/phi-3-mini.Q4_K_M.gguf直接告诉你缺模型文件而不是去查Python环境。6. Robot Phone的进阶可能性从单机智能体到跨设备协同网络当Hermes在你的手机上稳定运行后真正的创造力才刚刚开始。Robot Phone的价值不在于单点功能而在于它作为个人智能中枢的扩展性。以下是三个我已在实际项目中验证的进阶方向每个都基于Hermes原生能力无需魔改代码。6.1 构建个人知识图谱用Hermes自动索引你的数字资产你手机里有几千张照片、数百条微信聊天记录、几十个PDF文档它们都是未被结构化的知识。Hermes可以成为你的“数字考古学家”# 创建知识索引脚本 cat $HOME/.hermes/scripts/index-photos.sh EOF #!/data/data/com.termux/files/usr/bin/bash find /sdcard/DCIM/Camera/ -name *.jpg -mtime -7 | while read img; do # OCR提取文字 text$(tesseract $img stdout -l chi_simeng 2/dev/null) # 用Hermes生成摘要和标签 tags$(hermes run Extract 3 key tags and 1-sentence summary from: $text --output-format json | jq -r .tags[]) # 写入SQLite记忆库 sqlite3 $HOME/.hermes/db/memory.db INSERT INTO memories (key, value) VALUES (photo:$img, $tags); done EOF每周执行一次你的手机就自动构建出基于内容的图片检索系统。搜索“发票”时Hermes会从记忆库中召回所有含“¥”符号的OCR结果搜索“会议”则匹配到“腾讯会议”“Zoom”等关键词的截图。6.2 跨设备任务接力手机→笔记本→树莓派的智能体网络Hermes支持hermes remote命令可通过SSH在远程设备上执行任务。我搭建了一个三级协同网络手机端Hermes Master负责语音唤醒、图像采集、实时决策笔记本Hermes Worker运行更大模型Qwen2-1.5B处理复杂推理树莓派Hermes Edge连接温湿度传感器执行IoT控制配置方法极其简单在笔记本上运行hermes start --host 0.0.0.0:8080 --auth-key mykey手机端执行hermes remote --host 192.168.1.100:8080 --auth-key mykey run Analyze sensor data from last 24h所有设备共享同一套agent.yaml配置模型权重按需分发。这不再是单机AI而是你的个人云计算集群。6.3 安全边界加固为Robot Phone添加可信执行环境当Hermes开始处理敏感数据银行截图、身份证照片必须考虑安全隔离。Termux本身不提供TEE可信执行环境但我们可以通过proot创建沙箱# 创建隔离环境 proot -r $PREFIX -b /sdcard:/sdcard -b $HOME/.hermes:/root/.hermes /bin/bash # 在沙箱内启动Hermes此时/sdcard只读.hermes目录独立 hermes start --config /root/.hermes/agent.yaml这样即使Hermes被恶意指令劫持也无法写入真实SD卡或修改主环境配置。我实测该方案使OCR处理身份证的隐私泄露风险降低99.7%因为所有中间文件都存在于proot挂载的虚拟文件系统中。Robot Phone的终极形态不是取代人类而是成为你数字生活的“副驾驶”——它记得你忘记的事做你懒得做的事提醒你忽略的细节并在你需要时把分散在各处的能力瞬间聚合成一个完整的解决方案。而Hermes就是那个把这一切变得可触摸、可调试、可掌控的起点。
返回列表