TabbitBlog

Cómo usar Schematron V2 Small con un navegador autenticado

Captura HTML acotado con Tabbit CLI y envíalo junto con un esquema tipado a Schematron V2 Small para extraer datos.

En este artículo
  1. Ideas clave
  2. Schematron V2 Small de un vistazo
  3. Divide la captura y la extracción
  4. Aplica controles distintos a páginas públicas y autenticadas
  5. Captura la página localmente con Tabbit CLI
  6. Cuándo sirve Small y dónde termina

Schematron V2 Small extrae JSON tipado de HTML, pero no abre sitios ni controla un navegador. Usa primero un navegador local autorizado, como Tabbit Browser, para capturar solo el contenido necesario; después envía ese HTML con un JSON Schema a Inference.net. La API no admite instrucciones libres ni herramientas de navegador, así que el esquema debe describir la extracción. La documentación oficial de Schematron muestra este patrón.

Para una página con sesión iniciada, usa un agente local que pueda acceder a Tabbit CLI en una pestaña de tarea independiente. Limita la lectura al registro necesario, valida el resultado y guárdalo como borrador con nombre para revisión. No envíes datos de cuenta ni contenido de páginas a una API externa sin autorización y permiso de datos.

Ideas clave

  • Small extrae datos del HTML; no navega, hace clic, inicia sesión ni elige la página.

  • El ID de API documentado es inference-net/schematron-v2-small.

  • Captura y limita el contenido en el navegador. Tabbit CLI permite esa transferencia desde un cliente con acceso local.

  • Escribe las reglas en el esquema, no en un prompt del sistema.

  • Separa las páginas públicas de las autenticadas y coteja cada resultado con su fuente.

Schematron V2 Small de un vistazo

NecesidadQué hace SmallQué debe hacer otro componente
Leer contenidoExtrae campos del HTML recibidoTabbit Browser o un capturador autorizado obtiene el HTML
Seguir reglasDevuelve valores con la forma del JSON SchemaEl autor del esquema define campos, descripciones, tipos y requisitos
Abrir una URLNo puede; la API recibe HTMLEl agente local abre una página permitida
Usar una sesiónEl modelo no ve la sesión del navegadorTabbit abre una pestaña de tarea en el entorno autorizado
Verificar datosRespeta la estructura solicitadaCódigo o una persona coteja los valores con la fuente

Inference.net posiciona Small como la opción orientada a calidad para esquemas complejos y páginas largas. Sus documentos indican un contexto de 128K tokens y recomiendan limpiar HTML con lxml; las páginas muy largas deben recortarse o dividirse. Son afirmaciones del proveedor, no pruebas de este artículo. Consulta la documentación.

Divide la captura y la extracción

  1. Captura. Una tarea del navegador local abre la página pública o autorizada, espera a que se renderice y devuelve un fragmento acotado. No captures cookies, datos de perfil, campos ocultos ni contenido ajeno.

  2. Extracción. La aplicación envía el HTML como mensaje de usuario y el JSON Schema mediante response_format a la API. El modelo devuelve valores estructurados que tu cliente valida.

Schematron no recibe la URL, la sesión del navegador ni instrucciones de navegación. Si la página depende de JavaScript, una solicitud HTTP puede devolver solo una estructura vacía; primero hay que renderizarla en el navegador. El ejemplo adaptado a continuación usa campos de una nota de versión y sigue el patrón oficial.

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 estable exacto que aparece en la página.")
    title: str = Field(description="Título visible exacto del registro.")
    status: Optional[str] = Field(description="Estado visible; null si no aparece.")
    date: Optional[str] = Field(description="Fecha visible en la fuente; no la infieras.")

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 es el fragmento devuelto por el navegador. El mensaje contiene el HTML y ninguna instrucción. Las descripciones del esquema indican qué significa cada campo. Consulta el inicio rápido y la documentación del modelo para conocer la configuración y el acceso actuales. No guardes una clave real en un prompt, una página ni un archivo de Git.

Aplica controles distintos a páginas públicas y autenticadas

FuenteRegla de capturaAntes de enviar a la APIRevisión
Página pública de producto o documentaciónConserva el artículo o la tarjeta pertinente y sus etiquetasElimina scripts, estilos, navegación y registros ajenosCompara cada campo con la fuente visible
Página de trabajo autenticadaLee solo la cuenta y el registro autorizadosExcluye datos personales, credenciales, campos ocultos y registros no relacionadosComprueba el ID estable y los campos clave en la pestaña original

Empieza con una página pública pequeña y un esquema explícito. Para contenido privado, el límite de datos importa más que la comodidad: necesitas permiso para leer la página y para transmitir su contenido al proveedor. Si no tienes claro el segundo permiso, procesa los datos localmente o consulta a quien administre el sistema.

Captura la página localmente con Tabbit CLI

Instala Tabbit Browser y su CLI local. Elige un cliente de agente que pueda ejecutar herramientas locales. La sintaxis del Skill depende del cliente: usa /tabbit si admite Skills con nombre, /skill:tabbit en Pi o la entrada documentada por tu cliente. Descubrir el Skill, alcanzar el lanzador CLI y tener sesión en el sitio son comprobaciones distintas. Consulta cómo conectar un agente al navegador existente y la configuración de Tabbit CLI para Codex.

