Procedure strutturate
Panoramica
Una procedura strutturata è una procedura che esegue una sequenza fissa di passaggi. Una procedura in formato libero è una guida in linguaggio naturale che l’agente interpreta e adatta alla situazione. Una procedura strutturata è un elenco ordinato di passaggi tipizzati che l’agente esegue in ordine ogni volta che si applica la procedura.
Usa una procedura strutturata quando passaggi specifici devono avvenire allo stesso modo in ogni chiamata: verificare l’identità di chi chiama, inoltrare un ticket a un livello superiore o accettare un pagamento. La crei come un breve elenco di passaggi in linguaggio semplice.
Come ogni procedura, una procedura strutturata ha un trigger che descrive quando si applica. Quando una conversazione corrisponde al trigger, l’agente esegue in ordine i passaggi della procedura, quindi torna al resto della conversazione.

Quando usare una procedura strutturata
Usa una procedura strutturata quando passaggi specifici devono essere eseguiti sempre allo stesso modo, ma vuoi comunque creare rapidamente passaggi in linguaggio semplice. Le procedure strutturate sono più facili da scrivere di un workflow, ma meno espressive. Per scoprire come si confrontano con le procedure in formato libero, i workflow e il prompt di sistema, consulta Quando usare le procedure.
Anatomia di una procedura strutturata
Una procedura strutturata è composta da tre parti: un nome, un trigger e un elenco ordinato di passaggi.
Nome
Una breve etichetta che identifica la procedura nella dashboard. Il nome non viene mai inviato all’LLM, quindi non influisce sul comportamento dell’agente.
Trigger
Una descrizione in linguaggio naturale di quando l’agente deve eseguire questa procedura, ad esempio Quando l’utente chiede il rimborso di un ordine. L’agente confronta l’intento dell’utente con il trigger di ogni procedura ed esegue quella corrispondente, quindi i trigger devono essere concreti e distinti. L’agente vede solo il testo del trigger, mai il nome o l’ID della procedura. Un trigger funziona allo stesso modo di qualsiasi procedura; consulta Scrivere i trigger.
Lascia vuoto il trigger per rendere la procedura una sotto-procedura che viene eseguita solo quando un’altra procedura la chiama.
Passaggi
Il corpo della procedura è un elenco ordinato di passaggi tipizzati. Esistono vari tipi di passaggio, che puoi combinare per descrivere l’attività.

