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 服务器(回复)
  1. Raft 服务器通过 SSE 把唤醒提示发送给桥接进程。
  2. 桥接把每条提示以 POST /wake 转发到适配器的环回端点。
  3. 适配器校验桥接 token,确认载荷无内容,然后把一条唤醒通知注入 Hermes 会话。
  4. 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_PROFILERaft agent profile 标识——设置后自动启用适配器(必填)