news 2026/10/1 6:44:13

在 Android/Termux 上部署微信 AI 助手:TaoToken 统一 Key 配置与 Hermes Agent 接入指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Android/Termux 上部署微信 AI 助手:TaoToken 统一 Key 配置与 Hermes Agent 接入指南

1. 为什么要在 Android/Termux 上折腾微信 AI 助手

把微信变成 AI 助手这件事,听起来像是极客的玩具,但真正用起来之后你会发现它解决的是一个很实际的问题:你不需要再单独打开一个 App、切换账号、复制粘贴问题。微信本身就是你每天打开次数最多的应用,把 AI 塞进微信的聊天列表里,交互路径最短。

我这台测试机是一台老旧的 Android 手机,处理器是 32 位 ARM 架构,uname -m输出armv7l。这个架构在 2024 年之后基本属于「被遗忘的角落」——大部分预编译的 Python wheel 只提供 aarch64(64 位 ARM)版本,armv7l 用户只能从源码编译,而源码编译又会撞上各种兼容性问题。Hermes Agent 是一个支持多平台网关的 AI Agent 框架,它可以把微信、Telegram、Discord 等平台接入同一个 LLM 后端。在 armv7l 上跑 Hermes Agent 的微信网关,最大的拦路虎不是 Hermes 本身,而是它依赖的加密库cryptography在 32 位 ARM Android 上的 GIL 兼容性崩溃。

这篇文章聚焦的是「落地配置」——假设你已经决定在 Termux 里跑 Hermes Agent 微信网关,我会把 TaoToken 统一 Key 的配置方式、settings.json和config.toml的骨架、以及验证助手能否正常收发消息的完整动作写清楚。适合谁看?手上有一台闲置 Android 手机、愿意花半小时折腾、想让微信直接调用大模型能力的人。如果你只是想快速体验 AI 对话,直接用网页版更省事;但如果你想要一个「常驻在微信里、能定时推送、能执行代码」的助手,Termux + Hermes Agent 是目前比较可控的方案。

TaoToken 在这里的角色是统一 API 通道。Hermes Agent 支持多种 LLM 提供商,但如果你同时想用 Claude、GPT、Gemini 等不同模型,逐个配置 API Key 会很麻烦。TaoToken 提供统一的 Base URL 和 Key,Hermes Agent 只需要指向一个端点,模型切换在服务端完成。官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点固定为 https://taotoken.net/api 。

2. Termux 环境准备与 Hermes Agent 安装

Termux 的安装来源必须统一。我从 GitHub Releases 下载了 Termux 主程序,没有用 F-Droid 版本,原因是后续如果要装 Termux:API 等附加组件,签名必须一致,否则会报签名冲突导致无法安装。这一步看起来是小事,但踩过坑的人都知道,签名不一致时你连重装都救不回来,只能卸载全部组件重新来。

装好 Termux 后第一件事是修软件源。默认的某些镜像在国内网络下会连接超时,编辑$PREFIX/etc/apt/sources.list,把源替换成可用的镜像。我用的命令是:

nano $PREFIX/etc/apt/sources.list

替换为:

deb https://grimler.se/termux/termux-main/ stable main

然后更新包索引:

pkg update && pkg upgrade -y

基础依赖安装:

pkg install python python-pip git curl -y

如果你需要调用 Android 系统能力(相机、传感器、通知等),再装 Termux:API:

pkg install termux-api -y

注意 Termux:API 的 APK 也必须从 GitHub Releases 获取,和主程序签名一致。

接下来克隆 Hermes Agent 并创建虚拟环境。这里有个细节:Termux 自带的 Python 版本可能是 3.13,但 Hermes Agent 的依赖在 3.11 上兼容性更好,所以我用python -m venv创建了独立的 3.11 环境(如果 Termux 仓库里没有 3.11,可以用pkg install python3.11或从源码编译,但源码编译在 armv7l 上非常慢,建议先检查仓库)。

git clone https://github.com/nousresearch/hermes-agent.git cd hermes-agent python -m venv venv311 source venv311/bin/activate pip install -r requirements.txt

初始化配置:

hermes setup

这一步会引导你选择 LLM 提供商。这里先跳过,因为我们要用 TaoToken 统一通道,具体配置在下一节展开。

微信网关的初始化:

hermes gateway setup

选择Weixin (WeChat)后,终端会显示一个二维码。用手机微信扫码并在手机上确认登录,凭证会自动保存到~/.hermes/.env,包含WEIXIN_ACCOUNT_ID、WEIXIN_TOKEN、WEIXIN_BASE_URL、WEIXIN_USER_ID四个字段。

