TabbitBlog

로그인된 브라우저에서 Schematron V2 Small 사용하는 방법

Tabbit CLI로 범위를 제한한 HTML을 가져온 뒤 타입 스키마와 함께 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는 자유 형식 지시문이나 브라우저 도구를 받지 않으므로 스키마가 추출 규칙을 담아야 합니다. Inference.net 공식 문서가 이 방식을 설명합니다.

로그인 페이지라면 로컬 도구를 사용할 수 있는 에이전트가 별도 작업 탭에서 Tabbit CLI를 호출하도록 하세요. 필요한 기록만 읽고 결과를 검증해 이름이 지정된 검토 초안으로 저장합니다. 권한과 데이터 정책이 허용하지 않는다면 계정 정보나 페이지 콘텐츠를 외부 API로 보내지 마세요.

핵심 내용

  • Small은 HTML 추출 모델이며 탐색, 클릭, 로그인, 페이지 선택은 하지 않습니다.

  • 문서에 나온 API ID는 inference-net/schematron-v2-small입니다.

  • 먼저 브라우저에서 필요한 범위만 캡처하세요. Tabbit CLI는 로컬 브라우저 연결을 지원합니다.

  • 지시문 대신 스키마에 필드 규칙을 적으세요.

  • 공개 페이지와 로그인 페이지를 분리하고 결과를 원문과 대조하세요.

Schematron V2 Small 한눈에 보기

필요한 작업Small의 역할다른 구성 요소의 역할
페이지 읽기전달된 HTML에서 필드 추출Tabbit Browser 또는 승인된 수집기가 HTML 획득
추출 규칙 적용JSON Schema 모양으로 값 반환스키마 작성자가 필드, 타입, 설명, 필수 여부 정의
URL 열기지원하지 않음. API 입력은 HTML로컬 브라우저 에이전트가 허용된 페이지 방문
로그인 세션 사용모델은 세션을 볼 수 없음승인된 Tabbit 환경에서 작업 탭 열기
정확성 확인출력 구조 준수코드나 검토자가 원문과 값 비교

Inference.net은 Small을 복잡한 스키마와 긴 페이지에서 품질을 우선할 때 권합니다. 문서에는 128K 토큰 컨텍스트와 lxml 사전 처리가 나와 있으며, 매우 긴 페이지는 잘라내거나 나누라고 안내합니다. 이는 공급자 설명이지 이 글의 실측 결과가 아닙니다. 공식 Schematron 문서를 확인하세요.

브라우저 캡처와 추출을 분리하세요

  1. 캡처. 로컬 브라우저 작업이 공개 또는 승인된 페이지를 열고 렌더링이 끝나면 범위를 제한한 HTML을 반환합니다. 쿠키, 프로필 정보, 숨겨진 입력값, 관계없는 콘텐츠는 제외합니다.

  2. 추출. 앱은 HTML을 사용자 메시지로, JSON Schema를 response_format으로 설정해 API를 호출합니다. 반환값은 클라이언트가 검증합니다.

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은 브라우저가 반환한 조각입니다. 메시지에는 HTML만 넣고 지시는 포함하지 않습니다. 필드 설명은 스키마에 적습니다. 현재 설정은 빠른 시작, 사용 조건은 모델 문서에서 확인하세요. 실제 API 키를 프롬프트, 페이지, Git 파일에 넣지 마세요.

공개 페이지와 로그인 페이지는 따로 확인하세요

페이지캡처 규칙API 전송 전검토 지점
공개 제품 또는 문서 페이지관련 본문이나 카드와 주변 레이블만 보존스크립트, 스타일, 탐색 메뉴, 다른 기록 제거보이는 원문과 각 값 대조
로그인된 업무 페이지권한이 있는 계정과 기록만 읽기개인정보, 자격 증명, 숨은 입력값, 관계없는 기록 제외원래 탭에서 ID와 핵심 필드 확인

작은 공개 페이지와 명확한 스키마로 시작하세요. 비공개 데이터에서는 편의보다 데이터 경계가 우선입니다. 페이지를 읽을 권한과 내용을 제공자에게 전송할 권한을 모두 확인하세요. 불분명하다면 로컬에서 처리하거나 관리자에게 문의하세요.