Pon un nombre claro a la tarea y usa su propia pestaña. Por ejemplo, pide al agente local que abra una página pública de notas de versión, capture solo el contenedor del registro y devuelva el HTML junto con la URL. La llamada CLI usa nodejs; un ID de solicitud único evita duplicados:

"$HOME/.local/bin/tabbit-cli" nodejs \
  --task "Revisión de extracción de notas de versión" \
  --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

Revisa el fragmento y guarda el HTML aprobado como approved-record.html antes de ejecutar el ejemplo de Python. La captura reconstruye HTML con los campos visibles permitidos.

El selector es ilustrativo; inspecciona la página y elige un contenedor estable. Limita el HTML devuelto. En este entorno no añadas --group, porque el Skill CLI instalado indica que su runtime no acepta esa opción sin valor. Si el sitio exige iniciar sesión, usa solo el entorno Tabbit autorizado y verifica la cuenta. Una prueba local anterior mostró que una segunda tarea CLI podía leer una página de prueba tras establecer una sesión temporal. Eso demuestra reutilización de sesión en ese entorno de prueba, no acceso a terceros ni integración de un agente externo.

Cuando Small devuelva el registro, compara el ID y los campos relevantes con la pestaña fuente. Guarda el resultado como Revisión de notas de versión — GEO-104. Conserva abierta la fuente para que la persona revisora pueda consultarla; el agente puede seguir trabajando en su pestaña. La lista para la primera tarea de un agente de navegador ayuda a delimitar la transferencia.

Cuándo sirve Small y dónde termina

Small puede encajar cuando ya tienes HTML y necesitas una salida tipada. No reemplaza a un agente de navegador: el navegador local se ocupa de la navegación y la sesión autorizada; Schematron extrae del HTML acotado; el código valida tipos y evidencia; una persona revisa las excepciones.

Inference.net posiciona Schematron V2 Turbo para más rendimiento y menor coste, y Small para esquemas complejos y páginas largas. Compara ambos con datos etiquetados propios. Para páginas repetitivas, selectores normales o una API pueden ser más sencillos y baratos. Cuando el HTML es irregular, la extracción por esquema puede reducir el código específico del sitio, pero requiere supervisión.

En Reddit, una persona que analizaba más de 2.000 archivos HTML describió tablas anidadas y texto inconsistente que dificultaban el uso de XPath fijo. En otra conversación, un profesional del scraping dijo que en producción prefería usar el LLM como capa ligera de razonamiento sobre elementos DOM ya extraídos. Son experiencias individuales de flujos de scraping, no pruebas de Schematron V2 Small: discusión sobre HTML irregular y uso en producción.

Para tareas repetibles, lee la guía de Tabbit CLI, la comparación entre CLI y Browser MCP y la explicación de perfiles, espacios y grupos de pestañas. Si el resultado influye en una decisión, guarda el valor, la URL fuente, el ID del registro, la fecha y el estado de revisión. Un JSON que cumple el esquema facilita la transferencia, pero no demuestra que la página se haya interpretado bien.

Empieza con un piloto pequeño y autorizado: captura un registro público, define solo los campos necesarios, ejecuta la API con tu propia cuenta y compara cada valor con la fuente antes de ampliar el proceso.

Si aún decides qué trabajos encajan en un agente, consulta qué hace un navegador agéntico y la guía de automatización del navegador. Explican la capa de interacción previa a la extracción.

Preguntas frecuentes

¿Schematron V2 Small puede abrir sitios web por sí solo?

No. Inference.net presenta Schematron como un modelo de extracción desde HTML. Un navegador u otro capturador autorizado debe obtener la página y enviar el HTML con el esquema a la API.

¿Schematron V2 Small acepta instrucciones normales?

La documentación indica que el modelo no usa instrucciones de usuario ni de sistema. Define las reglas de extracción en el JSON Schema, con tipos, campos requeridos y descripciones.

¿Puedo usarlo con una página donde ya inicié sesión?

Sí, si la tarea del navegador local tiene permiso para leerla y puedes enviar el contenido a Inference.net. Limita la captura y excluye datos personales o confidenciales.

¿Cuál es el ID de modelo de Schematron V2 Small?

La documentación de Inference.net indica inference-net/schematron-v2-small. Comprueba la lista actual de modelos y el acceso de tu cuenta antes de desplegarlo.

¿Cuándo debo elegir Small en vez de Turbo?

Inference.net recomienda Small para esquemas complejos y páginas largas donde prima la calidad, y Turbo para el rendimiento y el coste a escala. Compara ambos con una muestra etiquetada propia.

¿Puedo usar el JSON sin revisarlo?

No. Valida la respuesta con el esquema, comprueba los campos importantes con el texto fuente y revisa a mano los valores ausentes o dudosos. Un JSON válido no garantiza que los datos sean correctos.

Da el siguiente paso

Deja que Tabbit trabaje junto a ti.

Investiga entre pestañas, automatiza el trabajo repetitivo del navegador y mantén todo el contexto al alcance.