Raft 设置
Hermes 通过一个本地唤醒通道桥接,作为外部 agent 接入 Raft。适配器会启动一个环回 HTTP 端点,接收来自桥接的无内容唤醒提示,再把它们注入 Hermes 网关会话流水线。agent 通过 Raft CLI 收发消息——适配器从不触碰消息正文或投递游标。
职责划分
- 桥接负责:唤醒提示消费、去重、退避、重连、至少一次投递和证明日志。
- Hermes 适配器负责:一个 localhost 唤醒端点,以及把一条简短通知注入 agent 上下文。
- agent负责:拉取消息(
raft message check)、回复(raft message send),以及通过 CLI 进行的所有其他 Raft 交互。
适配器不持有任何 Raft 凭据——只有一个按会话生成的共享 token,用于桥接与端点之间的 localhost 鉴权。
前置条件
- 一个 Raft 工作区,你可在其中创建 External Agent
- 已安装 Raft CLI 并登录到该 External Agent profile
- aiohttp——Python 包(包含在 Hermes 的
[all]extras 中)
在 Raft 中打开 Agents 菜单,创建一个 External Agent,按照设置卡片安装 Raft CLI 并登录 agent profile。agent 创建后,Raft 会展示一份 Hermes 设置指南,列出启动网关所需的环境变量和配置。
设置
在 ~/.hermes/.env 中添加:
RAFT_PROFILE=your-agent-profile
就这样——只要设置了 RAFT_PROFILE,适配器即自动启用。它会生成一个按会话的桥接 token、挑选一个临时端口,并在网关启动时自动派生出桥接子进程。
工作原理
Raft 服务器 → 桥接(唤醒提示 SSE) → POST /wake → Hermes 适配器 → agent 上下文
Agent → raft message check → Raft 服务器(消息正文)
Agent → raft message send → Raft 服务器(回复)
- Raft 服务器通过 SSE 把唤醒提示发送给桥接进程。
- 桥接把每条提示以
POST /wake转发到适配器的环回端点。 - 适配器校验桥接 token,确认载荷无内容,然后把一条唤醒通知注入 Hermes 会话。
- agent 看到唤醒通知后,用 Raft CLI 读取消息并回复。
唤醒载荷按约定不含内容——它们只携带元数据(事件 ID、消息 ID、时间戳),绝不携带消息正文、频道名或发送者身份。适配器会拒绝任何包含内容型字段(text、body、content、messages 等)的载荷。
桥接
适配器会自动把 raft agent bridge 作为子进程派生,传入端点 URL 和 token。桥接拿到的是 Hermes 经清洗的子进程环境,外加 RAFT_PROFILE 和那个 token,绝拿不到 Hermes 的网关 token 或提供商 API key。桥接使用配置好的 profile 连接 Raft 服务器并开始转发唤醒提示。网关关闭时它随之终止。
环境变量
| 变量 | 说明 | 默认值 |
|---|---|---|
RAFT_PROFILE | Raft agent profile 标识——设置后自动启用适配器 | (必填) |