Como o GPT-6 Astra corrigiu o Qwen3.5-0.8B editando 0,016% dos seus pesos

GPT-6 Astra editou 0,016% dos pesos do Qwen3.5-0.8B sem treinamento e elevou o MATH-500 de 7,9% para 48,1%. O que mudou, seus limites e como testar ambos os modelos.

Ashley Innocent

Ashley Innocent

4 novembro 2026

Como o GPT-6 Astra corrigiu o Qwen3.5-0.8B editando 0,016% dos seus pesos

Apidog para empresas

Implantação local

SSO & RBAC

Conforme SOC 2

Explorar Apidog Enterprise

O GPT-6 Astra elevou a pontuação MATH-500 do Qwen3.5-0.8B de 7,9% para 48,1% sem nenhum treinamento. Ele leu os pesos do modelo, encontrou uma direção que fazia o modelo entrar em loop em seu raciocínio e a subtraiu de duas camadas MLP. Essa edição tocou 131.072 pesos, 0,016% do modelo. Os números vêm de um post de 2 de novembro de quatro pesquisadores do MIT CSAIL, e o modelo editado é público, então você pode verificar a afirmação por conta própria.

A seguir: o que é programação em espaço de pesos, o que o Astra alterou, onde o método deixa de funcionar e como fazer seu agente de codificação comparar os dois modelos com o Apidog CLI.

O que é programação em espaço de pesos?

A programação em espaço de pesos é um LLM de propósito geral lendo e escrevendo os pesos de uma rede neural diretamente, guiado por um objetivo em linguagem natural, sem descida de gradiente e sem loop de treinamento. O modelo raciocina sobre o que cada parte da rede computa e então altera os números manualmente, do mesmo jeito que um programador edita o código-fonte.

O termo vem de Sparks of Weight-Space Programming, de Rikiya Takehi, Jayden Teoh, Alex Zhang e Omar Khattab, publicado em 2 de novembro de 2026. Os autores chamam cada resultado de "muito preliminar", e vários vêm de uma ou de poucas execuções. Para contexto sobre o modelo que faz a edição, veja a análise prática do GPT-6 Astra.

Como o GPT-6 Astra corrigiu o Qwen3.5-0.8B

O resultado principal é o Experimento 8. Os pesquisadores pediram ao GPT-6 Astra que tornasse o Qwen3.5-0.8B melhor em matemática editando seus pesos. Eis o que aconteceu, passo a passo:

  1. A configuração. O Astra recebeu uma sessão Python (como um notebook) com os pesos do modelo carregados, sem GPU, e 7.469 problemas de prática do GSM8K mais 7.275 do MATH, vindos dos conjuntos de treinamento. Ele nunca viu os conjuntos de teste.
  2. O orçamento. Em vez de treinar, o Astra podia gastar 10, 25 ou 50 passagens forward. Uma passagem forward permitia ao modelo responder até 512 problemas ou ler até 1.024 textos.
  3. O diagnóstico. O Astra viu que o modelo base entra em loop: 85 de suas primeiras 96 respostas de prática correram até o limite de 32.768 tokens sem chegar a uma resposta. Os autores observam que o próprio card do modelo do Qwen alerta que esse modelo é propenso a loops de raciocínio.
  4. O rastreamento. O Astra rastreou o loop até uma direção escrita pelas MLPs das camadas 15 e 19.
  5. A edição. Ele subtraiu essa direção de 64 colunas de saída de down_proj em cada uma das duas camadas. São 131.072 pesos de 0,8 bilhão.
Diagram of the Qwen3.5-0.8B edit: 24 transformer layers with the MLP down_proj in layers 15 and 19 highlighted, one looping direction subtracted from 64 output columns in each, 131,072 weights changed in total

De acordo com o card do modelo no Hugging Face, apenas esses dois tensores down_proj diferem do checkpoint base Qwen/Qwen3.5-0.8B, e cada tensor reconstruído é verificado com sha256 contra aquele que os autores avaliaram. O modelo editado é distribuído sob a licença Apache 2.0.

Resultados: Qwen3.5-0.8B base vs. editado

