@Teknium: 今日小贴士:你可以使用 Hermes Agent 的凭据池(Credential Pools)来登录或为同一个大语言模型提供商添加多个 API 密钥……
摘要
本文介绍了 Hermes Agent 中的凭据池功能,该功能允许用户为单一的大语言模型提供商管理多个 API 密钥或 OAuth 令牌,通过自动轮转和故障转移来确保稳定性。
查看缓存全文
缓存时间: 2026/05/09 18:16
每日提示:您可以使用 Hermes Agent 的凭据池(Credential Pools)为同一 LLM 提供商登录或添加多个 API 密钥,它会在这些密钥之间轮换,以确保操作的稳定性。更多信息请参阅凭据池文档:https://t.co/NbVXcKQlZN
凭据池 | Hermes Agent
来源: https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools
凭据池允许您为同一个提供商注册多个 API 密钥或 OAuth 令牌。当某个密钥达到速率限制或计费配额时,Hermes 会自动轮换到下一个健康的密钥——无需切换提供商即可保持会话活跃。这与后备提供商(fallback providers)(https://hermes-agent.nousresearch.com/docs/user-guide/features/fallback-providers)不同,后者会完全切换到不同的提供商。凭据池是同一提供商内部的轮换;后备提供商则是跨提供商的故障转移。系统会优先尝试凭据池——只有当池中所有密钥都用尽时,然后才会激活后备提供商。
工作原理 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#how-it-works)
您的请求 → 从池中选取密钥 (round_robin / least_used / fill_first / random) → 发送给提供商 → 遇到 429 速率限制? → 重试同一密钥一次(瞬时抖动) → 再次出现 429 → 轮换到池中的下一个密钥 → 所有密钥耗尽 → fallback_model (不同提供商) → 遇到 402 计费错误? → 立即轮换到池中的下一个密钥 (24小时冷却期) → 遇到 401 认证过期? → 尝试刷新令牌 (OAuth) → 刷新失败 → 轮换到池中的下一个密钥 → 成功 → 继续正常进行
快速入门 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#quick-start)
如果您已经在 .env 中设置了 API 密钥,Hermes 会自动将其发现为单密钥池。为了利用池化功能,请添加更多密钥:
# 添加第二个 OpenRouter 密钥
hermes auth add openrouter --api-key sk-or-v1-your-second-key
# 添加第二个 Anthropic 密钥
hermes auth add anthropic --type api-key --api-key sk-ant-api03-your-second-key
# 添加 Anthropic OAuth 凭据 (需要 Claude Max 计划 + 额外使用额度)
hermes auth add anthropic --type oauth
# 打开浏览器进行 OAuth 登录
检查您的池:
输出:
openrouter (2 credentials):
#1 OPENROUTER_API_KEY api_key env:OPENROUTER_API_KEY ←
#2 backup-key api_key manual
anthropic (3 credentials):
#1 hermes_pkce oauth hermes_pkce ←
#2 claude_code oauth claude_code
#3 ANTHROPIC_API_KEY api_key env:ANTHROPIC_API_KEY
← 标记当前选定的凭据。
交互式管理 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#interactive-management)
运行 hermes auth 且不带子命令以启动交互式向导:
这将显示您的完整池状态并提供菜单:
您想做什么?
1. 添加凭据
2. 删除凭据
3. 重置提供商的冷却时间
4. 设置提供商的轮换策略
5. 退出
对于同时支持 API 密钥和 OAuth 登录的提供商(Anthropic, Nous, Codex),添加流程会询问类型:
anthropic supports both API keys and OAuth login.
1. API key (paste a key from the provider dashboard)
2. OAuth login (authenticate via browser)
Type [1/2]:
CLI 命令 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#cli-commands)
| 命令 | 描述 |
|---|---|
hermes auth | 交互式池管理向导 |
hermes auth list | 显示所有池和凭据 |
hermes auth list <provider> | 显示特定提供商的池 |
hermes auth add <provider> | 添加凭据(提示输入类型和密钥) |
hermes auth add <provider> --type api-key --api-key <key> | 非交互方式添加 API 密钥 |
hermes auth add <provider> --type oauth | 通过浏览器登录添加 OAuth 凭据 |
hermes auth remove <provider> <index> | 按基于 1 的索引移除凭据 |
hermes auth reset <provider> | 清除所有冷却/耗尽状态 |
轮换策略 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#rotation-strategies)
通过 hermes auth → “设置轮换策略” 或在 config.yaml 中配置:
credential_pool_strategies:
openrouter: round_robin
anthropic: least_used
| 策略 | 行为 |
|---|---|
fill_first (默认) | 使用第一个健康的密钥,直到其耗尽,然后移动到下一个 |
round_robin | 均匀地循环遍历密钥,每次选择后轮换 |
least_used | 始终选择请求计数最低的密钥 |
random | 在健康密钥中随机选择 |
错误恢复 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#error-recovery)
池会根据不同类型的错误采取不同的处理方式:
| 错误 | 行为 | 冷却期 |
|---|---|---|
| 429 速率限制 | 重试同一密钥一次(瞬时抖动)。连续第二次 429 会轮换到下一个密钥 | 1 小时 |
| 402 计费/配额 | 立即轮换到下一个密钥 | 24 小时 |
| 401 认证过期 | 首先尝试刷新 OAuth 令牌。仅当刷新失败时轮换 | — |
| 所有密钥耗尽 | 如果配置了 fallback_model,则回退到该模型 | — |
has_retried_429 标志会在每次成功的 API 调用后重置,因此单个瞬时的 429 错误不会触发轮换。
自定义端点池 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#custom-endpoint-pools)
自定义的 OpenAI 兼容端点(Together.ai, RunPod, 本地服务器)拥有自己的池,其键名为 config.yaml 中 custom_providers 下的端点名称。当您通过 hermes model 设置自定义端点时,它会自动生成一个名称,如 “Together.ai” 或 “Local (localhost:8080)”。该名称将成为池的键。
# 通过 hermes model 设置自定义端点后:
hermes auth list
# 显示:
# Together.ai (1 credential):
# #1 config key api_key config:Together.ai ←
# 为同一端点添加第二个密钥:
hermes auth add Together.ai --api-key sk-together-second-key
自定义端点池存储在 auth.json 的 credential_pool 下,并带有 custom: 前缀:
{
"credential_pool": {
"openrouter": [...],
"custom:together.ai": [...]
}
}
自动发现 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#auto-discovery)
Hermes 会自动从多个来源发现凭据,并在启动时填充池:
| 来源 | 示例 | 自动填充? |
|---|---|---|
| 环境变量 | OPENROUTER_API_KEY, ANTHROPIC_API_KEY | 是 |
| OAuth 令牌 (auth.json) | Codex 设备码, Nous 设备码 | 是 |
| Claude Code 凭据 | ~/.claude/.credentials.json | 是 (Anthropic) |
| Hermes PKCE OAuth | ~/.hermes/auth.json | 是 (Anthropic) |
| 自定义端点配置 | config.yaml 中的 model.api_key | 是 (自定义端点) |
| 手动条目 | 通过 hermes auth add 添加 | 持久化存储在 auth.json |
自动填充的条目会在每次加载池时更新——如果您移除了环境变量,其池条目会自动清除。手动条目(通过 hermes auth add 添加)永远不会被自动清除。
委托与子代理共享 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#delegation–subagent-sharing)
当代理通过 delegate_task 生成子代理时,父级的凭据池会自动与子级共享:
- 同一提供商——子级接收父级的完整池,从而在遇到速率限制时实现密钥轮换
- 不同提供商——子级加载该提供商自己的池(如果已配置)
- 未配置池——子级回退到继承的单个 API 密钥
这意味着子代理无需额外配置即可享受与父级相同的速率限制弹性。每次任务的凭据租赁确保了子代理在并发轮换密钥时不会相互冲突。
线程安全 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#thread-safety)
凭据池对所有状态突变(select()、mark_exhausted_and_rotate()、try_refresh_current()、mark_used())使用线程锁。这确保了网关同时处理多个聊天会话时的并发访问安全。
架构 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#architecture)
查看完整的数据流图,参见存储库中的 docs/credential-pool-flow.excalidraw (https://excalidraw.com/#json=2Ycqhqpi6f12E_3ITyiwh,c7u9jSt5BwrmiVzHGbm87g)。凭据池集成在提供商解析层:
agent/credential_pool.py—— 池管理器:存储、选择、轮换、冷却hermes_cli/auth_commands.py—— CLI 命令和交互式向导hermes_cli/runtime_provider.py—— 支持池的凭据解析run_agent.py—— 错误恢复:429/402/401 → 池轮换 → 后备
存储 (https://hermes-agent.nousresearch.com/docs/user-guide/features/credential-pools#storage)
池状态存储在 ~/.hermes/auth.json 的 credential_pool 键下:
{
"version": 1,
"credential_pool": {
"openrouter": [
{
"id": "abc123",
"label": "OPENROUTER_API_KEY",
"auth_type": "api_key",
"priority": 0,
"source": "env:OPENROUTER_API_KEY",
"access_token": "sk-or-v1-...",
"last_status": "ok",
"request_count": 142
}
]
},
}
策略存储在 config.yaml 中(不在 auth.json 中):
credential_pool_strategies:
openrouter: round_robin
anthropic: least_used
相似文章
@Teknium: 每日小贴士:你知道吗,你可以把你的 Hermes Agent 配置文件分享到 GitHub 上?分享一个配置文件,其他人或你自己就可以…
Hermes Agent 现在支持将完整的 Agent 配置文件作为 Git 仓库共享,用户只需一条命令即可安装、更新和版本管理 Agent,同时保留个人数据。
@Teknium: .@NetworkChuck 对 Hermes Agent 独特之处的概述做得非常好。他显然是个高级用户,而且…
Teknium 推荐 NetworkChuck 关于 Hermes Agent 的视频概述,称赞其独特功能,并鼓励其他人尝试使用。
当我让每个配置都像资深工程师一样思考时,Hermes 变得昂贵了。
作者分享了在 Hermes 下运行多个持久 AI 代理配置导致 API 成本高昂的经历,通过实施每个配置的分层模型策略、预处理输入以及使用 API 网关进行成本可视化,将每日成本从 14-18 美元降低到 7-10 美元。
绝不浪费一个token(15分钟阅读)
一篇技术博客文章,解释如何通过在代理和提供商之间放置一个持久缓冲区来避免浪费LLM token,从而在进程崩溃时无需重新获取已生成的token即可恢复。
@itsolelehmann: https://x.com/itsolelehmann/status/2056343273023688989
一份关于通过集成12种工具(如Firecrawl、Reddit和Stripe)将Hermes转变为超级代理的指南,涵盖研究、行动、工作空间和记忆功能。