TabbitBlog

Como usar Schematron V2 Small com um navegador autenticado

Capture HTML limitado com o Tabbit CLI e envie-o com um esquema tipado ao Schematron V2 Small para extrair dados.

Neste artigo
  1. Principais conclusões
  2. Schematron V2 Small em resumo
  3. Separe captura e extração
  4. Faça verificações diferentes para páginas públicas e autenticadas
  5. Capture localmente com Tabbit CLI
  6. Quando Small é adequado e onde ele para

O Schematron V2 Small extrai JSON tipado de HTML, mas não abre sites nem controla um navegador. Use primeiro um navegador local autorizado, como o Tabbit Browser, para capturar apenas o conteúdo necessário; depois envie o HTML com um JSON Schema à Inference.net. A API não recebe instruções livres nem ferramentas de navegador, então o esquema precisa descrever a extração. A documentação oficial mostra esse padrão.

Para uma página autenticada, use um agente local que consiga acessar o Tabbit CLI em uma aba de tarefa separada e leia somente o registro necessário. Valide o resultado e salve-o como um rascunho nomeado para revisão. Não envie dados da conta ou da página a uma API externa sem autorização e permissão de tratamento.

Principais conclusões

  • Small extrai dados do HTML; não navega, clica, autentica nem escolhe uma página.

  • O ID de API documentado é inference-net/schematron-v2-small.

  • Capture e limite o conteúdo no navegador. O Tabbit CLI conecta um cliente local ao navegador.

  • Defina as regras dos campos no esquema, não em um prompt de sistema.

  • Separe páginas públicas e autenticadas e compare cada resultado à fonte.

Schematron V2 Small em resumo

NecessidadeO que Small fazO que outro componente precisa fazer
Ler conteúdo da páginaExtrai campos do HTML recebidoTabbit Browser ou coletor autorizado obtém o HTML
Seguir regras de extraçãoRetorna valores conforme o JSON SchemaO esquema define campos, tipos, descrições e requisitos
Abrir uma URLNão consegue; a API recebe HTMLUm agente local abre uma página permitida
Usar uma sessão autenticadaO modelo não acessa a sessãoTabbit abre uma aba de tarefa no ambiente autorizado
Conferir a exatidãoMantém a estrutura solicitadaCódigo ou revisor compara os valores com a fonte

A Inference.net posiciona Small como a opção focada em qualidade para esquemas complexos e páginas longas. A documentação indica contexto de 128K tokens e recomenda limpar o HTML com lxml; páginas muito extensas devem ser reduzidas ou divididas. São informações do fornecedor, não medições deste artigo. Consulte a documentação do Schematron.

Separe captura e extração

  1. Captura. Uma tarefa local abre uma página pública ou autorizada, espera a renderização e devolve um trecho limitado de HTML. Não capture cookies, dados de perfil, campos ocultos ou conteúdo sem relação.

  2. Extração. O aplicativo envia o HTML como mensagem do usuário e o JSON Schema em response_format à API. O cliente valida os valores estruturados retornados.

O Schematron não recebe a URL, a sessão do navegador nem instruções de navegação. Em páginas renderizadas por JavaScript, uma requisição HTTP pode retornar só uma estrutura vazia; renderize a página no navegador primeiro. O exemplo abaixo adapta o padrão oficial para uma nota de versão.

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 estável exato exibido na página.")
    title: str = Field(description="Título visível exato do registro.")
    status: Optional[str] = Field(description="Status visível; null se ausente.")
    date: Optional[str] = Field(description="Data exibida na fonte; não inferir.")

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 é o trecho retornado pelo navegador. A mensagem contém HTML, sem instruções. As descrições do esquema explicam cada campo. Consulte o guia inicial e a documentação do modelo para configuração e acesso atuais. Não coloque uma chave real em prompts, páginas ou arquivos do Git.

Faça verificações diferentes para páginas públicas e autenticadas

FonteRegra de capturaAntes de enviar à APIRevisão
Página pública de produto ou documentaçãoMantenha o trecho relevante e seus rótulos próximosRemova scripts, estilos, navegação e outros registrosCompare cada valor ao conteúdo visível
Página de trabalho autenticadaLeia apenas a conta e o registro autorizadosExclua dados pessoais, credenciais, campos ocultos e registros irrelevantesConfira o ID e os campos importantes na aba original

Comece com uma página pública pequena e um esquema explícito. Para conteúdo privado, o limite dos dados importa mais que a conveniência. Você precisa ter permissão para ler a página e para enviar o conteúdo ao provedor. Se a segunda permissão não estiver clara, mantenha o processamento local ou consulte um administrador.

Capture localmente com Tabbit CLI

