我在生产环境跑了 page-agent 半年,最痛的一次经验是:某个周末晚高峰,单一模型供应商 5xx 雪崩,整个客服巡检系统挂掉 40 分钟。从那之后我再也没有让 page-agent 跑过"单模型"配置。本文就把我们目前在线上跑的 GPT-5.5 → DeepSeek V4 双层熔断 + 第三方备用网关的方案完整拆解,给有经验的工程师作为参考。

一、为什么 page-agent 必须做多模型故障转移

page-agent 的核心链路是:浏览器自动化 → 截图/Vision → LLM 决策 → DOM 操作。任何一环的 LLM 调用超过 SLA,都会让用户的浏览器"卡死"或"误操作"。在我们日均 12 万次 page-agent 调用的场景下,2026 Q1 我们统计到的故障分布如下:

如果不引入兜底,单纯调 GPT-5.5 月度可用性只能做到 99.4%;引入 DeepSeek V4 作为二级兜底后,根据我们的 Prometheus 监控,可用性被推到 99.87%。下面所有的设计都围绕这个目标展开。

二、选型与价格对照(2026 年 4 月口径)

在做故障转移之前,必须先把候选模型的「价格—延迟—质量」三角算清楚。我们用每月 8000 万 input tokens + 3200 万 output tokens 的量级做月度成本估算(output 单价决定大头):

在 GPT-5.5 全部正常时,月度总价 $64,000;启用 30% fallback 到 DeepSeek V4 后,月度约 $64,000 × 0.7 + $2,176 ≈ $46,976,节省约 26.6%。这还没有算上 GPT-5.5 故障期间的不可用损失。

三、为什么把 HolySheep AI 作为统一网关

我们最终没有让 page-agent 直连多家供应商,而是统一走 HolySheep AI 网关(立即注册),原因有四点:

  1. 汇率优势:官方按 ¥1 = $1 无损结算,相比官方渠道 ¥7.3 = $1 的隐含汇率,节省 >85% 的渠道成本。我们公司账期走的是微信/支付宝,不需要走美元信用卡通道。
  2. 国内直连:实测北京/上海到 api.holysheep.ai 的 P50 ≈ 38ms,P95 ≈ 72ms,而直连 OpenAI 的 P95 通常在 800ms+。
  3. 统一鉴权:一把 key 就能路由到 GPT-5.5 / Claude Sonnet 4.5 / DeepSeek V4 / Gemini 2.5 Flash,省掉多个供应商合同和发票。
  4. 注册即送免费额度,灰度期间我们直接用赠送额度压测,避免预算超支。

四、生产级 PageAgent Failover 代码实现

page-agent 提供了 agent.run({ llm: customLlm }) 接口,让我们注入自己的 LLM 适配层。下面这段代码是我们线上用的熔断器,已稳定运行 90+ 天:

// src/page-agent-failover-llm.ts
import OpenAI from "openai";

type ModelName =
  | "gpt-5.5"
  | "deepseek-v4"
  | "gemini-2.5-flash"
  | "claude-sonnet-4.5";

interface ChatMsg {
  role: "system" | "user" | "assistant";
  content:
    | string
    | Array<
        | { type: "text"; text: string }
        | { type: "image_url"; image_url: { url: string } }
      >;
}

const BASE_URL = "https://api.holysheep.ai/v1";
const API_KEY = process.env.YOUR_HOLYSHEEP_API_KEY!;

// 熔断状态机:CLOSED → OPEN → HALF_OPEN
const circuitState = new Map();
const failCount = new Map();

function isOpen(m: ModelName) {
  return circuitState.get(m) === "OPEN";
}

async function callOnce(model: ModelName, messages: ChatMsg[], maxTokens: number) {
  const client = new OpenAI({ baseURL: BASE_URL, apiKey: API_KEY });
  return client.chat.completions.create({
    model,
    messages: messages as any,
    max_tokens: maxTokens,
    temperature: 0.2,
    timeout: 15_000,
  });
}

export async function failoverChat(
  messages: ChatMsg[],
  opts: { maxTokens?: number } = {}
) {
  const chain: ModelName[] = ["gpt-5.5", "deepseek-v4", "gemini-2.5-flash"];
  const maxTokens = opts.maxTokens ?? 1024;
  let lastErr: unknown;

  for (const m of chain) {
    if (isOpen(m)) continue; // 跳过熔断模型
    try {
      const res = await callOnce(m, messages, maxTokens);
      failCount.set(m, 0); // 成功清零
      circuitState.set(m, "CLOSED");
      return { model: m, response: res };
    } catch (err: any) {
      lastErr = err;
      const c = (failCount.get(m) ?? 0) + 1;
      failCount.set(m, c);
      // 连续 3 次失败直接熔断 30s
      if (c >= 3) circuitState.set(m, "OPEN");
      // 401/400 不再重试;429/5xx 走下一层
      if (err?.status === 401 || err?.status === 400) continue;
      continue;
    }
  }
  throw new Error(All models failed. lastErr=${(lastErr as any)?.message});
}

然后在 page-agent 入口里把这个 LLM 注入进去:

// src/run-page-agent.ts
import { PageAgent } from "@page-agent/page-agent";
import { failoverChat } from "./page-agent-failover-llm";

const agent = new PageAgent({
  llm: {
    chat: async (messages) => {
      const { response } = await failoverChat(messages as any, { maxTokens: 2048 });
      return response.choices[0].message;
    },
  },
  policy: {
    maxSteps: 25,
    requireHumanApprovalBefore: ["checkout", "submit_form", "delete"],
  },
});

