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 Cuestión de Representación: Hacia la Generación de Código Abstracto Basado en Grafos

Información Básica

  • ID del Artículo: 2510.13163
  • Título: A Matter of Representation: Towards Graph-Based Abstract Code Generation
  • Autores: Nyx Iskandar (UC Berkeley), Hisham Bedri (Ramen VR), Andy Tsen (Ramen VR)
  • Clasificación: cs.CL (Lingüística Computacional)
  • Conferencia de Publicación: 39th Conference on Neural Information Processing Systems (NeurIPS 2025) Workshop: Deep Learning for Code
  • Enlace del Artículo: https://arxiv.org/abs/2510.13163v1

Resumen

La mayoría de los modelos de lenguaje grandes (LLMs) actuales demuestran un desempeño excelente en la generación de código secuencial y primitivo, pero existe poca investigación sobre la generación de código abstracto graficado. El código abstracto graficado encapsula la lógica importante en nodos predefinidos, determinando el flujo de ejecución mediante aristas. Esta forma de código es común en lenguajes de programación visual y es importante en casos donde el código fuente primitivo no es accesible para usuarios ni para conjuntos de entrenamiento de LLMs. Este artículo propone y evalúa métodos de representación JSON para grafos, permitiendo la generación de código abstracto graficado con alta precisión. Los autores evalúan estos métodos de representación en ScratchTest, un pequeño conjunto de pruebas basado en una reimplementación en Python de Scratch. La investigación demuestra que, con la representación de grafo correcta, los LLMs pueden completar la tarea mencionada en una única generación, sin depender de canalizaciones especializadas o complejas. Diferentes métodos de representación resultan en tasas de precisión significativamente diferentes, destacando el papel crítico de la representación en esta tarea de generación.

Antecedentes de Investigación y Motivación

Definición del Problema

Los LLMs actuales en el campo de la generación de código se enfocan principalmente en la generación de código secuencial y primitivo, código que se organiza linealmente en unidades de línea. Sin embargo, muchos escenarios de aplicación práctica requieren generación de código abstracto graficado, tales como:

  • Lenguajes de Programación Visual: Scratch, Unreal Engine Blueprints, n8n, etc.
  • Bibliotecas y Marcos de Trabajo de Alto Nivel de Abstracción: Los detalles de implementación están encapsulados, permitiendo a los usuarios operar solo a través de interfaces predefinidas

Análisis de Importancia

  1. Aplicación Generalizada: Los lenguajes de programación graficada son ampliamente utilizados por principiantes, desarrolladores de juegos e ingenieros de software
  2. Escasez de Datos de Entrenamiento: Las bibliotecas y marcos emergentes carecen de datos de entrenamiento suficientes, enfrentando los mismos desafíos de abstracción que el código graficado
  3. Relaciones No Lineales: Los lenguajes graficados introducen relaciones no lineales complejas entre nodos, que son difíciles de resolver mediante aprendizaje contextual tradicional

Limitaciones de Métodos Existentes

  • Métodos de Generación de Grafos: GraphRNN, GraphGAN, etc., se enfocan en generación de grafos genéricos, inadecuados para grafos de código funcional
  • Modelos Fundamentales de Grafos (GFMs): Los métodos basados en GNN tienen poca escalabilidad, mientras que los métodos basados en LLM dependen excesivamente de lenguaje natural frágil
  • Modelos de Generación de Código: Se enfocan principalmente en código secuencial, con capacidades de soporte muy variables entre diferentes lenguajes y marcos

Contribuciones Principales

  1. Propone un método de representación JSON para nodos: Permite que los LLMs actuales generen grafos de código con la máxima precisión sintáctica y lógica
  2. Propone un método de representación JSON para grafos de código: Mejora aún más la precisión de la salida de representación de grafos de los LLMs
  3. Construye el conjunto de pruebas ScratchTest: Basado en una reimplementación en Python de Scratch, evaluando específicamente la capacidad de generación de código abstracto graficado
  4. Valida la importancia de la representación: Demuestra que, bajo un marco de LLM de un solo agente, la representación correcta puede mejorar significativamente la tasa de precisión de generación

Explicación Detallada del Método

Definición de la Tarea

  • Entrada: Descripción en lenguaje natural de requisitos funcionales
  • Salida: Grafo conexo que satisface los requisitos, incluyendo nodos predefinidos y relaciones de conexión de aristas
  • Restricciones: El grafo debe ser un grafo acíclico dirigido (DAG), asegurando una secuencia de ejecución válida

Diseño del Conjunto de Pruebas ScratchTest

