A framework for assessing the capabilities of code generation of constraint domain-specific languages with large language models

Dit artikel introduceert een generiek raamwerk om de prestaties van grote taalmodellen bij het genereren van code voor domeinspecifieke taalvarianten, zoals OCL en Alloy, te evalueren en vergelijkt deze met die voor Python, waarbij wordt geconcludeerd dat de prestaties lager zijn en dat strategieën zoals codeherstel en meerdere pogingen de kwaliteit kunnen verbeteren.

David Delgado, Lola Burgueño, Robert Clarisó

Gepubliceerd 2026-03-06
📖 5 min leestijd🧠 Diepgaand

Each language version is independently generated for its own context, not a direct translation.

Stel je voor dat je een zeer slimme, maar soms wat ongeduldige assistent hebt die je helpt met schrijven. Deze assistent is een Groot Taalmodel (LLM), zoals de technologie achter ChatGPT. Hij kan heel goed Python of Java schrijven omdat hij miljarden voorbeelden heeft gelezen. Maar wat gebeurt er als je vraagt om code te schrijven in een heel specifieke, obscure taal die alleen maar door een paar experts wordt gebruikt? Dan wordt de assistent vaak verward.

Dit artikel van David Delgado en zijn collega's is als het ware een testcursus om te kijken hoe goed deze slimme assistenten zijn in het schrijven van code voor die specifieke, moeilijke talen.

Hier is de samenvatting in simpele taal, met een paar creatieve vergelijkingen:

1. Het Probleem: De "Allesweter" die vastloopt

Stel je voor dat je een kok bent die gewend is om Italiaanse pasta te koken (dat is Python, een populaire taal). Je vraagt hem nu om een heel specifiek, oud recept te maken voor een lokale streektaal die maar door 10 mensen in de wereld wordt gesproken (dat zijn DSL's zoals OCL en Alloy).

De kok heeft het recept nog nooit gezien. Hij probeert het te raden, maar omdat hij geen voorbeelden heeft, maakt hij vaak fouten. Hij gebruikt de verkeerde ingrediënten of de zinnen kloppen niet. In de programmeerwereld noemen we dit "low-resource talen": er is te weinig data om de AI goed te laten leren.

2. De Oplossing: Een Nieuwe Testmethode

De auteurs hebben een flexibel testraamwerk (een soort keukentest) bedacht. Ze willen niet alleen kijken of de code werkt, maar ze willen ook weten waarom het wel of niet werkt. Ze testen drie dingen:

  • Is het goed gebouwd? (Well-formedness): Is de code grammaticaal correct? (Bijvoorbeeld: zijn er wel haakjes en puntkomma's op de juiste plek?)
  • Doet het wat het moet doen? (Correctness): Als je de code draait, lost het het probleem op?
  • Hoe kunnen we het verbeteren? Door de AI te vragen het opnieuw te proberen of door de fouten te laten repareren.

3. De Experimenten: De "Keukentest"

Ze hebben de assistenten (verschillende AI-modellen) een opdracht gegeven: "Schrijf een regel die controleert of een auto-ongeval precies twee auto's betreft." Ze hebben dit gedaan in drie talen:

  • Python (De populaire taal, de "Italiaanse pasta").
  • OCL en Alloy (De specifieke talen, de "streektaal").

Wat bleek?

  • Python: De AI was fantastisch. Net als een kok die elke dag pasta maakt, deed hij dit moeiteloos.
  • OCL en Alloy: Hier ging het vaak mis. De AI verloor de draad. Het was alsof je de kok vraagt om een recept te bedenken voor een taal die hij niet kent; hij begint dan dingen te verzinnen die er niet bestaan (hallucinaties).

4. De Leerpunten: Hoe krijg je de beste resultaten?

De auteurs hebben ontdekt wat er nodig is om de AI op zijn best te krijgen:

  • De juiste kok kiezen: Als je een specifieke taal nodig hebt, moet je een AI kiezen die die taal al kent. Kleine, gratis AI-modellen (zoals een stagiair) faalden vaak omdat ze te weinig "kennis" hadden. Grote, dure modellen (zoals een meesterkok) deden het veel beter.
  • Meer kans op succes: Als je de AI één keer vraagt, lukt het soms niet. Vraag je het drie keer, dan is de kans groot dat er één keer een goed antwoord tussen zit. Dit noemen ze "meerdere pogingen".
  • Reparatie werkt: Als de AI een fout maakt, kun je zeggen: "Hé, dit klopt niet, probeer het nog eens." Dit helpt vaak, maar kost wel extra tijd en geld.
  • De vraagstelling (Prompt): Je zou denken dat de manier waarop je de vraag stelt (de "prompt") superbelangrijk is. Maar verrassend genoeg maakt het niet zoveel uit of je heel precies of wat losjes vraagt. De AI is vaak net zo goed (of slecht) ongeacht hoe je het vraagt, zolang je maar de juiste "kok" (AI-model) kiest.
  • Alles in één keer: Het is beter om de AI te vragen om alle regels voor een systeem in één keer te schrijven, dan om ze één voor één te vragen. Als je ze één voor één vraagt, kan de AI vergeten wat hij in de eerste vraag heeft bedacht, waardoor de regels tegen elkaar in werken.

5. De Conclusie: Een Praktische Gids

De auteurs zeggen: "Gebruik niet zomaar elke AI voor elke taal."

  • Voor populaire talen (Python) kun je bijna elke AI gebruiken.
  • Voor specifieke, moeilijke talen (zoals in wetenschappelijke of industriële systemen) moet je een krachtige AI kiezen en meerdere pogingen doen.
  • Het is slim om de AI te laten repareren als hij een fout maakt.

Kortom:
Dit artikel is als een handleiding voor chef-koks (ontwikkelaars) die AI willen inzetten. Het zegt: "Kies je kok wijs, geef hem genoeg tijd en kans om het opnieuw te proberen, en zorg dat hij niet vergeten is wat hij eerder heeft gezegd." Zo kun je voorkomen dat je een rommelige maaltijd (slechte code) krijgt, zelfs als je een heel specifiek recept (een moeilijke taal) probeert te maken.