browser-use/jev-ultrafast
i. am. speed.
무엇인가요
Jev Ultrafast는 작은 언어모델(LLM)이 단일 자연어 목표를 달성하기 위해 웹 페이지를 제어할 수 있는 오픈소스 브라우저 에이전트입니다. 이 시스템은 페이지의 스냅샷을 반복적으로 캡처하고, 모든 가시적 컨트롤(버튼, 콤보박스, 텍스트 박스 등)을 번호 매긴 표로 변환한 후, LLM에게 한 가지 작업(예: CLICK, TYPE_TEXT, SELECT)과 그 표에서 하나의 대상 요소를 선택하도록 요청합니다. 선택된 작업이 브라우저에서 실행되고, 다음 스냅샷이 캡처되며, 모델이 DONE을 반환하거나 작업이 완료되었음을 확인할 때까지 이 사이클이 반복됩니다.
핵심 혁신은 동적이고 인덱싱된 작업 공간입니다. 고정된 수작업 선택자 대신, 에이전트는 각 루프 반복마다 새로운 가능한 작업 목록을 새로 생성하므로, 페이지 변경, 로딩 지연, UI 애니메이션에 대응할 수 있으며, 결정당 단 1회의 네트워크 라운드트립만으로 가능합니다.
작동 방식(개요)
- 스냅샷 – Chrome에서 작동하는 Browser Harness 프로토콜을 통해 작동하는 극소형 JavaScript(
snapshot.js)가 DOM을 원자적으로 읽고, UI 요소의 유형, 레이블, 현재 값이 포함된 목록을 반환합니다. - 프롬프트 구성 – Python 측(
model.py)이 스냅샷과 사용자 제공 목표를 짧은 프롬프트로 포맷하여 텍스트 전용 LLM(예: OpenRouter의inception/mercury‑2.5)에 전달합니다. - LLM 결정 – 모델은 다음 JSON 객체를 반환합니다:
operation–CLICK,TYPE_TEXT,SELECT,SCROLL_UP,SCROLL_DOWN,WAIT,DONE,BLOCKED중 하나.target– 해당 작업을 수용할 수 있는 요소의 인덱스.- (TYPE_TEXT인 경우) 입력할 텍스트.
- 실행 – 선택된 작업이 하네스를 통해 Chrome에 전송됩니다. 실행 전, 타겟이 여전히 존재하고, 가려지지 않았으며, 예상되는 컨트롤 유형과 일치하는지 검증합니다.
- 루프 – 스텝 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초 미만으로 완료할 수 있도록 빠르게 하면서도, 완전히 검사 가능하고 안전합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트