Nhóm thông tin xác thực
Nhóm thông tin xác thực cho phép bạn đăng ký nhiều khóa API hoặc mã thông báo OAuth cho cùng một nhà cung cấp. Khi một khóa đạt đến giới hạn tốc độ hoặc hạn ngạch thanh toán, Hermes sẽ tự động chuyển sang khóa lành mạnh tiếp theo — duy trì phiên của bạn mà không cần chuyển đổi nhà cung cấp.
Điều này khác với nhà cung cấp dự phòng, chuyển sang một nhà cung cấp khác hoàn toàn. Nhóm thông tin xác thực được luân chuyển cùng một nhà cung cấp; nhà cung cấp dự phòng là nhà cung cấp chuyển đổi dự phòng chéo. Các nhóm được thử trước tiên — nếu tất cả các khóa nhóm đã hết, sau đó nhà cung cấp dự phòng sẽ kích hoạt.
Nó hoạt động như thế nào
Your request
→ Pick key from pool (round_robin / least_used / fill_first / random)
→ Send to provider
→ 429 rate limit?
→ Retry same key once (transient blip)
→ Second 429 → rotate to next pool key
→ All keys exhausted → fallback_model (different provider)
→ 402 billing error?
→ Immediately rotate to next pool key (24h cooldown)
→ 401 auth expired?
→ Try refreshing the token (OAuth)
→ Refresh failed → rotate to next pool key
→ Success → continue normally
Bắt đầu nhanh
Nếu bạn đã đặt khóa API trong .env , Hermes sẽ tự động phát hiện khóa đó dưới dạng nhóm 1 khóa. Để hưởng lợi từ việc gộp chung, hãy thêm nhiều khóa hơn:
# Add a second OpenRouter key
hermes auth add openrouter --api-key sk-or-v1-your-second-key
# Add a second Anthropic key
hermes auth add anthropic --type api-key --api-key sk-ant-api03-your-second-key
# Add an Anthropic OAuth credential (Claude Code subscription)
hermes auth add anthropic --type oauth
# Opens browser for OAuth login
Kiểm tra hồ bơi của bạn:
hermes auth list
Đầu ra:
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
← đánh dấu thông tin xác thực hiện được chọn.
Quản lý tương tác
Chạy hermes auth không có lệnh phụ cho trình hướng dẫn tương tác:
hermes auth
Điều này hiển thị trạng thái nhóm đầy đủ của bạn và cung cấp một menu:
What would you like to do?
1. Add a credential
2. Remove a credential
3. Reset cooldowns for a provider
4. Set rotation strategy for a provider
5. Exit
Đối với các nhà cung cấp hỗ trợ cả khóa API và OAuth (Anthropic, Nous, Codex), quy trình thêm sẽ hỏi loại nào:
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]:
Lệnh CLI
| Lệnh | Mô tả |
|---|---|
hermes auth | Thuật sĩ quản lý hồ bơi tương tác |
hermes auth list | Hiển thị tất cả các nhóm và thông tin đăng nhập |
hermes auth list <provider> | Hiển thị nhóm nhà cung cấp cụ thể |
hermes auth add <provider> | Thêm thông tin xác thực (nhắc về loại và khóa) |
hermes auth add <provider> --type api-key --api-key <key> | Thêm khóa API không tương tác |
hermes auth add <provider> --type oauth | Thêm thông tin xác thực OAuth thông qua đăng nhập trình duyệt |
hermes auth remove <provider> <index> | Xóa thông tin xác thực theo chỉ mục dựa trên 1 |
hermes auth reset <provider> | Xóa tất cả trạng thái hồi chiêu/kiệt sức |
Chiến lược luân chuyển
Định cấu hình qua hermes auth → "Đặt chiến lược xoay vòng" hoặc trong config.yaml :
credential_pool_strategies:
openrouter: round_robin
anthropic: least_used
| Chiến lược | Hành vi |
|---|---|
fill_first (mặc định) | Sử dụng phím lành mạnh đầu tiên cho đến khi hết thì chuyển sang phím tiếp theo |
round_robin | Chuyển qua các phím một cách đồng đều, xoay vòng sau mỗi lần chọn |
least_used | Luôn chọn khóa có số lượng yêu cầu thấp nhất |
random | Lựa chọn ngẫu nhiên trong số các phím khỏe mạnh |
Khôi phục lỗi
Nhóm xử lý các lỗi khác nhau theo cách khác nhau:
| Lỗi | Hành vi | Thời gian hồi chiêu |
|---|---|---|
| Giới hạn tỷ lệ 429 | Thử lại cùng một khóa một lần (tạm thời). Thứ hai liên tiếp 429 quay sang phím tiếp theo | 1 giờ |
| Thanh toán 402/Hạn ngạch | Xoay ngay sang phím tiếp theo | 24 giờ |
| 401 Xác thực đã hết hạn | Trước tiên hãy thử làm mới mã thông báo OAuth. Chỉ xoay nếu làm mới không thành công | — |
| Tất cả các phím đã hết | Chuyển sang fallback_model nếu được định cấu hình | — |
Cờ has_retried_429 đặt lại trên mỗi lệnh gọi API thành công, do đó, một lệnh 429 tạm thời sẽ không kích hoạt xoay vòng.
Nhóm điểm cuối tùy chỉnh
Các điểm cuối tương thích với OpenAI tùy chỉnh (Together.ai, RunPod, máy chủ cục bộ) có nhóm riêng, được khóa bằng tên điểm cuối từ custom_providers trong config.yaml.Khi bạn thiết lập điểm cuối tùy chỉnh thông qua hermes model , nó sẽ tự động tạo một tên như "Together.ai" hoặc "Local (localhost:8080)". Tên này trở thành chìa khóa nhóm.
# After setting up a custom endpoint via hermes model:
hermes auth list
# Shows:
# Together.ai (1 credential):
# #1 config key api_key config:Together.ai ←
# Add a second key for the same endpoint:
hermes auth add Together.ai --api-key sk-together-second-key
Nhóm điểm cuối tùy chỉnh được lưu trữ trong auth.json bên dưới credential_pool với tiền tố custom::
{
"credential_pool": {
"openrouter": [...],
"custom:together.ai": [...]
}
}
Tự động phát hiện
Hermes tự động phát hiện thông tin xác thực từ nhiều nguồn và tạo nhóm khi khởi động:
| Nguồn | Ví dụ | Tự động gieo hạt? |
|---|---|---|
| Biến môi trường | OPENROUTER_API_KEY , ANTHROPIC_API_KEY | Có |
| Mã thông báo OAuth (auth.json) | Mã thiết bị Codex, mã thiết bị Nous | Có |
| Thông tin đăng nhập Mã Claude | ~/.claude/.credentials.json | Có (Anthropic) |
| Hermes PKCE OAuth | ~/.hermes/auth.json | Có (Anthropic) |
| Cấu hình điểm cuối tùy chỉnh | model.api_key trong config.yaml | Có (điểm cuối tùy chỉnh) |
| Nhập thủ công | Đã thêm qua hermes auth add | Kiên trì trong auth.json |
Các mục nhập được gieo hạt tự động được cập nhật trên mỗi lần tải nhóm — nếu bạn xóa một biến env, mục nhập nhóm của nó sẽ tự động được cắt bớt. Các mục nhập thủ công (được thêm qua hermes auth add ) không bao giờ được tự động cắt bớt.
Phân quyền & Chia sẻ đại lý phụ
Khi tác nhân sinh ra các tác nhân phụ thông qua delegate_task , nhóm thông tin xác thực của tác nhân gốc sẽ tự động được chia sẻ với trẻ em:
- Cùng một nhà cung cấp — đứa trẻ nhận được toàn bộ quỹ của cha mẹ, cho phép xoay vòng khóa theo giới hạn tỷ lệ
- Nhà cung cấp khác — con tải nhóm riêng của nhà cung cấp đó (nếu được định cấu hình)
- Không có nhóm nào được định cấu hình — thành phần con quay lại sử dụng khóa API duy nhất được kế thừa
Điều này có nghĩa là các tác nhân phụ được hưởng lợi từ khả năng phục hồi giới hạn tỷ lệ giống như tác nhân gốc mà không cần cấu hình bổ sung. Cho thuê thông tin xác thực theo từng nhiệm vụ đảm bảo trẻ em không xung đột với nhau khi xoay phím đồng thời.
An toàn chủ đề
Nhóm thông tin xác thực sử dụng khóa luồng cho tất cả các đột biến trạng thái ( select() , mark_exhausted_and_rotate() , try_refresh_current() , mark_used() ). Điều này đảm bảo truy cập đồng thời an toàn khi cổng xử lý nhiều phiên trò chuyện cùng một lúc.
Kiến trúc
Để biết sơ đồ luồng dữ liệu đầy đủ, hãy xem docs/credential-pool-flow.excalidraw trong kho lưu trữ.
Nhóm thông tin xác thực tích hợp ở lớp phân giải của nhà cung cấp:
- **
agent/credential_pool.py** — Trình quản lý nhóm: lưu trữ, lựa chọn, xoay vòng, thời gian hồi chiêu - **
hermes_cli/auth_commands.py** — Lệnh CLI và trình hướng dẫn tương tác - **
hermes_cli/runtime_provider.py** — Độ phân giải thông tin xác thực nhận biết nhóm - **
run_agent.py** — Khôi phục lỗi: 429/402/401 → xoay nhóm → dự phòng
Lưu trữ
Trạng thái nhóm được lưu trữ trong ~/.hermes/auth.json dưới khóa 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
}
]
},
}
Các chiến lược được lưu trữ trong config.yaml (không phải auth.json ):
credential_pool_strategies:
openrouter: round_robin
anthropic: least_used