如果二维码不显示(非交互式终端或终端不支持图片渲染),可以通过 iLink API 直接获取二维码 URL:

import aiohttp, asyncio async def get_qr(): url = "https://ilinkai.weixin.qq.com/ilink/bot/get_bot_qrcode?bot_type=3" headers = { "iLink-App-Id": "bot", "iLink-App-ClientVersion": str((2 << 16) | (2 << 8) | 0) } async with aiohttp.ClientSession() as session: async with session.get(url, headers=headers) as r: resp = await r.json() print(resp["qrcode_img_content"]) asyncio.run(get_qr())

返回的是二维码图片 URL,可以在浏览器打开,也可以用qrcode库在终端渲染成 ASCII:

pip install qrcode
import qrcode qr = qrcode.QRCode(border=2) qr.add_data(qr_url) qr.make(fit=True) qr.print_ascii(invert=True)

二维码有效期大约 60 秒,超时后重新获取即可。

3. TaoToken 统一 Key 配置:settings.json 与 config.toml 骨架

这一节是整篇文章的核心。Hermes Agent 的配置分两层:settings.json负责运行时参数(模型、超时、日志级别等),config.toml负责提供商和网关的声明式配置。TaoToken 的统一 Key 需要同时写入这两个文件,才能让微信网关在收到消息时正确路由到 LLM 后端。

先拿到 TaoToken 的 API Key。登录控制台后创建 Key,复制出来。API 端点固定为https://taotoken.net/api,不要加 UTM 参数,那是给网页链接用的。

settings.json的骨架如下,路径在~/.hermes/settings.json:

{ "llm": { "provider": "openai_compatible", "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-20250514", "timeout": 120, "max_retries": 3 }, "gateway": { "platform": "weixin", "enabled": true, "log_level": "info" }, "agent": { "max_tokens": 4096, "temperature": 0.7, "tools_enabled": true } }

关键字段说明:provider设为openai_compatible,因为 TaoToken 的 API 兼容 OpenAI 格式;base_url必须是https://taotoken.net/api,末尾不要加斜杠;model填你想用的模型 ID,TaoToken 支持的模型列表可以在控制台查看;timeout在 armv7l 设备上建议设大一点,因为 32 位 ARM 的加解密速度慢,120 秒比较稳妥。

config.toml的骨架在~/.hermes/config.toml:

[providers.taotoken] type = "openai_compatible" base_url = "https://taotoken.net/api" api_key_env = "TAOTOKEN_API_KEY" default_model = "claude-sonnet-4-20250514" [gateway.weixin] enabled = true platform = "weixin" provider = "taotoken" reply_timeout = 120 [agent] provider = "taotoken" system_prompt = "你是一个通过微信提供服务的 AI 助手,回答简洁、准确,必要时调用工具。"

这里用了api_key_env而不是直接写 Key,是为了避免 Key 硬编码在配置文件里。你需要在~/.hermes/.env里加一行:

TAOTOKEN_API_KEY=sk-你的TaoToken密钥

然后确保 Hermes Agent 启动时加载了这个环境变量。可以在~/.bashrc里加:

export TAOTOKEN_API_KEY="sk-你的TaoToken密钥"

或者直接在启动脚本里source ~/.hermes/.env。

如果你用的是 Claude Code 或 Cline 这类工具,配置逻辑类似,但字段名不同。Claude Code 的settings.json里对应的是env.ANTHROPIC_BASE_URL和env.ANTHROPIC_API_KEY;Cline 的 MCP 配置里对应的是baseUrl和apiKey。核心原则不变:Base URL 指向https://taotoken.net/api,Key 用 TaoToken 的,Model ID 填你实际要用的模型。

配置写完后,检查一下 JSON 和 TOML 的语法。JSON 不允许尾随逗号,TOML 的字符串必须用双引号。我见过太多人因为一个多余的逗号排查半小时。

4. 验证请求:确认微信助手能正常收发消息

配置写好了不代表能跑通。这一节给出可复制的验证动作,从底层 API 到微信网关逐层确认。

第一步,先验证 TaoToken 的 API 通道是否通。用 curl 直接打一个 chat completions 请求:

curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "回复两个字:通了"}], "max_tokens": 20 }'