Non tutti i passaggi possono comparire ovunque. All’interno di un ramo Se, puoi usare qualsiasi passaggio tranne un altro Se o Riprova. Nel gestore degli errori di un passaggio Strumento, puoi usare qualsiasi passaggio tranne Se o un altro Strumento.
Riferimento dei passaggi API
Il content di una procedura strutturata è un documento con codifica JSON che contiene un array steps. Ogni passaggio è un oggetto identificato dal relativo type. Il trigger è un campo separato di livello superiore nella procedura, non fa parte di content. I payload di API e SDK usano type: "deterministic" per la procedura stessa.
Chiedi
Un passaggio Chiedi indica all’agente di richiedere informazioni e attendere finché l’utente non fornisce una risposta appropriata.
- Tipo API:
ask instruction: Stringa obbligatoria e non vuota.
Comunica
Un passaggio Comunica indica all’agente di generare un singolo messaggio con parole proprie. Non attende una risposta dell’utente prima di continuare.
- Tipo API:
tell instruction: Stringa obbligatoria e non vuota.
Pronuncia
Un passaggio Pronuncia riproduce il testo fornito esattamente come è scritto, quindi continua. Fornisci message_translations per assegnare all’agente un messaggio esatto per ogni ulteriore lingua supportata, con chiave corrispondente al codice della lingua.
- Tipo API:
say message: Stringa obbligatoria e non vuota.message_translations: Oggetto facoltativo che associa un codice lingua a{ "value": "..." }.
Se, altrimenti se e altrimenti
Un passaggio Se contiene uno o più rami condizionali ordinati. Viene eseguito il primo ramo corrispondente. L’array fallback facoltativo è il ramo Altrimenti.
- Tipo API:
branch branches: Elenco obbligatorio e non vuoto di rami condizionali.fallback: Elenco facoltativo di passaggi Altrimenti.- Ogni ramo richiede un
conditione un elencostepsnon vuoto.
Il comportamento è simile a if/else-if/else:
- Le condizioni vengono valutate in ordine.
- Viene eseguito il primo ramo corrispondente.
- Se nessuna condizione corrisponde, viene eseguito
fallback. - Dopo il completamento di un ramo, la procedura si riunisce alla sequenza principale.
L’esempio precedente usa una condizione testuale, che il modello valuta in linguaggio naturale. Le condizioni possono anche essere espressioni basate su variabili dinamiche:
Una condizione di espressione verifica le variabili dinamiche, che vengono compilate dai risultati degli strumenti o impostate all’avvio della conversazione. Non può leggere la risposta più recente dell’utente. Per creare un ramo in base a ciò che ha detto l’utente, usa una condizione testuale.
Tutti i rami di uno stesso passaggio Se devono usare lo stesso tipo di condizione: llm oppure expression.
Strumento
Un passaggio Strumento chiama uno strumento specifico.
- Tipo API:
tool_call tool_id: ID dello strumento obbligatorio e non vuoto. Lo strumento deve essere associato all’agente.tool_name: Nome dello strumento obbligatorio, corrispondente allo strumento.instruction: Istruzione facoltativa che descrive come chiamare lo strumento.schema_overrides: Valori fissi facoltativi per i parametri dello strumento.on_failure: Gestore degli errori facoltativo.
Valori fissi dei parametri
Usa schema_overrides quando un parametro deve avere sempre un valore specifico. Il modello non vede né sceglie un parametro sostituito. Le chiavi sono path dei parametri nello schema dello strumento; ogni valore indica una sorgente:
Gestione degli errori
Senza on_failure, una chiamata allo strumento non riuscita termina la conversazione. Aggiungi invece on_failure per eseguire passaggi di ripristino.
fallback: Elenco obbligatorio e non vuoto di passaggi eseguiti quando lo strumento non riesce.branches: Riservato alla gestione condizionale degli errori. Lascialo vuoto.
Un gestore degli errori può contenere passaggi Chiedi, Comunica, Pronuncia, Sotto-procedura, Strumento di sistema e Riprova. Non può contenere passaggi Strumento o Se. Dopo l’esecuzione del gestore, la procedura continua con il passaggio successivo al passaggio Strumento.
Riprova
Un passaggio Riprova riesegue il gestore degli errori che lo contiene, inclusa la chiamata allo strumento. Ogni tentativo chiama di nuovo lo strumento e, se fallisce di nuovo, riesegue ogni passaggio del gestore. Quando i tentativi sono esauriti, la conversazione termina.
- Tipo API:
retry max_retries: Intero facoltativo da 1 a 3. Il valore predefinito è 1.- Il valore conta i tentativi successivi alla chiamata allo strumento originale.
- Riprova è valido solo all’interno di
on_failure. - Riprova deve essere il passaggio finale del relativo gestore degli errori perché i passaggi successivi sarebbero irraggiungibili.
Sotto-procedura
Un passaggio Sotto-procedura esegue un’altra procedura strutturata. Quando i passaggi di quella procedura sono completati, l’esecuzione torna al passaggio successivo al passaggio Sotto-procedura.
- Tipo API:
sub_procedure procedure_id: ID della procedura obbligatorio e non vuoto.- La destinazione deve esistere sullo stesso agente.
- La destinazione deve essere una procedura strutturata.
- Una procedura non può richiamare sé stessa.
Strumento di sistema
Un passaggio Strumento di sistema esegue un’azione integrata di sistema.
- Tipo API:
system_tool system_tool_name: Nome dello strumento di sistema obbligatorio.- Al momento è supportato solo
end_call. In futuro potrebbero essere aggiunti altri strumenti di sistema. - Poiché
end_callè terminale, deve essere il passaggio finale nella sequenza, nel ramo o nel gestore degli errori che lo contiene.
Regole di convalida
La pubblicazione dell’agente, oppure il salvataggio della bozza dell’agente, rifiuta una procedura strutturata che viola una di queste regole. L’errore indica il passaggio non valido tramite il relativo path.
- Non è possibile inserire due passaggi Se consecutivi.
- I passaggi Se non possono essere annidati.
- Un passaggio Se con condizioni di espressione non può seguire direttamente un passaggio Chiedi.
- Tutte le condizioni di uno stesso passaggio Se devono essere dello stesso tipo:
llmoexpression. - Riprova può comparire solo all’interno di
on_failuree deve essere l’ultimo passaggio al suo interno. end_calldeve essere l’ultimo passaggio dell’elenco in cui compare.- Il
fallbackdi un gestore degli errori deve contenere almeno un passaggio. - Una Sotto-procedura deve puntare a una procedura strutturata esistente sullo stesso agente e non a sé stessa.
tool_iddeve essere uno strumento dell’agente,tool_namedeve corrispondere eschema_overridesdeve corrispondere allo schema dello strumento.- L’elenco
steps, ogniinstructione ognimessagedevono essere non vuoti.
Per scoprire come ristrutturare una procedura che incontra una di queste regole, consulta le Best practice.
Esempio API completo
Questo esempio gestisce l’annullamento di un ordine in base allo stato della spedizione. Fissa un parametro dello strumento, gestisce una chiamata allo strumento non riuscita, richiama un’altra procedura strutturata e poi termina la chiamata.
Come viene eseguita una procedura strutturata
La trasformazione dei passaggi di una procedura strutturata nel formato eseguito dall’agente è chiamata compilazione. La piattaforma compila ogni procedura strutturata quando viene salvata la bozza dell’agente o pubblicato l’agente; gli autori non devono compilare nulla.
Quando la richiesta dell’utente corrisponde al trigger di una procedura, la piattaforma accede alla procedura ed esegue i relativi passaggi in ordine. All’interno della procedura strutturata, l’agente si concentra su ogni singolo passaggio. Quando raggiunge la fine, la piattaforma restituisce il controllo al resto della conversazione.
I collegamenti del workflow non possono connettersi a una procedura strutturata né partire da essa. Usa un passaggio Sotto-procedura per concatenare procedure strutturate. La piattaforma gestisce l’accesso da un trigger corrispondente e il completamento, inclusa la restituzione del controllo al nodo del workflow in cui è iniziata la procedura.
Le seguenti regole descrivono il comportamento dei passaggi in fase di runtime.
Solo Chiedi attende l'utente
Ogni passaggio diverso da Chiedi viene eseguito immediatamente e il controllo passa al passaggio successivo nello stesso
turno. Un passaggio Comunica o Pronuncia trasmette il proprio messaggio e continua. Non esiste alcun passaggio che metta in pausa la
conversazione oltre a Chiedi, né un passaggio che termini il turno corrente. Se ti serve l’input dell’utente,
usa un passaggio Chiedi. Se la conversazione deve terminare, usa lo strumento di sistema end_call.
Raggiungere la fine di una procedura non termina il turno
Quando l’ultimo passaggio è completato, la procedura termina e l’agente torna al resto della conversazione con il turno ancora aperto, quindi potrebbe dire altro. Quando una sotto-procedura viene completata, il controllo torna al passaggio successivo della procedura che l’ha chiamata.
I passaggi Strumento distinguono solo il successo dall'errore
Un passaggio Strumento non può creare rami in base a un codice di stato o al body della risposta. Se lo strumento riesce, la procedura continua. Se non riesce e il passaggio non ha un gestore degli errori, la conversazione termina. Se ne ha uno, vengono eseguiti i passaggi del gestore e la procedura continua al passaggio successivo. Un Riprova all’interno del gestore riesegue lo strumento e, se fallisce di nuovo, ogni passaggio nel gestore, finché lo strumento non riesce o i tentativi non sono esauriti. Se sono esauriti, la conversazione termina.
I passaggi Se proseguono quando non c'è alcuna corrispondenza
Le condizioni vengono valutate in ordine e viene eseguita la prima corrispondenza. Il ramo Altrimenti viene eseguito quando non c’è alcuna corrispondenza. Se non esiste Altrimenti e non c’è alcuna corrispondenza, la procedura continua con il passaggio successivo al Se. Un caso non gestito non è un errore.
I rami Se non mantengono lo stato
Le decisioni prese all’interno di un ramo Se non vengono ricordate dai passaggi successivi. Se qualcosa appreso in un ramo è necessario in seguito, salvalo esplicitamente con una chiamata allo strumento o una variabile dinamica.
I passaggi Chiedi, Comunica e Pronuncia non hanno strumenti
Solo i passaggi Strumento possono chiamare strumenti. Non è necessario dire a un passaggio Chiedi, Comunica o Pronuncia di non chiamare strumenti: non può farlo.
Gestire una procedura strutturata
Crea dalla dashboard
Gestisci tramite la CLI
Gestisci tramite l'API
Apri il tuo agente nella dashboard, quindi seleziona Procedure. Usa + per creare una procedura strutturata. Aggiungi un trigger, seleziona un tipo per ogni passaggio e pubblica le modifiche dell’agente.
La dashboard convalida le procedure strutturate durante la modifica. Se una procedura viola una regola di convalida, il pulsante Pubblica mostra uno stato di errore, la scheda Procedure mostra un badge di errore e l’anteprima non può essere avviata finché la procedura non viene corretta. Seleziona l’indicatore di errore per vedere quale procedura e passaggio sono interessati.


