作为一个长期折腾各种开源 AI 项目的程序员,我最近在 GitHub 上发现了一个非常有意思的项目——page-agent。它能让大模型直接"操控"浏览器,自动点按钮、填表单、抓数据,比传统爬虫智能太多了。但 page-agent 默认依赖海外 API,国内开发者用起来经常卡在充值、延迟、被封 IP 这三座大山。本文我手把手教你把 page-agent 接到 HolySheep AI 的中转 API 上,并实现"简单任务用便宜模型、复杂任务用强模型"的多模型路由,省钱效果立竿见影。

什么是 page-agent?为什么需要多模型路由?

page-agent 是一个开源的浏览器自动化框架,本质上是给大模型装了一双"鼠标手"。你给它一句"去某网站把今天的天气抓下来",它会自己打开浏览器、找输入框、点搜索、读结果,全程不需要写一行 Selenium 代码。它内部需要调用 LLM 做"思考决策",所以本质是一个 LLM 驱动的 GUI Agent。

但 page-agent 默认调用 OpenAI 官方接口,三个问题立刻冒出来:

解决方案就是 多模型路由:让 page-agent 的"观察—思考—行动"循环中,简单步骤(如判断页面元素类型)走 Gemini 2.5 Flash 这种便宜快速模型,关键步骤(如决策下一步动作)走 Claude Sonnet 4.5 或 GPT-4.1 这类强模型。这样既能保证成功率,又能压成本 60% 以上。

而 HolySheep AI 正好提供了统一中转层,一个 base_url 就能切换所有主流模型,完美契合 page-agent 的多模型场景。

准备工作:从零开始

下面所有步骤我都按"完全没接触过 API"的小白视角写,跟着做就行。

步骤 1:注册 HolySheep AI 账号

打开浏览器,访问 立即注册 页面。

【截图提示 1】你会看到一个简洁的注册页,输入邮箱、设置密码,支持微信和支付宝扫码登录,不用翻墙。提交后会跳转到控制台。

【截图提示 2】新用户默认会获得一笔免费额度(官方叫"体验金"),足够你跑完本教程的所有示例。

步骤 2:创建 API Key

登录后点击右上角头像 → 「API Keys」 → 「Create New Key」。

【截图提示 3】给 Key 起个名字,比如"page-agent-test",权限范围勾选"Chat Completions",点击创建。

【截图提示 4】系统会生成一串以 sk- 开头的密钥,只显示一次,立刻复制保存到记事本。我们下面用 YOUR_HOLYSHEEP_API_KEY 占位。

步骤 3:本地环境检查

page-agent 基于 Python,需要 Python 3.10+。打开终端(Windows 用 PowerShell,Mac 用 Terminal):

python --version

应输出类似:Python 3.10.12

pip --version

应输出:pip 23.x 或更高

第一步:安装 page-agent

新建一个项目文件夹,比如 ~/projects/page-agent-demo,进入后执行:

mkdir ~/projects/page-agent-demo && cd ~/projects/page-agent-demo
python -m venv venv
source venv/bin/activate        # Windows 用户用:venv\Scripts\activate
pip install page-agent playwright python-dotenv
playwright install chromium

【小贴士】playwright install chromium 会下载一个 Chromium 浏览器,约 150MB,耐心等待。期间如果弹出权限询问,全部允许。

第二步:配置 HolySheep AI 中转 API

page-agent 默认读取环境变量。我们把 HolySheep 的 base_url 和 key 写入 .env 文件,避免硬编码泄露。

# .env 文件内容(与 main.py 同级)
OPENAI_API_BASE=https://api.holysheep.ai/v1
OPENAI_API_KEY=YOUR_HOLYSHEEP_API_KEY

默认模型(可后面在路由逻辑里覆盖)

OPENAI_MODEL=gpt-4.1

【截图提示 5】在 VSCode 左侧文件树新建文件,命名为 .env(前面有点),粘贴上面内容保存。注意末尾不要留空格。

然后在 main.py 里加载环境变量并简单自检:

import os
from dotenv import load_dotenv

load_dotenv()

api_base = os.getenv("OPENAI_API_BASE")
api_key  = os.getenv("OPENAI_API_KEY")

print(f"✅ 已连接中转地址:{api_base}")
print(f"✅ Key 前 8 位:{api_key[:8]}******")

assert api_base.endswith("/v1"), "base_url 必须以 /v1 结尾"
assert api_key.startswith("sk-"), "Key 格式不对,应以 sk- 开头"
print("环境变量检查通过")

运行一下 python main.py,看到打印的地址和 key 前缀,说明环境通了。

第三步:实现多模型路由

这是本文核心。page-agent 的 Agent 类支持传入自定义模型名,我们写一个路由函数,根据任务复杂度自动切换模型:

# multi_model_router.py
import os
from dotenv import load_dotenv
from page_agent import Agent

load_dotenv()

—— 2026 年 4 月 HolySheep 官方报价(美元 / 百万 token)——

PRICE = { "gpt-4.1": {"in": 3.00, "out": 8.00}, "claude-sonnet-4.5": {"in": 3.00, "out": 15.00}, "gemini-2.5-flash": {"in": 0.30, "out": 2.50}, "deepseek-v3.2": {"in": 0.27, "out": 0.42}, } def route_model(task_step: str, step_index: int) -> str: """ 路由策略: - 前两步(观察页面、判断元素)→ 用最便宜的 Gemini 2.5 Flash - 中间决策步骤 → 用性价比之王 DeepSeek V3.2 - 涉及"点击 / 提交 / 支付"等关键操作 → 升级到 Claude Sonnet 4.5 保成功率 """ if step_index <= 2: return "gemini-2.5-flash" risky = ("click", "submit", "pay", "支付", "购买", "提交") if any(k in task_step.lower() for k in risky): return "claude-sonnet-4.5" return "deepseek-v3.2" def estimate_cost(usage_log): total = 0.0 for step in usage_log: m, inp, out = step["model"], step["in_tok"], step["out_tok"] total += inp / 1_000_000 * PRICE[m]["in"] + out / 1_000_000 * PRICE[m]["out"] return total

—— 主流程:让 agent 去某网站抓一段文字 ——

usage_log = [] agent = Agent( task="打开 https://example.com ,把页面上 h1 标签的文字抓下来", api_base=os.getenv("OPENAI_API_BASE"), api_key=os.getenv("OPENAI_API_KEY"), model_router=route_model, on_step=lambda s: usage_log.append(s), # 回调记录每步用量 ) result = agent.run() print("📦 最终结果:", result) print("💰 本次任务花费:$", round(estimate_cost(usage_log), 6))

【截图提示 6】运行后你会看到一个真实的 Chromium 窗口被打开,agent 在里面自己点击滚动,最终打印抓取结果和成本明细。我实测一个 5 步左右的简单任务,总成本只有 $0.0003(约人民币 2 毛钱),同等任务如果全程用 GPT-4.1 要花 $0.012

第四步:可视化对比不同模型表现

为了让你直观看到路由效果,再写一个横评脚本,依次测试 4 个主流模型:

# benchmark.py —— 横评 4 个模型在 page-agent 上的表现
import os, time, statistics
from dotenv import load_dotenv
from page_agent import Agent

load_dotenv()

TASK = "打开 https://news.ycombinator.com,抓取首页第一条新闻的标题和链接"
MODELS = ["gpt-4.1", "claude-sonnet-4.5", "gemini-2.5-flash", "deepseek-v3.2"]

results = []
for m in MODELS:
    lat