Características del Conjunto de Pruebas

  • Cantidad de Nodos: 53 bloques Scratch integrados (de 107 partes implementables en CLI)
  • Tipos de Nodos: Movimiento, apariencia, sonido, eventos, control, sensores, operadores, variables y 8 categorías más
  • Implementación Simplificada: No manipula directamente sprites, evaluando funcionalidad mediante registros de comportamiento
  • Persistencia de Estado: Mantiene un diccionario de atributos de sprite (posición, dirección, etc.)

Método de Evaluación

  • Conjunto de Pruebas: 20 indicaciones de descripción funcional única
  • Ejecuciones de Evaluación: Cada indicación se ejecuta independientemente 5 veces
  • Criterios de Evaluación: Evaluación manual de la corrección lógica de registros de comportamiento y archivos Python

Diseño de Métodos de Representación

Representación de Nodo de Referencia

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

Componentes Clave:

  • NODENAME: Corresponde al nombre del bloque Scratch
  • inPorts: Puertos de entrada, incluyendo parámetros y puertos EXEC (flujo de ejecución)
  • fields: Parámetros con opciones predefinidas
  • outPorts: Puertos de salida, incluyendo valores de retorno, puertos THEN (ejecución posterior) y puertos SUBSTACK (bucles/control)
  • type: Tipo de puerto, previniendo conexiones incompatibles

Representación de Grafo de Salida

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

Ventajas del Diseño:

  • Separación de Responsabilidades: Nodos y aristas se definen por separado, reduciendo errores
  • Generación Lineal: Primero se definen nodos, luego se definen relaciones de conexión
  • Evita Redundancia: Cada arista se define solo una vez

Proceso de Postprocesamiento

  1. Ordenamiento Topológico: Asegura la naturaleza acíclica dirigida del grafo
  2. Conversión a Python: Convierte la representación de grafo a implementación Scratch pythónica
  3. Instanciación de Objetos: Crea objetos de bloques Scratch y vincula variables
  4. Establecimiento de Conexiones: Establece flujo de ejecución basado en puertos THEN y EXEC

Configuración Experimental

Conjunto de Datos

  • ScratchTest: 20 indicaciones de descripción funcional
  • Indicaciones de Ejemplo:
    • "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"

Métricas de Evaluación

  • Precisión: Proporción de funcionalidad implementada correctamente
  • Criterios de Evaluación:
    • Salida de registro de comportamiento razonable
    • Archivo Python con lógica correcta
    • Sin errores de postprocesamiento o ejecución

Métodos de Comparación

Ablación de Representación de Nodo de Referencia

  1. No Types: Línea base mínima sin información de tipo de puerto
  2. Extra Description: Añade descripciones en lenguaje natural de nodos y puertos
  3. Proposed: Representación propuesta completa

Ablación de Representación de Grafo de Salida

  1. Alternative: Representación alternativa con información de aristas incrustada en nodos
  2. Proposed: Representación propuesta con nodos y aristas separados

Detalles de Implementación

  • Modelo Principal: OpenAI gpt-oss-120b (plataforma Groq)
  • Otros Modelos: qwen3-32b, deepseek-r1-distill-llama-70b, llama-3.3-70b-versatile
  • Configuración: Temperature=1, Max Tokens=8192, Top P=1
  • Marco: Un solo agente, sin ajuste fino, sin aprendizaje contextual, sin interacción multironda

Resultados Experimentales

Resultados Principales

Resultados de Ablación de Representación de Nodo de Referencia

MétodoPrecisión PromedioDesviación Estándar
No Types0.650.071
Extra Description0.740.082
Proposed0.750.050

Significancia Estadística:

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

Resultados de Ablación de Representación de Grafo de Salida

MétodoPrecisión PromedioDesviación Estándar
Alternative0.490.042
Proposed0.750.050

Significancia Estadística: p=0.000024 ≤ 0.05, Proposed mejora Alternative en 23-29%

Hallazgos Clave

  1. Importancia de la Información de Tipo: Añadir tipos de puerto mejora significativamente la precisión, previniendo conexiones incompatibles
  2. Valor Limitado de la Información Descriptiva: Las descripciones en lenguaje natural no mejoran significativamente el desempeño, aumentando el consumo de tokens
  3. Papel Crítico de la Estructura de Representación: La representación de grafo separada es significativamente superior a la representación incrustada
  4. Mejora de Consistencia: El método propuesto demuestra un desempeño más estable en múltiples ejecuciones

Tipos de Errores Comunes

  1. DAG Inválido: Generación de grafos que contienen ciclos
  2. Referencias de Variables No Declaradas: Referencias a variables no definidas
  3. Errores de Conexión de Puertos: Conexión de puertos en la misma dirección u olvido de definir puertos

Desempeño de Otros Modelos

Los otros tres modelos (qwen3-32b, deepseek-r1-distill-llama-70b, llama-3.3-70b-versatile) demuestran un desempeño notablemente inferior a gpt-oss-120b, con tasas de precisión generalmente más bajas y tasas de error más altas en la mayoría de los casos.