如果返回的 JSON 里有choices[0].message.content且内容是「通了」,说明 API 通道没问题。如果返回 401,检查 Key 是否复制完整;如果返回 404,检查 Base URL 是否写成了https://taotoken.net/api而不是https://taotoken.net/api/v1(Hermes Agent 会自动拼接/v1,但 curl 测试时需要手动加)。

第二步,验证 Hermes Agent 能否加载配置。在虚拟环境里运行:

source venv311/bin/activate hermes config check

这个命令会输出当前加载的 provider、base_url、model 等信息。确认base_url显示的是https://taotoken.net/api,provider是taotoken。

第三步,启动微信网关:

hermes gateway start --platform weixin

启动日志里应该能看到Gateway started on platform weixin和LLM provider: taotoken。如果看到cryptography相关的报错,跳到下一节排查。

第四步,用另一个微信号给这个机器人微信号发一条消息,比如「你好,帮我算一下 23 乘以 47」。正常情况下,几秒内会收到回复「1081」。如果超过 30 秒没回复,检查网关日志:

tail -f ~/.hermes/logs/gateway.log

日志里会显示请求是否发到了 TaoToken、返回了什么状态码。常见的成功日志长这样:

[INFO] Received message from user: 你好,帮我算一下 23 乘以 47 [INFO] Sending request to provider taotoken, model claude-sonnet-4-20250514 [INFO] Response received, tokens: 156, latency: 3.2s [INFO] Reply sent to user

如果日志停在Sending request没有后续,大概率是网络超时或 Key 无效。如果日志显示Response received但用户没收到,检查微信网关的凭证是否过期(二维码登录的 token 有时效性)。

第五步,测试定时推送功能。创建一个简单的脚本fetch_news.py:

import json, urllib.request url = "https://hacker-news.firebaseio.com/v0/topstories.json" with urllib.request.urlopen(url, timeout=10) as r: ids = json.loads(r.read()) for sid in ids[:5]: item_url = f"https://hacker-news.firebaseio.com/v0/item/{sid}.json" with urllib.request.urlopen(item_url, timeout=10) as r: item = json.loads(r.read()) print(f"[{item.get('score', 0)}] {item.get('title', 'N/A')}") print(f" {item.get('url', 'N/A')}") print("---")

然后创建定时任务:

hermes cron create --name "每日科技速递" \ --schedule "0 8 * * *" \ --script fetch_news.py \ --prompt "将以下原始数据整理成简洁的中文摘要,使用要点形式呈现。\n\n原始数据:\n{STDIN}" \ --deliver origin

这个任务会在每天早上 8 点执行脚本,把结果发给 LLM 整理成中文摘要,然后推送到你的微信。如果收到推送,说明整条链路完全打通。

5. armv7l 常见报错排查:cryptography、401、local proxy failed

这一节列出我在 armv7l 设备上实际撞到的报错和解决方案。每个报错都给出触发场景、错误原文、排查思路和修复动作。

报错一:PyInterpreterState_Get: GIL error

触发场景:启动微信网关时,Python 进程直接崩溃,终端输出PyInterpreterState_Get: GIL error或Fatal Python error: PyInterpreterState_Get: GIL error。

原因:cryptography库在 armv7l(32 位 ARM Android)上存在 GIL 兼容性问题。这个库的底层用了 Rust 编写的maturin构建,而maturin对 Android armv7l 的支持不完整,尝试从源码编译会报Unsupported Android architecture: armv8l。

排查:运行pip show cryptography确认版本,然后python -c "from cryptography.hazmat.primitives.ciphers import AES"看是否直接崩溃。

修复:换用pycryptodomex,它是纯 Python/可编译的替代方案,支持 armv7l。

pip install pycryptodomex

在 armv7l 上编译需要 5-10 分钟,耐心等待。编译完成后,修改gateway/platforms/weixin.py,把from cryptography的引用替换为from Cryptodome:

# 原来: # from cryptography.hazmat.primitives.ciphers import AES # 改为: from Cryptodome.Cipher import AES

注意Cryptodome的首字母大写,这是pycryptodomex的包名约定,和cryptography不同。

报错二:401 Unauthorized或invalid api key

触发场景:微信网关启动成功,但发消息后收到 401 错误,日志显示Provider returned 401。

原因:TaoToken 的 Key 无效、过期、或复制时带了空格。

排查:用第 4 节的 curl 命令直接测试 Key。如果 curl 也返回 401,说明 Key 本身有问题;如果 curl 成功但 Hermes Agent 失败,说明配置文件里的 Key 没被正确加载。

