$$\rightleftharpoonup{xx}$$
$$\longleftharp{xx}$$,
$$\longrightharp{xx}$$,
Il processo di generazione del codice del framework MAS4SysML è riassunto nel File Supplementare 1. Va notato che questo studio non mira a ottenere la generazione one-shot di un modello di sistema completo a partire da un linguaggio naturale con una rigorosa coerenza incrociativa, inclusi requisiti, struttura, parametri e comportamento. Invece, il protocollo si concentra sulla generazione di diversi tipi rappresentativi di codice view SysML v2.
Fase I: Analisi del compito
Il flusso di lavoro inizia con l'analisi delle attività. Il sistema fornisce l'intento di modellazione in linguaggio naturale all'Agente di Generazione della Struttura del Compito, che produce un set di schede di lavoro. Per garantire che le generazioni successive siano eseguibili e riproducibili, ogni scheda di compito deve includere, al minimo, (i) un identificatore del compito, (ii) relazioni di dipendenza e (iii) informazioni di modellazione chiave per la validazione, come l'obiettivo di modellazione, i vincoli/condizioni al contorno, gli slot dei parametri, i valori di istanziazione e gli output attesi. Questa fase produce task_card_set, che funge da base unificata per la successiva generazione del codice dei modelli.
Fase II: Generazione iterativa del codice
Nella generazione iterativa, il sistema inizializza il contesto del codice prev_code a uno stato vuoto e genera codice per ogni scheda di compito in modo sequenziale secondo un ordine determinato dai campi di dipendenza. Per ogni scheda di attività, l'Agente di Generazione del Codice prende la scheda di compito corrente e il codice contestuale come input per produrre candidate_code e poi invoca immediatamente il Modulo di Validazione della Sintassi per il controllo. Il modulo valida il codice utilizzando l'ambiente ufficiale di validazione SysML v2 e restituisce i risultati diagnostici. Se la validazione ha successo, il candidate_code viene utilizzato per aggiornare prev_code e supporta la generazione successiva. Se la validazione fallisce, l'Agente di Riparazione del Codice viene attivato ed esegue modifiche minime e mirate guidate dalla diagnostica restituita, dopo di che il codice riparato viene nuovamente inviato per la rivalidazione. Questo ciclo di rivalidazione della riparazione è delimitato dal budget massimo di riparazione Kmax. Se la validazione ha successo entro il budget, la versione in uscita si aggiorna prev_code; altrimenti, dopo Ktentativi max , il sistema registra il guasto e prosegue con la successiva generazione della scheda di lavoro utilizzando l'ultima versione riparata come prev_code per evitare di bloccare il flusso di lavoro mantenendo la continuità contestuale.
Fase III: Validazione semantica
Dopo che il codice è stato generato per tutte le schede di attività, il flusso di lavoro procede alla validazione semantica. L'Agente di Validazione Semantica valuta la coerenza tra il codice finale e l'intento di modellazione utilizzando i campi chiave in task_card_set come riferimenti e produce i risultati della validazione semantica. Se la validazione ha successo, prev_code viene accettato come codice modello finale SysML v2. Altrimenti, il sistema genera un Rapporto di Deviazione Semantica che identifica i campi della scheda di lavoro non soddisfatti e l'ambito di revisione richiesto. L'Agente di Riparazione del Codice poi revisiona il codice di conseguenza e produce il codice del modello rivisto come risultato finale.
Architettura e metodologia del modello
Architettura del modello
Il framework MAS4SysML, illustrato nella Figura 1, comprende quattro agenti collaborativi: l'agente di generazione della struttura del compito, l'agente di generazione del codice, l'agente di riparazione del codice e l'agente di validazione semantica. I modelli corrispondenti di prompt sono presentati nella Figura 2.
L'agente di generazione della struttura del compito esegue un'analisi semantica dell'intento di modellazione dell'input e genera schede di lavoro eseguibili e strutturate. Applica innanzitutto un meccanismo di decomposizione gerarchica dei compiti (vedi meccanismo di decomposizione gerarchica dei compiti) per scomporre l'obiettivo complessivo della modellazione in nodi di compito con confini semantici ben definiti, e poi costruisce una scheda di compito strutturata per ogni nodo. Successivamente, le schede di compito vengono ordinate secondo i campi di dipendenza di modellazione per garantire che la sequenza di esecuzione sia allineata con la struttura del codice finale, gettando così le basi per la generazione di codice bottom-up guidata dall'obiettivo globale di modellazione.
L'agente di generazione del codice genera progressivamente codice modello conforme a SysML v2 in base alle dipendenze di modellazione. Basandosi sugli artefatti di codice prodotti dai task genitori, l'agente esegue le corrispondenti operazioni di generazione del codice basate sui requisiti specificati in ogni scheda di attività, consentendo così un processo di costruzione a tappe — dai componenti locali fino al modello completo.
L'agente di riparazione del codice corregge gli errori nel codice generato in base ai risultati del modulo di validazione della sintassi (vedi modulo di validazione della sintassi) e ai risultati della validazione semantica. Per la riparazione sintattica, sfrutta il tipo di errore, la posizione e le informazioni contestuali restituite dal validatore di sintassi per sintetizzare strategie di riparazione mirate e generare codice corretto. Per la riparazione semantica, essa aggiusta le relazioni strutturali e logiche in base ai risultati della validazione semantica, garantendo coerenza semantica e completezza strutturale nel modello finale.
L'agente di validazione semantica valuta la coerenza semantica tra il codice completamente generato e le schede di compito utilizzando un meccanismo dedicato di validazione semantica (vedi meccanismo di validazione semantica). Attraverso la valutazione quantitativa, si garantisce che il codice generato rifletta accuratamente l'intento originale di modellazione, ottenendo così un allineamento preciso tra il codice del modello e i requisiti specificati.
Meccanismo gerarchico di decomposizione dei compiti
Come linguaggio di modellazione formale per sistemi complessi, SysML v2 presenta una sintassi strettamente accoppiata, strutture gerarchiche profondamente annidate e vincoli semantici a livelli trasversali. Ad esempio, un blocco di struttura di sistema può contenere più sottoparti, attributi e porte esprimendo contemporaneamente requisiti di prestazioni o comportamentali attraverso vincoli cross-layer. Queste strutture e vincoli creano dipendenze strutturali dall'alto verso il basso e relazioni di retroazione semantica dal basso verso l'alto. Con un approccio piatto e a generazione a singolo, mappare accuratamente tali dipendenze gerarchiche diventa una sfida, spesso portando a relazioni mancanti, incongruenze semantiche o alla perdita di informazioni sui vincoli.
Per affrontare questa sfida, sviluppiamo un metodo di parsing dell'intento di modellazione basato su alberi di attività che decompone gerarchicamente i requisiti di modellazione in linguaggio naturale. Come illustrato nella Figura 3, gli obiettivi di modellazione complessi sono scomposti in nodi di compito strutturati e tracciabili, permettendo al sistema di interpretare la semantica della modellazione in modo top-down e di identificare relazioni di dipendenze. In particolare, quando l'agente di generazione della struttura dei compiti riceve l'input dell'utente, prima sfrutta le capacità di parsing semantico degli LLM per identificare gli obiettivi principali della modellazione, le entità chiave e le loro dipendenze. Successivamente decompone ricorsivamente l'obiettivo di livello superiore in sottocompiti semanticamente indipendenti e li affina ulteriormente in compiti atomici che possono essere direttamente mappati alle operazioni di modellazione SysML v2, formando infine un albero completo della struttura dei compiti. Dopo la costruzione dell'albero delle attività, l'agente genera una scheda task strutturata per ogni nodo basata su un template predefinito. Il formato della scheda di compito è definito come segue:
TC = {id,O,N,K,P,V,C,D} (1)
Dove id è l'identificatore unico del nodo del compito, O come obiettivo del compito, N come descrizione in linguaggio naturale del compito, K indica gli elementi semantici principali di SysML v2 che possono essere coinvolti nel compito, includendo principalmente def/requisito, parte def/parte, port def/port, difesa elemento, attributo def/attributo e stato/transizione. Le relazioni tra questi elementi sono principalmente espresse tramite connect (connessioni strutturali), elementi di input/output sulle porte (flussi di informazioni/materiali) e condizioni di trigger/guard delle transizioni della macchina a stati (ad esempio, comandi, stato di salute e vincoli di soglia), C come regole semantiche o condizioni al contorno, P come slot parametrizzabili all'interno del compito come nomi di attributi, tipi di dati o tipi compositi, V come valori istanziati per ogni slot e D come dipendenze di modellazione tra compiti dove depend_on specifica gli output richiesti da altri compiti prima di generare il codice del compito corrente, fornisce indica gli output prodotti dopo il completamento del compito e consuma rappresenta gli input esterni richiesti dal compito.
Modulo di validazione della sintassi
Un modulo di validazione della sintassi è costruito sulla base dell'implementazione pilota SysML v2. Invocando le interfacce di parser e validatore, il modulo analizza e verifica la correttezza sintattica del codice del modello SysML v2 generato. I criteri di validazione del modulo derivano principalmente dalla specifica del linguaggio SysML v2, così come dalle regole grammaticali, dalle regole di risoluzione dell'ambito e dai meccanismi correlati di controllo dei vincoli implementati nello strumento Pilot. In particolare, la validazione esamina se le dichiarazioni degli elementi sono ben formate, se le strutture a blocchi sono complete, se le annotazioni di tipo sono valide, se nomi e riferimenti possono essere risolti con successo e se i costrutti di modellazione come porte, connessioni, stati e transizioni soddisfano i requisiti del linguaggio.
Dopo che l'agente di generazione del codice produce il frammento di codice per il compito corrente, l'output viene inoltrato al modulo di validazione della sintassi, dove lo script di validazione analizza il codice e restituisce i risultati sotto forma di informazioni diagnostiche strutturate. I risultati della validazione sono riportati come segue:
e1 = (tipoi, posi, msgi) (2)
Dove ei indica l'elenco dei problemi rilevati per il compito di modellazione corrente, ogni voce contiene il tipo di erroretipo i, la posizione dell'errore pos i e il messaggio diagnosticoi .
Ad esempio, se il codice generato contiene un errore di sintassi come "un attributo non è tipizzato da una definizione di attributo", il modulo di validazione restituisce il seguente messaggio diagnostico:
'tipo' : 'errore'
'messaggio' : 'ERRORE: Un attributo deve essere tipizzato in base alla definizione di attributo.' (3)
'posizione' : 'riga 7 colonna: 3'
Quando il risultato della validazione ei ≠ 0, le informazioni di errore raccolte ei vengono inoltrate all'agente di riparazione del codice per ulteriori correzioni. Pertanto, il processo di riparazione del codice non è una modifica senza vincoli, ma una revisione mirata guidata dalle informazioni diagnostiche esplicite restituite dal parser e dal validatore.
Meccanismo di validazione semantica
Il meccanismo di validazione semantica utilizza campi chiave di scheda di lavoro che hanno corrispondenze esplicite e tracciabili al codice del modello come ancoraggi semantici. Valuta la coerenza semantica a livello di modello, fornendo così criteri espliciti e applicabili per la successiva riparazione del modello. In particolare, per ogni scheda di lavoro TCi, i seguenti campi sono utilizzati come riferimenti semantici chiave: (i) l'obiettivo di modellazione Oi, (ii) vincoli semantici e condizioni al contorno Ci, (iii) valori istanziati degli slot parametrici Vi, e (iv) output attesi dopo il completamento del compito Di['provider']. Questi campi impongono vincoli semantici complementari al modello generato da molteplici prospettive: realizzazione dell'intento di modellazione, soddisfacimento dei vincoli, coerenza dell'istanziazione dei parametri e completezza degli output del modello—permettendo una decisione di principio sul fatto che il codice del modello soddisfi i requisiti di modellazione senza richiedere assunzioni aggiuntive.
Basandoci su questi campi chiave, definiamo una funzione decisionale di coerenza semantica multi-campo:
(4)
dove I(·) indica una funzione indicatrice uguale a 1 se tutte le sotto-funzioni di decisione tra parentesi sono valide, e 0 altrimenti. Questa decisione binaria distingue esplicitamente tra gli stati di soddisfazione dei requisiti di modellazione e quelli che richiedono ulteriori riparazioni, fornendo una condizione di trigger deterministica per il successivo processo di riparazione semantica. La decisione complessiva è determinata congiuntamente dalle seguenti quattro sotto-funzioni decisionali:
(1) Modellazione della coerenza degli obiettivi:
Φ0 (TCi,c f) = I(consist(c f,0 i)) (5)
dove Consist(cf,0 i) indica se il codice modello cf è semanticamente coerente con l'obiettivo di modellazione0 i specificato nella scheda di lavoro.
(2) Soddisfazione dei vincoli semantici:
Φc (TCi,c f) = I(Soddisfy(c f,C i)) (6)
dove Satisfy(c f,C i) indica se il codice modello cf soddisfa i vincoli semantici e le condizioni al contorno Ci specificate nella scheda di lavoro.
(3) Coerenza dei parametri:
Φc (TCi,c f) = I(Instant(c f,V i)) (7)
dove Instant(c f,V i) indica se i valori dei parametri istanziati Vi nella scheda di lavoro sono riflessi in modo coerente nel codice del modello.
(4) Consistenza dell'uscita:
(8)
dove Artefacts(cj) indica se gli output attesi dalla scheda di lavoro sono presenti nel codice finale del modello, servendo come misura della completezza del risultato generato.
Questi giudizi di coerenza sono implementati dall'Agente di Validazione Semantica sfruttando la capacità di comprensione semantica dell'LLM; Il processo di ragionamento interno dell'agente non altera la definizione formale o l'uso della funzione di coerenza.
Attraverso questo controllo della consistenza semantica multi-campo, il modello generato può essere validato campo per campo per garantire che ogni obiettivo di modellazione, condizione di vincolo, configurazione dei parametri e output atteso venga adeguatamente soddisfatto. Questo processo non solo fornisce un innesco esplicito per la successiva riparazione semantica, ma fornisce anche prove semantiche tracciabili lungo tutta la pipeline di generazione, migliorando così l'affidabilità e la coerenza del modello generato.
Dati sperimentali e valutazione
Dati sperimentali
Il codice del modello SysML v2 non è un normale codice software; i suoi reperti generati mostrano caratteristiche distintive della modellazione formale. Le diverse visioni coinvolgono tipicamente categorie distinte di elementi fondamentali di modellazione, come requisiti, parti, porte, attributi, stati e transizioni, che differiscono sostanzialmente per stili di dichiarazione, forme organizzative e strutture compositive. Inoltre, il codice del modello deve soddisfare molteplici vincoli, tra cui il riferimento dei tipi, la nidificazione gerarchica, i vincoli di connessione e il riutilizzo semantico tra gli elementi.
Per valutare in modo completo le prestazioni del metodo proposto sotto diverse complessità di modellazione, viene costruito un dataset di codice che copre cinque tipi rappresentativi di viste del modello—requisiti, casi d'uso, struttura, parametrici e macchine a stati. Queste viste del modello corrispondono rispettivamente alla specifica dei requisiti, all'interazione funzionale, alla composizione strutturale, alla rappresentazione dei vincoli parametrici e alla descrizione della logica comportamentale nella modellazione dei sistemi. Valutare il framework separatamente su diversi tipi di viste modello consente un'analisi più dettagliata della sua applicabilità sotto diverse caratteristiche della struttura del codice e condizioni di vincolo di modellazione.
Ogni tipo di vista modello contiene 15 istanze di modello create manualmente, risultando in un dataset di N = 75 modelli SysML v2. Il dataset copre molteplici ambiti ingegneristici, tra cui aerospaziale, automotive, medico e sistemi smart home, e tutti i modelli hanno superato con successo l'ambiente ufficiale di validazione SysML v2, garantendo una rigorosa conformità sintattica.
Successivamente, abbiamo generato una corrispondente descrizione dell'intento di modellazione in linguaggio naturale per ciascun modello. Per migliorare l'efficienza costruttiva, abbiamo utilizzato il modello di prompt mostrato nel File Supplementare 2 e abbiamo impiegato GPT-4o per produrre le descrizioni iniziali. GPT-4o è stato selezionato per la sua solida comprensione semantica e le capacità di estrazione di informazioni, che gli permettono di catturare con precisione gli elementi principali del modello senza allucinazioni e di generare descrizioni di intento di modellazione simili a quelleumane 9. Per garantire accuratezza ed eliminare ambiguità, tutte le descrizioni generate sono state revisionate manualmente e perfezionate da ricercatori con una formazione in ingegneria dei sistemi. Esempi rappresentativi per diversi tipi di modelli sono mostrati nella Tabella 1.
Metriche di valutazione
Utilizziamo le seguenti tre metriche chiave per valutare la qualità del codice del modello SysML v2 generato:
Tasso medio di errore sintattico (SER)
Questa metrica quantifica la proporzione di errori sintattici rilevati quando il codice del modello generato viene validato rispetto alle regole sintattiche ufficiali di SysML v2. Viene calcolato come:
(9)
dove Ei indica il numero di errori sintattici identificati nel i-esimo modello generato. Questa metrica riflette fino a che punto il codice del modello generato aderisce alla specifica formale della sintassi SysML v2.
Punteggio di coerenza semantica (SCS)
Questa metrica valuta quanto accuratamente e in modo completo il codice del modello generato cattura l'intento semantico espresso nelle specifiche di modellazione in linguaggio naturale. In particolare, estraiamo unità semantiche dall'intento di modellazione — come entità di sistema, componenti partecipanti, funzioni core o scenari comportamentali, e condizioni chiave o vincoli — e le confrontiamo con le unità semantiche presenti nel codice del modello generato. La consistenza semantica si calcola come:
(10)
dove U rappresenta l'insieme delle unità semantiche estratte dall'intento di modellazione, e
rappresenta l'insieme delle unità semantiche identificate nel codice generato.
indica il numero di unità correttamente catturate dal codice del modello generato. Un valore SCS più alto indica una copertura semantica e un allineamento più forti.
Valutazione della qualità umana
Le metriche automatizzate tradizionali come BLEU e CodeBLEU valutano principalmente la somiglianza a livello superficiale o l'eseguibilità del codice, ma non catturano se il modello comprenda davvero o esprima correttamente la semantica di modellazione prevista. Queste metriche sono limitate nella valutazione della coerenza semantica, della completezza degli elementi chiave e dell'allineamento con l'intento dimodellazione 10. Al contrario, la valutazione umana può identificare con maggiore precisione problemi come elementi semantici mancanti, incongruenze logiche, ridondanza strutturale o allucinazioni non supportate, fornendo così una valutazione piùaffidabile 11. Motivati da queste limitazioni, progettiamo un framework di valutazione umana per i modelli SysML v2 generati composto da tre criteri: (1) Correttezza: il modello generato deve riflettere accuratamente l'intento di modellazione, mantenere la coerenza strutturale e logica con gli obiettivi del compito e non contenere ambiguità semantica, elementi mancanti o estensioni errate. (2) Leggibilità: il codice del modello dovrebbe essere chiaro e facile da comprendere, con una denominazione coerente, una struttura coerente e una gerarchia ben organizzata che supporti l'ispezione e la successiva manutenzione. (3) Integrità: il modello dovrebbe mostrare una logica strutturale completa, riferimenti incrociati coerenti e nessun tipo indefinito o catena di dipendenza interrotta, garantendone l'usabilità per l'analisi e l'integrazione a valle. Abbiamo invitato ricercatori con esperienza nella modellazione SysML a valutare ogni modello generato su una scala a tre punti, dove 1 indica la qualità più bassa e 3 la più alta. Durante la valutazione, ai valutatori è stato permesso di confrontare il codice del modello generato con il modello di accuratezza sul terreno per garantire una valutazione più accurata e completa.
Linea di base
Abbiamo selezionato più basi di valutazione per i test comparativi rispetto al metodo proposto, tra cui:
CodeCoT12: Combina il ragionamento a catena di pensiero con un meccanismo di auto-verifica, permettendo al modello di ragionare esplicitamente durante la generazione e auto-correggere errori sintattici, migliorando così la qualità del codice e la coerenza semantica.
Auto-pianificazione 13: Introduce una pipeline di generazione di codice in due fasi in cui il modello pianifica prima i passaggi della soluzione e poi genera codice secondo il piano, migliorando efficacemente la coerenza logica e l'interpretabilità per compiti complessi.
Auto-modifica14: Adotta un paradigma iterativo di generazione e modifica che esegue il codice generato e corregge automaticamente gli errori in base al feedback di runtime, affinando continuamente l'output.
CodeChain 15: Utilizza la generazione modulare e la revisione iterativa scomponendo compiti complessi in moduli funzionali indipendenti e migliorando la solidità strutturale e la qualità complessiva attraverso molteplici round di ottimizzazione.
Auto-debugging16: Dota il modello di capacità autonome di debugging e spiegazione. Attraverso un processo a ciclo chiuso di generazione, esecuzione e debug, migliora sostanzialmente la correttezza in compiti di programmazione complessi senza intervento umano.
MapCoder17: Costruisce un framework collaborativo multi-fasi composto da quattro agenti—recupero, pianificazione, codifica e debogging—che simulano fedelmente il flusso di lavoro di programmazione umana e consentono la generazione a circuito chiuso dalla comprensione dei compiti alla verifica dei risultati.
Auto-Collaborazione18: Organizza il sistema come un team di programmazione virtuale con ruoli come analista, programmatore e tester, migliorando le prestazioni complessive nella generazione complessa di codice attraverso la collaborazione basata sui ruoli e il feedback iterativo.
Configurazione sperimentale
Per garantire equità e comparabilità tra gli esperimenti, abbiamo innanzitutto valutato diversi LLM mainstream utilizzando un approccio di generazione diretta del codice per stabilire la performance di base. Sulla base di questi risultati iniziali, il LLM con le migliori prestazioni è stato selezionato come modello unificato di backbone per tutti gli esperimenti successivi. Successivamente abbiamo confrontato il framework proposto per MAS4SysML con molteplici metodi rappresentativi di generazione di codice. Tutte le interazioni LLM sono state condotte utilizzando un'impostazione di temperatura fissa (T = 0,2) per minimizzare la casualità durante la generazione. Per ogni compito di modellazione, il numero massimo di iterazioni di riparazione in MAS4SysML è stato impostato su Kmax = 3. Tutti i metodi di base venivano eseguiti con la stessa configurazione sperimentale di MAS4SysML per garantire la coerenza dei risultati e l'equità sperimentale. Lo script Python del metodo MAS4SysML è fornito come Supplementary File 3.