2025-11-17T18:07:13.560068

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

Informazioni Fondamentali

  • ID Articolo: 2510.13163
  • Titolo: A Matter of Representation: Towards Graph-Based Abstract Code Generation
  • Autori: Nyx Iskandar (UC Berkeley), Hisham Bedri (Ramen VR), Andy Tsen (Ramen VR)
  • Classificazione: cs.CL (Linguistica Computazionale)
  • Conferenza di Pubblicazione: 39th Conference on Neural Information Processing Systems (NeurIPS 2025) Workshop: Deep Learning for Code
  • Link Articolo: https://arxiv.org/abs/2510.13163v1

Riassunto

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.

Contesto di Ricerca e Motivazione

Definizione del Problema

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

Analisi dell'Importanza

  1. Applicazione diffusa: i linguaggi di programmazione grafica sono ampiamente utilizzati da principianti, sviluppatori di giochi e ingegneri del software
  2. 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
  3. Relazioni non lineari: i linguaggi grafici introducono complesse relazioni non lineari tra i nodi, difficili da risolvere con l'apprendimento contestuale tradizionale

Limitazioni dei Metodi Esistenti

  • 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

Contributi Principali

  1. 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
  2. Propone un metodo di rappresentazione JSON per i grafi di codice: migliora ulteriormente l'accuratezza dell'output della rappresentazione grafica degli LLM
  3. Costruisce il benchmark ScratchTest: basato su un'implementazione Python di Scratch, valuta specificamente la capacità di generazione di codice astratto basato su grafi
  4. 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

Spiegazione Dettagliata del Metodo

Definizione del Compito

  • Input: descrizione in linguaggio naturale dei requisiti funzionali
  • Output: grafo connesso che soddisfa i requisiti, contenente nodi predefiniti e relazioni di connessione dei bordi
  • Vincoli: il grafo deve essere un grafo aciclico diretto (DAG) per garantire una sequenza di esecuzione valida

Progettazione del Benchmark ScratchTest

Caratteristiche del Benchmark

  • Numero di nodi: 53 blocchi Scratch incorporati (su 107 implementabili tramite CLI)
  • Tipi di nodi: movimento, aspetto, suono, eventi, controllo, percezione, operatori, variabili e altri 8 tipi
  • Implementazione semplificata: non manipola direttamente gli sprite, valuta la funzionalità attraverso registri di comportamento
  • Persistenza dello stato: mantiene un dizionario di attributi dello sprite (posizione, direzione, ecc.)

Metodo di Valutazione

  • Set di test: 20 prompt di descrizione funzionale univoci
  • Numero di valutazioni: ogni prompt viene eseguito indipendentemente 5 volte
  • Criteri di valutazione: valutazione manuale della correttezza logica dei registri di comportamento e dei file Python

Progettazione dei Metodi di Rappresentazione

Rappresentazione del Nodo di Riferimento

[NODENAME]: {
    inPorts: [{id: string, type: string}],
    fields: [{id: string, type: string}],
    outPorts: [{id: string, type: string}]
}

Componenti chiave:

  • NODENAME: corrisponde al nome del blocco Scratch
  • inPorts: porte di input, incluse le porte di parametro e EXEC (flusso di esecuzione)
  • fields: parametri con opzioni predefinite
  • outPorts: porte di output, inclusi valori di ritorno, porte THEN (esecuzione successiva), porte SUBSTACK (cicli/controllo)
  • type: tipo di porta, previene connessioni incompatibili

Rappresentazione del Grafo di Output

{
    nodes: {
        [key: string]: {
            name: string,
            value: any | null
        }
    },
    edges: [{
        outNodeID: string,
        outPortID: string,
        inNodeID: string,
        inPortID: string
    }]
}

Vantaggi della progettazione:

  • Separazione delle responsabilità: nodi e bordi sono definiti separatamente, riducendo gli errori
  • Generazione lineare: prima si definiscono i nodi, poi le relazioni di connessione
  • Evita duplicazioni: ogni bordo viene definito una sola volta

Flusso di Post-Elaborazione

  1. Ordinamento topologico: garantisce la natura aciclica del grafo
  2. Conversione Python: converte la rappresentazione grafica in un'implementazione Scratch pythonica
  3. Istanziazione di oggetti: crea oggetti blocco Scratch e associa variabili
  4. Stabilimento delle connessioni: stabilisce il flusso di esecuzione basato sulle porte THEN e EXEC

Configurazione Sperimentale

Dataset

  • ScratchTest: 20 prompt di descrizione funzionale
  • Prompt di esempio:
    • "When the green flag is clicked, continuously move in a square pattern until the user presses the space key"
    • "When the 's' key is pressed, say a secret password made of two random letters and three random numbers"

Metriche di Valutazione

  • Accuratezza: proporzione di funzionalità implementate correttamente
  • Criteri di valutazione:
    • Output ragionevole del registro di comportamento
    • File Python logicamente corretto
    • Nessun errore di post-elaborazione o esecuzione

Metodi di Confronto

Ablazione della Rappresentazione del Nodo di Riferimento

  1. No Types: baseline minimo con informazioni sul tipo di porta rimosse
  2. Extra Description: aggiunge descrizioni in linguaggio naturale di nodi e porte
  3. Proposed: rappresentazione proposta completa

Ablazione della Rappresentazione del Grafo di Output

  1. Alternative: rappresentazione alternativa con informazioni sui bordi incorporate nei nodi
  2. Proposed: rappresentazione proposta con nodi e bordi separati

