TabbitBlog

ログイン済みブラウザーでSchematron V2 Smallを使う方法

Tabbit CLIで範囲を限定したHTMLを取得し、型付きスキーマとともにSchematron V2 Smallへ送ってデータを抽出します。

この記事の内容
  1. 要点
  2. Smallでできること
  3. ブラウザー取得と抽出を分ける
  4. 公開ページと認証ページの確認項目
  5. Tabbit CLIでローカル取得する
  6. Smallが向く場面と限界

Schematron V2 SmallはHTMLから型付きJSONを抽出しますが、Webサイトを開いたりブラウザーを操作したりはしません。Tabbit Browserなどの許可されたローカルブラウザーで必要な範囲だけを取得し、そのHTMLとJSON SchemaをInference.netへ送ります。APIは自由形式のタスク指示やブラウザーツールを受け取らないため、抽出ルールはスキーマに書きます。公式ドキュメントに基本例があります。

ログイン済みページでは、ローカルツールを使えるエージェントにTabbit CLIを通じて専用タブで作業させ、必要なレコードだけを読み取ります。結果を検証し、名前付きのレビュー用ドラフトに保存します。許可とデータポリシーを確認せず、アカウント情報やページ内容を外部APIへ送らないでください。

要点

  • SmallはHTMLから抽出するモデルです。閲覧、クリック、ログイン、ページ選択は行いません。

  • API IDはinference-net/schematron-v2-smallです。

  • 先にブラウザーで取得範囲を絞ります。Tabbit CLIはローカルブラウザーへの引き継ぎに使えます。

  • 抽出ルールはスキーマに記述し、システムプロンプトには頼りません。

  • 公開ページとログイン済みページを分け、出力を元ページと照合します。

Smallでできること

用途Smallの役割別コンポーネントの役割
ページを読む渡されたHTMLから項目を抽出Tabbit BrowserなどがHTMLを取得
ルールを適用JSON Schemaの形で値を返すスキーマで項目、型、説明、必須項目を定義
URLへ移動対応しない。APIが受け取るのはHTMLローカルブラウザーが許可されたページを開く
ログイン状態を使うモデルはセッションにアクセスしない許可されたTabbit環境でタスクタブを開く
正しさを確認出力形式を整えるコードまたは人が元ページと照合

Inference.netはSmallを複雑なスキーマや長いページ向けに位置付け、128KトークンのコンテキストとlxmlによるHTML前処理を案内しています。非常に長いページは切り分けます。これは提供元の説明であり、本記事の実測値ではありません。Schematron公式ドキュメントを参照してください。

ブラウザー取得と抽出を分ける

  1. 取得: ローカルブラウザーで公開または許可されたページを開き、描画を待って限定したHTMLを返します。Cookie、プロフィール、隠しフォーム、無関係な内容は含めません。

  2. 抽出: アプリケーションからHTMLをユーザーメッセージとして送り、JSON Schemaをresponse_formatに指定します。返った値をクライアント側で検証します。

SchematronにはURL、ブラウザーセッション、移動指示は渡りません。JavaScriptで描画するページはHTTP取得だけでは空の枠になることがあるため、先にブラウザーで描画してください。以下は公式例に沿い、リリースノートの項目を定義した例です。

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はブラウザーが返した断片です。メッセージに指示は含めず、項目の意味はスキーマに書きます。設定はクイックスタート、利用条件はモデル文書で確認してください。実際のAPIキーをプロンプトやページ、Git管理ファイルに入れないでください。

公開ページと認証ページの確認項目

ページ取得ルールAPI送信前レビュー
公開製品ページや文書関連する本文やカードと周辺ラベルを残すスクリプト、スタイル、ナビゲーション、無関係な記録を除く表示された値と照合
ログイン済み業務ページ許可されたアカウントとレコードだけを読む個人情報、認証情報、隠し入力、無関係な記録を除く元タブで安定IDと重要項目を確認

公開ページの小さなサンプルから始め、明示的なスキーマを用意します。非公開データでは利便性よりデータ境界が大切です。ページを読む権限と、内容をサービス提供元へ送信する権限の両方を確認してください。不明な場合はローカル処理に留めるか管理者へ確認します。

Tabbit CLIでローカル取得する

Tabbit BrowserとローカルCLIをインストールし、ローカルツールを実行できるエージェントクライアントを選びます。Skillの呼び出し方はクライアントごとに異なります。名前付きSkillに対応する場合は/tabbit、Piでは/skill:tabbit、その他は各クライアントの一覧を確認してください。Skillの検出、CLIランチャーの実行、サイトへのログインは別々の確認事項です。既存ブラウザーへの接続とCodexのTabbit CLI設定も参考になります。

