Peers 联邦¶
跨实例 Bot 发现和任务路由。连接多个 MetaBot 实例 — 同机或远程服务器。
概述¶
Peers 实现了联邦架构,多个 MetaBot 实例可以互相发现 Bot 并自动路由任务。适用于:
- 同一台机器上多个用户运行各自的 MetaBot 实例
- 团队在不同服务器上部署 MetaBot
- 跨环境共享专用 Bot
工作原理¶
- 发现 — 每个实例定期拉取 peer 的
GET /api/bots(每 30 秒) - 缓存 — Bot 列表本地缓存,快速查找
- 路由 — 本地找不到的 Bot 名自动转发到对应 peer
- 防循环 — 转发请求带
X-MetaBot-Originheader 防止循环委派 - 防传递 — 来自 peer 的 Bot 不会再传播(无 transitive 转发)
配置¶
通过任一种方式配置即可 — 也可以两种混用(按 URL 自动去重合并):
最简单的方式 — 直接加到 .env 文件。单 Bot 和多 Bot 模式都支持。
METABOT_PEERS=http://localhost:9200,http://192.168.1.50:9100
METABOT_PEER_SECRETS=alice-secret,bob-secret
METABOT_PEER_NAMES=alice,bob
METABOT_PEERS— 逗号分隔的 peer URL 列表(必填)METABOT_PEER_SECRETS— 逗号分隔的密钥,按位置与 URL 对应(可选,peer 设置了API_SECRET时需要)METABOT_PEER_NAMES— 逗号分隔的显示名称(可选,不填会从 URL 自动推导,如localhost-9200)
如果你已经使用 bots.json 进行多 Bot 配置,可以在同一个文件里添加 peers。
{
"feishuBots": [{ "..." }],
"peers": [
{
"name": "alice",
"url": "http://localhost:9200",
"secret": "alice-api-secret"
},
{
"name": "bob",
"url": "http://192.168.1.50:9100",
"secret": "bob-api-secret"
}
]
}
name— peer 的显示名称(必填)url— peer 的 API 地址(必填)secret— 对方的API_SECRET(可选,对方开启认证时需要)
不需要 bots.json
如果你只运行一个 Bot,直接在 .env 加 METABOT_PEERS 就行,不需要 bots.json。bots.json 的 peers 字段只是多 Bot 配置的便利选项。
限定名¶
使用 peerName/botName 语法精确路由:
# 自动路由 — 先查本地,再按顺序查 peer
mb talk backend-bot chatId "修复这个 bug"
# 指定 peer — 直接路由到 alice 的 backend-bot
mb talk alice/backend-bot chatId "修复这个 bug"
API¶
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/peers |
列出 peer 及健康状态 |
GET |
/api/bots |
列出所有 Bot(本地 + peer) |
POST |
/api/talk |
与 Bot 对话(自动路由到 peer) |
CLI¶
mb peers # 列出 peer 及状态
mb bots # 列出所有 Bot(含 peer)
mb talk alice/bot chatId "prompt" # 指定 peer 的 Bot 对话
健康监控¶
每 30 秒拉取一次 peer 状态。GET /api/peers 返回健康信息:
[
{
"name": "alice",
"url": "http://localhost:9200",
"healthy": true,
"lastChecked": 1710000000000,
"lastHealthy": 1710000000000,
"botCount": 3
}
]
不健康的 peer 在下次拉取时重试。不可达时清空缓存的 Bot 列表。