Dettagli di Implementazione

  • Modello principale: OpenAI gpt-oss-120b (piattaforma Groq)
  • Altri modelli: qwen3-32b, deepseek-r1-distill-llama-70b, llama-3.3-70b-versatile
  • Configurazione: Temperature=1, Max Tokens=8192, Top P=1
  • Framework: singolo agente, senza fine-tuning, senza apprendimento contestuale, senza interazione multi-turno

Risultati Sperimentali

Risultati Principali

Risultati dell'Ablazione della Rappresentazione del Nodo di Riferimento

MetodoAccuratezza MediaDeviazione Standard
No Types0.650.071
Extra Description0.740.082
Proposed0.750.050

Significatività statistica:

  • Proposed vs No Types: p=0.036 ≤ 0.05 (significativo)
  • Proposed vs Extra Description: p=0.82 > 0.05 (non significativo)

Risultati dell'Ablazione della Rappresentazione del Grafo di Output

MetodoAccuratezza MediaDeviazione Standard
Alternative0.490.042
Proposed0.750.050

Significatività statistica: p=0.000024 ≤ 0.05, Proposed migliora di 23-29% rispetto a Alternative

Scoperte Chiave

  1. Importanza delle informazioni di tipo: l'aggiunta di tipi di porta migliora significativamente l'accuratezza, prevenendo connessioni incompatibili
  2. Valore limitato delle informazioni descrittive: le descrizioni in linguaggio naturale non migliorano significativamente le prestazioni, anzi aumentano il consumo di token
  3. Ruolo critico della struttura di rappresentazione: la rappresentazione grafica separata è significativamente superiore a quella incorporata
  4. Miglioramento della coerenza: il metodo proposto mostra prestazioni più stabili in più esecuzioni

Tipi di Errori Comuni

  1. DAG non valido: generazione di grafi contenenti cicli
  2. Riferimento a variabili non dichiarate: riferimento a variabili non definite
  3. Errore di connessione delle porte: connessione di porte nella stessa direzione o dimenticanza di definire le porte

Prestazioni di Altri Modelli

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.

Lavori Correlati

Comprensione e Generazione di Grafi

  • 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

Agenti di Codice LLM

  • 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

Conclusioni e Discussione

Conclusioni Principali

  1. Verifica della fattibilità: gli LLM possono completare la generazione di codice astratto basato su grafi in una singola generazione
  2. Ruolo critico della rappresentazione: la corretta rappresentazione JSON è cruciale per l'accuratezza della generazione
  3. Principi di progettazione: le informazioni di tipo, la separazione delle responsabilità e il flusso di generazione lineare sono elementi chiave di una rappresentazione efficace
  4. Stabilimento del benchmark: ScratchTest fornisce un benchmark di valutazione per la generazione di codice basato su grafi

Limitazioni

  1. Limite di accuratezza: anche con la migliore rappresentazione, non si raggiunge il 100% di accuratezza
  2. Dipendenza dal modello: le prestazioni dipendono fortemente dalle capacità specifiche dell'LLM
  3. Limite di scala: attualmente verificato solo nel dominio relativamente semplice di Scratch
  4. Metodo di valutazione: dipende dalla valutazione manuale, manca uno standard di valutazione automatizzato

Direzioni Future

  1. Ottimizzazione della rappresentazione: esplorare metodi di rappresentazione non-JSON più ottimali
  2. Modelli specializzati: sviluppare modelli di generazione specializzati per lo spazio dei grafi di codice
  3. Framework multi-agente: combinare metodi multi-turno con pianificazione e correzione degli errori
  4. Validazione su larga scala: verificare in ambienti di programmazione grafica più complessi

Valutazione Approfondita

Punti di Forza

  1. Novità del problema: primo studio sistematico della generazione di codice astratto basato su grafi
  2. Semplicità del metodo: il metodo di rappresentazione JSON proposto è semplice ed efficace, facile da implementare e estendere
  3. Rigore sperimentale: garantisce l'affidabilità dei risultati attraverso più esecuzioni e test statistici
  4. Valore pratico: fornisce una base per lo sviluppo assistito da IA di linguaggi di programmazione visuale

Insufficienze

  1. Limitazioni della valutazione: il metodo di valutazione manuale non è sufficientemente oggettivo e difficile da applicare su larga scala
  2. Scala del benchmark: 20 casi di test sono relativamente pochi e potrebbero non essere sufficientemente completi
  3. Copertura del modello: i risultati si basano principalmente su un modello, altri modelli mostrano prestazioni inferiori
  4. Analisi teorica: manca un'analisi teorica approfondita del perché alcune rappresentazioni sono più efficaci

Impatto

  1. Contributo pioneristico: stabilisce una linea di base di ricerca per la generazione di codice basato su grafi
  2. Applicazione pratica: può essere direttamente applicato a strumenti di programmazione visuale come Scratch
  3. Scalabilità: il metodo è estendibile ad altri ambienti di programmazione grafica
  4. Significato ispiratore: sottolinea l'importanza dell'apprendimento della rappresentazione nella generazione di codice

Scenari Applicabili

  1. Campo educativo: assistenza nella generazione di codice per strumenti didattici come Scratch
  2. Prototipazione rapida: automazione dei sistemi di blueprint nello sviluppo di giochi
  3. Automazione dei flussi di lavoro: configurazione intelligente di strumenti come n8n
  4. Adattamento di nuove librerie: generazione di codice per framework emergenti con dati di addestramento insufficienti

Riferimenti Bibliografici

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.