タスクに名前を付け、専用タブを使います。たとえば、公開リリースノートから主レコードだけを返すよう依頼します。CLIのnodejs構文では固有のrequest IDを指定します。

"$HOME/.local/bin/tabbit-cli" nodejs \
  --task "リリースノート抽出レビュー" \
  --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 を作り直します。

セレクターは説明用です。ページを確認して安定したレコード領域を選び、HTML量を制限してください。この環境では、インストール済みCLI Skillが単独の--groupを受け付けないため付けません。ログインが必要なら許可されたTabbit環境と正しいアカウントを確認します。以前のローカルテストでは、短時間のテストセッションを作った後、別のCLIタスクから同じテストページを読めました。これはそのテスト環境のセッション再利用を示すだけで、外部サイトのアクセスや外部Agent連携を証明しません。

返却値のIDと重要項目を元タブで照合し、リリースノート確認稿 — GEO-104という名前のドラフトに保存します。レビュー時に元ページを開けるようタブを残し、Agentは自分のタスクタブで作業します。初回ブラウザーAgentタスクのチェックリストも参照してください。

Smallが向く場面と限界

HTMLが用意できていて、型の決まった出力が必要な場合はSmallを検討できます。ブラウザーAgentの代わりにはなりません。ローカルブラウザーが閲覧と許可済みセッションを担当し、Schematronが限定HTMLから抽出し、コードが型と根拠を確認し、人が例外をレビューします。

Inference.netはTurboを高スループット・低コスト、Smallを複雑スキーマ・長ページ向けに案内しています。自分のラベル付きデータで比較してください。レイアウトが一定なら通常のセレクターやAPIの方が簡単で安い場合があります。HTMLの構造が不規則ならスキーマ抽出で専用パーサーを減らせる可能性がありますが、監視は必要です。

Redditでは、2,000件以上の不規則なHTMLを扱う利用者が、入れ子の表や用語の違いで固定XPathが難しいと述べています。別のスクレイピング利用者は、本番ではLLMを抽出済みDOM要素の軽い推論層として使う経験を共有しています。いずれも個人の経験で、Schematron V2 Smallの試験ではありません。不規則HTMLの議論と本番利用の議論を参照してください。

繰り返しのブラウザー作業にはTabbit CLIガイド、CLIとBrowser MCPの比較、ブラウザープロファイル、ワークスペース、タブグループの違いが役立ちます。判断に使う結果には、値、元URL、レコードID、時刻、レビュー状態を保存します。スキーマに適合したJSONは引き継ぎに便利ですが、ページの解釈が正しい証明ではありません。

まずは許可された公開レコードを一件だけ取得し、必要な項目に絞ったスキーマで自分のAPIアカウントから実行します。値を元ページと照合してから範囲を広げてください。

ブラウザーAgentの担当範囲を決めるなら、エージェント型ブラウザーとは何かとブラウザー自動化を参照してください。抽出前の操作部分を説明しています。

よくある質問

Schematron V2 Smallは自分でWebサイトを開けますか?

いいえ。Inference.netはSchematronをHTML抽出モデルとして説明しています。ブラウザーなどでページを取得し、HTMLとスキーマをAPIに送る必要があります。

通常のプロンプトを受け取れますか?

公式ドキュメントによると、ユーザーやシステムの指示文は使いません。型、必須項目、説明を含むJSON Schemaに抽出ルールを記述します。

ログイン済みのページにも使えますか?

ローカルブラウザータスクに閲覧権限があり、内容をInference.netへ送信する許可があれば使えます。取得範囲を絞り、個人情報や機密項目を除いてください。

Schematron V2 SmallのモデルIDは何ですか?

Inference.netのドキュメントではinference-net/schematron-v2-smallです。利用前にモデル一覧とアカウント権限を確認してください。

SmallとTurboのどちらを選ぶべきですか?

Inference.netは複雑なスキーマや長いページの品質重視にSmall、大量処理の速度とコスト重視にTurboを案内しています。自分のデータで比較してください。

出力JSONを確認せず使えますか?

いいえ。スキーマ検証に加えて、重要な値を元ページのテキストと照合し、不明な項目は人が確認してください。形式が正しくても事実が正しいとは限りません。

次のステップへ

Tabbit と一緒に仕事をしましょう。

タブをまたいで調査し、繰り返しのブラウザ作業を自動化し、あらゆる文脈を手の届くところに。