跳转到内容

正在加载搜索…

在另一台机器上使用 OpenRouter key

当 OpenRouter API key 存放在一台机器上(key 机器),而运行模拟器和 harness 的是另一台机器(运行机器),并且 key 应留在原处时,使用本页的方法。

scripts/openrouter_relay.py 在 key 机器上运行。运行机器把 OpenRouter 请求发到这里,携带的是一个共享的 relay token,而不是 key。relay 检查 token,将其替换为自己的 OPENROUTER_API_KEY,把请求原样转发到 https://openrouter.ai/api/v1/...,再把回复以流式方式传回。模型、prompt、采样设置和回复与直接调用 OpenRouter 完全相同;调用费用计入 key 机器的 OpenRouter 账户。

run machine key machine
harness ──HTTP──> 127.0.0.1:8850 ══SSH tunnel══> relay :8850 ──HTTPS──> openrouter.ai
(Bearer <relay token>) (Bearer <OpenRouter key>)

relay 只需要 Python 3.11+,不需要其他依赖,因此有一份 scripts/openrouter_relay.py 即可,不需要完整的 checkout。

Terminal window
# Once: make a relay token and keep it for both machines.
python3 -c 'import secrets; print(secrets.token_urlsafe(32))'
export OPENROUTER_API_KEY=<your OpenRouter key>
export OPENROUTER_RELAY_TOKEN=<relay token>
python3 scripts/openrouter_relay.py --port 8850

它为每个请求打印一行(时间、客户端、路径、模型、状态、秒数),从不记录 prompt 或 key。--timeout(默认 900 s)限制单次 OpenRouter 调用的时长。

relay 使用明文 HTTP,且只监听 127.0.0.1,因此要通过 SSH 访问它:

Terminal window
ssh -N -L 8850:127.0.0.1:8850 <user>@<key machine>

让它在单独的终端中保持运行(或加上 -f 使其转入后台)。不要在你无法控制的网络上用 --host 0.0.0.0 启动 relay:那样 token 和 prompt 会以未加密的形式传输。

3. 运行机器:让 harness 指向 relay

Section titled “3. 运行机器:让 harness 指向 relay”
Terminal window
export OPENROUTER_RELAY_TOKEN=<relay token>
export OPENROUTER_RELAY_URL=http://127.0.0.1:8850/api/v1

设置了 OPENROUTER_RELAY_URL 后,配置加载器会让每个 OpenRouter 模型角色都经过 relay:主模型、VLM 和 verifier。配置文件保持不变,运行机器上也不需要 OPENROUTER_API_KEY。由服务支持的角色(service = "molmo2")、自托管的 openai_chat 模型和其他 provider 不受影响。取消设置该变量即可重新直接调用 OpenRouter。

Terminal window
harness run configs/experiments/dev.toml --output runs/relay

解析后的配置,以及因此每个 episode 的清单,都会把 base_url 记录为 relay URL,并记录 api_key_env = "OPENROUTER_RELAY_TOKEN",因此一次运行能表明它经过了 relay。relay 只改变传输方式:经过它的一次运行与相同配置、任务、seed 和预算下的直接运行可以比较,其 identity 也相同。

OPENROUTER_BASE_URL 则是让每个 OpenRouter 角色指向另一个与 OpenRouter 兼容的 URL(代理),并使用通常的 OPENROUTER_API_KEY。同时设置这两个变量会报错。

若只想在某一个 agents 文件中固定使用 relay,请在每个 OpenRouter 角色上设置:

[main]
backend = "openrouter"
base_url = "http://127.0.0.1:8850/api/v1"
api_key_env = "OPENROUTER_RELAY_TOKEN"
[vlm]
backend = "openrouter"
base_url = "http://127.0.0.1:8850/api/v1"
api_key_env = "OPENROUTER_RELAY_TOKEN"
现象 原因
Set OPENROUTER_RELAY_TOKEN before selecting the openrouter backend 运行机器上没有导出 token。
HTTP 401 wrong or missing relay token(带有 "relay": true) 两台机器上的 token 不一致。
HTTP 502 OpenRouter unreachable key 机器无法访问 openrouter.ai。
连接 127.0.0.1:8850 被拒绝 SSH 隧道或 relay 没有运行。
其他任何 HTTP 错误 来自 OpenRouter 本身,原样透传。

relay 不会重试。重试、超时和流式传输仍由角色设置(retries、retry_seconds、timeout_seconds、stream),与直接调用相同。