Tabbit博客

如何用 Schematron V2 Small 提取已登录网页内容

先用 Tabbit CLI 获取有限范围的网页 HTML,再把内容和类型化 Schema 发送给 Schematron V2 Small。

本文目录
  1. 重点结论
  2. Schematron V2 Small 能力一览
  3. 把浏览器和提取分成两步
  4. 公开页面和登录页面要用不同检查
  5. 用 Tabbit CLI 在本地采集页面
  6. Small 的适用范围和限制

Schematron V2 Small 能从 HTML 提取类型化 JSON,但它不会打开网站或操作浏览器。先用获授权的本地浏览器(例如 Tabbit Browser)获取所需页面片段,再将 HTML 和 JSON Schema 发送给 Inference.net。API 不接收普通任务提示词或浏览器工具,因此必须由 Schema 描述提取规则。Inference.net 官方文档展示了这种用法。

处理已登录页面时,让能调用本地工具的 Agent 在独立任务标签页中访问 Tabbit CLI,并只读取所需记录。之后校验模型输出,再保存为有名称的草稿供人审核。除非授权和数据政策允许,不要把账号数据或页面内容发给外部 API。

重点结论

  • Schematron V2 Small 只从 HTML 提取数据,不负责浏览、点击、登录或决定访问哪个网页。

  • Inference.net 文档中的当前 API ID 是 inference-net/schematron-v2-small。

  • 先在浏览器中采集并限制内容范围。Tabbit CLI可让能访问本机浏览器的客户端完成交接。

  • 字段规则写进 Schema。不要依赖系统提示词让 Schematron 执行说明。

  • 区分公开网页和已登录网页,并对照来源核验每项结果。

Schematron V2 Small 能力一览

需求Small 能做什么其他组件要做什么
读取网页内容从传入的 HTML 提取字段Tabbit Browser 或获授权的抓取工具获取 HTML
遵循提取规则按 JSON Schema 返回结构化值Schema 作者定义字段、类型、说明和必填项
访问网址不具备此能力,API 接收的是 HTML本地浏览器 Agent 打开允许访问的网页
使用已登录会话模型本身无法访问会话Tabbit 本地环境在授权浏览器中开启任务标签页
确认准确性按要求的结构输出代码或审核者对照来源检查字段

Inference.net 将 Small 定位为复杂 Schema 和长页面的质量优先选项。文档列出 128K token 上下文,并建议用 lxml 清理 HTML;页面太长时应裁剪或分块。这些是服务商说法,不是本文实测结果。查看 Schematron 官方文档。

把浏览器和提取分成两步

  1. 采集。 本地浏览器任务打开公开或已获授权的页面,等待内容渲染,再返回有限范围的 HTML。不要采集 Cookie、个人资料、隐藏表单值或无关内容。

  2. 提取。 应用把 HTML 作为用户消息,将 JSON Schema 作为 response_format 发送给 Inference.net API。模型返回结构化值,客户端再做校验。

这种分工很重要。Schematron 不会收到网址、浏览器会话或导航说明。若页面是客户端渲染应用,普通 HTTP 请求可能只得到空壳,应先用浏览器渲染。下面的 API 示例基于 Inference.net 官方文档,字段改成了发布说明记录。

import os
from pathlib import Path
from typing import Optional

from openai import OpenAI
from pydantic import BaseModel, Field

class ReleaseNote(BaseModel):
    record_id: str = Field(description="页面中显示的稳定记录 ID 原文。")
    title: str = Field(description="该记录页面上可见的标题原文。")
    status: Optional[str] = Field(description="页面显示的状态;没有时返回 null。")
    date: Optional[str] = Field(description="来源中显示的日期;不要推断。")

client = OpenAI(
    base_url="https://api.inference.net/v1",
    api_key=os.environ["INFERENCE_API_KEY"],
)

bounded_html = Path("approved-record.html").read_text(encoding="utf-8")
response = client.chat.completions.parse(
    model="inference-net/schematron-v2-small",
    messages=[{"role": "user", "content": bounded_html}],
    response_format=ReleaseNote,
    temperature=0,
)
record = response.choices[0].message.parsed
if record is None:
    raise ValueError("No parsed record returned")
print(record.model_dump_json())

bounded_html 是浏览器步骤返回的片段。消息内容只有 HTML,没有任务提示词;字段说明写在 Schema 中。Inference.net 官方示例使用 OpenAI SDK 和 response_format。请查看快速开始获取当前配置,并在模型文档确认访问条件。不要把真实 API 密钥写进提示词、网页或 Git 文件。

公开页面和登录页面要用不同检查

来源采集规则发送 API 前审核节点
公开产品页或文档页仅保留相关正文或卡片及其上下文标签移除脚本、样式、导航和无关记录对照可见来源核对每个值
已登录工作页面只读取你获授权访问的账号和记录缩小采集范围,排除个人数据、凭证、隐藏表单和无关记录在原任务标签页确认稳定 ID 和关键字段

公开来源可以先用一个小样本和明确的 Schema。处理私有来源时,数据边界比便利更重要。你既要有权读取网页,也要有权向模型服务商传输内容。如果不清楚第二项权限,应先本地处理或咨询管理员。

用 Tabbit CLI 在本地采集页面

安装 Tabbit Browser 和本地 CLI,再选择能运行本机工具的 Agent 客户端。具体 Skill 调用方式取决于客户端:支持命名 Skill 的客户端可用 /tabbit,Pi 使用 /skill:tabbit,其他客户端请查其 Skill 列表。Skill 是否已发现、CLI 启动器是否可运行、网站是否已登录,是三项独立检查。可参考连接 Agent 与现有浏览器和Codex 的 Tabbit CLI 设置。

