Activités de groupe et apprentissages

Le séjour d’été au Recurse Center a été structuré autour de plusieurs groupes d’étude. Le groupe Agentic Adventures a consacré chaque semaine à la manipulation d’agents basés sur de grands modèles de langage (LLM). Les participants ont entraîné minGPT sur le texte complet de Roméo et Juliette, créant ainsi un petit prédicteur de texte capable d’imiter le style shakespearien. Ils ont ensuite appliqué une technique LoRA (Low‑Rank Adaptation) pour ajuster le modèle afin d’obtenir des réponses plus conversationnelles, démontrant la faisabilité d’un fine‑tuning rapide sur des jeux de données très restreints.

Le groupe Practical Deep Learning a suivi la première moitié du livre du même nom, couvrant les algorithmes classiques de machine learning, l’adaptation de modèles pré‑entraînés et la construction de réseaux neuronaux depuis zéro. Cette approche « praticienne » a permis aux participants de consolider leurs intuitions sur le fonctionnement interne des couches, les fonctions de perte et les optimisateurs, sans s’enliser dans la recherche académique.

Lors de Math Monday, les membres ont résolu des problèmes de Project Euler, généré des fractales et des courbes de Hilbert à l’aide d’un traceur à stylo, et exploré le système de preuve Rocq pour formaliser des identités booléennes. Ces activités ont renforcé la compréhension algorithmique et la capacité à formaliser des concepts mathématiques en code.

Sandboxing d’agents LLM avec Ollama et Docker

Le groupe a mis en place deux environnements d’exécution distincts. Le premier, nommé « dangerously‑skip‑permissions », autorise un agent à exécuter du code sans restrictions, illustrant les risques de privilèges excessifs. Le second utilise Ollama couplé à Docker pour créer un bac à sable isolé : chaque conteneur possède un système de fichiers et un réseau séparés, limitant ainsi les capacités d’escalade d’un agent malveillant. Cette double approche a servi à développer le jeu « Just One », où plusieurs agents coopèrent pour deviner des mots, tout en évaluant les vecteurs d’attaque possibles (exfiltration de données via appels système, injection de commandes). Le cadre Docker impose des contraintes de ressources (CPU, mémoire) qui, combinées à la politique de sécurité du noyau Linux, offrent une barrière technique mesurable contre les comportements indésirables.

Implémentation de DEFLATE en Rust

En s’appuyant sur une présentation interne sur le format ZIP, les participants ont ré‑implémenté le décompresseur DEFLATE en Rust. DEFLATE combine deux mécanismes : LZ77 (remplacement de séquences répétées par des références arrière) et le codage Huffman (assignation de codes binaires courts aux octets fréquents). L’exemple fourni – « to be or not (13,5) » – illustre le principe LZ77 : le texte « to be or not » est suivi d’une référence qui indique de revenir de 13 octets et de copier 5 octets, réduisant ainsi la redondance.

Le code Rust a été écrit « straight from the spec », ce qui a mis en évidence deux difficultés majeures. Premièrement, la gestion des lifetimes a nécessité une compréhension fine du système d’emprunt de Rust ; les auteurs ont abandonné certaines optimisations pour éviter des violations de sécurité mémoire. Deuxièmement, le bit‑packing a exigé un suivi manuel des séquences de bits lors du décodage Huffman, chaque étape étant consignée sur papier pour comparer les attentes aux résultats réels. Cette méthode de vérification manuelle, bien que laborieuse, a permis de détecter des incohérences entre implémentations de décompresseurs, rappelant les vulnérabilités évoquées lors du talk sur les différences de comportement entre unzippeurs.

Reverse engineering d’une IA de jeu de société

Le groupe a analysé le code d’une IA « Keldon » destinée au jeu Race for the Galaxy. L’IA repose sur un réseau neuronal à deux couches, alimenté par des caractéristiques manuellement sélectionnées (nombre de cartes, types de ressources, etc.). En inspectant les poids, les participants ont constaté que les nœuds les plus fortement pondérés correspondaient à la présence de cartes spécifiques, révélant une stratégie économique dominante sur les stratégies militaires. Cette observation a été corroborée par des parties jouées contre l’IA, où les scores économiques dépassaient systématiquement les scores militaires.

Parallèlement, les participants ont résolu des sudokus à l’aide de solveurs SAT, démontrant que des problèmes combinatoires classiques peuvent être traduits en formules booléennes et résolus efficacement par des solveurs modernes. Cette expérience a renforcé la compréhension des limites pratiques du brute‑force versus la puissance des algorithmes de satisfaction de contraintes.