/** # 脚本说明 * SERP 双路径(fetch+浏览器)24h 自适应吞吐优化测试(用户 2026-10-30 目标): * 在保证客户端成功率 >98% 的约束下,自适应逼近系统可持续的最大每分钟请求数。 * 与 serp-profile-capacity.ts(单号 sticky+fetch,绕过池/令牌)不同,本脚本走生产 * 双路径原形态(runtime=auto,无 sticky,全池 LRU 选号): * GET /api/serp/json/search?q=...&num=10 * 令牌内走 go-fetch(全局限流 fetchPerSec),限流外并发走温池浏览器 —— 组合即生产形态。 * AIMD 控制器 v4(每 60s 决策;dp5 全程实测教训驱动): * 硬约束(成功率即约束本身):首次跌破 98%(失败≥2)×0.7、<95% ×0.5;退化段内续砍 * 需短窗 <95% 且全程增量新失败 ≥2 —— dp5 教训:10:24-10:28 同一波旧失败被短窗 * 反复引用,五分钟连砍五刀 175→30/min,直接打灭浏览器溢出路径; * 软信号按事件段(episode)迟滞 + 绝对数护栏(低速率下 1~2 个噪音 = 高比率,不得触发): * 验证码 10min 窗 ≥3 个且占比>2% ×0.5、≥3 个且>0.5% ×0.7;门壳 ≥3 且占比>15% ×0.85; * 池空>5 ×0.85;软砍下限 SOFT_FLOOR=25 —— dp5 教训:背景验证码供给恒定,速率越低 * 比率越高,比率规则在低位永真,12:00-17:00 自 52/min 自残至 3/min 而温池 150 * ready 全程空转(poolEmpty 20h=0); * 干净爬坡:不在退化段 且 短窗成功率≥99.5% 且门壳<2% 且无池空 且(验证码 0 个或 * 样本 ≥300)→ 深跌后向「干净水位」(30min 窗 ≥98.5% 时的最高速率)以 ×1.3/拍 * 快速回收,水位之上每 5 拍 ×1.08(dp5 教训:×1.08/5 拍从 3/min 爬回需 3 小时)。 * 速率区间 [3, 400] req/min;并发 worker 默认 12(真实并发让溢出自然流向浏览器路径)。 * 判定(客户端,JSON 出口):ok = 200 且 organic>0;gate = 200 且 organic=0 且 * attempts 含 gate;empty = 200 且 organic=0 无门壳尝试;错误按响应 code 分类 * (CAPTCHA_DETECTED / SERP_POOL_EMPTY / 其余 httpErr);网络层失败记 netErr。 * 输出:data/