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

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

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

O GPT-6 Astra elevou a pontuação MATH-500 do Qwen3.5-0.8B de 7,9% para 48,1% sem nenhum treinamento....

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.

Experimente o Apidog hoje

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%

  • A correção generalizou. O loop não é específico de matemática, então o IFEval também quase triplicou.
  • O orçamento importou. Com 10 ou 25 passagens forward, os loops praticamente não desapareceram.
  • Outra pessoa reproduziu. Ahsen Khaliq, do Hugging Face, reconstruiu o checkpoint a partir dos logs e refez todo o MATH-500 (500 problemas, 4 amostras cada). O modelo editado marcou 51,0%, com 31,6% das respostas atingindo o limite. Um smoke test de 25 problemas do modelo base deu 5,0%.

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:

  • Ler pesos. Apenas a partir dos pesos brutos, o Astra identificou o jogo de 4 de 4 políticas de jogos treinadas com PPO e o idioma de treinamento de 3 de 3 pequenos modelos de linguagem em nível de caractere.
  • Corrigir uma política. Uma política de carro do Kinetix que falhou em 256 de 256 episódios teve sucesso em 1.024 de 1.024 depois que o Astra editou 3,5% de seus pesos em uma única resposta.
  • Escrever pesos do zero. O Astra escreveu pesos do MinAtar Breakout que marcaram 517,4 contra 25,3 de um PPO treinado por 500 milhões de passos. Ele perdeu no Seaquest, 53,1 contra 88,9.
  • Go. Ele escreveu uma rede de Go 9x9 com 1,48 milhão de pesos a partir de zeros que, com 50 passagens forward, superou uma rede PPO de tamanho igual.
  • Um erro. Apenas a partir dos pesos, ele não conseguiu dizer qual de duas cópias do Gemma 3 270M havia sido treinada para ser bajuladora. Com acesso aos padrões de atenção, ele identificou o bajulador em todos os três pares.

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
Enter fullscreen mode Exit fullscreen mode

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}
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Depois, dê ao Claude Code, Codex, Cursor ou OpenCode um único [REDACTED PROMPT]
In Apidog project , 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:

Enter fullscreen mode Exit fullscreen mode


bash
apidog environment create qwen-base --project --base-url http://localhost:8001
apidog environment create qwen-edited --project --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 --file scenario.json
apidog run -t --project -e \
-d gsm8k-10.csv --timeout-request 1800000 -r cli,json --out-file qwen-base
apidog run -t --project -e \
-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](https://huggingface.co/datasets/openai/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](https://assets.apidog.com/blog-next/2026/11/gpt-6-astra-qwen-apidog-flow.png)

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](https://apidog.com/pt/blog/apidog-run-command-reference?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation) 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](https://apidog.com/pt/blog/apidog-cli-ci-cd-pipeline?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation) mostra a configuração de `-r junit`.

## O que isso significa se você entrega modelos pequenos

- **Meça o truncamento, não só a acurácia.** Os 7,9% do Qwen escondiam um modelo que na maioria das vezes nunca terminava. Uma verificação de `finish_reason` detecta isso.
- **Procure falhas de causa única.** Loops e repetições podem viver em uma parte estreita da rede.
- **Lembre-se do controle.** Se seu modelo está errado em vez de travado, uma edição como essa não vai ajudar.

Escolhendo um nível do GPT-6 para trabalho com agentes? Veja [GPT-6 Luna vs Sol vs Astra](https://apidog.com/pt/blog/gpt-6-luna-vs-sol-vs-astra?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation).

Vídeo: como gerar documentação pública de API com o Apidog:

  


## 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.
Enter fullscreen mode Exit fullscreen mode