A Matter of Representation: Towards Graph-Based Abstract Code Generation
Iskandar, Bedri, Tsen
Most large language models (LLMs) today excel at generating raw, sequential code with minimal abstractions and custom structures. However, there has been little work on graph-based abstract code generation, where significant logic is encapsulated in predefined nodes and execution flow is determined by edges. This is relevant for visual programming languages, and in cases where raw source code is inaccessible to users and LLM training sets. In this work, we propose and evaluate JSON representations for graphs to enable high accuracy graph-based abstract code generation. We evaluate these representations on ScratchTest, a mini-benchmark based on our custom Python re-implementation of Scratch, which tests the LLM in code graph space. Our findings demonstrate that LLMs can indeed perform the aforementioned generation task in a single pass without relying on specialized or complex pipelines, given the correct graph representations. We also show that different representations induce significantly different accuracies, highlighting the instrumental role of representations in this generation task. All in all, this work establishes the first steps towards representation learning for graph-based abstract code generation.
academic
Una Questione di Rappresentazione: Verso la Generazione di Codice Astratto Basata su Grafi
La maggior parte dei modelli linguistici di grandi dimensioni (LLM) attuali eccelle nella generazione di codice grezzo e sequenziale, ma la ricerca sulla generazione di codice astratto basato su grafi è ancora limitata. Il codice astratto basato su grafi incapsula la logica importante in nodi predefiniti, con i bordi che determinano il flusso di esecuzione. Questa forma di codice è comune nei linguaggi di programmazione visuale e risulta importante nei casi in cui il codice sorgente grezzo non è accessibile agli utenti e ai set di addestramento degli LLM. Questo articolo propone e valuta metodi di rappresentazione JSON per i grafi al fine di ottenere una generazione di codice astratto basato su grafi ad alta precisione. Gli autori valutano questi metodi di rappresentazione su ScratchTest, un piccolo benchmark basato su un'implementazione Python di Scratch. La ricerca rivela che, con la corretta rappresentazione grafica, gli LLM possono effettivamente completare il compito suddetto in una singola generazione, senza dipendere da pipeline specializzate o complesse. Diverse rappresentazioni producono tassi di accuratezza significativamente diversi, evidenziando il ruolo critico della rappresentazione in questo compito di generazione.
Gli LLM attuali nel campo della generazione di codice si concentrano principalmente sulla generazione di codice grezzo e sequenziale, un tipo di codice organizzato linearmente in unità di riga. Tuttavia, molti scenari di applicazione pratica richiedono la generazione di codice astratto basato su grafi, come:
Linguaggi di programmazione visuale: Scratch, Unreal Engine Blueprints, n8n e altri
Librerie e framework ad alto livello di astrazione: i dettagli di implementazione sono incapsulati e gli utenti possono operare solo attraverso interfacce predefinite
Applicazione diffusa: i linguaggi di programmazione grafica sono ampiamente utilizzati da principianti, sviluppatori di giochi e ingegneri del software
Scarsità di dati di addestramento: le librerie e i framework emergenti mancano di dati di addestramento sufficienti, affrontando le stesse sfide di astrazione del codice grafico
Relazioni non lineari: i linguaggi grafici introducono complesse relazioni non lineari tra i nodi, difficili da risolvere con l'apprendimento contestuale tradizionale
Metodi di generazione di grafi: GraphRNN, GraphGAN e altri si concentrano sulla generazione di grafi generici, non adatti ai grafi di codice funzionale
Modelli fondamentali basati su grafi (GFM): i metodi basati su GNN hanno scarsa scalabilità, mentre i metodi basati su LLM dipendono eccessivamente dal linguaggio naturale fragile
Modelli di generazione di codice: principalmente orientati al codice sequenziale, con capacità di supporto molto variabile per diversi linguaggi e framework
Propone un metodo di rappresentazione JSON per i nodi: consente agli LLM attuali di generare grafi di codice con la massima accuratezza sintattica e logica
Propone un metodo di rappresentazione JSON per i grafi di codice: migliora ulteriormente l'accuratezza dell'output della rappresentazione grafica degli LLM
Costruisce il benchmark ScratchTest: basato su un'implementazione Python di Scratch, valuta specificamente la capacità di generazione di codice astratto basato su grafi
Verifica l'importanza della rappresentazione: dimostra che, in un framework di LLM a singolo agente, la rappresentazione corretta può aumentare significativamente l'accuratezza della generazione
Importanza delle informazioni di tipo: l'aggiunta di tipi di porta migliora significativamente l'accuratezza, prevenendo connessioni incompatibili
Valore limitato delle informazioni descrittive: le descrizioni in linguaggio naturale non migliorano significativamente le prestazioni, anzi aumentano il consumo di token
Ruolo critico della struttura di rappresentazione: la rappresentazione grafica separata è significativamente superiore a quella incorporata
Miglioramento della coerenza: il metodo proposto mostra prestazioni più stabili in più esecuzioni
Gli altri tre modelli (qwen3-32b, deepseek-r1-distill-llama-70b, llama-3.3-70b-versatile) mostrano prestazioni significativamente inferiori a gpt-oss-120b, con accuratezza generalmente più bassa e tassi di errore più elevati nella maggior parte dei casi.
Generazione di grafi generici: GraphRNN, GraphGAN si concentrano sull'apprendimento della distribuzione dei grafi, non adatti ai grafi di codice funzionale
Modelli fondamentali basati su grafi: i metodi basati su GNN hanno scarsa scalabilità, i metodi basati su LLM dipendono dal linguaggio naturale fragile
Comprensione di grafi da parte degli LLM: i lavori esistenti valutano principalmente la comprensione di grafi matematici, non di grafi di codice logico
Capacità di generazione di codice: gli LLM attuali eccellono nella generazione di codice tradizionale
Metodi di miglioramento: apprendimento per rinforzo, catena di pensiero, addestramento di riempimento, decodifica vincolata e altri
Differenze di prestazione: esistono differenze significative nella capacità di generazione tra diversi linguaggi e framework, principalmente dovute alla disponibilità di dati di addestramento
Verifica della fattibilità: gli LLM possono completare la generazione di codice astratto basato su grafi in una singola generazione
Ruolo critico della rappresentazione: la corretta rappresentazione JSON è cruciale per l'accuratezza della generazione
Principi di progettazione: le informazioni di tipo, la separazione delle responsabilità e il flusso di generazione lineare sono elementi chiave di una rappresentazione efficace
Stabilimento del benchmark: ScratchTest fornisce un benchmark di valutazione per la generazione di codice basato su grafi
L'articolo cita 54 riferimenti correlati, coprendo importanti lavori in più campi inclusi la generazione di codice LLM, le reti neurali grafiche e i linguaggi di programmazione visuale, fornendo una base teorica solida per la ricerca.
Valutazione Complessiva: Questo è un lavoro pioneristico che affronta sistematicamente per la prima volta il problema della generazione di codice astratto basato su grafi. Sebbene vi sia spazio per miglioramenti nei metodi di valutazione e nell'analisi teorica, il metodo di rappresentazione proposto è semplice ed efficace, gettando una base importante per questa nuova direzione di ricerca emergente. Questo lavoro ha un forte valore pratico e significato ispiratore, e si prevede che promuoverà ulteriori sviluppi nel campo correlato.