Tabbit CLI로 로컬에서 캡처하기

Tabbit Browser와 로컬 CLI를 설치하고 로컬 도구를 실행할 수 있는 에이전트 클라이언트를 선택하세요. Skill 호출 방법은 클라이언트마다 다릅니다. 이름 있는 Skill을 지원하면 /tabbit, Pi에서는 /skill:tabbit, 그 외는 해당 클라이언트의 문서를 따릅니다. Skill 검색, CLI 실행 경로, 사이트 로그인은 서로 다른 확인 항목입니다. 기존 브라우저에 에이전트 연결하기와 Codex용 Tabbit CLI 설정을 참고하세요.

작업에 이름을 붙이고 전용 탭을 사용하세요. 예를 들어 공개 릴리스 노트에서 한 레코드 컨테이너만 가져오고 HTML과 URL을 반환하도록 요청합니다. 고유 request ID를 포함한 CLI 예시는 다음과 같습니다.

"$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 작업이 같은 테스트 페이지를 읽었습니다. 이는 테스트 환경의 세션 재사용만 확인한 것이며 외부 사이트 접근이나 외부 에이전트 통합을 입증하지 않습니다.

모델 결과의 ID와 핵심 항목을 원본 탭에서 확인하고 릴리스 노트 검토 초안 — GEO-104라는 이름으로 저장하세요. 검토자가 출처를 열어볼 수 있게 탭을 남기고 에이전트는 별도 탭에서 계속 작업합니다. 브라우저 에이전트 첫 작업 체크리스트에서 작업 범위 설정을 확인할 수 있습니다.

Small이 맞는 경우와 한계

HTML이 준비되어 있고 고정된 타입의 출력이 필요하면 Small을 검토할 수 있습니다. 브라우저 에이전트를 대체하지는 않습니다. 로컬 브라우저가 탐색과 승인된 세션을 맡고, 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를 실행한 다음 각 값을 원문과 비교하고 범위를 넓히세요.

브라우저 에이전트에 어떤 일을 맡길지 고민된다면 에이전트 브라우저란 무엇인가와 브라우저 자동화를 참고하세요. 추출 전 상호작용 단계를 다룹니다.

자주 묻는 질문

Schematron V2 Small이 웹사이트를 직접 열 수 있나요?

아니요. Inference.net은 Schematron을 HTML 추출 모델로 설명합니다. 브라우저나 승인된 수집기가 먼저 페이지를 가져와 HTML과 스키마를 API에 보내야 합니다.

일반 프롬프트를 받아들이나요?

공식 문서에 따르면 사용자 또는 시스템 지시문을 사용하지 않습니다. 필드 타입, 필수 여부, 설명을 JSON Schema에 넣어 추출 규칙을 정의하세요.

로그인된 페이지에도 사용할 수 있나요?

로컬 브라우저 작업에 페이지를 읽을 권한이 있고 내용을 Inference.net에 보낼 수 있다면 가능합니다. 캡처 범위를 제한하고 개인 정보나 민감한 필드는 제외하세요.

Schematron V2 Small의 모델 ID는 무엇인가요?

Inference.net 문서의 API 식별자는 inference-net/schematron-v2-small입니다. 배포 전에 현재 모델 목록과 계정 권한을 확인하세요.

Small과 Turbo 중 무엇을 선택해야 하나요?

Inference.net은 복잡한 스키마와 긴 페이지에는 Small, 높은 처리량과 비용 절감에는 Turbo를 권합니다. 실제 데이터로 비교하세요.

결과 JSON을 검토 없이 사용해도 되나요?

안 됩니다. 스키마를 검증하고 중요한 값을 원문과 대조하며 불확실한 항목은 사람이 검토해야 합니다. 형식이 유효해도 사실이 정확하다는 뜻은 아닙니다.

다음 단계

Tabbit 과 함께 일하세요.

탭 간 조사를 하고, 반복적인 브라우저 작업을 자동화하며, 모든 맥락을 손이 닿는 곳에 두세요.