Best practice
Ogni tipo di passaggio applica già il proprio comportamento, quindi raramente devi esplicitarlo. Scrivi l’obiettivo di ogni passaggio e lascia che il tipo di passaggio faccia il resto. Le indicazioni seguenti coprono i casi che è importante gestire correttamente.
Per testare una procedura strutturata, segui Iterare su una procedura.
Scegliere i tipi di passaggio
Fai una domanda per ogni passaggio Ask
Un passaggio Ask attende una risposta. Se raggruppi più domande in un’unica istruzione, l’agente tende a saltarne alcune o a unirle. Usa un passaggio Ask per ogni informazione.
Usa Tell per le affermazioni e Ask per le domande
Un passaggio Tell trasmette il suo messaggio e prosegue senza attendere. Un Tell formulato come domanda non riceve mai una risposta. Se un passaggio richiede una risposta dall’utente, è un Ask.
Definisci una chiara condizione di uscita per un Ask quando la sola domanda non basta
Un passaggio Ask avanza quando riceve una risposta appropriata. Se non è evidente dalla domanda cosa costituisca una risposta, specificalo nell’istruzione, ad esempio _Chiedi l’ID dell’ordine; un ID valido è composto da otto cifre _.
Scegli Tell per la formulazione, Say per le parole esatte
Usa un passaggio Tell quando l’agente deve comporre autonomamente il messaggio e un passaggio Say quando la formulazione deve essere letterale o tradotta. Entrambi trasmettono esattamente un messaggio, quindi non è necessario indicare a un passaggio di inviare un singolo messaggio.
Non dire ai passaggi non Tool di evitare gli strumenti
I passaggi Ask, Tell e Say non possono chiamare strumenti. Scrivere non chiamare alcuno strumento al loro interno aggiunge rumore all’istruzione senza modificarne il comportamento.
Strutturare la procedura
Non inserire elementi superflui tra due passaggi If
Due passaggi If non possono essere posizionati uno dopo l’altro. Inserire un Tell o Say non correlato tra di essi per rispettare la regola fa dire all’agente qualcosa che non dovrebbe. Invece, integra la seconda decisione nel primo If come ulteriori rami Else if, oppure spostala in una sotto-procedura.
Inserisci le decisioni annidate in una sotto-procedura
I passaggi If non possono essere annidati. Quando una decisione dipende da un’altra, inserisci la decisione interna nella sua procedura strutturata e chiamala con un passaggio Sub-procedure dal ramo che ne ha bisogno.
Aggiungi un Else quando è importante il caso 'nessuna delle precedenti'
Un passaggio If senza Else passa al passaggio successivo quando nulla corrisponde. Se il caso senza corrispondenza deve comportarsi diversamente, aggiungi un ramo Else.
Mantieni tutto ciò di cui ha bisogno un passaggio successivo
Le decisioni prese all’interno di un ramo If non vengono ricordate in seguito. Se un passaggio successivo dipende da qualcosa appreso in un ramo, registralo con una chiamata a uno strumento o una variabile dinamica all’interno del ramo.
Posiziona le condizioni di espressione dopo lo strumento che le popola
Le condizioni di espressione verificano le variabili dinamiche. Posiziona un passaggio If che le utilizza subito dopo il passaggio Tool che imposta tali variabili. Per diramare in base a ciò che ha detto l’utente, usa una condizione di testo.
Estrai i passaggi condivisi in una sotto-procedura
Quando più procedure strutturate condividono la stessa sequenza, ad esempio l’escalation a un operatore, inseriscila in un’unica procedura strutturata con un trigger vuoto e richiamala da ciascuna. Le sequenze copiate divergono nel tempo.
Lavorare con gli strumenti
Controlla un passaggio Tool con un If, non con la sua istruzione
Un passaggio Tool chiama sempre il suo strumento. Una condizione scritta nell’istruzione, ad esempio _salta questo passaggio se il ticket ha già un tag _, non può impedire la chiamata. Se la chiamata non deve sempre avvenire, inserisci la condizione in un passaggio If prima del passaggio Tool.
Imposta i valori dei parametri invece di descriverli
Quando un parametro deve sempre assumere un valore specifico, impostalo con un override constant in
schema_overrides. Un’istruzione come imposta sempre lo stato su in attesa chiede al modello di
rispettarla; un override è applicato e non può essere ignorato.
Assegna un gestore degli errori a ogni passaggio Tool
Senza on_failure, qualsiasi errore dello strumento termina la conversazione. Aggiungi un gestore che comunichi all’utente
cosa è successo e riprovi, effettui l’escalation o prosegua.
Limita i passaggi Tool alla chiamata dello strumento
Un passaggio Tool esegue solo lo strumento; l’agente non può parlare né prendere decisioni durante la sua esecuzione. Per parlare con l’utente o diramare in base a ciò che lo strumento ha restituito, inserisci questa operazione in un passaggio separato prima o dopo il passaggio Tool.
Scrivere le istruzioni
Descrivi solo il passaggio corrente
La procedura controlla quale passaggio viene eseguito successivamente e l’agente non è a conoscenza dei passaggi successivi durante l’esecuzione di quello corrente. Lascia che l’ordine dei passaggi gestisca la sequenza.
Non cercare di terminare il turno con testo discorsivo
Le frasi scritte nelle istruzioni dei passaggi, ad esempio questo è l’ultimo messaggio di questo turno, chiedono
all’agente di applicare un limite che la piattaforma non supporta. Usa un passaggio Ask per attendere l’utente oppure
lo strumento di sistema end_call per concludere la conversazione.
Mantieni le regole globali nel prompt di sistema
Il tono, la formattazione, i saluti finali e le policy di rifiuto appartengono al prompt di sistema. L’istruzione di un passaggio deve indicare solo ciò che è specifico di quel passaggio.
Comporre procedure
Le indicazioni generali per comporre procedure si applicano anche alle procedure strutturate; consulta Comporre procedure nella pagina delle procedure in formato libero.
Un modello è specifico della combinazione dei tipi: una procedura in formato libero può fare riferimento a una strutturata. Mantieni la gestione aperta in una procedura in formato libero e delega a una procedura strutturata le parti che devono essere eseguite sempre nello stesso modo, come la verifica dell’identità o l’escalation.
Limitazioni
- I passaggi If non possono essere annidati e due passaggi If non possono essere posizionati uno dopo l’altro.
- L’unico strumento di sistema supportato è
end_call. - Le procedure strutturate non possono fare riferimento a documenti della knowledge base.
- Non è possibile terminare il turno corrente al completamento di una procedura; l’agente mantiene il turno aperto e potrebbe continuare a parlare.
- Gli edge del workflow non possono connettersi a una procedura strutturata né partire da essa. Usa un passaggio Sub-procedure per concatenare procedure strutturate; l’avvio e il completamento sono gestiti dalla piattaforma.
- L’avvio di una procedura aggiunge latenza: l’agente effettua una chiamata allo strumento per accedervi e poi procede nel workflow generato.
Supporto dei provider di modelli
Le procedure strutturate forzano chiamate interne agli strumenti quando si accede a una sotto-procedura e quando si completa una procedura. Le principali famiglie di modelli OpenAI, Anthropic, Gemini e Grok supportano la scelta forzata dello strumento. Altri modelli o provider personalizzati potrebbero non garantirla, rendendo meno affidabili le transizioni tra sotto-procedure o il completamento della procedura. Quando usi un altro provider di modelli, verifica il supporto della scelta forzata dello strumento.
Consulta Procedure per i limiti applicabili a tutte le procedure, incluso il limite di dimensione dei contenuti e le differenze tra procedure strutturate e in formato libero.