Instale o Tabbit Browser e o CLI local. Escolha um cliente de agente que possa executar ferramentas locais. A sintaxe do Skill depende do cliente: use /tabbit quando ele oferecer Skills nomeados, /skill:tabbit no Pi ou a opção documentada pelo cliente. Descoberta do Skill, acesso ao executável do CLI e login no site são verificações distintas. Veja como conectar um agente ao navegador existente e a configuração do Tabbit CLI para Codex.

Dê um nome à tarefa e use uma aba própria. Por exemplo, peça ao agente local para abrir notas públicas de versão, capturar só o contêiner do registro e retornar HTML e URL. O comando nodejs usa um ID de solicitação único:

"$HOME/.local/bin/tabbit-cli" nodejs \
  --task "Revisão de extração de notas de versão" \
  --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

Revise o fragmento e salve o HTML autorizado em approved-record.html antes de executar o exemplo em Python. A captura reconstrói o HTML a partir dos campos visíveis permitidos.

O seletor é apenas ilustrativo. Inspecione a página, escolha um contêiner estável e limite o tamanho do HTML. Neste ambiente, não use --group: o Skill instalado informa que o runtime não aceita essa opção sem valor. Se for necessário login, use somente o ambiente Tabbit autorizado e confirme a conta certa. Um teste local anterior mostrou que uma segunda tarefa CLI conseguia ler uma página de teste após a criação de uma sessão temporária. Isso confirma a reutilização de sessão nesse teste, não acesso a um site externo ou integração com agente externo.

Compare o ID e os campos importantes com a aba fonte. Salve o resultado como Revisão das notas de versão — GEO-104. Mantenha a página original para consulta enquanto o agente trabalha na própria aba. O checklist da primeira tarefa de navegador ajuda a limitar a transferência.

Quando Small é adequado e onde ele para

Considere Small quando o HTML já está disponível e você precisa de uma saída tipada. Ele não substitui um agente de navegador. O navegador local cuida da navegação e da sessão autorizada, o Schematron extrai do HTML limitado, o código valida tipos e evidências e uma pessoa revisa as exceções.

A Inference.net posiciona Turbo para vazão e custo, e Small para esquemas complexos e páginas longas. Compare-os com uma amostra rotulada própria. Em layouts repetitivos, seletores ou uma API podem ser mais simples e baratos. Para HTML irregular, a extração por esquema pode reduzir parsers específicos, mas ainda exige monitoramento.

Em uma discussão no Reddit, uma pessoa com mais de 2.000 arquivos HTML descreveu tabelas aninhadas e texto variável que dificultavam XPath fixo. Em outra conversa, um profissional relatou usar o LLM em produção como uma camada leve de raciocínio sobre elementos DOM já extraídos. São experiências individuais de scraping, não testes do Schematron V2 Small: discussão sobre HTML irregular e uso em produção.

Para tarefas repetidas, consulte o guia do Tabbit CLI, a comparação entre CLI e Browser MCP e a página sobre perfis, espaços de trabalho e grupos de abas. Se o resultado orientar uma decisão, mantenha juntos o valor, a URL fonte, o ID, a data e o status da revisão. JSON válido pelo esquema facilita o repasse, mas não prova que a página foi interpretada corretamente.

Comece com um teste autorizado pequeno: capture um registro público, defina os campos necessários, execute a API com sua conta e compare cada valor à fonte antes de expandir.

Se ainda estiver decidindo o que delegar, leia o que é um navegador agêntico e o guia de automação de navegador. Eles explicam a interação que ocorre antes da extração.

Perguntas frequentes

O Schematron V2 Small abre sites sozinho?

Não. A Inference.net descreve o Schematron como um modelo de extração de HTML. Um navegador ou coletor autorizado precisa obter a página e enviar o HTML e o esquema à API.

O Schematron V2 Small aceita instruções em texto livre?

A documentação diz que o modelo não usa instruções de usuário ou de sistema. Defina as regras no JSON Schema com tipos, campos obrigatórios e descrições.

Posso usá-lo em uma página com sessão iniciada?

Sim, se a tarefa do navegador local tiver permissão para ler a página e você puder enviar o conteúdo à Inference.net. Limite a captura e exclua dados pessoais ou confidenciais.

Qual é o ID do Schematron V2 Small?

A documentação da Inference.net identifica o modelo como inference-net/schematron-v2-small. Verifique a lista de modelos e o acesso da conta antes de implantar.

Quando devo escolher Small ou Turbo?

A Inference.net posiciona Small para esquemas complexos e páginas longas, e Turbo para mais vazão e menor custo em escala. Compare ambos com uma amostra rotulada do seu próprio conteúdo.

Posso usar o JSON sem revisão?

Não. Valide a resposta com o esquema e confira os valores importantes na fonte. Encaminhe dados ausentes ou ambíguos para revisão humana. JSON válido não garante dados corretos.

Dê o próximo passo

Deixe o Tabbit trabalhar ao seu lado.

Pesquise entre abas, automatize o trabalho repetitivo do navegador e mantenha todo o contexto ao alcance.