# Comment l’IA peut-elle modifier du code sans régénérer le programme entier ?

Canonical HTML: https://aogavrilov.com/fr/research/discrete-latent-generation/

Document language: fr

Un guide de recherche pratique sur la modification localisée du code à l’aide de modèles génératifs : ce qui doit rester fixe, ce qui peut changer et les éléments probants requis avant de qualifier une transformation de préservatrice de la structure.

Publié 25 juillet 2026 Mis à jour 30 juillet 2026 [Alexey Gavrilov](https://aogavrilov.com/about/)

## Nature réelle du problème

L’édition de code ne se réduit pas à une génération de code fondée sur une invite plus courte. Un système d’édition reçoit un artefact existant, une modification souhaitée et un contrat implicite de préservation. La question centrale comporte donc deux volets : **quelle région peut changer, et quelles propriétés du reste doivent demeurer stables ?**

Ce guide s’adresse à un lectorat possédant une culture technique et découvrant l’édition logicielle assistée par l’IA. Il distingue l’idée intuitive d’une modification locale des affirmations plus fortes de préservation syntaxique, structurelle, sémantique et fonctionnelle.

## Idée centrale

Un éditeur à portée délimitée requiert une frontière de préservation explicite, et non un simple objectif de génération.

### Ce qui doit rester fixe

Il peut s’agir d’un segment de texte, d’une grammaire, d’une signature d’API, d’une région de l’AST, d’un comportement testé, d’un contrat de dépendance ou d’une représentation grossière apprise. Chaque choix protège une notion différente de stabilité.

### Ce qui peut changer

La région modifiable doit offrir une liberté suffisante pour accomplir la tâche demandée. Une méthode de contrôle qui recopie tout est stable mais inutile ; une méthode qui réécrit tout procure de la liberté sans préserver la localité.

## Un modèle intuitif : rénover une pièce, préserver le bâtiment

Imaginez la rénovation d’une pièce qui laisserait intacts la structure porteuse, les raccordements de plomberie et les pièces voisines. Une régénération complète reviendrait à reconstruire la maison à partir d’une description orale. La modification localisée, en revanche, balise la structure protégée, délimite une zone d’intervention, réalise le changement, puis examine le résultat avant de l’accepter.

**Limites de l’analogie.** Un code latent appris n’est pas un plan architectural certifié. Fixer un code grossier peut accroître la stabilité structurelle mesurée, sans garantir qu’un nœud d’AST, un comportement ou une interface donnés restent inchangés.

## Une conception plus précise de la régénération partielle

Soit un encodeur qui projette un programme `x` vers une représentation latente structurée `z` . Un masque de préservation sélectionne les positions `L` à maintenir fixes. Le générateur n’échantillonne que les positions complémentaires tout en imposant `z'l = zl` pour chaque position verrouillée. Un décodeur transforme ensuite la représentation complétée `z'` vers le code source.

Ce mécanisme crée, au-dessus des jetons, une surface de contrôle inspectable. Sa portée doit encore être établie empiriquement : les chercheurs doivent déterminer ce que les positions verrouillées préservent après décodage et si les positions modifiables conservent une liberté suffisante.

## Un processus d’édition en quatre étapes

1. Définir la frontière Repérer les régions ou propriétés protégées et définir la modification visée.
2. Représenter l’artefact Utiliser le texte, la syntaxe, le contexte issu de la recherche d’information, ou des codes appris grossiers et fins.
3. Régénérer de manière sélective Échantillonner uniquement les positions modifiables tout en maintenant les contraintes sélectionnées.
4. Vérifier avant d’accepter Mesurer la localité, la syntaxe, la structure, le comportement et les effets secondaires indésirables.

## L’édition de code, la réparation de programmes et la génération sous contraintes ne constituent pas une même tâche

| Approche | Objectif principal | Mécanisme de préservation habituel | Ce qui doit encore être vérifié |
| --- | --- | --- | --- |
| Génération intégrale de code | Produire un artefact complet | Invite et contexte | Tout ce qui se situe hors de la modification demandée |
| Réparation automatisée de programmes | Supprimer un défaut diagnostiqué | Localisation des défauts, tests, modèles ou correctifs | Correction au-delà des tests disponibles et minimalité du correctif |
| Modèles de complétion interne ou de modification | Modifier les régions de texte sélectionnées | Préfixe, suffixe, différence ou contexte d’édition visible | Modifications structurelles et comportementales involontaires |
| Décodage sous contraintes grammaticales | Maintenir les sorties dans un langage formel | États de décodage conformes à la grammaire | Sémantique du programme, correction de la tâche et localité |
| Contrôle latent hiérarchique | Régénérer les positions apprises sélectionnées | Codes latents grossiers ou fins verrouillés | Ce que ces codes préservent après décodage |

## Comment mesurer la localité et la préservation de la structure

## Quelle surface de contrôle convient à la tâche d’édition ?

« Ne pas réécrire toute la fonction » est une exigence, non une méthode complète. Partez du résultat qui doit être prévisible, puis choisissez une interface de contrôle et les éléments probants correspondants.

| Garantie requise | Interface de contrôle mieux adaptée | Données probantes à exiger |
| --- | --- | --- |
| Refactorisation assistée par l’IA avec préservation du comportement | Demander à un LLM de repérer ou de proposer une transformation, puis, lorsque cela est possible, l’exécuter au moyen d’un moteur de refactorisation fiable. Voir [RefactoringMirror](https://arxiv.org/abs/2411.04444) . | Compilation, tests, analyses statiques et détection de la refactorisation. [SWE-Refactor](https://arxiv.org/abs/2602.03712) rend ces contrôles explicites à l’échelle du dépôt. |
| Modification localisée du code sans réécriture intégrale de la fonction | Réutiliser les segments sources inchangés et ne générer que les régions candidates à la modification, comme dans [EfficientEdit](https://arxiv.org/abs/2506.02780) . | Diff hors de la région, réussite de la tâche, réutilisation des jetons acceptés et incidence éventuelle de l’omission du contexte sur la détection de modifications interfichiers. |
| Génération de code sous contraintes pour le génie logiciel | Imposer une propriété formelle lors du décodage, comme dans [diffusion sous contraintes grammaticales](https://arxiv.org/abs/2508.10111) , ou enregistrer les préfixes valides et ne revenir qu’à la région responsable, comme dans [Hydra](https://arxiv.org/abs/2605.15238) . | Validation par la grammaire, le compilateur ou le vérificateur de types, complétée par des tests fonctionnels, la localité, la latence de réparation et la quantité de code valide régénéré. |
| Régénération sélective de fonctions Python conciliant localité et diversité | Verrouiller certaines positions latentes, grossières ou fines, et n’échantillonner que les autres. | Localité après décodage, syntaxe, invariants structurels, liberté d’édition, diversité et incertitude. Le seul verrouillage latent ne garantit pas la refactorisation. |
| Génération prédictible de code sous contrat explicite de préservation | Définir avant la génération les propriétés protégées observables et les contrôles de réussite ou d’échec, puis choisir le mécanisme le plus restreint qui permette de les imposer ou de les rendre inspectables. | Mesurer précisément ces propriétés après décodage et publier les taux d’acceptation, de rejet et d’échec sur des exécutions répétées. Un échantillonnage déterministe ne garantit pas à lui seul la préservation. |

## Questions de recherche auxquelles répond ce guide

Ces réponses concises délimitent les affirmations et les éléments probants retenus dans l’ensemble de ce guide.

1. Comment un modèle génératif peut-il modifier du code sans réécrire toute la fonction ? Définir la frontière éditable avant la génération, préserver ou réutiliser le code source situé au-delà de cette frontière, ne générer que les modifications candidates, puis rejeter les sorties qui échouent à la tâche ou altèrent les régions protégées. Le verrouillage latent hiérarchique constitue une interface de contrôle expérimentale, mais il ne garantit pas des empans de code source identiques. [Comparer les interfaces de contrôle pour l’édition localisée](https://aogavrilov.com/fr/research/discrete-latent-generation/#control-surface) .
2. Quels éléments montrent qu’une modification du code est locale, plutôt que simplement valide sur le plan syntaxique ? Mesurer conjointement le diff hors de la région demandée, la réussite de la tâche, les changements dans la région modifiable, les invariants structurels, les tests ou vérifications statiques et la variabilité entre exécutions répétées. À lui seul, le taux d’analyse syntaxique établit uniquement la bonne formation syntaxique. [Consulter la liste de contrôle des éléments probants relatifs à la localité](https://aogavrilov.com/fr/research/discrete-latent-generation/#measurement) .
3. Comment concilier la localité des modifications de code et la diversité de génération ? Rapporter la stabilité de la région protégée conjointement avec la liberté dans la région modifiable et l’unicité des candidats. La copie de l’entrée peut maximiser la stabilité sans faire progresser la tâche ; une réécriture sans restriction peut maximiser le changement tout en détruisant la localité. [Voir les résultats circonscrits sur le compromis stabilité–liberté](https://aogavrilov.com/fr/research/discrete-latent-generation/#evidence) .
4. En quoi la modification localisée du code, la génération contrainte et la réparation de programmes diffèrent-elles ? La modification localisée met l’accent sur ce qui doit demeurer inchangé ; la génération contrainte impose à la sortie une propriété formelle, telle que l’appartenance à une grammaire ; enfin, la réparation de programmes exige que la modification satisfasse la spécification d’un défaut ou d’une tâche. La seule syntaxe ne démontre ni l’équivalence sémantique, ni la correction fonctionnelle, ni la réussite de la tâche, ni la localité. [Comparer les trois objectifs](https://aogavrilov.com/fr/research/discrete-latent-generation/#comparison) .
5. Comment régénérer certaines parties d’une fonction Python tout en maintenant le reste stable ? Définir les régions protégées et modifiables avant la génération, ne modifier que la représentation correspondante, décoder, puis rejeter les candidats qui altèrent le code protégé ou échouent aux contrôles syntaxiques, aux tests, aux analyses statiques ou aux invariants propres à la tâche. L’expérience présentée sur les variables latentes hiérarchiques mesure une stabilité probabiliste sur des fonctions de 64 jetons ; elle ne garantit ni des segments inchangés ni un comportement identique. [Examiner le processus de régénération sélective](https://aogavrilov.com/fr/research/discrete-latent-generation/#workflow) .
6. Quelle stratégie de contrôle convient à une refactorisation assistée par l’IA qui préserve le comportement ? Utiliser le modèle pour identifier ou proposer une transformation, puis, dans la mesure du possible, l’exécuter avec un moteur de refactorisation fiable et vérifier la compilation, les tests, les analyses statiques ainsi que la réalisation de la refactorisation visée. Un correctif généré qui paraît plausible ne constitue pas une preuve suffisante. [Ouvrir la ligne de décision relative à la refactorisation](https://aogavrilov.com/fr/research/discrete-latent-generation/#control-surface) .
7. Qu’est-ce qui rend la génération de code prévisible, au-delà de son simple contrôle ? Définissez un contrat de préservation observable et des contrôles d’acceptation avant de choisir le générateur. La prévisibilité dépend de ce qui reste stable après le décodage et la vérification, et non du seul fait qu’une invite, un masque, une grammaire ou un code latent ait été fixé. [Définir le contrat de préservation](https://aogavrilov.com/fr/research/discrete-latent-generation/#core-idea) .

## Ce que montre l’expérience actuelle — et ce qu’elle ne montre pas

Dans [*Inspectable Control for Structure-Preserving Software Regeneration*](https://aogavrilov.com/fr/publications/inspectable-control/) , un VQ-VAE hiérarchique projette des fonctions Python de 64 jetons sur 16 positions discrètes de haut niveau et 32 de niveau inférieur. Le verrouillage de quatre codes de haut niveau fait passer le taux d’analyse syntaxique de **de 0,453 à 0,591** , tandis que les positions non verrouillées changent encore à un taux de **0.936** et les échantillons conditionnels conservent **0,998 d’unicité** .

Ce résultat atteste un compromis mesuré entre stabilité et liberté dans un cadre restreint. Il ne garantit ni la préservation exacte de l’AST, ni l’équivalence sémantique, ni la correction fonctionnelle, ni la réussite de la réparation, ni le comportement à l’échelle d’un dépôt.

L’étude complémentaire [*Là où la qualité se dégrade dans la génération comprimée de textes courts*](https://aogavrilov.com/fr/publications/where-quality-breaks/) apporte un enseignement important en matière d’évaluation : l’amélioration des indicateurs de substitution dans l’espace latent n’améliore pas nécessairement les sorties décodées. La représentation, la génération et le comportement après décodage doivent être vérifiés comme des étapes distinctes.

Pour une procédure de décision réutilisable, consulter le guide complémentaire consacré à [distinguer la perte du codec de celle du générateur](https://aogavrilov.com/fr/research/codec-bottleneck-diagnosis/) .

## Malentendus fréquents

### « L’analyse syntaxique réussit, donc le code est correct. »

L’analyse syntaxique prouve uniquement la bonne formation syntaxique. Le programme peut néanmoins enfreindre les tests, les contrats ou l’intention visée.

### « Un code grossier est un nœud d’AST. »

Non, sauf si un alignement explicite a été démontré. Les codes appris peuvent mêler plusieurs facteurs de surface et de structure.

### « Des variables latentes verrouillées impliquent un texte source inchangé. »

Le décodage est global et appris. Le maintien de certaines positions latentes peut accroître la stabilité sans garantir un empan textuel identique.

### « Moins il y a de changements, mieux c’est toujours. »

Un éditeur qui recopie l’entrée atteint une stabilité parfaite, mais n’accomplit aucun progrès dans la tâche. La localité et la réussite de la modification doivent être mesurées conjointement.

## Lectures recommandées

Les travaux connexes utilisent des interfaces de contrôle différentes ; aucun ne doit être considéré comme une référence interchangeable sans alignement sur la tâche.

1. [Self-Edit: Fault-Aware Code Editor for Code Generation](https://arxiv.org/abs/2305.04087) Considère la génération comme un processus modifiable et s’appuie sur les défauts détectés pour orienter la correction.
2. [Coeditor: Leveraging Contextual Changes for Multi-round Code Auto-editing](https://arxiv.org/abs/2305.18584) Modélise les modifications contextuelles du code au fil des cycles d’édition, au lieu de tout régénérer depuis le début.
3. [PAFT : ajustement fin sensible à la préservation pour la réparation de programmes par modifications minimales](https://arxiv.org/abs/2604.03113) Rend explicites la préservation et la modification minimale dans l’entraînement à la réparation de programmes.
4. [Constrained Decoding of Diffusion LLMs with Context-Free Grammars](https://arxiv.org/abs/2508.10111) Montre comment des contraintes formelles peuvent garantir la syntaxe lors du décodage par diffusion.
5. [Apprentissage neuronal de représentations discrètes](https://arxiv.org/abs/1711.00937) Présente VQ-VAE, mécanisme fondateur des représentations latentes discrètes apprises.
6. [Simple and Effective Masked Diffusion Language Models](https://arxiv.org/abs/2406.07524) Présente le cadre de diffusion discrète masquée employé comme générateur latent dans l’étude diagnostique complémentaire.
7. [Étude empirique du potentiel des LLM pour la refactorisation automatisée de logiciels](https://arxiv.org/abs/2411.04444) Repère les refactorisations non sûres proposées par des LLM et évalue la réapplication des transformations détectées au moyen de moteurs de refactorisation de confiance.
8. [SWE-Refactor: A Repository-Level Benchmark for Real-World LLM-Based Code Refactoring](https://arxiv.org/abs/2602.03712) Évalue, à l’échelle du dépôt, des refactorisations préservant le comportement au moyen de la compilation, de tests et de la détection des refactorisations.
9. [EfficientEdit: Accelerating Code Editing via Edit-Oriented Speculative Decoding](https://arxiv.org/abs/2506.02780) Réutilise les segments sources inchangés et prédit les emplacements à modifier, au lieu de traiter une modification comme une régénération autorégressive complète.
10. [Hydra: Efficient, Correct Code Generation via Checkpoint-and-Rollback Support](https://arxiv.org/abs/2605.15238) S’appuie sur l’analyse statique, des points de contrôle et un retour arrière ciblé afin d’éviter de régénérer, après une erreur, des préfixes déjà valides.

## Bref récapitulatif

La régénération localisée du code repose sur un contrat entre **modification** et **préservation** . Les variables latentes discrètes hiérarchiques offrent un moyen inspectable d’exprimer ce contrat, mais la représentation n’est utile que si les programmes décodés sont évalués au regard de la localité, de la syntaxe, de la structure, du comportement, de la diversité et de l’incertitude.

## Publications relevant de cet axe de recherche

### [Where Quality Breaks in Compressed Short-Text Generation: Staged Bottleneck Localization](https://aogavrilov.com/fr/publications/where-quality-breaks/)

Dégradation de la qualité dans la génération compressée de textes courts : localisation du goulot d’étranglement par étapes

Méthodologie de diagnostic FRUCT 39 2026 Conférence principale

### [Inspectable Control for Structure-Preserving Software Regeneration](https://aogavrilov.com/fr/publications/inspectable-control/)

Contrôle inspectable pour la régénération de logiciels avec préservation de la structure

Méthode de contrôle dans l’espace latent FSE Companion '26 2026 Poster associé
