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 官方文件。
把瀏覽器和擷取分成兩步
擷取。 本機瀏覽器任務開啟公開或獲授權的頁面,等待內容載入後回傳有限範圍的 HTML。不要擷取 Cookie、個人資料、隱藏表單值或無關內容。
抽取。 應用程式將 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 裡。官方範例使用 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,可以先讀什麼是 Agentic Browser和瀏覽器自動化。兩篇內容介紹的是資料擷取前的網頁操作層。
常見問題
Schematron V2 Small 能自行開啟網站嗎?
不能。Inference.net 將 Schematron 定義為 HTML 擷取模型。必須由瀏覽器或其他獲授權的擷取器先取得網頁,再把 HTML 和 Schema 傳給 API。
Schematron V2 Small 接受一般提示詞嗎?
官方文件指出模型不使用使用者或系統提示。請把擷取規則寫入 JSON Schema,包括欄位型別、必填狀態和欄位說明。
能擷取已登入頁面的內容嗎?
可以,前提是本機瀏覽器任務獲准讀取該頁,而且你有權把內容傳給 Inference.net。請縮小擷取範圍並排除個人或敏感欄位。
Schematron V2 Small 的模型 ID 是什麼?
Inference.net 文件列出的 API ID 是 inference-net/schematron-v2-small。部署前請確認服務商模型清單及帳號權限。
Small 和 Turbo 該選哪個?
Inference.net 將 Small 定位為複雜 Schema 和長頁面的品質優先選項,Turbo 則適合高吞吐、低成本的大量工作。請用有標註的自有樣本測試後再選擇。
不用人工檢查擷取後的 JSON 可以嗎?
不建議。先依 Schema 驗證,再對照來源文字檢查重要欄位,並將缺漏或不明確的值交給人工覆核。格式符合 Schema 不代表內容正確。