← Gambiarra LLM Club Experimento · TCC Jonathas · 11/07/2026
Bot Gambi · Teste da plataforma Minecraft · TCC de Jonathas Vinicius

A hora em que os agentes foram jogar Minecraft

O registro próprio que o relatório do 6º Encontro prometeu: entre ~10h e 11h de 11/07/2026, a turma apontou seus modelos locais para um servidor de Minecraft e cada LLM virou um bot de verdade — percebendo o mundo, decidindo em JSON e executando a ação no pulso seguinte. Este é o experimento central do TCC: os mesmos modelos, hardwares completamente diferentes, uma única pergunta — quem aguenta um loop de 3 segundos?

1.193
ciclos de decisão registrados
17
modelos diferentes
15
configurações de hardware
32
sessões com dados (47 iniciadas)
57
ciclos/min no pico (10:59)
6
ordens de jogador (267 ciclos sob ordem)
1,1 s
decisão válida mais rápida (gemma3:1b)
1
morte em combate (amarante, 10:50)

O experimento, minuto a minuto

Ciclos de decisão gravados no banco por minuto — cada ciclo é uma chamada de LLM que virou (ou tentou virar) uma ação no jogo. O vale no tráfego da Arena entre 10h e 11h era isto aqui.

020406010:1510:2510:3510:4510:5511:05primeiros ciclosjvras58 começa a dar ordens☠️ amarante caiúltimo ciclo — hora do World

Linha do tempo

10:15
Primeiros bots entram no servidor
Carangueijo0 (granite4.1:8b numa GTX 1650) e almir (qwen3.5:4b numa RTX 2050) abrem os trabalhos. O granite levaria 77 segundos por decisão — e mesmo assim terminaria entre os mais obedientes do dia.
10:16–10:35
A guerra das máquinas pequenas
shaolin_matador_de_porco tenta 7 sessões num notebook de 4 GB de RAM sem registrar um ciclo sequer. Erik insiste 5 vezes com o smollm2:135m e colhe 36 "Bad Gateway". Nem todo hardware quis cooperar.
10:36–10:40
O pelotão principal chega
almir (agora com gemma3:1b), GREC (llama3.2 num M2), gabs, FlavinduPneu, hatsune_miku e Bardo entram quase juntos — o tráfego salta para 57 ciclos/min às 10:59.
10:46
jvras58 começa a dar ordens
Seis pedidos via chat ("me segue", "GREC coleta madeira", "calegario pegue bife"…) ficam ativos por até 5 ciclos no prompt de cada bot — o teste de obediência do experimento.
10:50
A morte do amarante ☠️
No ciclo 15 da sessão do gemma3:4b, a vida do amarante chega a zero — o único óbito do experimento. O bot renasce e o modelo segue decidindo como se nada tivesse acontecido.
11:00–11:03
Últimas cargas nas máquinas de 4 GB
negromonte arranca 1 ciclo do qwen3.5:0.8b (37 s) e 1 do lfm2.5-thinking (14 s) num notebook de 4 GB — os dois estouram o orçamento de tokens, mas provam que rodar, roda.
11:06
Último ciclo — todo mundo pro World
O experimento encerra e a turma volta para a Gambiarra Arena, onde a partida de World começa às 11:10. Almir, que aqui rodou o bot mais preciso do dia (96% de ações OK), lá devoraria 93 comidas.

⏱️ Quem aguenta o loop de 3 segundos?

Latência mediana por decisão nas configurações que produziram JSON válido (≥75%). O loop do bot pulsa a cada 3 s — só o gemma3:1b, em GPU dedicada ou Apple Silicon, fica do lado certo da linha.

gemma3:1b — M3 Pro · 18GB1.7 sgemma3:1b — RTX 2050 · 16GB2.4 sgemma3:4b — M2 Pro · 16GB4.2 sllama3.2:latest — M2 · 8GB5.7 sqwen2.5:0.5b — Radeon iGPU · 7GB9.7 sgranite4.1:3b — CPU only · 10GB24.3 sgranite4.1:8b — GTX 1650 · 14GB76.8 salvo: ciclo de 3 s0s20s40s60s80s

⚡ Velocidade bruta: tokens por segundo