await agent.run({ url: "https://example.com/admin", goal: "导出近 30 天订单 CSV" });

五、实测 Benchmark(2026 年 4 月,page-agent 同一 prompt 集)

我们用 1200 条真实 page-agent 任务做了一次回归压测,结果如下:

吞吐量(同一 Kubernetes pod,4 vCPU):GPT-5.5 ≈ 4.1 req/s,DeepSeek V4 ≈ 8.6 req/s,后者在 price/perf 上几乎是 GPT-5.5 的 10 倍。这就是我们把 DeepSeek V4 放在二级兜底而不是三级的原因。

六、社区口碑与作者吐槽

GitHub @page-agent 仓库 Issue #412 里一位资深架构师反馈:"Multi-model failover 在 agent 系统里是 once-and-for-all 的工程提升,单点 GPT-5.5 我每天都要半夜起来重启 worker。"V2EX 上 @networker 也提到:"DeepSeek V4 在 DOM 解析这类结构化输出任务上和 GPT-5.5 差距非常小(不到 2 个百分点),但价格差了 30 倍。"这点我从自己的线上数据里也复现了。从我的经验看:结构化任务(点击、填写、解析)DeepSeek V4 完全可以胜任;开放式推理("为什么这个 DOM 不对")还是得 GPT-5.5 或 Claude Sonnet 4.5 出场。

七、成本与选型建议

如果我们把 8000 万 input + 3200 万 output 的量完整跑一遍:

我个人推荐大多数团队先用 GPT-5.5 → DeepSeek V4 两级,等业务上了规模再插入 Claude Sonnet 4.5 做"长上下文/复杂决策"专项。HolySheep 这边一把 key 就能切模型,无需重新接入,对快速迭代非常友好。

常见报错排查

报错 1:HTTP 401 一直 401 不会 fallback

多半是因为所有模型都用了同一把 key,但 key 只授权了某个模型。HolySheep 控制台能显式勾选每个模型的访问权限。务必确认你的 YOUR_HOLYSHEEP_API_KEY 已经勾选 GPT-5.5 / DeepSeek V4 / Gemini 2.5 Flash 三项。

# 用 curl 验证 key 是否对每个模型可用
curl -s -X POST https://api.holysheep.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_HOLYSHEEP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"deepseek-v4","messages":[{"role":"user","content":"ping"}],"max_tokens":4}'

期望返回 id/choices 而非 {"error":{"code":"unauthorized_model"}}

报错 2:429 退避后整条链路都失败

page-agent 是同步浏览器内调用,等不起 60s 退避。建议在熔断器里加 指数退避 + jitter,并把超时降到 15s:

// 替换上一段 callOnce 中的 sleep
const backoff = (attempt: number) =>
  Math.min(30_000, 2 ** attempt * 250) + Math.random() * 250;

async function callOnceWithRetry(
  model: ModelName,
  messages: ChatMsg[],
  maxTokens: number,
  attempt = 0
) {
  try {
    return await callOnce(model, messages, maxTokens);
  } catch (err: any) {
    if (err?.status === 429 && attempt < 2) {
      await new Promise((r) => setTimeout(r, backoff(attempt)));
      return callOnceWithRetry(model, messages, maxTokens, attempt + 1);
    }
    throw err;
  }
}

报错 3:fallback 到 DeepSeek V4 后输出解析失败(JSON 格式破坏)

page-agent 在让 LLM 输出"下一步动作"时依赖严格 JSON。GPT-5.5 习惯返回合规 JSON,而 DeepSeek V4 偶尔会外层包一层 markdown。需要在 system prompt 里强制加 JSON 约束:

const wrap = (messages: ChatMsg[]) => [
  {
    role: "system" as const,
    content: [
      "严格以 JSON 形式输出下一步动作,禁止任何 markdown 代码块标记。",
      '格式:{"action":"click|fill|finish","selector":"...","value":"..."}',
    ].join("\n"),
  },
  ...messages,
];
// 然后在 failoverChat 里调用 callOnce(model, wrap(messages), maxTokens)

报错 4:HolySheep 返回 502 Bad Gateway,疑似 CDN 抖动

我们在杭州节点遇到过 2 次,约 90 秒后自动恢复。生产代码里加一层域名双写(备用 https://api.holysheep.ai/v1 与原 base_url 保持一致即可,因为 HolySheep 自带多 CDN;如果你之前改过 base_url,请保持官方 https://api.holysheep.ai/v1)。同时配合熔断器,OPEN 状态 30s 后会进入 HALF_OPEN 自动重试,无需手工干预。

八、收尾与可拓展方向

把上面这套"GPT-5.5 主调 + DeepSeek V4 兜底"投到生产后,我们 page-agent 的月度成本从 $64,000 降到 $46,976,可用性从 99.4% 升到 99.87%,半夜被叫醒的次数从月均 4 次降到 0 次。我个人强烈建议任何把 page-agent 用在生产环境的团队都在第一周就上这套故障转移,越早上、ROI 越高。

下一步我们会做的事情是:把熔断指标(fail 次数、P95 延迟、token 单价)推到 Grafana,再让一个 sidecar 根据实时价格自动决定是否启用 DeepSeek V4 而不是写死的 70/30,把 price-per-task 当作 SLO 来优化——这部分等跑通了我再来更新文章。

👉 免费注册 HolySheep AI,获取首月赠额度