订阅代理

订阅代理是一个本地 HTTP 服务器,允许外部应用——OpenViking、Karakeep、Open WebUI,任何支持 OpenAI 兼容聊天补全的应用——将您的 Hermes 管理的提供商订阅用作它们的 LLM 端点。代理会附加正确的凭证(自动刷新),因此应用永远不需要静态 API 密钥。

这与 API 服务器不同:

API 服务器订阅代理
提供什么您的代理(完整工具集、记忆、技能)原始模型推理
用例”将 Hermes 用作聊天后端""从另一个应用使用我的 Portal 订阅”
认证您的 API_SERVER_KEY任意 bearer(代理附加真实的)
工具调用有——代理运行工具无——仅透传

当您想要代理作为后端时使用 API 服务器。当您只想通过订阅使用模型时使用代理。

快速开始

1. 登录您的提供商(一次性)

hermes login nous

这会在浏览器中打开 Nous Portal OAuth 流程。Hermes 将刷新 token 存储在 ~/.hermes/auth.json 中——所有 Hermes 提供商登录信息存放的位置。

2. 启动代理

hermes proxy start
Starting Hermes proxy for Nous Portal
  Listening on:  http://127.0.0.1:8645/v1
  Forwarding to: (每个请求从您的订阅解析)
  Use any bearer token in the client — the proxy attaches your real credential.

让此命令在前台运行。如果希望在注销后继续运行,请使用 tmuxnohup 或 systemd 单元。

3. 将您的应用指向它

任何兼容 OpenAI 的应用配置都使用相同的三元组:

Base URL:   http://127.0.0.1:8645/v1
API key:    任意(例如 "sk-unused")
Model:      Hermes-4-70B    # 或 Hermes-4.3-36B、Hermes-4-405B

代理忽略来自应用的 Authorization 头部,并将您的真实 Portal 凭证附加到上游请求中。当 bearer 接近过期时会自动刷新。

可用提供商

hermes proxy providers

当前附带的:nous(Nous Portal)。更多 OAuth 提供商可以通过在 hermes_cli/proxy/adapters/ 中实现 UpstreamAdapter 接口来添加。

检查状态

hermes proxy status
Hermes proxy upstream adapters

  [nous    ] Nous Portal — ready (bearer expires 2026-05-15T06:43:21Z)

如果看到 not logged in,运行 hermes login nous。如果看到 credentials need attention,您的刷新 token 已被撤销(很少发生——如果您从 Portal Web UI 登出时会发生)——只需重新运行 hermes login nous

允许的路径

代理仅转发上游实际服务的路径。对于 Nous Portal:

路径目的
/v1/chat/completions聊天补全(流式 + 非流式)
/v1/completions遗留文本补全
/v1/embeddings嵌入
/v1/models模型列表

其他路径(/v1/images/generations/v1/audio/speech 等)返回 404,并附带一条指向允许路径的清晰错误信息。这可以防止 stray 客户端向上游泄露奇怪的请求。

配置 OpenViking 使用 Portal

OpenViking 是一个上下文数据库,需要 LLM 提供商用于其 VLM(用于提取记忆的视觉/语言模型)和嵌入模型。使用代理,您可以将其 vlm.api_base 指向本地代理:

编辑 ~/.openviking/ov.conf

{
  "vlm": {
    "provider": "openai",
    "model": "Hermes-4-70B",
    "api_base": "http://127.0.0.1:8645/v1",
    "api_key": "unused-proxy-attaches-real-creds"
  }
}

然后在一个终端中与 openviking-server 一起启动代理:

# 终端 1
hermes proxy start
 
# 终端 2
openviking-server

OpenViking 的 VLM 调用现在通过您的 Portal 订阅进行。嵌入模型方面仍然需要自己的提供商——Portal 确实服务 /v1/embeddings,但模型选择取决于您的套餐支持的范围;请查看 portal.nousresearch.com/models

配置 Karakeep(或任何书签/摘要应用)

Karakeep 使用兼容 OpenAI 的 API 进行书签摘要。在其配置中:

# Karakeep .env
OPENAI_API_BASE_URL=http://127.0.0.1:8645/v1
OPENAI_API_KEY=any-non-empty-string
INFERENCE_TEXT_MODEL=Hermes-4-70B

同样的模式适用于 Open WebUI、LobeChat、NextChat 或任何其他兼容 OpenAI 的客户端。

在 LAN 上暴露

默认情况下代理绑定 127.0.0.1(仅本地主机)。要让网络上的其他机器使用它:

hermes proxy start --host 0.0.0.0 --port 8645

请注意: 您网络上的任何人都可以使用您的 Portal 订阅。代理自身没有任何认证——它接受任何 bearer。如果将其暴露在受信任网络之外,请使用防火墙、VPN 或带有适当认证的反向代理。

速率限制

您的 Portal 套餐的 RPM/TPM 限制适用于整个代理。代理不会进行扇出或池化——它是一个单一的 bearer,包含您的完整订阅配额。在 portal.nousresearch.com 监控使用情况。

架构

代理有意保持最小。每个请求:

  1. 从您的应用接收 POST /v1/chat/completions
  2. 查找适配器的当前凭证(如果即将过期则刷新)
  3. 逐字转发请求体,附带 Authorization: Bearer ***
  4. 原样流式返回响应(保留 SSE)

无转换。无请求体日志记录。无代理循环。代理是一个凭证附加的透传。

未来:更多 OAuth 提供商

适配器系统是可插拔的。添加新提供商(例如 HuggingFace、GitHub Copilot 的聊天端点、通过 OAuth 的 Anthropic)需要在 hermes_cli/proxy/adapters/<provider>.py 中实现 UpstreamAdapter 并在 adapters/__init__.py 中注册。在协议级别不兼容 OpenAI 的提供商(例如 Anthropic Messages API)需要转换层,这超出了当前范围的考虑。