Mediana de tokens/s medida no hub, todas as configurações com 20+ ciclos — incluindo os modelos "thinking" (🤔), cujo desempenho vale mesmo com as respostas descartadas. O mesmo gemma3:1b rende 60 tok/s no M3 Pro e 53 na RTX 2050; o granite4.1:8b, que não cabe nos 4 GB da GTX 1650, se arrasta a 2 tok/s.

gemma3:1b — M3 Pro · 18GB60.1qwen3.5:2b-mlx — M2 Pro · 16GB54.6 🤔gemma3:1b — RTX 2050 · 16GB52.5qwen3.5:2b — M3 Pro · 18GB44.6 🤔gemma3:4b — M2 Pro · 16GB25.8llama3.2:latest — M2 · 8GB18.3qwen3.5:2b — CPU only · 24GB17.7 🤔gemma4:12b — M3 Pro · 18GB13.0 🤔qwen2.5:0.5b — Radeon iGPU · 7GB12.1qwen3.5:4b — RTX 2050 · 16GB11.3 🤔qwen3.5:2b — Iris Xe · 16GB6.9 🤔qwen3.5:2b — CPU only · 16GB6.9 🤔granite4.1:3b — CPU only · 10GB5.5qwen3.5:4b — CPU only · 15GB2.6 🤔granite4.1:8b — GTX 1650 · 14GB2.2015304560

📡 Desempenho em detalhe: o bot mede, o hub confirma

Cada ciclo é cronometrado em dois pontos: no bot (llm_response_time_ms, que inclui rede e fila) e dentro do hub (hub_duration_ms e hub_ttft_ms, medidos no evento llm.complete, sem ruído de rede). A diferença entre os dois é o custo da infraestrutura — mediana de 90 ms (p95: 362 ms), ou seja, a latência é quase toda inferência mesmo: o hub não é o gargalo. Tokens/s calculado nas duas pontas concorda; cada decisão consome ~1.300 tokens de contexto de entrada. Valores são medianas (p50).

ModeloHardwareCiclosResposta (bot)Duração (hub)OverheadTTFT (hub)tok/s (bot)tok/s (hub)Tok. entradaTok. saída
gemma3:1bRTX 2050 · 16GB187 2.4 s2.3 s92 ms 2.3 s 49.452.5 1411122
llama3.2:latestM2 · 8GB124 5.7 s5.6 s61 ms 5.6 s 18.018.3 1595102
qwen2.5:0.5bRadeon iGPU · 7GB116 9.7 s9.5 s75 ms 9.5 s 11.912.1 1498115
gemma3:1bM3 Pro · 18GB110 1.7 s1.6 s99 ms 1.6 s 54.560.1 137094
qwen3.5:2b-mlxM2 Pro · 16GB107 4.8 s4.7 s109 ms 4.7 s 53.054.6 1165256
gemma3:4bM2 Pro · 16GB94 4.2 s4.2 s63 ms 4.2 s 25.225.8 1257108
qwen3.5:2bCPU only · 24GB77 14.5 s14.5 s58 ms 14.5 s 17.617.7 1241256
qwen3.5:2bIris Xe · 16GB60 37.2 s37.1 s64 ms 37.1 s 6.96.9 1242256
gemma4:12bM3 Pro · 18GB52 19.7 s19.6 s100 ms 19.6 s 13.013.0 1187256
qwen3.5:4bRTX 2050 · 16GB50 22.7 s22.6 s78 ms 22.6 s 11.311.3 1168256
granite4.1:3bCPU only · 10GB38 24.3 s24.1 s114 ms 24.1 s 5.55.5 1299132
qwen3.5:2bM3 Pro · 18GB30 6.0 s5.7 s183 ms 5.7 s 42.844.6 1021256
granite4.1:8bGTX 1650 · 14GB29 76.8 s76.7 s58 ms 76.7 s 2.22.2 1437168
qwen3.5:4bCPU only · 15GB26 99.2 s99.2 s71 ms 99.2 s 2.62.6 1231256
qwen3.5:2bCPU only · 16GB24 37.4 s37.1 s156 ms 37.1 s 6.86.9 1263256
qwen3.5:2bCPU only · 10GB10 35.7 s35.6 s95 ms 35.6 s 7.27.2 1021256