Todos os números aqui são do post dos autores (thinking ativado, até 32.768 tokens, várias amostras por problema). "Atingiu o limite de tokens" é a proporção de respostas do MATH-500 que ficaram sem tokens.

Qwen3.5-0.8B MATH-500 GSM8K IFEval Atingiu o limite de tokens
Base 7,9% 13,8% 21,0% 93,0%
Editado, 10 passagens forward 12,3% 25,7% 49,0% 87,2%
Editado, 25 passagens forward 14,1% 25,1% 39,9% 86,4%
Editado, 50 passagens forward 48,1% 67,1% 62,3% 33,1%
Bar chart comparing base and edited Qwen3.5-0.8B as reported by the authors: MATH-500 7.9% to 48.1%, GSM8K 13.8% to 67.1%, IFEval 21.0% to 62.3%, answers hitting the token limit 93.0% to 33.1%

O Space de demonstração permite digitar um problema e ver os dois modelos responderem.

O que a edição de pesos não consegue fazer

Os autores fizeram um controle que importa mais do que o resultado principal. Eles tentaram a mesma abordagem no Gemma 3 270M, um modelo que raramente entra em loop (8,5% de suas respostas atingiram o limite, contra 93% do Qwen).

Gemma 3 270M MATH-500
Base 6,8%
Melhor edição (25 passagens forward) 7,7%

Os erros do Gemma eram erros comuns, como aritmética incorreta, sem um único componente para desligar. A conclusão dos autores: a edição removeu um obstáculo que escondia uma habilidade, mas não conseguiu adicionar uma habilidade que o modelo não tinha. O Qwen já conseguia resolver muitos problemas. Ele simplesmente nunca os terminava.

Então isso não é "o treinamento acabou". É um modelo de fronteira encontrando e removendo uma falha que vive em um único lugar.

O resto do artigo sobre programação em espaço de pesos

O Experimento 8 é um entre oito. Os outros usam redes muito menores:

Os logs completos dos experimentos incluem cada prompt, os resumos de raciocínio do Astra e cada trecho de código que ele executou.

Verifique você mesmo a correção do loop de raciocínio do Qwen3.5-0.8B

O teste mais limpo é servir os dois checkpoints atrás da mesma API compatível com OpenAI e enviar a ambos prompts idênticos. O vLLM faz isso com um comando por modelo:

vllm serve Qwen/Qwen3.5-0.8B --port 8001 \
  --served-model-name qwen --max-model-len 34816 --gpu-memory-utilization 0.45

vllm serve RikiyaT/Qwen3.5-0.8B-weight-space-programming --port 8002 \
  --served-model-name qwen --max-model-len 34816 --gpu-memory-utilization 0.45

Ambos os servidores respondem pelo nome qwen, então um único corpo de requisição funciona em qualquer porta. --max-model-len 34816 corresponde ao exemplo do card do modelo.

Cada requisição espelha as configurações de amostragem dos autores e ativa o thinking:

{
  "model": "qwen",
  "messages": [{"role": "user", "content": "{{question}}\nPlease reason step by step, and put your final answer within \\boxed{}."}],
  "temperature": 0.6,
  "top_p": 0.95,
  "top_k": 20,
  "presence_penalty": 1.5,
  "max_tokens": 32768,
  "chat_template_kwargs": {"enable_thinking": true}
}

O último valor \boxed{} é a resposta, e finish_reason indica se o modelo parou (stop) ou ficou sem tokens (length). Um término length é um loop.

Se você preferir não rodar uma GPU, pode testar a API do GPT-6 Astra da mesma forma, ou comparar modelos Qwen pequenos localmente com a configuração gratuita do Qwen3.5 no Ollama.

Deixe seu agente de codificação testar os dois modelos com o Apidog CLI

Avaliar vinte gerações longas à mão é trabalho para o seu agente de codificação. O Apidog CLI dá ao agente ambientes, cenários de teste, execuções orientadas por dados e relatórios, e roda na sua máquina, então endpoints localhost funcionam.

Instale e dê a skill ao seu agente:

npm install -g apidog-cli@latest
apidog login --with-token <YOUR_TOKEN>
npx -y skills add https://apidog.com   # pick your agent when prompted

