我把这个 AI Agent 汉化了,顺手做了个 Windows 桌面端

0 阅读5分钟

最近在折腾一个叫 Hermes Agent 的开源项目,做了两件事:把它汉化了,然后给它配了个 Windows 托盘应用。

写这篇文章,记录一下过程,也分享给同样在用 AI Agent 的朋友。

Hermes 是什么

Hermes 是 Nous Research 出品的自进化 AI Agent。

和市面上大多数 Agent 框架不同,它有一个核心设计:内置学习循环。用过的对话、执行过的任务,会被它自动整理成"技能"持久化下来,下次遇到类似问题直接复用,越用越聪明。

它的另一个特点是模型无关。OpenAI、Anthropic、OpenRouter 上的 200+ 模型,国内的通义千问、Kimi、智谱 GLM、MiniMax、小米 MiMo、DeepSeek——全都支持,hermes model 一条命令切换,不改代码,不锁定。

可以跑在 $5 的 VPS 上,通过 Telegram 远程对话。也可以本地跑,接 WSL2。

为什么要汉化

第一次打开 Hermes,hermes help 出来一屏英文,hermes setup 的安装向导也全是英文。

对于英文不太顺手的用户来说,这个门槛不低。而且 Hermes 的命令体系比较复杂,36 条命令,24 个模型 Provider,光靠猜很容易用错。

所以我 fork 了一份,把核心界面全部汉化:

  • CLI 命令描述(36 条):hermes help 现在显示中文
  • 模型 Provider 标签(24 个):hermes model 列表里的提供商名称
  • 安装向导hermes setup 的交互式配置流程
  • 启动横幅:每次启动时的 Banner
  • 诊断工具hermes doctor 的输出信息

汉化之后,hermes help 大概长这样:

hermes chat      开始新的对话
hermes model     切换 AI 模型
hermes memory    管理记忆与知识库
hermes skill     管理技能
hermes setup     配置向导
hermes doctor    诊断工具
...

同时在 README 里补充了国内用户推荐的模型配置表,以及 MemPalace 知识库和 graphify 知识图谱的集成文档。

仓库地址:github.com/xyshanren/h…cn 分支是汉化主分支,会持续跟进上游更新。

然后做了个桌面端

汉化完之后,用了一段时间,发现一个问题:

Hermes 是 CLI 工具,每次用都要打开终端,进 WSL2,手动启动 Gateway,再开始对话。步骤多,而且 WSL2 的终端窗口一直挂在那里,有点碍眼。

我想要的是:开机自启,托盘常驻,点一下就能聊

于是做了 Hermes Tray

技术选型

最开始想用 Python + tkinter 做个简单托盘,但 Hermes 没有内置 Web UI,只有 OpenAI 兼容的 API 端点。tkinter 做聊天界面太费劲,而且打包成 exe 体积也不小。

后来选了 Tauri 2:Rust 后端 + WebView 前端,打包出来的 exe 只有 83MB,原生托盘支持,WebView 渲染聊天界面。

架构

Windows 桌面 (Tauri 2 WebView)
  │
  ├─ 系统托盘 ── 启动/停止 Gateway,状态指示
  ├─ 聊天界面 ── 内嵌 WebView,流式对话
  │
  └─ Rust 代理层 ──→ Hermes Gateway (WSL2)
                      http://<wsl-ip>:8642

前端通过 invoke 调用 Rust 命令,Rust 用 reqwest 代理请求到 WSL2 里的 Hermes Gateway。流式响应(SSE)通过 window.emit 推送回前端,实现打字机效果。

一个有意思的坑

WSL2 的网络是隔离的,Windows 侧和 WSL2 实例不共享 127.0.0.1。

最开始我用 PowerShell 的 Get-NetAdapter 检测 WSL2 IP,拿到的是 172.31.96.1——这是 Windows 侧的 vEthernet 虚拟网卡地址,不是 WSL2 实例的地址。

实际的 WSL2 实例 IP 是 172.31.98.230,需要在 WSL2 内部执行 hostname -I 才能拿到。

修复方法:Rust 端调用 wsl -d Ubuntu-24.04.4 hostname -I,解析出实例 IP,再拼接请求地址。

fn detect_wsl_ip() -> String {
    let output = Command::new("wsl")
        .args(["-d", "Ubuntu-24.04.4", "hostname", "-I"])
        .output()
        .ok();
    // 解析第一个 IP 地址
    ...
}

这个坑卡了我一段时间,连接状态一直显示"未连接",加了诊断日志才发现请求发到了 http:///health(URL 里 IP 是空字符串)。

现在的状态

Hermes Chat.png Phase 1 已经可用:

  • ✅ 系统托盘常驻,右键菜单启动/停止 Gateway
  • ✅ 聊天界面,流式响应
  • ✅ 自动检测 WSL2 IP,无需手动配置
  • ✅ 所有数据本地,不经过任何云服务

Phase 2 计划中:本地模型运行时下载(Whisper 语音转写、小参数量 LLM 离线备用)。

顺带一提:MemPalace

Hermes 支持接入 MCP(Model Context Protocol)工具。我接了一个叫 MemPalace 的本地记忆系统。

它完全本地运行,不依赖任何外部 API,用 ChromaDB 做向量存储,SQLite 做知识图谱。把代码库、文档、对话历史 mine 进去之后,Hermes 可以在对话中直接检索这些内容。

在 LongMemEval 基准测试上,raw 模式得分 96.6%,而且零 API 调用。

配置方式:

# ~/.hermes/config.yaml
mcp_servers:
  mempalace:
    command: python
    args: ["-m", "mempalace.mcp_server"]
    env:
      MEMPALACE_DIR: "/root/.mempalace"

hermes mcp test mempalace 验证连接,29 个工具全部可用。
ps:graphify 是另一个比较有意思的工具,集成方法我放到 hermes-agent-cn 项目文档中了,有兴趣的可以看下

小结

这两件事加起来,让 Hermes 在国内的使用体验好了不少:

  1. 汉化解决了语言门槛,命令和配置不再靠猜
  2. 桌面端解决了使用门槛,不用每次开终端

代码都在 GitHub 上,欢迎 star 和 PR:

主仓库地址:github.com/xyshanren/h…
备份地址:gitee.com/XiaoYReclus…

如果你也在用 Hermes,或者对本地 AI Agent 感兴趣,欢迎交流。


Hermes Tray 目前基础功能可用,下一步准备集成本地模型降低使用成本,最终让它成为你随时可用的AI助手,敬请期待