乐于分享
好东西不私藏

从零开始:我把 AI 助手接入了飞书,现在用手机就能远程操控服务器

从零开始:我把 AI 助手接入了飞书,现在用手机就能远程操控服务器
本文记录将 Hermes Agent 部署到腾讯云服务器,并通过飞书(Lark)实现手机远程对话的完整过程。适合想打造「移动端 AI 控制台」的开发者参考。

一、为什么要这么做?

我的 AI 助手 Hermes Agent 一直运行在本地 Mac 上,平时用终端对话没问题,但出门在外想用手机操作时就很麻烦——Mac 没有公网 IP,飞书的回调请求根本打不进来。

目标很明确:把手机变成随身 AI 控制台,随时随地通过飞书发消息就能让服务器执行任务。

技术架构也很简单:

手机飞书 App → 飞书服务器 → 腾讯云服务器 → Hermes Gateway → AI 模型

二、环境准备:一台云服务器

我使用的是腾讯云轻量应用服务器,配置如下:

  • 系统:OpenCloudOS 8(CentOS 兼容系)
  • IP:YOUR_SERVER_IP(在云服务商控制台查看)
  • 规格:2核 4G(够用了)

2.1 SSH 免密登录

本地生成 ed25519 密钥对,公钥上传到服务器的 ~/.ssh/authorized_keys,实现免密直连:

ssh root@YOUR_SERVER_IP

这一步是后续所有自动化操作的基础,省去了反复输密码的麻烦。

2.2 安装 Python 3.11

OpenCloudOS 8 默认带的 Python 3.6.8 太旧,Hermes 需要 3.11+。好在仓库里直接有:

dnf install python3.11 python3.11-develln -sf /usr/bin/python3.11 /usr/local/bin/python3

2.3 安装 Node.js 22

Hermes 的浏览器工具依赖 Node.js,用国内 npmmirror 下载:

curl -O https://registry.npmmirror.com/-/binary/node/latest-v22.x/node-v22.14.0-linux-x64.tar.xztar -xJf node-v22.14.0-linux-x64.tar.xz -C /usr/local/ln -sf /usr/local/node-v22.14.0-linux-x64/bin/node /usr/local/bin/nodeln -sf /usr/local/node-v22.14.0-linux-x64/bin/npm /usr/local/bin/npm

三、部署 Hermes Agent:被网络问题卡了三次

3.1 第一次卡点:GitHub 下不动

腾讯云国内节点访问 GitHub 经常超时,直接用 git clone 或 curl | bash 都失败了。我的解决方案是本地打包,SCP 上传

# 在本地 Mac 上tar czvf /tmp/hermes-agent.tar.gz \  --exclude='.git' --exclude='venv' --exclude='__pycache__' \  -C ~/.hermes hermes-agent# 上传到服务器scp /tmp/hermes-agent.tar.gz root@YOUR_SERVER_IP:/tmp/

3.2 第二次卡点:PyPI 也超时

服务器上装 Python 依赖时,pip install 反复超时。解决方式是使用阿里云 PyPI 镜像,通过环境变量注入:

UV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple \  uv pip install -e .
小提示:uv 比 pip 快很多,而且支持通过环境变量临时指定镜像源,不用改全局配置。

3.3 创建虚拟环境与命令入口

cd /usr/local/lib/hermes-agentuv venv --python python3.11source .venv/bin/activateUV_INDEX_URL=https://mirrors.aliyun.com/pypi/simple uv pip install -e .ln -sf /usr/local/lib/hermes-agent/.venv/bin/hermes /usr/local/bin/hermes

验证安装:

hermes --version# 输出:Hermes Agent v0.14.0

四、配置 AI 模型:接入 Kimi

Hermes 支持多种模型,我选了 Moonshot 的 kimi-k2.6,国内访问速度快。

在 /root/.hermes/config.yaml 写入:

model:defaultkimi-k2.6providerkimi-coding-cnbase_urlhttps://api.moonshot.cn/v1

然后在 /root/.hermes/.env 放入 API Key:

KIMI_CN_API_KEY=sk-YOUR_API_KEY

五、接入飞书:核心环节

5.1 创建飞书应用

在飞书开放平台(open.feishu.cn)创建企业自建应用,拿到:

  • App ID:cli_xxxxxxxxxxxxxxxx(在应用凭证页面查看)
  • App Secret:YOUR_APP_SECRET(在应用凭证页面查看)

这两个凭证是 Gateway 连接飞书的「钥匙」。

5.2 配置 Gateway