Depois, dê ao Claude Code, Codex, Cursor ou OpenCode um único prompt:

In Apidog project <id>, create two environments: qwen-base at http://localhost:8001
and qwen-edited at http://localhost:8002. Create a test scenario that POSTs to
/v1/chat/completions with the body in request.json, using {{question}} from the
first 10 GSM8K test questions in gsm8k-10.csv. Assert that the last \boxed{} value
equals {{answer}} and that choices[0].finish_reason is not "length". Run it against
both environments and give me a table: correct answers and length finishes per model.

O agente lê o esquema do payload, valida seu JSON e então executa estes comandos:

apidog environment create qwen-base --project <id> --base-url http://localhost:8001
apidog environment create qwen-edited --project <id> --base-url http://localhost:8002
apidog cli-schema get test-scenario-create
apidog cli-schema validate test-scenario-create --file scenario.json
apidog test-scenario create --project <id> --file scenario.json
apidog run -t <scenarioId> --project <id> -e <baseEnvId> \
  -d gsm8k-10.csv --timeout-request 1800000 -r cli,json --out-file qwen-base
apidog run -t <scenarioId> --project <id> -e <editedEnvId> \
  -d gsm8k-10.csv --timeout-request 1800000 -r cli,json --out-file qwen-edited

-d alimenta cada linha do CSV como uma iteração. --timeout-request está em milissegundos, e uma resposta em loop pode levar minutos para consumir 32.768 tokens. -r cli,json imprime um resumo e grava um relatório JSON que o agente pode comparar por diff. As 10 perguntas vêm da divisão de teste do GSM8K.

Flow of the comparison: a coding agent runs apidog run on one test scenario with GSM8K iteration data against two vLLM environments, base Qwen3.5-0.8B on port 8001 and edited Qwen3.5-0.8B on port 8002, and compares answers and finish_reason in the reports

Se sua execução se parecer com a dos autores, a maioria das respostas do modelo base falhará na asserção de finish_reason e a maioria das respostas editadas passará. Dez perguntas são um smoke test, não um benchmark, então trate uma diferença como um sinal, não como uma pontuação. Adicione --upload-report para ver a execução no app, e consulte a referência do comando apidog run para ver todas as flags.

O mesmo cenário funciona como teste de regressão para qualquer troca de modelo; o guia de CI/CD do Apidog CLI mostra a configuração de -r junit.

O que isso significa se você entrega modelos pequenos

Escolhendo um nível do GPT-6 para trabalho com agentes? Veja GPT-6 Luna vs Sol vs Astra.

Perguntas frequentes

O GPT-6 Astra treinou o Qwen3.5-0.8B? Não. Os autores não permitiram descida de gradiente nem loop de treinamento. O Astra editou pesos em uma sessão Python e observou o modelo apenas por meio de 10, 25 ou 50 passagens forward.

Quantos pesos a edição alterou? 131.072 pesos, o que os autores estimam em 0,016% do modelo. As mudanças estão nas matrizes down_proj das MLPs nas camadas 15 e 19, 64 colunas de saída em cada.

O modelo editado está disponível? Sim, como RikiyaT/Qwen3.5-0.8B-weight-space-programming no Hugging Face sob Apache 2.0, com hashes dos dois tensores alterados e uma reexecução independente (51,0% no MATH-500).

Por que as pontuações de matemática subiram tanto? Porque o modelo base entrava em loop. No MATH-500, 93,0% de suas respostas atingiram o limite de 32.768 tokens. A edição reduziu isso para 33,1%, então o modelo terminou respostas que já conseguia resolver. Ele não aprendeu matemática nova.

A programação em espaço de pesos funciona em qualquer modelo? Ainda não, segundo os próprios autores. No Gemma 3 270M, que raramente entra em loop, a melhor edição moveu o MATH-500 de 6,8% para 7,7%. Os autores chamam todos os seus resultados de muito preliminares.

Posso testar o modelo editado sem escrever código? Sim. O Space de demonstração do Hugging Face roda os dois modelos em um problema que você digitar. Para uma verificação repetível, use o vLLM mais o Apidog CLI como mostrado acima.

button

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs