browser-use/jev-ultrafast

Fastest and cheapest web agent

24,186
GitHub 스타
1,858
포크
Python
언어
MIT
라이선스
2026.11.03
최근 푸시
2026.10.17
별표한 날

AI 분석

설치 난이도: 보통
큐레이터 노트
브라우저 자동화 에이전트의 지연 시간과 비용을 줄이는 설계 패턴(동적 액션 공간, 단일 왕복 추론, 스크린샷 없는 구조화 상태 소비)을 참고하기에 매우 적합합니다. 실제 프로덕션 적용보다는 아키텍처 아이디어와 벤치마크 방법론을 참조하는 용도로 가치가 높습니다.

강점

  • 동적이고 인덱스화된 액션 공간과 TypeSafe 추론적 팬아웃을 통해 결정 주기당 한 번의 네트워크 왕복으로 동작해 지연 시간이 매우 낮습니다.
  • 기본 루프에서 스크린샷을 사용하지 않고 구조화된 DOM 상태만 소비하므로 토큰 비용과 처리 시간이 절감됩니다.
  • 모델 출력이 선택자, 좌표, 셸 명령, 실행 가능한 JavaScript로 변환되지 않도록 하는 안전 설계가 명확합니다.
  • 코드베이스가 6개 파일로 작아 읽고 감사하기 쉬우며, 오프라인 테스트와 가드 검사 스크립트를 제공합니다.

약점

  • Shadow root, iframe, canvas, 파일 업로드, 팝업 탭, 중첩 스크롤, 임의 키보드 위젯 등 많은 실제 웹 환경이 MVP 범위 밖입니다.
  • 성능 수치가 단일 작업, 단일 브라우저 프로필에서 3회 반복한 결과로 일반적인 신뢰성 벤치마크가 아닙니다.
  • DONE 판단에 대한 독립적 결과 검증이 필요하며, DOM 리더가 전체 접근성 이름 명세를 지원하지 않습니다.
  • TypeSafe와 텍스트 모델 API 키가 필요해 외부 유료 API 의존성이 있습니다.

주의사항

  • Chrome 원격 디버깅 허용이 필요하고 기존 Chrome 프로필을 공유하므로 개인 프로필 사용 시 주의해야 합니다.
  • 라이브 예제와 녹화 스크립트는 유료 API 호출을 발생시키므로 비용을 인지하고 실행해야 합니다.
  • 자격 증명과 원시 트레이스가 저장소에 커밋되지 않도록 .gitignore 설정을 확인해야 합니다.

시작 가이드

  • uv sync 후 .env에 TYPESAFE_API_KEY와 TEXT_MODEL_API_KEY를 설정하고 로컬 데모를 실행해 동작을 확인합니다.
  • performance.md와 examples/flights.py를 읽어 측정 경계와 검증 방식을 파악합니다.
  • 자신의 목표로 examples/run.py를 실행해 다양한 사이트에서의 성공률과 한계를 직접 평가합니다.
  • Shadow root, iframe 등 MVP 범위 밖 기능이 필요한 경우 확장 가능성을 검토합니다.

README 한국어 번역

이 번역은 AI가 원문 README를 옮긴 것입니다. 원문이 항상 우선합니다.

Jev Ultrafast ⚡

[!IMPORTANT]

Browser Use Cloud 대기자 명단이 열렸습니다. 클라우드에서 초고속 브라우저 에이전트를 조기에 사용해 보세요.

대기자 명단 참여 →

동적이고 인덱스화된 액션 공간을 갖춘 브라우저 에이전트.

목표 하나만 주면 됩니다. TypeSafe의 Jev가 오퍼레이션과 엘리먼트를 선택합니다. 소형 LLM은 오퍼레이션이 TYPE_TEXT일 때만 텍스트를 작성합니다.

Google Flights에서 취리히 → 런던까지 7.1초. 자연어 목표 하나, 실제 텍스트 생성, 로딩 대기까지 포함한 시간입니다.

MP4 보기 · 측정값 · 루프 읽기

액션 공간

모든 관측은 새로운 엘리먼트 테이블을 생성합니다:

[1] button    Change ticket type · Round trip
[2] combobox  Where from?        · San Francisco
[3] combobox  Where to?          · empty
[4] textbox   Departure          · empty...