📋 A tabela completa

Todas as configurações com 10+ ciclos. JSON válido mede aderência ao formato; ação OK mede se o comando decidido executou no jogo.

ModeloHardwareCiclosp50tok/sJSON válidoAção OKObservação
gemma3:1bRTX 2050 · 16GB187 2.4 s 52.5 100% 96% ✅ sustenta o loop
llama3.2:latestM2 · 8GB124 5.7 s 18.3 99% 96% ✅ sustenta o loop
qwen2.5:0.5bRadeon iGPU · 7GB116 9.7 s 12.1 77% 72% no limite: erra ~1 em 4 respostas
gemma3:1bM3 Pro · 18GB110 1.7 s 60.1 91% 95% ✅ sustenta o loop
qwen3.5:2b-mlxM2 Pro · 16GB107 4.8 s 54.6 0% 🤔 estourou os 256 tokens pensando
gemma3:4bM2 Pro · 16GB94 4.2 s 25.8 100% 89% ✅ sustenta o loop
qwen3.5:2bCPU only · 24GB77 14.5 s 17.7 0% 🤔 estourou os 256 tokens pensando
qwen3.5:2bIris Xe · 16GB60 37.2 s 6.9 0% 🤔 estourou os 256 tokens pensando
gemma4:12bM3 Pro · 18GB52 19.7 s 13.0 0% 🤔 estourou os 256 tokens pensando
qwen3.5:4bRTX 2050 · 16GB50 22.7 s 11.3 0% 🤔 estourou os 256 tokens pensando
granite4.1:3bCPU only · 10GB38 24.3 s 5.5 97% 89% correto, mas lento demais
smollm2:135mIris Xe · 8GB36 hub fora do ar — sem dados
qwen3.5:2bM3 Pro · 18GB30 6.0 s 44.6 0% 🤔 estourou os 256 tokens pensando
granite4.1:8bGTX 1650 · 14GB29 76.8 s 2.2 100% 79% correto, mas lento demais
qwen3.5:4bCPU only · 15GB26 99.2 s 2.6 0% 🤔 estourou os 256 tokens pensando
qwen3.5:2bCPU only · 16GB24 37.4 s 6.9 0% 🤔 estourou os 256 tokens pensando
qwen3.5:latestCPU only · 7GB15 hub fora do ar — sem dados
qwen3.5:2bCPU only · 10GB10 35.7 s 7.2 0% 🤔 estourou os 256 tokens pensando

🤔 A armadilha dos 256 tokens

O achado mais importante do dia não estava no plano: 424 ciclos voltaram com resposta vazia — todos com exatamente 256 tokens de saída. Os modelos com raciocínio explícito (qwen3.5, gemma4:12b) gastaram o orçamento inteiro de LLM_MAX_OUTPUT_TOKENS=256 pensando e nunca chegaram a falar. Sob restrição de tempo real, o "pensar antes de agir" custou a ação inteira. As métricas de velocidade deles valem; as de qualidade viraram um retrato do trade-off, não do modelo.

🧾 Conformidade: quem fala JSON direito?

Por modelo, sobre os ciclos em que o hub respondeu (erros de infraestrutura contados à parte). "Reparado" são respostas que chegaram como JSON quebrado e o jsonrepair salvou — elas contam como válidas. O contraste é brutal: ou o modelo acerta o formato quase sempre, ou nunca.

ModeloCiclosErro de hubJSON válidoReparadoFalha de parse
gemma3:4b94 0.0% 100.0% 0.0% 0.0%
granite4.1:8b29 0.0% 100.0% 3.4% 0.0%
llama3.2:latest124 0.0% 99.2% 8.9% 0.8%
gemma3:1b297 0.0% 96.6% 2.0% 3.4%
granite4.1:3b38 23.7% 96.6% 0.0% 3.4%
qwen2.5:0.5b116 0.9% 76.5% 7.8% 23.5%
qwen3.5:2b 🤔201 5.5% 0.0% 0.5% 100.0%
qwen3.5:2b-mlx 🤔107 0.0% 0.0% 0.0% 100.0%
qwen3.5:4b 🤔76 0.0% 0.0% 0.0% 100.0%
gemma4:12b 🤔52 7.7% 0.0% 0.0% 100.0%
smollm2:135m36 100.0%
qwen3.5:latest 🤔15 100.0%

