
EvoWeb는 코딩 에이전트가 웹 앱을 처음 만든 뒤 연속된 기능 요청에 대응하는 능력을 평가하는 벤치마크다. 32개 앱 각각에 첫 개발 요청과 후속 요청 9개를 차례로 주고, 각 단계가 끝날 때 브라우저 에이전트가 실행 중인 앱을 시험한다.
각 요청은 앞서 추가한 기능에 의존할 수 있다. Grade는 전체 요청을 거치는 동안 작동하는 기능이 얼마나 유지되는지를 요약하고, Survival은 앱이 연속해서 사용 가능한 요청의 수를 센다. 평가에는 Claude Sonnet 4.6으로 구동하는 WebVoyager가 브라우저 에이전트로 쓰인다.
앱을 직접 실행해 평가하려면 먼저 하네스 이미지를 만들고, 모델을 제공한 뒤 실행한다. 모델은 Anthropic, OpenAI, OpenRouter, OpenAI 호환 API 또는 vLLM으로 제공하는 로컬 가중치에서 선택할 수 있다. 결과는 runs/<run name>/에 저장되며 python3 -m evoweb.score_run으로 논문과 같은 방식으로 점수를 계산한다. 저장소의 하네스 안내에는 설정 변수가 정리돼 있다.
docker build -f harness/Dockerfile -t evoweb-harness:latest .
pip install -r requirements.txt # scoring: Python >= 3.10
pip install -e . # the evoweb command
vLLM으로 모델을 제공하는 예시는 다음과 같다. 모델별 실행 방법은 vLLM 레시피를 참고할 수 있다.
docker pull vllm/vllm-openai:v0.31.0
docker run --rm --gpus '"device=0,1,2,3"' --ipc=host --network=host \
-v ~/.cache/huggingface:/root/.cache/huggingface \
vllm/vllm-openai:v0.31.0 Qwen/Qwen3.5-397B-A17B-FP8 \
--tensor-parallel-size 4 \
--max-model-len 262144 \
--kv-cache-dtype fp8 \
--enable-auto-tool-choice --tool-call-parser qwen3_coder \
--reasoning-parser qwen3 \
--port 8000
서버 응답은 다음 명령으로 확인한다.
curl -s localhost:8000/v1/models
기본 심판 모델은 Anthropic API의 Claude Sonnet 4.6이다. 아래 예시처럼 심판용 API 키와 모델 이름, 포트를 지정해 실행한다.
export ANTHROPIC_API_KEY=<key> # for the judge
OPENHANDS_SECURITY_RISK_OPTIONAL=1 evoweb run --name qwen397b --model Qwen/Qwen3.5-397B-A17B-FP8 --model-port 8000
OPENHANDS_SECURITY_RISK_OPTIONAL=1은 OpenHands의 security_risk 필드가 없는 도구 호출을 거부하지 않도록 한다. 원문은 Qwen 3.5가 이 필드를 생략해 설정하지 않으면 멈춘다고 설명한다. 다만 논문의 결과는 이 옵션 없이 실행됐으며, 옵션을 켜면 Claude Haiku 4.5도 논문 점수보다 높은 점수를 얻는다. 따라서 논문 결과를 재현할 때는 이 변수를 설정하지 않아야 한다.
심판 모델을 직접 제공할 수도 있다. 심판에는 스크린샷을 읽는 비전 모델이 필요하며, vLLM 명령에 --limit-mm-per-prompt '{"image":4}'를 추가한다.
evoweb run --name qwen-both \
--model Qwen/Qwen3.5-397B-A17B-FP8 --model-port 8000 \
--judge Qwen/Qwen3.5-397B-A17B-FP8 --judge-port 8001
다른 컴퓨터에서 실행하는 서버는 --model-host 10.0.0.5 또는 --judge-host로 지정한다. API 모델을 쓰면 모델 서버 설정 단계를 건너뛰고 제공자 접두사를 붙인 모델 이름을 지정한다.
export ANTHROPIC_API_KEY=<key>
evoweb run --name haiku --model anthropic/claude-haiku-4-5
export OPENAI_API_KEY=<key>
evoweb run --name gpt5 --model openai/gpt-5
export OPENROUTER_API_KEY=<key>
evoweb run --name glm52 --model openrouter/z-ai/glm-5.2
그 밖의 OpenAI 호환 API는 --model-url https://<host>/v1 --model <name>으로 지정하고, 키는 MODEL_API_KEY에 넣는다.
--apps는 평가할 앱의 범위를 정하며 기본값은 1-32다. --parallel의 기본값은 8이다. 실행 결과를 논문에 공개된 같은 모델의 결과와 비교하는 명령은 다음과 같다. 비교용 결과는 Anthropic 모델 4종에 대해 공개돼 있다.
python3 -m evoweb.compare_to_released "Haiku 4.5" runs/haiku
Kubernetes에서 여러 모델을 한꺼번에 실행하는 방법은 인프라 안내에 있다. 저장소에는 벤치마크 데이터와 번역, 점수 계산 모듈, 실행 기록과 테스트 자료도 포함된다. 논문에 나온 Anthropic 모델 4종(Fable 5, Opus 4.8, Sonnet 4.6, Haiku 4.5)은 각각 3회 실행 기록이 공개돼 있으며, 다른 모델의 실행 기록은 공개되지 않았다.
논문과 데이터는 arXiv:2610.16402와 Hugging Face 데이터셋에서 확인할 수 있다. 저장소는 Apache License 2.0으로 배포된다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요