Trabajo Relacionado

Comprensión y Generación de Grafos

  • Generación de Grafos Genéricos: GraphRNN, GraphGAN se enfocan en aprender distribuciones de grafos, inadecuados para grafos de código funcional
  • Modelos Fundamentales de Grafos: Los métodos basados en GNN tienen poca escalabilidad, mientras que los métodos basados en LLM dependen de lenguaje natural frágil
  • Comprensión de Grafos por LLM: El trabajo existente se enfoca principalmente en comprensión de grafos matemáticos, no en grafos de codificación lógica

Agentes de Código LLM

  • Capacidades de Generación de Código: Los LLMs actuales demuestran excelente desempeño en generación de código tradicional
  • Métodos de Mejora: Aprendizaje por refuerzo, cadena de pensamiento, entrenamiento de relleno, decodificación con restricciones, etc.
  • Diferencias de Desempeño: Existen diferencias significativas en capacidades de generación entre diferentes lenguajes y marcos, principalmente determinadas por disponibilidad de datos de entrenamiento

Conclusiones y Discusión

Conclusiones Principales

  1. Validación de Viabilidad: Los LLMs pueden completar generación de código abstracto graficado en una única generación
  2. Papel Crítico de la Representación: La representación JSON correcta es crucial para la precisión de generación
  3. Principios de Diseño: Información de tipo, separación de responsabilidades y flujo de generación lineal son elementos clave de una representación efectiva
  4. Establecimiento de Conjunto de Pruebas: ScratchTest proporciona un conjunto de pruebas para evaluación de generación de código graficado

Limitaciones

  1. Limitación de Precisión: Incluso con la mejor representación, no se alcanza precisión del 100%
  2. Dependencia del Modelo: El desempeño depende altamente de capacidades específicas de LLM
  3. Limitación de Escala: Actualmente validado solo en el dominio relativamente simple de Scratch
  4. Método de Evaluación: Depende de evaluación manual, careciendo de estándares de evaluación automatizados

Direcciones Futuras

  1. Optimización de Representación: Explorar métodos de representación más óptimos que JSON
  2. Modelos Especializados: Desarrollar modelos de generación especializados para el espacio de grafos de código
  3. Marco Multiagente: Combinar métodos multironda con planificación y corrección de errores
  4. Validación a Gran Escala: Validar en entornos de programación graficada más complejos

Evaluación Profunda

Fortalezas

  1. Novedad del Problema: Primer estudio sistemático de generación de código abstracto graficado
  2. Simplicidad del Método: El método de representación JSON propuesto es simple y efectivo, fácil de implementar y extender
  3. Rigor Experimental: Múltiples ejecuciones y pruebas estadísticas aseguran confiabilidad de resultados
  4. Valor Práctico: Proporciona base para desarrollo asistido por IA de lenguajes de programación visual

Deficiencias

  1. Limitaciones de Evaluación: El método de evaluación manual no es suficientemente objetivo, difícil de aplicar a gran escala
  2. Escala del Conjunto de Pruebas: 20 casos de prueba son relativamente pocos, posiblemente insuficientes para cobertura completa
  3. Cobertura de Modelos: Resultados principalmente basados en un modelo, con desempeño pobre en otros modelos
  4. Análisis Teórico: Carece de explicación teórica profunda de por qué ciertas representaciones son más efectivas

Impacto

  1. Contribución Pionera: Establece línea base de investigación para generación de código graficado
  2. Aplicación Práctica: Puede aplicarse directamente a herramientas de programación visual como Scratch
  3. Escalabilidad: El método es extensible a otros entornos de programación graficada
  4. Significado Inspirador: Enfatiza la importancia del aprendizaje de representación en generación de código

Escenarios Aplicables

  1. Campo Educativo: Asistencia en generación de código para herramientas educativas como Scratch
  2. Prototipado Rápido: Automatización de sistemas de planos en desarrollo de juegos
  3. Automatización de Flujos de Trabajo: Configuración inteligente de herramientas como n8n
  4. Adaptación de Nuevas Bibliotecas: Generación de código para marcos nuevos con datos de entrenamiento insuficientes

Referencias

El artículo cita 54 referencias relacionadas, cubriendo múltiples campos incluyendo generación de código LLM, redes neuronales de grafos y lenguajes de programación visual, proporcionando una base teórica sólida para la investigación.


Evaluación General: Este es un trabajo pionero que aborda sistemáticamente por primera vez el problema de generación de código abstracto graficado. Aunque hay espacio para mejora en métodos de evaluación y análisis teórico, el método de representación propuesto es simple y efectivo, estableciendo una base importante para esta nueva dirección de investigación. Este trabajo tiene un fuerte valor práctico y significado inspirador, con expectativa de impulsar desarrollo adicional en campos relacionados.