
最近一直在折腾一件事把 Hermes 这个开源智能体框架直接部署到手机上让它变成一个能听懂人话、自己动手干活的 Robot Phone。折腾了大概一周踩了不少坑也把整个流程理顺了今天干脆把这套部署方案和心得完整写出来给同样想搞 AI 手机、又不想只停留在聊天阶段的朋友一个参考。这篇内容主要解决三个问题Hermes 到底是什么怎么把一个 Agent 框架装进手机以及装完之后怎么让它真正帮你发短信、拨电话、控制应用、执行自动化任务。无论你是懂 Python 的开发者还是只会跟着教程操作的小白只要手里有一台 Android 手机基本都能跟着流程走完一遍。1. 项目概述与核心思路1.1 什么是 Hermes Agent 和 Robot PhoneHermes 是一个面向本地优先场景设计的智能体框架它把大语言模型、工具调用、流程编排和系统接口这几层拆开提供了一套很轻量的机制让模型不只能“聊天”还能实际操作手机上的功能。所谓 Robot Phone简单说就是让手机从被动接受指令变成主动感知和执行像一个微型机器人那样你说一句“帮我给老王发条消息说晚点到”它自己完成联系人查找、短信发送、确认结果这一整套动作。我之所以在这么多 Agent 项目里挑中 Hermes一是因为它的核心代码足够精简依赖也不重适合放到手机这种资源受限的环境里跑二是它的工具注册方式非常直白写一个 Python 函数就能变成一个可供模型调用的工具不用理解复杂的 Agent 协议三是它默认不依赖任何云端服务模型、工具、推理全部可以在本地完成隐私和成本都更可控。1.2 为什么强调“本地部署”而不是直接接云端 API很多人问手机装个客户端、把请求发到云端大模型不就完了为什么非要在手机本地部署一套东西关键在于“可操作性和权限”。普通聊天 App 只能调云端模型模型没办法直接访问你手机里的短信、闹钟、文件、应用状态。Hermes 这类本地 Agent 则不同它运行在你的设备上可以直接通过系统接口读取和操作数据相当于给模型装上了“手和眼睛”。当然本地部署也意味着算力有限所以在架构设计上要遵循“小模型做决策、系统工具做执行、大模型按需调用”的分工。Hermes 的设计恰好朝这个方向走底层模型可以用几百 MB 到几个 GB 的小参数模型够理解指令就行真正干活的是后面挂载的一堆本地工具。这也是我在选型时最看重的一点它不是在手机上硬塞一个大模型而是用一套轻量智能体把手机能力串起来。2. 部署前必须搞清楚的方案选型2.1 手机硬件与系统要求先说结论Android 10 以上、内存 8GB 以上的手机体验最好6GB 内存也能跑起来但需要把模型压到 3B 以内并做好 Swap 扩展。我实测用的是天玑 8000 处理器的旧机型12GB 内存整个部署下来流畅度可用。如果你是 iPhone目前不建议按这个路子走。iOS 对后台进程和系统接口的限制太严格很多操作比如读取短信、模拟点击根本绕不过去。与其折腾越狱不如直接找一台闲置 Android 手机这也是 Robot Phone 玩法的主流选择。另外存储空间建议至少留出 8GB 空闲。Termux、基础依赖、模型文件、日志文件等加起来很快会超过 4GB后续如果还要接入语音识别模型空间只会更紧张。2.2 本地模型选型不要盲目贪大Hermes Agent 本身不绑定模型只要兼容 OpenAI API 或 Ollama API 的模型都能接。在手机上跑模型选型直接决定体验。我试过几档模型参数量内存占用体验评价Qwen2.5 0.5B0.5B约 1GB能听懂简单指令但复杂命令容易出错Qwen2.5 1.5B1.5B约 2.5GB日常控制类指令基本可用Hermes-3 Llama 3.2 3B3B约 4GB语义理解更好适合做复杂流程但发热明显7B 以上7B8GB手机上基本跑不动需要云端配合我的建议如果只做短信、闹钟、天气这类结构化操作1.5B 模型足够如果想让对话更自然、能处理临时出现的多步指令优先考虑 3B 版本。不要一上来就上 7B那种“模型能力很强但每次回复要等三十秒”的体验用几次就劝退了。2.3 环境路线Termux 还是 Linux Deploy手机端部署 Agent本质上得有一个能跑 Python 和系统调用的 Linux 环境。目前主流有两种路线Termux不需要 root安装方便包管理器直接装依赖适合大多数用户。Termux 还能配合 Termux:API 调用手机原生功能这是我能给出最顺滑的组合。Linux Deploy / chroot需要 root 或使用 proot可以跑完整 Debian/Ubuntu 环境兼容性更好但配置更复杂而且会破坏 Android 原有的应用隔离。我最终选择的是 Termux proot-distro 里的 Debian。我不直接跑在 Termux 原生环境而是先装一个 Debian 容器再在容器里部署 Hermes Agent 和 Ollama。这样最大的好处是依赖隔离避免 Termux 里 Python 包版本和系统库互相打架。3. 完整部署流程从零到 Robot Phone 跑起来3.1 第一步准备 Termux 和基础依赖先用 F-Droid 安装 Termux注意千万不要用 Google Play 商店里的版本那个早已停更很多包都装不了。安装完成后打开 Termux先换源再更新这一步能省很多事termux-change-repo pkg update pkg upgrade -y pkg install -y python git build-essential ffmpeg termux-api proot-distro这里有个关键词要提醒如果你在手机上下载依赖时一直失败多半是网络源的问题把 Termux 的软件源切换成国内镜像即可不用折腾网络代理。termux-api这个包特别重要后面所有短信、电话、通知栏功能都靠它。接着安装 proot-distro并创建一个 Debian 容器proot-distro install debian proot-distro login debian进入 Debian 容器后继续安装 Python、pip 和基础编译工具apt update apt install -y python3 python3-pip git curl build-essential python3 -m pip install --upgrade pip到这里基础环境就准备好了。整个过程约需要 15 到 30 分钟视网络和手机性能而定。3.2 第二步在容器里安装 Ollama 并拉取模型Hermes Agent 默认对接 Ollama 作为推理后端所以需要先把 Ollama 跑起来。Ollama 官方其实不直接支持 Termux但在 proot 的 Debian 容器里可以安装 Linux 版本。执行curl -fsSL https://ollama.com/install.sh | sh如果安装脚本在容器内线上不好使也可以去 GitHub Releases 下载ollama-linux-arm64.tgz手动解压到/usr/local并创建 systemd 服务。装完后启动 Ollamaollama serve 再拉取模型。以 Qwen2.5 1.5B 为例ollama pull qwen2.5:1.5b我建议同时拉一个 3B 模型用于复杂场景ollama pull llama3.2:3b模型文件默认放在 Debian 容器的/root/.ollama下如果空间不够可以用OLLAMA_MODELS环境变量把它指到 Termux 可读的外部存储目录但这个操作需要额外设置权限新手可以先不管。3.3 第三步安装 Hermes Agent目前 Hermes Agent 的发布方式比较灵活可以直接用 pip 安装也可以从源码跑。我推荐从源码 clone因为主分支更新快而且你后续想加自定义工具时直接在源码目录下写更方便pip install hermes-agent如果你发现 pip 上的版本比较旧或者缺少某些插件就改用源码部署git clone https://github.com/hermes-agent/hermes-agent.git cd hermes-agent pip install -r requirements.txt pip install -e .安装完成后执行hermes --version确认能正常输出版本号。如果提示找不到命令多半是 Python 的 Scripts 目录没加进 PATH可以直接用python3 -m hermes.cli --version代替。3.4 第四步编写核心配置文件Hermes Agent 的配置采用 YAML 格式我用的配置文件大概是这样的agent: name: Robot Phone model: qwen2.5:1.5b backend: http://127.0.0.1:11434 temperature: 0.2 max_tokens: 512 device: platform: android termux_api: true adb_enabled: false notification_access: true permissions: - sms - call - alarm - location - camera tools: enabled: - send_sms - make_call - set_alarm - get_weather - open_app - take_photo这里有几个参数需要解释一下。temperature调成 0.2是因为 Agent 执行任务时需要确定性不能每次回复都不一样。permissions列表不是摆设Hermes 会按这个列表去检查 Termux:API 的对应权限没有权限的操作会直接报错。tools.enabled是真正让模型能用哪些工具的白名单。初装时建议只开两三个工具跑通后再逐步增加避免模型“选择困难”。3.5 第五步启动服务并做基本自检启动 Hermes Agenthermes start或者如果你是从源码启动python3 -m hermes.cli start启动后日志会出现类似Listening on http://127.0.0.1:8321的提示。这就是 Agent 的本地服务端口。先在容器里用 curl 做个自检curl http://127.0.0.1:8321/health正常会返回{status: ok}。接着做一个最简单的交互测试问它“你好你能做什么”如果回复内容正常说明 Ollama 和 Hermes 已经通了。3.6 第六步打通 Termux:API让 Agent 能操作手机这时候 Agent 还只是跑在容器里的“光杆司令”想让它真正控制手机需要把 Termux:API 的接口注册成 Agent 工具。Hermes 提供了现成的termux_tools插件安装方式如下python3 -m hermes.plugins install termux_tools然后在配置文件的tools.enabled里加入对应工具。重启 Agent 后执行hermes shell进入交互模式输入帮我把手机调成振动模式如果 Agent 能返回“已调用 termux-settings set vibrate”之类的信息说明手机外部接口打通了。如果没有反应检查 Termux 的 API 服务是否已开启以及是否安装了termux-api对应 App在 F-Droid 里单独下载。4. 实战玩法让 Robot Phone 真正“智能”起来4.1 语音交互给 Robot Phone 装个“耳朵”只有文字交互还差点意思Robot Phone 至少要能听懂人说话。我用的是sherpa-onnx做本地语音识别它支持热词功能可以自定义唤醒词“Hey Hermes”。安装依赖pip install sherpa-onnx下载一个中文语音识别模型比如sherpa-onnx-streaming-zipformer-zh-14M然后写一个简单的 Python 脚本实时识别麦克风输入识别到文本后通过管道传给 Hermes Agent 的 API。大致逻辑import sherpa_onnx import requests recognizer sherpa_onnx.OnlineRecognizer.from_zipformer(...) for text in recognizer.stream(): requests.post(http://127.0.0.1:8321/chat, json{message: text})这套方案在手机上跑语音识别占用约 300MB 内存延迟在一两秒左右可以接受。如果不想写代码Hermes 配置里也有语音接入的示例指向一个本地 WebSocket 服务即可。4.2 自动发短信和拨打电话这是最实用、也最容易出效果的功能。预先在配置里启用了send_sms和make_call工具后直接对 Hermes 说给李姐发短信内容是我马上到让她先点菜Hermes 会先通过本地模型识别出联系人“李姐”然后在通讯录里查找匹配项再调用 Termux:API 的termux-sms-send发送。整个链路在日志里都能看到[action] resolve_contact(李姐) - 138... [action] send_sms(to138..., body我马上到让她先点菜) [action] result: success这里有个关键技巧如果联系人里存在多个“李姐”Agent 会通过上下文问你要哪个你只需要回答“第二个”就行。这种多轮澄清能力是 Agent 框架相比简单自动化脚本最大的优势。4.3 定闹钟、日程管理和天气播报再举一个“起床助手”的例子。每天早上 7 点Hermes 通过定时任务触发自动获取天气接口的数据然后播报当天的气温和出行建议同时帮你把 7 点 10 分的闹钟设好。配置文件里可以加一个schedule段schedule: - time: 07:00 task: morning_brief - time: 12:30 task: weather_report在 Hermes 里注册一个morning_brief工具函数它依次调用天气工具、闹钟工具并把结果合成一段语音文本。这种组合能力本质上就是把离散的手机功能编排成一个“机器人管家”。4.4 进阶玩法通过 ADB 控制任意 AppTermux:API 可以触达系统级能力但有些第三方 App 操作它做不到比如自动刷新闻、自动打卡。这时候可以借助 ADB 来做界面级控制。原理是 Hermes Agent 通过 ADB 向 Android 系统发送模拟点击、滑动和输入事件本质上变成了“手机上的 RPA”。开启手机无线调试然后在 Termux 里adb pair 192.168.1.10:5555 adb connect 192.168.1.10:5555再把adb_enabled设为true。之后你就能指示 Hermes 打开某个 App然后执行一系列点击操作。不过这条路复杂且容易受界面变化影响建议作为进阶玩法初期还是先把手表级的工具链跑稳。5. 踩坑实录这些问题我提前帮你排掉5.1 模型推理太慢回答一次要半分钟这是最容易遇到的问题。如果推送的是 7B 模型在手机上基本没法用。解决思路第一个是换 1.5B 或 3B 模型第二个是降低max_tokens不要让模型每次都输出一长串解释第三个是关闭系统动画特效把手机处理器性能调度设为均衡/性能模式减少后台限制。我实测下来Qwen2.5 1.5B 模型在 12GB 内存手机上的首 token 延迟大约 800ms一句话完整输出在一两秒左右属于可接受范围。5.2 Ollama 进程被系统杀掉Android 的后台管理策略对 Linux 容器进程很不友好息屏一段时间后 Ollama 就没响应了。解决办法是使用 Termux 的 wakelocktermux-wake-lock同时在系统设置里把 Termux 的电池优化设为不限制并将后台运行权限设为“允许”。如果还是被清考虑用nohup ollama serve 启动并把日志重定向到文件方便排查是否被 OOM 结束。5.3 Termux 访问不到存储和短信权限执行termux-setup-storage后Termux 才能访问/sdcard。短信、电话这类敏感权限需要单独在系统设置里授权给 Termux/Termux:API。如果授权后仍然提示权限不足建议重启一次 Termux 服务有时权限广播没有即时生效。5.4 Hermes 依赖冲突启动直接报错手机环境里同时装了很多 Python 包很容易出现依赖版本冲突。我的建议是全程在 proot 的 Debian 容器里用虚拟环境隔离创建/opt/hermes-venv所有安装都pip install进这个虚拟环境。虽然多几步但能避免后期各种莫名其妙的导入错误。5.5 模型生成结果绕来绕去不执行工具核心原因是提示词和温度设置的问题。把temperature调到 0.2并把系统提示词写清楚比如“You are a phone assistant. When you need to perform a task, always call the available tools. Never say fake actions.” Hermes 内置的默认提示词已经很完善但如果你改过很容易破坏格式约定。下面是常见问题速查现象最可能原因解决方案curl /health 返回 404Hermes 还没启动完成等日志出现 listening 再访问Ollama 一直在重试内存不足被 OOM换小模型增加 swap发短信提示无权限Termux:API 未授权系统设置里单独授权给 Termux 应用Agent 不调用工具temperature 太高改成 0.2确认 tools.enabled 有该工具语音识别无响应麦克风权限没给 Termux系统设置里打开麦克风权限息屏后失联后台进程被杀使用 termux-wake-lock关电池优化6. 扩展思路和我的真实感受跑通之后很多人会想继续往里面加东西。比较常见的扩展方向有接入安卓通知监听让 Agent 在 App 弹出消息时自动总结并播报接入 Home Assistant把 Robot Phone 变成智能家居语音入口或者利用手机摄像头做视觉识别让 Agent 能“看”到周围环境。Hermes 的工具注册机制让这些扩展都不需要改框架本身写一个函数套一层接口就能用。另外我也做了一个小优化把常用指令做成“快捷短语”比如输入“晨报”Agent 就自动执行天气、日程、新闻三件套省去每次说一长串。这个思路不是魔法本质上是给 Agent 配了一套预置模板真正处理时还是会走工具调用链路。最后分享一条我的真实感受手机部署 Agent 这件事最大的障碍不是技术而是心态。别指望一部中端手机能跑出云端大模型那种智能水平Robot Phone 的价值在于“把手机能力用一种自然语言的方式暴露出来”。当你说“帮我关掉 WiFi 并定一个明天的闹钟”它真的执行了的时候那种“手机活了”的感觉确实挺上头的。如果你手里也有一台闲置安卓机不妨按这个流程试试大概率你会收获一个属于你自己的 Robot Phone。