把凭证写入环境变量:

echo "FEISHU_APP_ID=cli_xxxxxxxxxxxxxxxx" >> /root/.hermes/.envecho "FEISHU_APP_SECRET=YOUR_APP_SECRET" >> /root/.hermes/.envecho "GATEWAY_ALLOW_ALL_USERS=true" >> /root/.hermes/.env

启动 Gateway:

hermes gateway run

5.3 第三次卡点:缺少飞书 SDK

启动后发现连接失败,日志提示缺少 lark_oapi。这是因为 Hermes 的飞书适配器依赖是可选的,需要单独安装:

python -m ensurepip --upgradepython -m pip install --index-url https://mirrors.aliyun.com/pypi/simple \  lark-oapi==1.5.3 qrcode==7.4.2 aiohttp websockets

装完重启 Gateway,日志出现:

[Feishu] Connected in websocket mode (feishu)connected to wss://msg-frontier.feishu.cn/ws/v2?...

飞书 WebSocket 连接成功。


六、一个隐蔽的坑:4100 个垃圾文件

飞书能连上了,发消息却报错:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa3 in position 45

排查后发现,问题出在本地 Mac 打包时带入了 AppleDouble 文件。macOS 的 tar 会给每个文件生成一个 ._xxx 的元数据文件,这些文件是二进制格式,不是 UTF-8 文本。

服务器上扫了一下,居然有 4100 个这样的垃圾文件:

find /usr/local/lib/hermes-agent -name '._*' -type f | wc -l# 4100

删除后问题解决:

find /usr/local/lib/hermes-agent -name '._*' -type f -delete
教训:从 Mac 打包源码到 Linux 服务器时,务必排除 ._* 文件,或者用 COPYFILE_DISABLE=1 环境变量禁用。

七、授权机制:安全与便利的权衡

当 AI 要执行 curl、终端命令等操作时,Hermes 会弹出授权卡片,让用户在飞书里点「确认」或「取消」。

但第一次测试时,点击按钮报错。原因是飞书应用没有订阅「卡片操作事件」(card.action.trigger)。

7.1 临时方案:自动授权(YOLO Mode)

如果想先快速体验,可以开启自动授权模式,所有操作自动执行:

echo "HERMES_YOLO_MODE=true" >> /root/.hermes/.env

7.2 正式方案:订阅卡片事件

在飞书开放平台 → 事件与回调 → 添加事件订阅,勾选:

  • 卡片操作事件(card.action.trigger)

然后关闭 YOLO Mode,重启 Gateway。现在每次涉及敏感操作时,飞书会推送卡片,点击后服务器才会执行,既安全又可控。


八、最终效果

现在在手机上打开飞书,找到机器人,发送:

「查询北京天气」

机器人会返回结果。如果涉及外部调用,会先发送确认卡片,点确认后继续执行。

整个链路:

飞书 App → 飞书云 → 腾讯云 YOUR_SERVER_IP → Hermes Gateway → Kimi API → 返回结果到飞书

九、关键配置汇总

服务器环境

组件
版本
路径
Python
3.11.5
/usr/local/bin/python3
Node.js
22.14.0
/usr/local/node-v22.14.0-linux-x64/
Hermes
0.14.0
/usr/local/lib/hermes-agent/

环境变量(/root/.hermes/.env)

FEISHU_APP_ID=cli_xxxxxxxxxxxxxxxxFEISHU_APP_SECRET=YOUR_APP_SECRETGATEWAY_ALLOW_ALL_USERS=trueKIMI_CN_API_KEY=sk-YOUR_API_KEY

模型配置(/root/.hermes/config.yaml)

model:defaultkimi-k2.6providerkimi-coding-cnbase_urlhttps://api.moonshot.cn/v1

十、写在最后

这次部署花了大约 2 小时,主要时间耗在解决网络问题(GitHub/PyPI 超时)和排查编码错误(AppleDouble 文件)上。

如果你也想搭建类似的「手机 AI 控制台」,建议:

  1. 提前准备国内镜像源,避免下载卡死
  2. Mac 传 Linux 时排除 ._* 文件
  3. 飞书应用记得开「卡片操作事件」权限
  4. 先用 YOLO Mode 验证通路,再切回手动授权

现在我的手机就是一个随身携带的 AI 终端,随时发消息就能让服务器干活。这大概就是「移动优先」的 AI 时代该有的样子。


本文技术栈:Hermes Agent / OpenCloudOS 8 / Python 3.11 / Node.js 22 / 飞书开放平台 / Moonshot Kimi