Ricordi questo commento su Quora (che è diventato anche un meme)?
(Fonte: Quora)
La difficoltà era distintiva nell’era Stack Overflow del modello linguistico pre-major (LLM). Quale Frammenti di codice da adottare e adattare in modo efficace. Sebbene generare codice sia ormai diventato estremamente semplice, la sfida più grande risiede nel definire e integrare in modo affidabile codice di alta qualità e di livello aziendale negli ambienti di produzione.
Questo articolo esaminerà le insidie e le limitazioni pratiche osservate quando gli ingegneri utilizzano agenti di codifica moderni per il lavoro aziendale reale e affronterà questioni più complesse relative a integrazione, scalabilità, accessibilità, pratiche di sicurezza in evoluzione, privacy dei dati e manutenibilità in ambienti operativi live. Speriamo di bilanciare questa eccitazione e fornire uno sguardo più tecnico alle capacità degli agenti di codifica dell’intelligenza artificiale.
Comprensione limitata del dominio e limiti del servizio
I rappresentanti dell’IA si trovano ad affrontare notevoli difficoltà nel progettare sistemi scalabili a causa dell’abbondanza di opzioni e della mancanza critica di un contesto specifico per l’impresa. Per riassumere il problema, i codebase e i monorepos aziendali di grandi dimensioni sono spesso troppo grandi perché gli agenti possano apprenderli direttamente e le informazioni importanti possono spesso essere frammentate dalla documentazione interna e dalle competenze individuali.
Più specificamente, molti broker di codifica popolari devono affrontare limitazioni del servizio che ne ostacolano l’efficacia in ambienti su larga scala. Le funzionalità di indicizzazione potrebbero non funzionare o la loro qualità potrebbe diminuire nei repository che superano i 2.500 file o a causa di limiti di memoria. Inoltre, i file più grandi di 500 KB sono generalmente esclusi dall’indicizzazione/ricerca; ciò riguarda prodotti consolidati vecchi di decenni, con file di codice più grandi (sebbene questo sia meno comune nei progetti più recenti).
Per attività complesse che coinvolgono contesti di file estesi o refactoring, gli sviluppatori sono tenuti a fornire i file pertinenti e a definire chiaramente la procedura di refactoring e build/script circostanti per verificare l’implementazione senza aggiungere regressioni di funzionalità.
Mancanza di contesto e utilizzo dell’hardware
Gli agenti IA hanno dimostrato una grave mancanza di consapevolezza della macchina del sistema operativo, della riga di comando e delle configurazioni dell’ambiente (conda/venv). Questa carenza può portare a esperienze frustranti, ad esempio quando l’agente tenta di eseguire comandi Linux in PowerShell, il che può comportare ripetutamente errori di “comando non riconosciuto”. Inoltre, gli agenti, soprattutto su macchine più lente, spesso mostrano una “tolleranza di attesa” incoerente durante la lettura degli output dei comandi, segnalando prematuramente che i risultati non possono essere letti (e continuando a riprovare/saltare) prima che un altro comando sia terminato.
Non si tratta solo di questo trovare difetti caratteristiche; Piuttosto, il diavolo è in questi dettagli pratici. Queste lacune esperienziali emergono come veri e propri punti di attrito e richiedono un’attenzione umana costante per monitorare l’attività dell’agente in tempo reale. In caso contrario, l’agente potrebbe ignorare le informazioni iniziali sulla chiamata allo strumento e interrompersi prematuramente oppure procedere con una soluzione incompleta che richiede l’annullamento di alcune/tutte le modifiche, la riattivazione dei prompt e lo spreco di token. Non è garantito l’invio di una richiesta venerdì sera e la previsione che gli aggiornamenti del codice siano disponibili durante il pagamento lunedì mattina.
Le allucinazioni sono finite ripetuto azioni
Lavorare con agenti di codifica IA rappresenta una sfida di lunga data, spesso dovuta ad allucinazioni o informazioni errate o mancanti (come piccoli frammenti di codice) all’interno di un insieme più ampio di modifiche che dovrebbero essere risolte da uno sviluppatore con uno sforzo da trascurabile a basso. Ma ciò che diventa particolarmente problematico è quando si verificano comportamenti scorretti. ripetuto All’interno di un singolo thread, impone agli utenti di avviare un nuovo thread e ripristinare l’intero contesto oppure di intervenire manualmente per “sbloccare” l’agente.
Ad esempio, durante l’installazione del codice della funzione Python, un agente incaricato di applicare modifiche complesse alla preparazione della produzione può essere associato a un file (vedere sotto) contenenti caratteri speciali (parentesi, punti, asterischi). Questi caratteri sono molto comuni nell’informatica. versioni del software.
(Immagine creata manualmente con codice standard. Fonte: Microsoft Impara E Modificare il file host dell’applicazione (host.json) nel portale di Azure)
L’agente lo ha erroneamente contrassegnato come valore non sicuro o dannoso, interrompendo l’intero processo di rendering. Questa errata identificazione dell’attacco nemico è stata ripetuta da 4 a 5 volte nonostante vari tentativi di riavviare o mantenere la modifica. Questo formato di versione è in realtà il boilerplate trovato in un modello di codice trigger HTTP Python. L’unica soluzione efficace è stata quella di istruire l’agente a intraprendere le seguenti azioni: Negativo leggi il file e chiedigli invece di fornire solo la configurazione desiderata e assicurati che lo sviluppatore lo aggiungerà manualmente a questo file, confermalo e chiedi di continuare con le restanti modifiche al codice.
L’impossibilità di uscire da un ciclo di output intermedio che fallisce ripetutamente all’interno dello stesso thread evidenzia una limitazione pratica che fa sprecare molto tempo di sviluppo. In sostanza, gli sviluppatori ora tendono a dedicare tempo al debug/miglioramento del codice generato dall’intelligenza artificiale piuttosto che agli snippet di codice Stack Overflow o al proprio codice.
Mancanza di pratiche di codifica a livello aziendale
Migliori pratiche di sicurezza: Gli agenti di codifica spesso utilizzano metodi di autenticazione meno sicuri come l’autenticazione basata su chiave (segreti del client) piuttosto che soluzioni moderne basate sull’identità (come Entra ID o credenziali federate). Poiché la gestione e la rotazione delle chiavi sono attività complesse sempre più limitate negli ambienti aziendali, questa supervisione può introdurre vulnerabilità significative e aumentare i costi di manutenzione.
SDK legacy e reinventare la ruota: Gli agenti potrebbero non sfruttare in modo coerente i metodi SDK più recenti, creando invece applicazioni più dettagliate e più difficili da mantenere. Usando l’esempio della funzione di Azure, gli agenti restituiscono il codice usando l’SDK v1 preesistente per le operazioni di lettura/scrittura, anziché il codice SDK v2, molto più pulito e gestibile. Gli sviluppatori devono ricercare online le migliori pratiche più recenti per avere una mappa mentale delle dipendenze e dell’implementazione prevista che garantisca la sostenibilità a lungo termine e riduca i prossimi sforzi di migrazione tecnologica.
Riconoscimento intento limitato e codice ripetuto: Anche per compiti modulari di portata più piccola, come l’estensione di una definizione di funzione esistente (che sono spesso incoraggiati per ridurre al minimo le allucinazioni o le interruzioni del debug), gli agenti possono seguire le istruzioni. Veramente e produrre una logica quasi ripetitiva senza anticipare ciò che sta arrivando o accadrà. non articolato esigenze dello sviluppatore. Cioè, in queste attività modulari lo strumento potrebbe non identificare e rifattorizzare automaticamente la logica simile in funzioni condivise o migliorare le definizioni di classe, il che può portare a un debito tecnologico e a una base di codice più difficile da gestire, soprattutto con codifica jitter o sviluppatori pigri.
In poche parole, questi video virali su YouTube che mostrano lo sviluppo rapido di app da zero a uno con un comando di una sola frase non riescono a catturare le sottili sfide del software a livello di produzione in cui sicurezza, scalabilità, manutenibilità e architetture di progettazione a prova di futuro sono cruciali.
Allineamento del bias di conferma
Il bias di conferma è una delle principali preoccupazioni; perché i LLM spesso approvano le premesse dell’utente anche quando l’utente esprime dubbi e chiede all’agente di correggere la sua comprensione o suggerire idee alternative. Questa tendenza dei modelli ad allinearsi alla percezione dell’utente di ciò che vuole sentire porta a una qualità complessiva dell’output inferiore, soprattutto per attività più oggettive/tecniche come la codifica.
Là vasta letteratura Un modello ha detto: “Hai assolutamente ragione!” Se si inizia emettendo un’affermazione come , il resto dei token di output tenderà a giustificare tale affermazione.
Bisogno costante di fare da babysitter
Nonostante il fascino della codifica autonoma, la realtà degli agenti di intelligenza artificiale nello sviluppo aziendale spesso richiede una vigilanza costante da parte degli esseri umani. Esempi come un agente che tenta di eseguire comandi Linux in PowerShell, flag di sicurezza falsi positivi o imprecisioni derivanti da motivi specifici del dominio evidenziano lacune critiche; gli sviluppatori non possono semplicemente andarsene. Devono invece monitorare costantemente il loro processo di ragionamento e comprendere le inclusioni di codice multi-file per evitare di perdere tempo con risposte scadenti.
La peggiore esperienza con gli intermediari è quando uno sviluppatore accetta aggiornamenti di codice multi-file pieni di bug, quindi perde tempo con il debug a causa dell’aspetto apparentemente “carino” del codice. Ciò può anche portare a: fallacia dei costi irrecuperabili Spero che il codice funzioni dopo poche correzioni, soprattutto quando gli aggiornamenti si trovano in più file in una base di codice complessa/non convenzionale con collegamenti a più servizi indipendenti.
È come collaborare con un genio di 10 anni che ha memorizzato grandi quantità di informazioni e ha persino coperto ogni piccola parte dell’intento dell’utente, ma dà priorità alla dimostrazione di tale conoscenza rispetto alla risoluzione del problema reale e manca della lungimiranza necessaria per il successo nei casi d’uso del mondo reale.
Questo "babysitter" In combinazione con la frustrante ripetizione delle allucinazioni, il tempo dedicato al debug del codice generato dall’intelligenza artificiale può sminuire il risparmio di tempo previsto dall’utilizzo dello strumento. Inutile dire che gli sviluppatori delle grandi aziende devono essere molto consapevoli e strategici nell’affrontare i moderni strumenti intermediari e i casi d’uso.
Soluzione
Non c’è dubbio che gli agenti di codifica AI siano rivoluzionari, accelerando la prototipazione, automatizzando la codifica standard e trasformando il modo in cui gli sviluppatori creano. La sfida non è più produrre codice, ma sapere cosa spedire, come proteggerlo e dove scalare. I team intelligenti imparano a filtrare l’hype, a utilizzare gli intermediari in modo strategico e a raddoppiare le decisioni ingegneristiche.
Come amministratore delegato di GitHub Thomas Dohmke ha recentemente osservato: Gli sviluppatori più avanzati sono “passati dalla scrittura di codice all’architettura e alla verifica del lavoro delle applicazioni eseguito dagli agenti AI”. Nell’era dell’agenzia, il successo appartiene a coloro che sanno progettare sistemi permanenti, non a coloro che possono manipolare il codice.
Rahul Raja è un ingegnere informatico dello staff di LinkedIn.
Advitya Gemawat è un ingegnere di machine learning (ML) presso Microsoft.
Nota dell’editore: le opinioni espresse in questo articolo sono opinioni personali degli autori e non riflettono le opinioni dei loro datori di lavoro.
