解决 Hermes v0.21.x 中转站 403 blocked
解决 Hermes Agent v0.21.x 连接中转站触发 403 封禁问题,包含主链路 CLI 请求头设置及辅助链路源码修改补丁。
本方案仅限版本 v0.21.x 可用,v0.21 以后版本可能不适配。 对于 v0.21 以前的版本,参考 hermes agent 中转403 blocked 解决方案 - 搞七捻三 - LINUX DO ↗
v0.21.1-v0.21.2#
v0.21.1 重构了辅助链路的客户端解析,锚点和 v0.21.0 不是同一处,旧方法已失效。
1. 解决主对话链路 403#
在 ~/.hermes/config.yaml 的 custom_providers 对应条目下添加 extra_headers。
可以使用 CLI 快捷写入(假设自定义 Provider 在 index 3):
hermes config set custom_providers.3.extra_headers.User-Agent "curl/8.5.0"bash2. 解决辅助链路 403(标题、压缩、记忆的链路,也要改)#
2.1 _named_custom_openai_wire_client#
找到 _headers = _apply_user_default_headers(None) 之后、return _create_openai_client(...) 之前,插入:
try:
from hermes_cli.config import get_custom_provider_extra_headers
_pp_headers = get_custom_provider_extra_headers(custom_base)
except Exception:
_pp_headers = {}
if _pp_headers:
_merged = dict(_extra.get("default_headers") or {})
_merged.update(_pp_headers)
_extra["default_headers"] = _mergedpython2.2 _endpoint_default_headers#
把结尾的 return _apply_user_default_headers(headers or None) or None 改成:
merged = _apply_user_default_headers(headers or None) or None
try:
from hermes_cli.config import get_custom_provider_extra_headers
_pp_headers = get_custom_provider_extra_headers(base_url)
except Exception:
_pp_headers = {}
if _pp_headers:
merged = {**(merged or {}), **_pp_headers}
return mergedpythonv0.21.0#
1. 解决主对话链路 403#
在 ~/.hermes/config.yaml 的 custom_providers 对应条目下添加 extra_headers。
可以使用 CLI 快捷写入(假设自定义 Provider 在 index 3):
hermes config set custom_providers.3.extra_headers.User-Agent "curl/8.5.0"bash2. 解决辅助链路 403(标题、压缩、记忆的链路,也要改)#
定位到 hermes-agent 源码目录(修改前请注意备份):
在 agent/auxiliary_client.py 中找到 _create_openai_client 调用前的位置,合并 Provider 的自定义请求头:
try:
from hermes_cli.config import get_custom_provider_extra_headers
_pp_headers = get_custom_provider_extra_headers(custom_base)
except Exception:
_pp_headers = {}
if _pp_headers:
_merged = dict(extra.get("default_headers") or {})
_merged.update(_pp_headers)
extra["default_headers"] = _mergedpython(注:源码中包含“命名 custom”与“匿名 custom”两处分支,定位到 _apply_user_default_headers 锚点后按相同逻辑插入即可。)