🫡 O teste de obediência

Cada ordem do jvras58 ficou visível no prompt por até 5 ciclos. O placar moral: obediência não correlacionou com velocidade.

OrdemQuem obedeceuQuem ignorou
"me segue"Carangueijo0 (SEGUIR ×3, a 77 s por decisão), Bardo, amarantealmir — o bot mais rápido do dia preferiu EXPLORAR ×20
"GREC coleta madeira"Bardo, amarante e Carangueijo0 saíram coletandoo próprio GREC, que ficou de OLHAR
"calegario pegue bife"calegario tentou (EXPLORAR → ANDAR → PAROU) — não havia bifealmir, de novo
"GREC va seguir sua vida"Bardo e Carangueijo0 entenderam literalmente: SEGUIR ✕ 4a ironia passou batida por todos os modelos

🎮 O que os bots escolheram fazer

Distribuição das 650 ações válidas (os 502 ciclos sem resposta utilizável caíram no fallback EXPLORAR, fora desta contagem). Um dia pacífico: 1 ATACAR contra 235 EXPLORAR.

EXPLORAR235COLETAR164ANDAR76FALAR55OLHAR47PARAR34SEGUIR32NADA5PULAR1ATACAR1060120180240

🎲 Variedade de comportamento: entropia de Shannon

A entropia da distribuição de ações mede a variedade do comportamento de cada modelo, em bits: 0 = escolheu sempre a mesma ação; 3,32 = usou as 10 ações por igual. Calculada sobre as ações válidas dos modelos com 20+ decisões. Nem pouca nem muita entropia é "melhor" — mas um agente que só sabe EXPLORAR não está decidindo, está repetindo.

gemma3:4b2.54 bitsgranite4.1:8b2.53 bitsllama3.2:latest2.52 bitsgranite4.1:3b2.31 bitsgemma3:1b2.00 bitsqwen2.5:0.5b1.99 bitsmáximo teórico: 3,32 bits (10 ações)0123

O raio-x completo da qualidade de decisão por modelo:

ModeloAções válidasAção OKExecução p50Ação favoritaEntropia (bits)
gemma3:1b287 95.8% <1 ms EXPLORAR (52%) 2.00
llama3.2:latest123 95.9% <1 ms EXPLORAR (43%) 2.52
gemma3:4b94 89.4% <1 ms COLETAR (32%) 2.54
qwen2.5:0.5b88 71.6% 1684 ms COLETAR (59%) 1.99
granite4.1:8b29 79.3% <1 ms FALAR (31%) 2.53
granite4.1:3b28 89.3% <1 ms ANDAR (32%) 2.31

Curiosidades

A tartaruga obediente
Carangueijo0 (granite4.1:8b, 77 s por decisão) foi o único a responder "me segue" com SEGUIR três vezes seguidas. O bot mais lento do dia foi o mais leal — e ainda manteve 100% de JSON válido.
O rebelde veloz
almir (gemma3:1b, RTX 2050) fez a maior sessão do dia — 187 ciclos, 96% de ações OK — e ignorou solenemente todas as ordens do jvras58. Rápido, correto e do contra.
"Vá seguir sua vida"
A ordem irônica para o GREC parar de seguir foi lida ao pé da letra: Bardo e Carangueijo0 viram a palavra "seguir" e... SEGUIRAM. Sarcasmo ainda não cabe em 3 bilhões de parâmetros.
O jsonrepair pagou o aluguel
29 respostas chegaram como JSON quebrado e foram consertadas em voo pela biblioteca — 29 ações que existiram por causa de um } que o modelo esqueceu.
116 segundos para pensar
O ciclo mais longo do dia: qwen3.5:4b rodando em CPU levou 1 min 56 s para... estourar os 256 tokens e não dizer nada. O mais rápido com resposta válida: gemma3:1b, 1,1 s.
Dupla jornada
Vários bots daqui jogaram o World logo depois — e o placar quase se repetiu: Almir dominou os dois, shaolin (que aqui não conseguiu registrar 1 ciclo no notebook de 4 GB) fez 75 comidas lá. Hardware ruim não é destino.