修复:检查~/.hermes/.env里的TAOTOKEN_API_KEY是否有多余空格或换行。检查settings.json里的api_key字段是否和.env冲突(如果两处都写了,以settings.json为准)。重新生成 Key 后,确保config.toml里的api_key_env指向的环境变量名和.env里的一致。

报错三:local proxy failed或connection refused

触发场景:网关日志显示local proxy failed或dial tcp 127.0.0.1:7890: connect: connection refused。

原因:系统里配置了本地代理,但代理服务没有运行。Termux 环境有时会继承 Android 系统的代理设置,或者~/.bashrc里有export http_proxy之类的残留。

排查:运行env | grep -i proxy查看是否有代理环境变量。

修复:清除代理变量:

unset http_proxy https_proxy all_proxy

或者在~/.bashrc里注释掉相关行。然后重启网关。

报错四:reading choices: unexpected end of JSON input

触发场景:网关收到 LLM 响应后解析失败,日志显示reading choices: unexpected end of JSON input。

原因:TaoToken 返回的响应被截断,或者max_tokens设置过大导致响应超时。在 armv7l 设备上,网络栈和内存都比较紧张,大响应容易出问题。

排查:在settings.json里把max_tokens从 4096 降到 2048,timeout从 120 增到 180。

修复:如果降max_tokens后仍然报错,检查config.toml里的reply_timeout是否小于settings.json里的timeout。两个值要匹配,建议都设为 180。

报错五:OAuth token expired或微信登录失效

触发场景:网关运行一段时间后,微信消息不再回复,日志显示OAuth token expired或WEIXIN_TOKEN invalid。

原因:微信网关的登录凭证有时效性,二维码登录的 token 通常几天到一周会过期。

排查:检查~/.hermes/.env里的WEIXIN_TOKEN是否还有效。

修复:重新运行hermes gateway setup,选择Weixin,重新扫码登录。如果二维码不显示,用第 2 节的 iLink API 方式获取。建议把重新登录的步骤写成一个脚本,方便定期执行。

报错六:pip install超时或Read timed out

触发场景:安装pycryptodomex或其他依赖时,pip 下载超时。

原因:默认 PyPI 源在国内网络下速度慢。

修复:指定国内镜像:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pycryptodomex

如果清华源也不稳定,可以试阿里源:

pip install -i https://mirrors.aliyun.com/pypi/simple/ pycryptodomex

注意某些镜像(如 sjtu.edu.cn)在 Termux 环境下可能不可达,需要逐个测试。

6. 长期运行与 Coding Plan 接入建议

微信网关跑起来之后,下一步是让它稳定运行。Termux 在 Android 上会被系统杀后台,需要做几件事:在 Android 设置里给 Termux 加白名单、关闭电池优化、用termux-wake-lock保持唤醒。Hermes Agent 本身可以用nohup或tmux后台运行:

tmux new -s hermes source venv311/bin/activate hermes gateway start --platform weixin # Ctrl+B 然后 D 脱离会话

重新连接会话用tmux attach -t hermes。

如果你打算把这个微信助手用于长期编码任务或 Agent 工作流,比如让它帮你 review 代码、跑测试、定时拉取仓库更新,建议关注 TaoToken 的 Coding Plan。Coding Plan 针对高频编码场景做了额度优化,比按量计费更适合长期挂着的 Agent。具体入口在控制台的订阅页面,模型对话和 API Keys 管理也在同一个控制台。

模型选择上,日常对话用轻量模型(响应快、成本低),代码审查和复杂推理切换到 Claude Sonnet 或 GPT-4 级别。TaoToken 的统一通道让你可以在settings.json里改一个model字段就完成切换,不需要重新配置 Key 或 Base URL。

最后提醒一点:微信网关的登录凭证会过期,建议写一个 cron 任务定期检查WEIXIN_TOKEN的有效性,失效时自动重新获取二维码并推送通知到你的备用渠道。这个自动化脚本本身也可以用 Hermes Agent 来写——让它帮你生成一个监控脚本,然后你 review 后部署。整个链路是自洽的:TaoToken 提供模型能力,Hermes Agent 提供网关和工具调用,微信提供交互界面,Termux 提供运行环境。四者组合起来,一台闲置的 Android 手机就变成了一个常驻的 AI 助手节点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 6:44:09

OpenClaw 常用命令速查手册:从入门到精通,把 settings 改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 6:44:08

Java (Spring AI) 实现MCP server:把数据库智能问答接入TaoToken统一通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/1 6:43:20

Kimi K2+Claude Code 这个王牌组合可香了!TaoToken 统一 Key 接入实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华