browser-use/jev-ultrafast

i. am. speed.

무엇인가요

Jev Ultrafast는 작은 언어모델(LLM)이 단일 자연어 목표를 달성하기 위해 웹 페이지를 제어할 수 있는 오픈소스 브라우저 에이전트입니다. 이 시스템은 페이지의 스냅샷을 반복적으로 캡처하고, 모든 가시적 컨트롤(버튼, 콤보박스, 텍스트 박스 등)을 번호 매긴 표로 변환한 후, LLM에게 한 가지 작업(예: CLICK, TYPE_TEXT, SELECT)과 그 표에서 하나의 대상 요소를 선택하도록 요청합니다. 선택된 작업이 브라우저에서 실행되고, 다음 스냅샷이 캡처되며, 모델이 DONE을 반환하거나 작업이 완료되었음을 확인할 때까지 이 사이클이 반복됩니다.

핵심 혁신은 동적이고 인덱싱된 작업 공간입니다. 고정된 수작업 선택자 대신, 에이전트는 각 루프 반복마다 새로운 가능한 작업 목록을 새로 생성하므로, 페이지 변경, 로딩 지연, UI 애니메이션에 대응할 수 있으며, 결정당 단 1회의 네트워크 라운드트립만으로 가능합니다.


작동 방식(개요)

  1. 스냅샷 – Chrome에서 작동하는 Browser Harness 프로토콜을 통해 작동하는 극소형 JavaScript(snapshot.js)가 DOM을 원자적으로 읽고, UI 요소의 유형, 레이블, 현재 값이 포함된 목록을 반환합니다.
  2. 프롬프트 구성 – Python 측(model.py)이 스냅샷과 사용자 제공 목표를 짧은 프롬프트로 포맷하여 텍스트 전용 LLM(예: OpenRouter의 inception/mercury‑2.5)에 전달합니다.
  3. LLM 결정 – 모델은 다음 JSON 객체를 반환합니다:
    • operationCLICK, TYPE_TEXT, SELECT, SCROLL_UP, SCROLL_DOWN, WAIT, DONE, BLOCKED 중 하나.
    • target – 해당 작업을 수용할 수 있는 요소의 인덱스.
    • (TYPE_TEXT인 경우) 입력할 텍스트.
  4. 실행 – 선택된 작업이 하네스를 통해 Chrome에 전송됩니다. 실행 전, 타겟이 여전히 존재하고, 가려지지 않았으며, 예상되는 컨트롤 유형과 일치하는지 검증합니다.
  5. 루프 – 스텝 1~4를 DONE이 반환될 때까지 반복하고, 필요 시 검증 단계를 통해 목표 달성 여부를 확인합니다.

스냅샷에는 가시적인 텍스트와 컨트롤 메타데이터만 포함되므로, 모델은 큰 페이지 블록을 보지 않으며, 프롬프트를 짧게 유지하고 지연을 낮출 수 있습니다.


왜 중요한가

  • 속도 – 데모는 Google Flights 검색을 약 7초 내에 완료하며, 브라우저 프로토콜 호출은 약 100회(나이브 구현의 1,000회 이상)로, 설계상 라운드트립을 최소화했습니다.
  • 일반성 – 사이트 전용 스크립트가 정책에 내장되어 있지 않습니다. 동일한 모델을 사용해 완전히 다른 작업(항공편, 위키백과 탐색, 호텔 검색)에 재사용 가능하며, 목표 문자열만 변경하면 됩니다.
  • 안전성 – 에이전트는 원시 선택자, 자바스크립트, 쉘 명령어를 생성하지 않습니다. 모든 모델 출력은 유효한 JSON이어야 하며, 실행 전 현재 DOM과 재검증됩니다.
  • 투명성 – 선택적 UI 인스펙터를 통해 번호 매긴 요소 표, 작업 확률, 타겟 확률을 볼 수 있어 의사결정 과정을 관찰하고 디버깅할 수 있습니다.

빠른 시작 (Linux/macOS, Python 3.11+)

# 1. 리포지토리 복제
git clone https://github.com/browser-use/jev-ultrafast.git
cd jev-ultrafast

# 2. 종속성 설치 (uv 사용, 또는 pip 사용 가능)
uv sync          # 가상 환경 생성 및 Python 종속성 설치
# Browser‑harness (Chrome 원격 디버깅)는 자동으로 가져옵니다

# 3. API 키 설정
cp .env.example .env
# .env를 편집하고 다음을 추가:
#   TYPESAFE_API_KEY=…   # TypeSafe 정책 서비스용
#   TEXT_MODEL_API_KEY=… # OpenRouter (또는 호환) 키

# 4. 데모 UI 실행
uv run jev
# Chrome에서 http://127.0.0.1:8766 열고, 요청 시 원격 디버깅 활성화,
# 그 후 "Start demo → Run automatically" 클릭.

코드에서 라이브러리 사용하기

from jev_ultrafast import Agent

with Agent(
    "https://www.google.com/travel/flights?hl=en",
    "2026년 9월 20일, 취리히에서 런던으로 가는 편도 항공편을 성인 1명, 에코노미 클래스로 찾기. 일치하는 항공편 옵션이 표시되면 중지.",
) as agent:
    for state in agent.run():
        print(state["elapsed_ms"], state["status"])  # 진행 정보

데모와 동일한 uv run --env-file .env python your_script.py 명령어로 실행하세요.

리포지토리는 코어 에이전트를 수정하지 않고 시작 URL과 목표를 변경할 수 있는 작은 예제 스크립트(examples/run.py, examples/flights.py)도 포함하고 있습니다.


제한 사항 (문서화됨)

  • 표준 HTML/ARIA 컨트롤만 지원. 커스텀 캔버스 에디터, 파일 업로드 대화상자, 팝업 창, 깊은 샤프도메인 트리와 같은 복잡한 위젯은 이 MVP에서는 지원되지 않습니다.
  • LLM은 텍스트 생성(TYPE_TEXT)에만 사용됩니다. 다른 결정(어떤 버튼을 클릭할지, 어떤 옵션을 선택할지)은 인덱싱된 요소 표를 받는 정책 모델이 수행합니다.
  • 결과 검증(DONE)은 별도 단계입니다. 에이전트는 모델의 주장이 올바르다고 가정하지 않고, 페이지를 확인한 후 판단합니다.
  • 성능 수치는 단일 Chrome 프로필에서 몇 번의 실행 기반이며, 사이트나 브라우저 간 신뢰성 보장은 아닙니다.

다음에 살펴볼 곳

  • agent.py – 완전한 의사결정 루프와 텍스트 도우미로의 전달.
  • snapshot.js – 원자적인 DOM 추출 로직.
  • browser.py – 저수준 Chrome DevTools Protocol 래퍼.
  • model.py – 작업/타겟 헤드 구성 및 텍스트 모델 호출.
  • performance.md – 상세한 시간 분석 및 재현성 노트.

TL;DR

Jev Ultrafast는 작은 LLM이 반복적으로 (1) 페이지를 번호 매긴 UI 요소 목록으로 읽고, (2) 모델에게 한 가지 작업한 가지 타겟을 선택하게 하며, (3) 해당 작업을 실행하는 컴팩트하고 오픈소스 시스템입니다. 이 설계는 프롬프트를 작게 유지하고, 네트워크 트래픽을 줄이며, 전체 루프가 현실적인 항공편 검색 작업을 8초 미만으로 완료할 수 있도록 빠르게 하면서도, 완전히 검사 가능하고 안전합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트