Hermes Agent频频超时?一招教你解决API网络连通问题

张开发
2026/4/16 7:38:03 15 分钟阅读

分享文章

Hermes Agent频频超时?一招教你解决API网络连通问题
你在本地或者云服务器上安装了 Hermes 或是龙虾等 agent配置好了 Google AI Studio 的 API KEY 后正当你想愉快的测试交流时你发现了一个问题那就是发出的对话迟迟得不到回应…这是因为直接调用某些API 服务接口比如generativelanguage.googleapis.com时经常会遇到网络延迟或阻断的情况。程序就像在往一个无底洞里发送请求由于没有收到明确的回复所以它一直在等最终导致超时。废话不讲直接开干一、准备工作准备一个属于自己的域名二、原理全球加速网络本地网络发起 API 请求连接超时或丢包失败步骤1发起请求到边缘中转节点步骤2节点服务器高速访问步骤3返回 API 响应数据步骤4将响应稳定转发回本地应用本地应用如你的 Hermes Agent特殊网络环境与高延迟目标 API 服务云边缘计算节点如Cloudflare 全球网络CloudflareCF的边缘节点在常规网络环境下是可以稳定访问的。我们可以利用其 Serverless 平台写一小段代码Worker托管在 CF 上让 CF 的云节点帮我们去请求目标接口然后再把结果稳定地传回给本地应用。这也叫做接口代理或是请求转发。三、步骤我配置这个转发节点主要是想体验 Hermes 调用大语言模型的功能。当然你也可以用来稳定访问其他由于网络波动难以直连的服务接口原理都是相通的。下面是具体步骤1注册一个免费的 Cloudflare 账号。2创建 Worker在左侧菜单找到Workers Pages点击 Create application创建一个新的 Worker点击 Start with Hello World会给出一个示例 WorkerWorker name 输入框保持默认你也可以自己改一个好记的比如api-forwarderWorker preview 先保持默认点击 DeployDeploy 之后点击右上角的 Edit code把示例 Worker 里的默认代码删掉替换成一段 API 请求转发脚本在 GitHub 上能找到很多极简代码这里给出一段我使用的 js 脚本代码你想访问其他 API 接口就修改targetHostname的值exportdefault{asyncfetch(request,env,ctx){consturlnewURL(request.url);// 目标域名始终指向 Google APIconsttargetHostnamegenerativelanguage.googleapis.com;// // 1. 处理标准的 HTTP 请求 (Hermes 默认使用的模式)// if(request.headers.get(Upgrade)!websocket){consttargetUrlhttps://${targetHostname}${url.pathname}${url.search};// 创建一个新的请求对象继承原请求的所有方法、Header 和 BodyconstproxyRequestnewRequest(targetUrl,request);// 直接把 Google 的 HTTP 响应透传回去returnfetch(proxyRequest);}// // 2. 处理 WebSocket 请求// consttargetUrlwss://${targetHostname}${url.pathname}${url.search};console.log(Target WebSocket URL:,targetUrl);const[client,proxy]newWebSocketPair();proxy.accept();letpendingMessages[];constconnectPromisenewPromise((resolve,reject){consttargetWebSocketnewWebSocket(targetUrl);targetWebSocket.addEventListener(open,(){console.log(Connected to target server);for(constmessageofpendingMessages){try{targetWebSocket.send(message);}catch(error){console.error(Error sending pending message:,error);}}pendingMessages[];resolve(targetWebSocket);});proxy.addEventListener(message,async(event){if(targetWebSocket.readyStateWebSocket.OPEN){try{targetWebSocket.send(event.data);}catch(error){console.error(Error sending to gemini:,error);}}else{pendingMessages.push(event.data);}});targetWebSocket.addEventListener(message,(event){try{if(proxy.readyStateWebSocket.OPEN){proxy.send(event.data);}}catch(error){console.error(Error forwarding to client:,error);}});targetWebSocket.addEventListener(close,(event){if(proxy.readyStateWebSocket.OPEN){proxy.close(event.code,event.reason);}});proxy.addEventListener(close,(event){if(targetWebSocket.readyStateWebSocket.OPEN){targetWebSocket.close(event.code,event.reason);}});targetWebSocket.addEventListener(error,(error){console.error(Gemini WebSocket error:,error.message);});});ctx.waitUntil(connectPromise);returnnewResponse(null,{status:101,webSocket:client,});},};代码粘贴上去之后右侧显示 404 是没有问题的这正是目标服务器真实返回的页面因为你调用的是纯净 API 接口并没有网页前端所以接口给你返回 404这是正常的不用担心。本地应用 - Cloudflare 中转 - 目标服务 的网络链路就已经搭建打通了点击右上角的“Deploy” (或者 Save and deploy)按钮将你的转发代码正式发布。部署完成后返回这个 Worker 的概览页面你会看到一个系统分配给你的专属链接格式大概是https://项目名.xxx.workers.dev。大功告成是不是就直接可以通过https://项目名.xxx.workers.dev在云服务器上调用相关的 API 服务了呢于是你配置好了 API KEY 和 BASE_URL, 格式如下GOOGLE_API_KEYAI....GEMINI_BASE_URLhttps://项目名.xxx.workers.dev/v1beta/openai或者使用 cur 命令在终端调用curl-vhttps://项目名.xxx.workers.dev/v1beta/openai/chat/completions\-HContent-Type: application/json\-HAuthorization: Bearer 你的真实谷歌API密钥\-d{ model: gemini-1.5-flash, messages: [ { role: user, content: hello } ] }如果你尝试一下的话大概率会发现还是请求卡住并最终超时。这是因为.workers.dev这个域名后缀属于公共共享后缀有时在个别网络环境下由于节点压力可能会出现连接重置的情况。所以我们需要绑定自己的域名。3为你的 Workers 添加自定义域名只需要简单配置就可以让 Cloudflare 接管你的域名自动生成安全证书并把流量稳定路由到你的转发代码上。 第一阶段在 Cloudflare 添加你的域名登录你的 Cloudflare 控制台在左侧导航栏点击“Websites” (网站)然后点击右上角的蓝色按钮“Add a Site” (添加站点)。输入你的根域名比如example.com不要加www也不要加api点击 Continue。选择“Free” (免费计划)。Cloudflare 会自动扫描你现有的 DNS 记录不管它扫出了什么或者什么都没有直接点击底部 Continue to activation。然后点击 Confirm关键一步此时页面会显示出两个分配给你的名称服务器 (Nameservers)例如kara.ns.cloudflare.com和pam.ns.cloudflare.com。把这两个地址复制下来页面先不要关。 第二阶段去你的域名服务商修改 DNS 服务器新开一个网页标签登录你的域名提供商如阿里云/腾讯云控制台。找到你配置的域名点击管理。在左侧菜单中找到“DNS修改”或“修改DNS服务器”。将里面默认的提供商 DNS 地址删掉。把刚才在 Cloudflare 复制的那两个 Cloudflare 名称服务器粘贴进去保存确认。 第三阶段等待生效与绑定 Worker修改 DNS 后全球解析同步需要一点时间通常 5 分钟左右生效。回到刚才的 Cloudflare 页面点击“Check nameservers” (检查名称服务器)。如果修改成功你的域名状态会变成绿色的“Active” (活跃)。确认域名活跃后点击左侧导航栏的“Workers Pages”进入你之前创建的那个转发项目。点击Settings (设置)-Domains Routes (域名和路由)- **点击 add-点击Custom Domains (自定义域)在输入框里为你这个代理起一个子域名比如api.你的域名.com强烈建议用api开头易于区分。点击“Add Custom Domain”。平台会自动帮你搞定解析映射。4 唤醒你的 Hermes Agent现在回到你的云服务器终端, 重新配置好你的 BASE_URL:GOOGLE_API_KEYAI....GEMINI_BASE_URLhttps://api.example.com/v1beta/openai此时再运行即可丝滑畅快地得到回应5可能遇到的问题为什么请求被返回 403 / 400在接入 Hermes Agent 或者自动化脚本时你可能会发现请求被服务端拦截了。重点排查方向在“User-Agent”上由于 Hermes 或是很多 Python SDK 发送请求时会携带诸如OpenAI/Python x.x.x这样的包标识。WAF看到这类标识且有频次特征时可能会启动严格模式判定请求来源并非真实浏览器用户从而进行拦截拦截。解决方案很简单在 Cloudflare 控制台对应域名的「安全性」(Security) 设置里把“Bot Fight Mode” (机器人攻击模式)以及Block AI bots (屏蔽 AI 机器人)开关临时关掉或配置通行白名单即可。6如何给你的转发接口上锁因为链路是公开在互联网上的如果别人知道了你分配的二级域名是不是也可以蹭你的网络通道请求数据既然你的域名托管在具有强大防护能力的 Cloudflare 上我们可以善用自带的 **WAF ** 功能限制访问权限。你可以设置一条简单规则“仅允许我设定的 IP 访问该接口拦截其他一切来源”。具体操作步骤强烈建议配置登录控制台进入你的域名管理面板。在左侧菜单找到安全性相关配置点击Configure Web Application Firewall。不要点击左侧菜单中的Application Security (安全性)这是为企业准备的。点击Create rule (创建规则)。命名规则填入规则名字比如WhiteList_Rules。配置触发条件Field (字段): 选择IP Source Address(源 IP 地址)Operator (运算符): 选择does not equal(不等于)Value (值): 填入你本地电脑或云服务器的具体公网 IP。选择操作(Choose action)在下方选择Block (阻止)。点击右下角Deploy (部署)。这条规则的意思是如果发出请求的设备 IP 不是我们设置自己专用的 IPWAF 就直接将其流量掐断。这样一来就能从根源防止转发接口被他人滥用盗刷。四、总结到现在我们成功解决了本地调用海外接口超时和延迟过高的问题。这套打法思路跑通后不仅仅能用于 Hermes 进行稳定的多轮会话测试其他各类针对接口连通性要求高、受特定网络环境限制明显的开发调试工作都可以采用同一套模型去构建专属的中转加速节点。免责声明本文仅作为网络通信底层原理与 Serverless 技术架构的技术探讨。请读者遵守当地法律法规切勿将相关技术用于非法用途或恶意突破网络安全管理规定。

更多文章