Matrix 配置
Hermes Agent 集成了 Matrix,這一開放的、聯邦式的消息協議。Matrix 允許你運行自己的主服務器(homeserver),或使用公開的服務器如 matrix.org —— 無論哪種方式,你都能掌控自己的通信。該機器人通過 matrix-nio Python SDK 連接,將消息通過 Hermes Agent 的處理管道(包括工具使用、記憶和推理)進行處理,並實時響應。它支持文本、文件附件、圖片、音頻、視頻,以及可選的端到端加密(E2EE)。
Hermes 可與任何 Matrix 主服務器配合使用 —— Synapse、Conduit、Dendrite 或 matrix.org。
在開始配置前,這裡是你最關心的部分:Hermes 連接後的行為表現。
Hermes 的行為表現
| 上下文 | 行為 |
|---|---|
| 私聊(DMs) | Hermes 對每條消息都會響應,無需 @mention。每個私聊擁有獨立的會話。設置 MATRIX_DM_MENTION_THREADS=true 可在機器人被 @mentioned 時啟動線程。 |
| 房間(Rooms) | 默認情況下,Hermes 需要 @mention 才會響應。設置 MATRIX_REQUIRE_MENTION=false 或將房間 ID 添加到 MATRIX_FREE_RESPONSE_ROOMS 可啟用自由響應房間。房間邀請會自動接受。 |
| 線程(Threads) | Hermes 支持 Matrix 線程(MSC3440)。如果你在某個線程中回覆,Hermes 會將線程上下文與主房間時間線隔離。對於機器人已參與過的線程,無需再次提及。 |
| 自動線程創建 | 默認情況下,Hermes 會為每個在房間中回覆的消息自動創建一個線程。這有助於保持對話的隔離性。設置 MATRIX_AUTO_THREAD=false 可禁用此功能。 |
| 多人共享房間 | 默認情況下,Hermes 在同一房間內為每個用戶保留獨立的會話歷史。兩個人在同一個房間聊天時,不會共享同一份對話記錄,除非你明確禁用此行為。 |
機器人會在收到邀請時自動加入房間。只需將機器人的 Matrix 用戶邀請到任意房間,它就會加入並開始響應。
Matrix 中的會話模型
默認情況下:
- 每個私聊擁有獨立的會話
- 每個線程擁有獨立的會話命名空間
- 同一房間內的每個用戶擁有獨立的會話
這由 config.yaml 控制:
group_sessions_per_user: true
僅當你明確希望整個房間共享一個對話時,才將其設為 false:
group_sessions_per_user: false
共享會話在協作型房間中可能有用,但也意味著:
- 用戶共享上下文增長和 Token 成本
- 某個人的長時間工具任務可能導致其他人的上下文膨脹
- 某個人正在進行的任務可能中斷另一個人在同個房間中的後續回覆
提及與線程配置
你可以通過環境變量或 config.yaml 配置提及和自動線程行為:
matrix:
require_mention: true # 需要在房間中@提及(默認值:true)
free_response_rooms: # 免提及要求的客房
- "!abc123:matrix.org"
auto_thread: true # 自動創建響應線程(默認值:true)
dm_mention_threads: false # 在 DM 中@提及時創建線程(默認值: false)
或通過環境變量:
MATRIX_REQUIRE_MENTION=true
MATRIX_FREE_RESPONSE_ROOMS=!abc123:matrix.org,!def456:matrix.org
MATRIX_AUTO_THREAD=true
MATRIX_DM_MENTION_THREADS=false
如果你是從一個不支持 MATRIX_REQUIRE_MENTION 的舊版本升級,機器人之前會在房間中對所有消息做出響應。為保留此行為,請設置 MATRIX_REQUIRE_MENTION=false。
本指南將帶你完成完整的設置流程 —— 從創建機器人賬戶到發送第一條消息。
第一步:創建機器人賬戶
你需要一個 Matrix 用戶賬戶用於機器人。有幾種方式可以實現:
選項 A:在你的主服務器上註冊(推薦)
如果你運行自己的主服務器(Synapse、Conduit、Dendrite):
- 使用管理員 API 或註冊工具創建新用戶:
# 突觸示例
register_new_matrix_user -c /etc/synapse/homeserver.yaml http://localhost:8008
- 選擇一個用戶名,例如
hermes—— 完整的用戶 ID 將為@hermes:your-server.org。
選項 B:使用 matrix.org 或其他公開主服務器
- 訪問 Element Web 並創建新賬戶。
- 為你的機器人選擇一個用戶名(例如
hermes-bot)。
選項 C:使用你自己的賬戶
你也可以以自己的用戶身份運行 Hermes。這意味著機器人將以你的身份發帖 —— 適用於個人助手場景。
第二步:獲取訪問令牌
Hermes 需要一個訪問令牌來認證與主服務器的連接。你有兩個選擇:
選項 A:訪問令牌(推薦)
獲取令牌最可靠的方式:
通過 Element:
- 使用機器人賬戶登錄 Element。
- 進入 設置 → 幫助與關於。
- 向下滾動並展開 高級 —— 訪問令牌會顯示在此處。
- 立即複製它。
通過 API:
curl -X POST https://your-server/_matrix/client/v3/login \
-H "Content-Type: application/json" \
-d '{
"type": "m.login.password",
"user": "@hermes:your-server.org",
"password": "your-password"
}'
響應中包含 access_token 字段 —— 請複製該值。
訪問令牌將賦予對機器人 Matrix 賬戶的完全訪問權限。切勿公開分享或提交到 Git。若被洩露,請通過註銷該用戶的全部會話來撤銷。
選項 B:密碼登錄
你也可以不提供訪問令牌,而是提供機器人的用戶 ID 和密碼。Hermes 將在啟動時自動登錄。這種方式更簡單,但意味著密碼會存儲在你的 .env 文件中。
MATRIX_USER_ID=@hermes:your-server.org
MATRIX_PASSWORD=your-password
第三步:查找你的 Matrix 用戶 ID
Hermes Agent 使用你的 Matrix 用戶 ID 來控制誰可以與機器人互動。Matrix 用戶 ID 的格式為 @username:server。
要查找你的用戶 ID:
- 打開 Element(或您偏好的 Matrix 客戶端)。
- 點擊您的頭像 → 設置。
- 您的用戶 ID 會顯示在個人資料頂部(例如:
@alice:matrix.org)。
Matrix 用戶 ID 始終以 @ 開頭,幷包含一個 : 後跟服務器名稱。例如:@alice:matrix.org、@bob:your-server.com。
第 4 步:配置 Hermes Agent
選項 A:交互式設置(推薦)
運行引導式設置命令:
hermes gateway setup
當提示時選擇 Matrix,然後提供您的主服務器 URL、訪問令牌(或用戶 ID + 密碼),以及允許的用戶 ID。
選項 B:手動配置
將以下內容添加到您的 ~/.hermes/.env 文件中:
使用訪問令牌:
# 必填
MATRIX_HOMESERVER=https://matrix.example.org
MATRIX_ACCESS_TOKEN=***
# 可選:用戶 ID(如果省略,則從 token 自動檢測)
# MATRIX_USER_ID=@hermes:matrix.example.org
# 安全:限制哪些用戶可以與機器人交互
MATRIX_ALLOWED_USERS=@alice:matrix.example.org
# 多個允許用戶(用逗號分隔)
# MATRIX_ALLOWED_USERS=@alice:matrix.example.org,@bob:matrix.example.org
使用密碼登錄:
# 必填
MATRIX_HOMESERVER=https://matrix.example.org
MATRIX_USER_ID=@hermes:matrix.example.org
MATRIX_PASSWORD=***
# 安全
MATRIX_ALLOWED_USERS=@alice:matrix.example.org
可選的行為設置項,位於 ~/.hermes/config.yaml 中:
group_sessions_per_user: true
group_sessions_per_user: true會在共享房間中為每位參與者保持上下文隔離
啟動網關
配置完成後,啟動 Matrix 網關:
hermes gateway
機器人應在幾秒內連接到您的主服務器並開始同步。向它發送一條消息——無論是私信還是它已加入的房間中的消息——以進行測試。
您可以將 hermes gateway 在後臺運行,或作為 systemd 服務運行以實現持久化操作。詳情請參閱部署文檔。
端到端加密(E2EE)
Hermes 支持 Matrix 端到端加密,因此您可以在加密房間中與機器人聊天。
要求
E2EE 需要安裝帶有加密擴展的 matrix-nio 庫以及 libolm C 庫:
# 安裝 matrix-nio 並支持 E2EE
pip install 'matrix-nio[e2e]'
# 或者使用 hermes extras 安裝
pip install 'hermes-agent[matrix]'
您還需要在系統上安裝 libolm:
# Debian/Ubuntu
sudo apt install libolm-dev
# macOS
brew install libolm
# Fedora
sudo dnf install libolm-devel
啟用 E2EE
將以下內容添加到您的 ~/.hermes/.env 文件中:
MATRIX_ENCRYPTION=true
啟用 E2EE 後,Hermes 將:
- 將加密密鑰存儲在
~/.hermes/platforms/matrix/store/目錄中(舊版安裝:~/.hermes/matrix/store/) - 在首次連接時上傳設備密鑰
- 自動解密傳入消息並加密傳出消息
- 在收到邀請時自動加入加密房間
如果您刪除了 ~/.hermes/platforms/matrix/store/ 目錄,機器人將丟失其加密密鑰。您需要在 Matrix 客戶端中重新驗證該設備。若要保留加密會話,請備份此目錄。
如果未安裝 matrix-nio[e2e] 或缺少 libolm,機器人將自動降級為非加密(明文)客戶端。您將在日誌中看到警告信息。
主房間
您可以指定一個“主房間”,機器人將在其中發送主動消息(如定時任務輸出、提醒和通知)。有兩種設置方式:
使用斜槓命令
在機器人所在的任意 Matrix 房間中輸入 /sethome。該房間將成為主房間。
手動配置
將以下內容添加到您的 ~/.hermes/.env 文件中:
MATRIX_HOME_ROOM=!abc123def456:matrix.example.org
要查找房間 ID:在 Element 中,進入房間 → 設置 → 高級 → 顯示的 內部房間 ID 即為所求(以 ! 開頭)。
故障排除
機器人未響應消息
原因:機器人尚未加入房間,或 MATRIX_ALLOWED_USERS 中未包含您的用戶 ID。
解決方法:邀請機器人加入房間——它會在收到邀請後自動加入。確認您的用戶 ID 已包含在 MATRIX_ALLOWED_USERS 中(使用完整格式 @user:server)。重啟網關。
啟動時出現“認證失敗” / “whoami 失敗”
原因:訪問令牌或主服務器 URL 錯誤。
解決方法:驗證 MATRIX_HOMESERVER 是否指向您的主服務器(請包含 https://,不要加尾部斜槓)。檢查 MATRIX_ACCESS_TOKEN 是否有效——嘗試使用 curl 測試:
curl -H "Authorization: Bearer YOUR_TOKEN" \
https://your-server/_matrix/client/v3/account/whoami
如果返回您的用戶信息,則令牌有效。如果返回錯誤,請生成新的令牌。
出現“matrix-nio 未安裝”錯誤
原因:matrix-nio Python 包未安裝。
解決方法:安裝它:
pip install 'matrix-nio[e2e]'
或使用 Hermes 的附加組件安裝:
pip install 'hermes-agent[matrix]'
加密錯誤 / “無法解密事件”
原因:缺少加密密鑰、libolm 未安裝,或機器人的設備未被信任。
解決方法:
- 確認系統上已安裝
libolm(參見上文 E2EE 部分)。 - 確保
.env文件中設置了MATRIX_ENCRYPTION=true。 - 在您的 Matrix 客戶端(Element)中,進入機器人的個人資料 → 會話 → 驗證/信任機器人的設備。
- 如果機器人剛剛加入加密房間,它只能解密在加入之後發送的消息。舊消息將無法訪問。
同步問題 / 機器人落後
原因:長時間運行的工具執行會延遲同步循環,或主服務器響應緩慢。
解決方法:同步循環在出錯時會自動每 5 秒重試一次。檢查 Hermes 日誌中是否有與同步相關的警告。如果機器人持續落後,請確保您的主服務器具備足夠的資源。
機器人離線
原因:Hermes 網關未運行,或連接失敗。
解決方法:檢查 hermes gateway 是否正在運行。查看終端輸出中的錯誤信息。常見問題包括:主服務器 URL 錯誤、訪問令牌過期、主服務器無法訪問。
“用戶不允許” / 機器人忽略你
原因:你的用戶 ID 未包含在 MATRIX_ALLOWED_USERS 中。
解決方法:將你的用戶 ID 添加到 ~/.hermes/.env 文件中的 MATRIX_ALLOWED_USERS,然後重啟網關。請使用完整的 @user:server 格式。
安全性
始終設置 MATRIX_ALLOWED_USERS 以限制可以與機器人交互的用戶。如果沒有設置,網關會默認拒絕所有用戶,這是一種安全措施。僅添加你信任的用戶的用戶 ID —— 授權用戶將擁有對 Agent 所有功能的完全訪問權限,包括工具使用和系統訪問。
有關保護你的 Hermes Agent 部署的更多信息,請參閱 安全指南。
注意事項
- 任意主服務器:支持 Synapse、Conduit、Dendrite、matrix.org 或任何符合規範的 Matrix 主服務器。無需特定的主服務器軟件。
- 聯邦通信:如果你使用的是聯邦主服務器,機器人可以與來自其他服務器的用戶通信 —— 只需將他們的完整
@user:server用戶 ID 添加到MATRIX_ALLOWED_USERS即可。 - 自動加入:機器人會自動接受房間邀請並加入。加入後立即開始響應。
- 媒體支持:Hermes 可以發送和接收圖片、音頻、視頻和文件附件。媒體將通過 Matrix 內容倉庫 API 上傳至你的主服務器。
- 原生語音消息(MSC3245):Matrix 適配器會自動為傳出的語音消息標記
org.matrix.msc3245.voice標誌。這意味著 TTS 響應和語音音頻將在 Element 及其他支持 MSC3245 的客戶端中以 原生語音氣泡 形式顯示,而非普通音頻文件附件。帶有 MSC3245 標誌的傳入語音消息也會被正確識別並路由至語音轉文本轉錄。無需任何配置 —— 此功能可自動生效。