A vision-language agent that plays Minecraft from raw first-person pixels (640×360 @ 20 FPS) and emits structured text actions. Stage-3 SFT on 200k+ human gameplay trajectories.
➡ EmberJin/Minecraft-Agent-Qwen3.5-9B-Stage3
Benchmark easy-ng: 202 non-GUI tasks (153 Embodied mine_block + 49 Combat kill_entity) × 3 rollouts, difficulty=easy, 200-step episodes.
| Inference history window | Success | Embodied | Combat |
|---|---|---|---|
| 3 frames (naive default) | 15.0% | 17.9% | 6.2% |
| 29 frames (matches training context) | 24.9% | 24.8% | 25.2% |
| Component | Value |
|---|---|
| Base model | Qwen3.5-9B (stage-2) |
| Data | minecraft-text-action-dataset-noop-filtered — 92.85% of raw dataset after removing 7.15% pure no-op collapse trajectories |
No-op frame drop (KEEP_NO_OP_P) | 0.2 (drop 80% of no-op frames at data level) |
| Focal loss | decay = 0.75 (down-weights repeated consecutive actions) |
| Sample format | 30-step trajectory segments: user(prompt+instruction+img) → assistant(action) → user(img) → … |
The model outputs a single line per step:
Action: move(dx, dy) and press(keys) and click(button)
move(dx, dy) — mouse movement (horizontal, vertical)press(keys) — w/a/s/d movement, space jump, e inventory, 1–9 hotbar, left.control sprint, left.shift careful moveclick('left') attack / click('right') place or useno_op — waitSix frames (evenly sampled from a 30-step segment) with the ground-truth actions the model learns to imitate:






# vLLM
vllm serve EmberJin/Minecraft-Agent-Qwen3.5-9B-Stage3 \
--limit-mm-per-prompt '{"image": 30}' \
--enable-prefix-caching \
--max-model-len 32768