오퍼레이션은 CLICK, TYPETEXT, SELECT, SCROLLUP, SCROLL_DOWN, WAIT, DONE, BLOCKED입니다. 지원되는 오퍼레이션과 대상만 제시됩니다.

                      one TypeSafe request
                     ┌───────────────────────────┐
page → element table → operation                 │
                     │ click_target              │
                     │ type_text_target          │
                     │ select_target, if present │
                     └─────────────┬─────────────┘
                         use the matching target
                                   │
                    CLICK [7] ─────┤──→ browser
                TYPE_TEXT [3] ─────┘
                          ↓
                   small LLM → text → browser

대상 질문은 추론적입니다. 오퍼레이션이 CLICK이면 click_target만 실행될 수 있습니다. 두 가지 결정, 한 번의 네트워크 왕복. 각 대상 헤드는 호환되는 엘리먼트만 포함합니다. 네이티브 드롭다운 선택지는 관측된 엘리먼트/옵션 인덱스를 가집니다.

정책에는 사이트별 액션 스크립트나 미리 준비된 필드 문자열이 없습니다. Flights 예제는 목표를 제공하고 결과를 독립적으로 검증합니다. 스크린샷 렌더러는 나중에 라벨을 추가할 뿐, 브라우저를 구동하지 않습니다.

사용해 보기

git clone https://github.com/browser-use/jev-ultrafast.git
cd jev-ultrafast
uv sync
cp.env.example.env
# Add TYPESAFE_API_KEY and TEXT_MODEL_API_KEY.
uv run jev

http://127.0.0.1:8766 을 열고 Start demo → Run automatically 를 클릭하세요. 인스펙터는 번호가 매겨진 엘리먼트, 오퍼레이션 확률, 대상 확률, 실행된 액션을 보여줍니다. Choose next 는 실행 전에 일시정지합니다.

Chrome은 uv sync로 설치되는 Browser Harness를 통해 연결됩니다. 연결이 필요하면 uv run browser-harness --doctor를 실행하세요. 메시지가 표시되면 Chrome에서 원격 디버깅을 허용하세요.

TEXTMODELAPI_KEY는 예제 구성에서 OpenRouter 키입니다. 현재 데모는 추론이 비활성화된 inception/mercury-2.5를 사용합니다. Gemini, GLM, DeepSeek도 OpenAI 호환 텍스트 헬퍼를 사용할 수 있습니다. 적절한 모델, 엔드포인트, 추론 설정을 구성하세요.

라이브러리로 사용하기

from jev_ultrafast import Agent

with Agent(
    "https://www.google.com/travel/flights?hl=en",
    "Find one-way flights from Zurich to London on September 20, 2026, "
    "for one adult in economy. Stop when matching flight options are visible.",
) as agent:
    for state in agent.run():
        print(state["elapsed_ms"], state["status"])

uv run --env-file.env python your_script.py로 실행하세요. 동일한 정책으로 다른 작업을 실행할 수 있습니다:

uv run --env-file.env python examples/run.py \
  --url https://en.wikipedia.org/wiki/Main_Page \
  --goal 'Find and open the Wikipedia article about Gödel’s incompleteness theorems.'

uv run --env-file.env python examples/flights.py --keep-open은 항공편 검색을 수행하고 실제 경로/날짜/결과를 확인한 뒤 트레이스를 저장합니다. 항공편을 선택하거나 예약하지는 않습니다.

왜 빠른가

  • 결정 주기당 한 번의 요청. 오퍼레이션과 대상 헤드는 동일한 관측 상태를 공유합니다.
  • 기본 에이전트 루프에 스크린샷이 없음. Jev는 구조화된 상태를 소비합니다. 인스펙터는 스크린샷을 선택적으로 사용하고, 비디오는 별도의 연속 스크린캐스트를 사용합니다.
  • 스냅샷당 한 번의 브라우저 호출. 보이는 컨트롤, 이름, 값, 텍스트를 원자적으로 읽습니다. 실제 DOM 노드에 대한 참조를 유지합니다.
  • 선택된 대상 검증. 클릭은 문서, 폼 값, 대상, 주변 컨텍스트를 확인합니다. 애니메이션만으로는 추가 예측을 강제하지 않습니다. 입력 전에 현재 지오메트리를 해석하고 가려진 컨트롤을 거부합니다.
  • 유용한 상태 대기. 콤보박스에 입력한 후 보이는 제안을 기다리며 최대 200ms로 제한합니다. 다른 상호작용은 최대 두 개의 애니메이션 프레임 또는 50ms를 받습니다. 이러한 읽기는 실행이 기록된 후에 발생합니다.
  • 숨겨진 탭 렌더링 유지. 포커스 에뮬레이션은 Chrome의 보이는 탭을 전환하지 않고 백그라운드 애니메이션 스로틀링을 방지합니다.
  • 보이는 텍스트 전송. 화면 밖의 기사 본문과 푸터는 모델 컨텍스트를 채우지 않습니다.
  • 중단된 텍스트 요청 재사용. 생성된 값은 전체 텍스트 헬퍼 입력이 변경되지 않은 경우에만 오래된 페이지 재시도에서 살아남습니다.