给任务设置清晰名称,并使用单独标签页。例如,让本地 Agent 打开公开的发布说明页,只采集主记录容器,返回 HTML 和页面 URL。CLI 使用已安装 Skill 的 nodejs 语法;唯一 request ID 可避免重复请求:

"$HOME/.local/bin/tabbit-cli" nodejs \
  --task "Release notes extraction review" \
  --request-id release-notes-capture-20261110 <<'JS'
await page.goto('https://example.com/release-notes', {waitUntil: 'domcontentloaded'});
const result = await page.evaluate(() => {
  const record = document.querySelector('[data-record-id="GEO-104"]');
  if (!record) return null;

  const fields = [
    ['Record ID', '[data-field="record-id"]'],
    ['Title', 'h1'],
    ['Status', '[data-field="status"]'],
    ['Date', 'time'],
  ];
  const fragment = document.createElement('section');
  for (const [label, selector] of fields) {
    const element = record.querySelector(selector);
    if (!element || !element.checkVisibility({ visibilityProperty: true })) continue;
    const row = document.createElement('p');
    row.textContent = label + ': ' + element.innerText.trim().slice(0, 500);
    fragment.append(row);
  }
  return fragment.childElementCount ? fragment.outerHTML : null;
});
return {url: page.url(), html: result};
JS

核对返回的片段,把获准发送的 HTML 保存为 approved-record.html,再运行 Python 示例。脚本用允许的可见字段重建 HTML,避免直接导出原始 DOM。

这里的选择器只是示例,并不代表所有网站都使用 data-record-id。先检查页面,再选稳定的记录容器,并限制 HTML 长度。在本环境不要传入 --group,已安装的 CLI Skill 说明该运行时不接受裸 group 选项。若网页要求登录,只能使用获授权的 Tabbit 环境,并确认当前网站账号正确。此前一个本地测试夹具验证了建立短时测试会话后,第二个 CLI 任务可以读取同一测试页面;这只证明该测试环境中的会话复用,不代表第三方网站权限或外部 Agent 集成。

模型返回记录后,对照来源标签页复核 ID 和重要字段,并保存为名为 发布说明审核稿 — GEO-104 的草稿。保留来源标签页,让用户审核时能查看原始内容;Agent 则在自己的任务标签页继续工作。首次浏览器 Agent 任务清单介绍了如何限制交接范围。

Small 的适用范围和限制

输入已经是 HTML,且输出需要稳定类型时,可以考虑 Small。它不是浏览器 Agent 的替代品。本地浏览器或 Agent 负责导航和获准的会话,Schematron 负责从有限 HTML 中提取,代码负责校验类型和来源,人负责审核例外情况。

Inference.net 将 Schematron V2 Turbo定位为高吞吐、低成本选项,将 Small 定位为复杂 Schema 和长页面选项。请用自己的标注样本比较两者,不能假定服务商基准代表你的网站表现。布局稳定且重复时,普通选择器或官方 API 可能更简单也更便宜。HTML 混乱、布局常变时,Schema 提取或许能减少手写解析逻辑,但仍需监控。

一个 Reddit 讨论中,用户描述了两千多份结构不规则的 HTML 文件,表示嵌套表格和变化的用词让固定 XPath 很难可靠提取。另一位爬取从业者则称,LLM 在生产流程中更适合用作已提取 DOM 字段上的轻量推理层。这是个人工作流经验,不是 Schematron V2 Small 的测试。查看不规则 HTML 讨论和生产抓取讨论。

如需重复执行浏览器任务,可看Tabbit CLI 指南、CLI 与 Browser MCP 对比,以及浏览器配置、工作区和标签组。如果提取结果用于业务决策,请同时保留提取值、来源 URL、记录 ID、时间戳和审核状态。符合 Schema 的 JSON 是有用的交接格式,但不能证明页面被正确理解。

下一步可以做一个范围很小的试运行:选择一条获授权的公开记录,定义需要的字段,用自己的账号运行 API,再逐项和来源核对后再扩大范围。

如果还在判断哪些工作适合交给浏览器 Agent,可先了解什么是 Agent 浏览器和浏览器自动化。这两篇说明了提取之前的网页交互环节。

常见问题

Schematron V2 Small 能自己打开网页吗?

不能。Inference.net 将 Schematron 定义为 HTML 提取模型。需要由浏览器或其他获授权的抓取工具先获取网页,再把 HTML 和 Schema 发给 API。

Schematron V2 Small 接受普通提示词吗?

官方文档说明该模型不使用用户提示或系统提示。提取规则应写进 JSON Schema,包括字段类型、必填要求和字段说明。

能提取我已登录页面中的内容吗?

可以,前提是本地浏览器任务有权读取页面,而且你获准把内容发送给 Inference.net。请缩小采集范围,并排除个人或敏感字段。

Schematron V2 Small 的模型 ID 是什么?

Inference.net 文档给出的 API 标识为 inference-net/schematron-v2-small。部署前请查看服务商模型列表和账号权限。

应该选 Small 还是 Turbo?

Inference.net 将 Small 定位于复杂 Schema 和长页面的高质量提取,将 Turbo 定位于高吞吐和低成本场景。选型前应使用带标注的自有样本进行测试。

返回的 JSON 可以不审核直接使用吗?

不建议。先按 Schema 校验,再对照来源文本核对重要字段,并把缺失或含糊的值交给人工复核。格式正确不代表事实正确。

下一步

让 Tabbit 与你并肩工作。

跨标签页调研、自动化重复的浏览器工作,让每一处上下文都触手可及。