Addestrare un agente con reinforcement learning su un solo harness gli insegna le convenzioni di quell’interfaccia, non solo il task. La guida The ultimate guide to multi-harness RL, pubblicata il 1 ottobre 2026 da Adithya S Kolavi con il team post-training di Hugging Face, mostra un percorso aperto per allenare dentro gli agent che si usano davvero. Su LFM2.5-2.6B il pass@1 medio sale da 42,2% a 54,2%, con 31% di tool call in meno sui task già risolti.
Lo stesso peso, quattro punteggi
Un harness non è un prompt. È il loop che parla al modello, nomina i tool, compatta il contesto e decide quando fermarsi. La guida riprende la distinzione del team KwaiKAT: overfitting al formato delle azioni, alla struttura del contesto e al control flow.
Prima del training, gli stessi pesi Liquid AI danno 62,1% sotto Mini-SWE-Agent e 33,2% sotto Claude Code. OpenCode è a 33,6%, Codex a 40,0%. La media sui quattro è 42,2%. Il fallimento tipico non è una risposta un po’ peggiore: il modello chiama un tool con il nome e gli argomenti dell’harness su cui è stato allenato, e l’altro rifiuta la chiamata prima ancora di eseguirla.
Proxy, Harbor e TRL, senza patch
Riscrivere ogni agent dentro il trainer non scala. Lo stack di FineEnvs lascia il loop dov’è.
- OpenEnv inserisce un capture proxy. Parla Chat Completions, Responses, Anthropic Messages e Gemini, e registra token id e logprob campionati da vLLM.
- Harbor separa task, harness e sandbox. I rollout girano in sandbox E2B, una per tentativo.
- TRL consuma le tracce con Async GRPO. L’integrazione è in trl.experimental.harbor.
Ogni gruppo GRPO usa un task e un harness; gli harness ruotano tra i gruppi. Le versioni valutate sono OpenCode 1.18.31, Claude Code 2.1.270, Codex 0.154.0 e Mini-SWE-Agent 2.4.6. Dieci harness passano dal proxy senza modifiche al loro codice.
Cosa è stato allenato
Il run principale è un full fine-tune di LFM2.5-2.6B, licenza LFM Open License v1.0, checkpoint in FineEnvs/LFM2.5-2.6B-multiharness-RL.
- Pool: 1.000 task SmolDataEnvs, 400 medium e 600 hard, ordine fisso.
- Test: 250 task held-out, senza overlap di notebook, domanda o istruzione. 33 easy, 118 medium, 99 hard.
- 1.000 step, learning rate 3e-6, 8 rollout per gruppo, staleness massima 4, AdamW 8-bit, bfloat16, temperatura 0,8.
- Due H100 per run, uno per il training e uno per vLLM. Circa 46 ore il multi-harness, 32 il solo OpenCode.
- Reward: correttezza per un bonus di efficienza, correttezza × (1 + 0,1 × 15 / (15 + tool_call)). Il bonus vale solo se la risposta è giusta.
Nel 22,6% dei gruppi multi-harness tutti i rollout erano corretti ma con un numero di call diverso: senza bonus, GRPO non aveva segnale.
54,2% non è solo OpenCode
L’eval è pass@1 sul primo tentativo graded, 1.000 celle. Il checkpoint a 1.000 step:
- OpenCode: 124/250, 49,6%
- Claude Code: 122/250, 48,8%
- Codex: 134/250, 53,6%
- Mini-SWE-Agent: 162/250, 64,8%
- Media: 542/1.000, 54,2%
Lo step 700, il migliore osservato, è a 54,6% ed è quello usato nel confronto SFT contro RL. Il run solo OpenCode chiude a 52,3%: circa 58% su OpenCode, 42% su Claude Code, 43% su Codex. Il salto di 1,9 punti in media è dentro il rumore di un solo seed. La differenza utile è la distribuzione. Allenare solo OpenCode alza soprattutto OpenCode, da circa 34% a 58%. Allenare su quattro harness alza tutti e quattro.
Sui task risolti sia dalla base sia dal modello allenato, il multi-harness usa 31,1% di call in meno, con risparmio sotto ogni harness e circa la metà sotto Codex. Il solo OpenCode risparmia 11%, in modo diseguale, e sotto Claude Code le call aumentano del 10,5%.
L’SFT su 3.189 rollout riusciti di Qwen3.8-27B, stessi quattro harness, arriva al massimo a 47,5%. Il multi-harness SFT taglia le call del 24% ma fa scendere Mini-SWE-Agent da 62,1% a 45,2%. Su questo setup l’RL batte l’imitazione in accuratezza.
Un secondo rilascio, Qwen3.5-2B a 500 step con sola correttezza, è al 37,0%. Non è il risultato da citare al posto di LFM.
Cosa non dimostra
Gli autori lo scrivono. È un esperimento piccolo, una famiglia di task, un seed per setup. Il multi-harness ha visto più dati: 626 task distinti e 451 milioni di token processati, contro 555 e 162 milioni del solo OpenCode. Non c’è un’ablazione LFM senza bonus di efficienza, quindi non si può separare quel termine dal resto della ricetta. Claude Code riscrive la history e produce circa otto volte più righe di training per rollout: il mix non è bilanciato.
Il punto operativo resta. Se il modello deve vivere in più agent, il loop di training deve vedere quei loop. Codice Apache 2.0, dataset, sette modelli e la guida sono nella collection. Il lancio può passare da HF Jobs, senza un cluster proprio, ma il tutorial multi-harness è scritto per due H100 o H200.
Fonti
Testo: assistito da AI · revisionato da Carlos H. P. Ross