실행된 모든 대상은 관측된 노드에서 해석됩니다. 실행기는 페이지 신선도와 클릭 가림을 재확인합니다. 모델 출력은 절대 선택자, 좌표, 셸 명령, 실행 가능한 JavaScript가 되지 않습니다. 텍스트 헬퍼 출력은 입력 전에 작은 JSON 객체로 파싱되어야 합니다.

읽을 수 있을 만큼 작음

파일 역할
agent.py 전체 루프와 텍스트 헬퍼 핸드오프
snapshot.js 원자적 DOM 스냅샷, 인덱스된 컨트롤, 신선도 가드
browser.py 브라우저 연결, 현재 지오메트리, 실행
model.py 동적 오퍼레이션/대상 헤드와 텍스트 생성
questions.py 모델 지침
demo.py 로컬 인스펙터

증거와 한계

현재 비디오는 7,073ms의 Google Flights 실행입니다. 타이밍은 초기 페이지 관측 후 시작되며 모델 호출, 생성된 텍스트, 브라우저 작업, 오래된 결정, 로딩 대기를 포함합니다. 새로운 독립 검사는 편도 설정, 취리히, 런던, 2026년 9월 20일, 보이는 항공편 옵션을 확인합니다. 비디오는 1×로 재생되며 시작 홀드 없이 0.5초의 최종 홀드가 있습니다.

동일한 모델과 설정으로 6번의 교대 실행에서 두 버전 모두 3/3 통과했습니다. 중앙값 작업 시간은 9.450초 → 7.092초로 25% 감소했고, 중앙값 브라우저 프로토콜 호출은 1,092 → 101로 감소했습니다. 이는 하나의 브라우저 프로필에서 하나의 작업을 세 번 반복한 것이지 일반적인 신뢰성 벤치마크가 아닙니다.

동일한 정책은 요청된 Wikipedia 문서를 2.798초에 열었고 로컬 호텔 검색/필터 작업을 1.896초에 통과했습니다. 실행, 실패, 소스 해시, 측정 경계는 performance.md에 있습니다.

DONE 선택은 여전히 독립적인 결과 검증이 필요합니다. DOM 리더는 일반적인 HTML 및 ARIA 컨트롤을 처리하지만 전체 접근 가능한 이름 명세는 아닙니다. Shadow root, 프레임, 캔버스, 업로드, 팝업 탭, 중첩 스크롤, 임의 키보드 위젯은 이 MVP 범위 밖입니다. 소유된 탭은 기존 Chrome 프로필을 공유합니다.

개발

uv run ruff check.
uv run pytest
node --check jev_ultrafast/static/app.js
node --check jev_ultrafast/snapshot.js
uv build

테스트는 오프라인입니다. uv run python scripts/checkguards.py는 모델 호출 없이 로컬 브라우저에서 실제 컨트롤을 확인합니다. 라이브 예제와 녹화 스크립트는 유료 API 호출을 합니다. scripts/recordflights.py는 원본 브라우저 타임스탬프를 캡처하고, scripts/render_demo.py는 검증된 실행을 1×로 렌더링하고 Google 계정 스트립을 잘라냅니다. 자격 증명과 원시 트레이스는 무시됩니다.


Browser Use · Browser Harness · TypeSafe speculative fan-out

원본 저장소: browser-use/jev-ultrafast

라이선스: MIT

게재 제외를 원하시면 삭제 요청을 보내주세요.