Il tuo setup di programmazione AI è uno strumento complicato. Il tuo codebase è complesso.
I nuovi strumenti di programmazione AI promettono di rendere gli agenti più affidabili. Si vedono framework per skill, superpoteri e sviluppo guidato dalle specifiche (spec-driven development). Questi strumenti funzionano. Aiutano gli agenti a seguire un processo invece di tirare a indovinare.
Ma c'è una trappola. Si pensa che un setup migliore per un singolo compito crei un sistema coerente. Non è così.
Per capire il perché, usa il framework Cynefin. Esso separa i problemi in due tipi: Complicati e Complessi.
Problemi Complicati
Questi hanno una risposta conoscibile. Si utilizzano analisi e competenza per trovarla. Gli esempi includono il refactoring di un modulo o la scrittura di una funzione di validazione. Una volta trovata la risposta, è possibile ripeterla. La maggior parte degli strumenti di programmazione AI opera in questo ambito. Si concentrano sull'unità di lavoro. Rendono i compiti ripetibili e verificabili.
Problemi Complessi
Questi non hanno una risposta prevedibile. Il sistema è una rete di parti. I risultati appaiono solo dopo l'azione. Quaranta modifiche unite (merged) romperanno l'architettura tra sei mesi? L'Agente A contraddirà l'Agente B? Non è possibile trovare queste risposte guardando un singolo file. Emergono dal modo in cui le parti interagiscono.
Il disallineamento avviene quando ci si aspetta che strumenti per problemi Complicati risolvano problemi Complessi.
Uno strumento potrebbe far scrivere all'agente una funzione perfetta. Ma se un compito usa userId e un altro usa user_id, il sistema si rompe. Entrambi i compiti erano "corretti" in isolamento. Il fallimento è emergente. Risiede nell'interazione, non nell'unità.
Nemmeno le finestre di contesto massicce possono risolvere questo problema. Una finestra più ampia aiuta a vedere di più, ma vedere non è la stessa cosa che dedurre. È possibile leggere un intero codebase e non sapere ancora se andrà in deadlock sotto carico di produzione. Questa è una proprietà di runtime.
Come gestire entrambi:
- Per lo strato Complicato: Usa skill, specifiche e TDD. Questi rendono rigoroso l'output individuale dell'agente.
- Per lo strato Complesso: Usa il metodo probe-sense-respond (sonda-percepisci-rispondi). Non puoi prevedere cosa si romperà. Devi fare merge, distribuire (deploy) e osservare. Usa test di integrazione e osservabilità per percepire cosa accade quando i pezzi si combinano.
Non lasciarti ingannare dalla promessa che una specifica migliore renda il tuo sistema stabile. Le specifiche rendono l'unità affidabile. Non rendono il sistema coerente.
Adatta il tuo metodo al dominio. Usa gli strumenti per perfezionare l'unità. Usa la sperimentazione per comprendere il sistema.
Optional learning community: https://t.me/GyaanSetuAi
