GPT-6 Astra Mid-Turn Steering Spiegato: Aggiornare un Agente Mentre Sta Lavorando
Comprendere la guida a metà turno di GPT-6 Astra tramite WebSocket: eventi accettati, in sospeso, falliti e guidati, attese degli strumenti, punti di commit, recupero e progettazione UX.

Le esecuzioni lunghe degli agenti creano un problema di UX: l'utente nota un'ipotesi errata ma deve attendere il completamento prima di correggerla. La funzione di sterzata a metà turno di GPT-6 Astra consente a un client di inviare un nuovo input utente mentre una risposta è attiva. Il server passa dalla risposta corrente a una successiva che incorpora l'aggiornamento.
Questa non è una normale continuazione della chat e nemmeno una cancellazione con una nuova richiesta. È un protocollo WebSocket con acknowledgment, punti di commit e regole di recupero.
Requisiti e limiti
I documenti OpenAI descrivono lo steering per la modalità WebSocket dell'API Responses. Un client invia un evento response.steer contenente:
type: "response.steer";previous_response_id, che identifica la risposta attiva;input, contenente messaggi con ruolo utente.
L'input può includere testo, immagini o contenuti di file. Non aggiungere un stream_id non documentato. Lo steering si applica attualmente alle modalità standard a singolo agente supportate. Le risposte legate alla conversazione e la compattazione automatica non lo supportano, quindi scegli tra queste capacità durante la progettazione dell'architettura piuttosto che scoprire il conflitto in produzione.
{
"header": "Il mio titolo",
"rows": [
{ "label": "Nome", "value": "Mario" },
{ "label": "Età", "value": "30" }
],
"videourl": "https://example.com/video.mp4"
}
{ "type": "response.steer", "previous_response_id": "resp_active", "input": [{ "role": "utente", "content": "Utilizzare la versione UE della politica, non quella statunitense." }] }
## Comprendere il ciclo di vita
`response.steer.accepted` indica che il server ha accettato la responsabilità per l'input di sterzata. Non è ancora il punto di commit finale. L'evento successivo `response.created` è il commit: conserva il suo ID di risposta e associa l'input di sterzata a tale evento successivo.
La risposta attiva può quindi terminare come incompleta con `incomplete_details.reason: "steered"`. Questo è un flusso di controllo previsto, non un errore dell'applicazione. Il successore prosegue con l'aggiornamento.
Altri eventi contano:
.steer.pending: l'aggiornamento è in coda perché la risposta corrente è in attesa di lavoro di proprietà del client;
- `response.steer.failed`: il server non ha potuto applicare l'aggiornamento;
- nessun riconoscimento prima della disconnessione: l'esito è sconosciuto.
Costruisci una piccola macchina a stati invece di gestirli come notifiche non correlate.
## Sterzare mentre un utensile è in funzione
Se la risposta è in attesa di un output dello strumento client o di un'approvazione, la guida può rimanere in sospeso. Il server non può inventare in sicurezza il risultato mancante. Completa il protocollo richiesto utilizzando stub appropriati e risultati preservati, e non eseguire nuovamente uno strumento solo perché è avvenuta una guida.
Esempio: un utente imposta "non inviare l'email" mentre è aperto un prompt di approvazione. Rifiuta l'approvazione e porta avanti l'aggiornamento dell'impostazione. Se lo strumento email ha già eseguito l'azione e l'accusa di ricevuta è andata persa, riconcilia prima il sistema di posta. L'impostazione non può annullare un effetto collaterale.
## Macchina a stati del client
Un client robusto tiene traccia di:
1. ID della risposta attiva;
2. ID del messaggio di sterzo e stato locale;
3. se `accepted` è arrivato;
4. se un `response.created` successivo lo ha commesso;
5. chiamate di strumenti in sospeso e approvazioni;
6. stato terminale della risposta originale;
7. ultimo cursore di evento durevole o checkpoint dell'applicazione.
Disabilita l'invio ripetuto nell'interfaccia utente, consentendo comunque all'utente di modificare o sostituire un aggiornamento in coda secondo le tue regole. Mostra "Applicazione dell'aggiornamento in corso" invece di fingere che la prima risposta si sia fermata all'istante.
## Recupero dalle disconnessioni
Tre casi richiedono una gestione diversa:
- **Nessun evento accettato:** l'esito è incerto. Riconnettiti, verifica lo stato della risposta disponibile ed evita di reinviare ciecamente un comando che potrebbe essere applicato due volte.
- **Accettato, nessun successore osservato:** il server possiede l'input, ma al client manca l'evento di commit. Recupera la catena di risposta prima di inviare nuovamente.
- **Successore creato:** conserva quell'ID e prosegui da esso.
Fornisci input di sterzo con ID generati dal client nel tuo database anche se lo schema del wire non li utilizza come campi del protocollo. Questo aiuta a deduplicare le azioni dell'interfaccia utente e a verificare cosa ha modificato l'utente.
## Casi d'uso buoni e cattivi
La sterzata è eccellente per cambiare ambito, correggere una fonte, restringere una ricerca, aggiungere un vincolo mancante o modificare l'output desiderato mentre la ricerca è ancora in esecuzione.
Non è un sostituto per l'approvazione, il rollback delle transazioni, i controlli di autorizzazione o la cancellazione deterministica. Non utilizzare lo steering per autorizzare un pagamento o per presumere che un'azione esterna già in esecuzione si sia fermata.
## Testa le transizioni imbarazzanti
Simula la sterzata durante la generazione del testo, l'esecuzione di strumenti ospitati, le attese degli strumenti client, le attese di approvazione, immediatamente prima del completamento e durante la perdita di rete. Verifica che gli strumenti non vengano duplicati, che l'input accettato non venga perso silenziosamente e che l'interfaccia utente assegni l'output alla risposta corretta.
Monitora la latenza di accettazione dello steering, la durata in sospeso, la latenza di creazione del successore, lo stato della risposta originale, le azioni duplicate degli strumenti e l'abbandono da parte dell'utente. Queste metriche rivelano se lo steering migliora effettivamente l'esperienza.
## Progetta l'esperienza utente incentrata sulla proprietà
L'interfaccia dovrebbe distinguere tre momenti. "Invio aggiornamento" significa che il client lo ha trasmesso ma manca un riconoscimento. "Aggiornamento accettato" significa che il server lo possiede. "Proseguimento con aggiornamento" significa che la risposta del successore è stata creata. Queste etichette rendono comprensibile la rara ambiguità di rete senza esporre il gergo del protocollo.
Mantieni l'output visibile già prodotto dalla risposta originale, ma contrassegnalo come superato se la correzione lo invalida. Cancellarlo può confondere gli utenti che hanno agito in base a ciò che hanno visto; presentarlo come definitivo può essere peggiore. Per lavori sensibili a livello di verifica, preserva entrambe le versioni e mostra quale successore è diventato autorevole.
Rimuovi il rimbalzo delle modifiche rapide in modo ponderato. Due messaggi di guida—"usa Francia" e subito dopo "usa Germania"—possono essere entrambi accettati in ordine. Se il tuo prodotto desidera solo l'ultima istruzione, implementa una politica client e comunicala; non dare per scontato che il protocollo collassi silenziosamente gli aggiornamenti.
Per l'accessibilità, annuncia i cambiamenti di stato senza leggere ripetutamente l'intera risposta generata. Consenti agli utenti che usano la tastiera di raggiungere l'input di controllo mentre la generazione continua e mantieni un chiaro controllo di arresto. Un buon controllo è tanto una questione di progettazione dell'interazione quanto di gestione del trasporto.
## FAQ
### Sterzare è la stessa cosa che inviare un altro messaggio?
No. Aggiorna una risposta WebSocket attiva e crea un flusso successivo.
### `accepted` significa che l'aggiornamento è completamente applicato?
No. Considera il successore `response.created` come il punto di commit.
### Lo sterzo può annullare un'azione di uno strumento esterno?
Non in modo affidabile. La cancellazione degli strumenti e la riconciliazione degli effetti collaterali sono responsabilità separate dell'applicazione.
### Posso utilizzare la compattazione automatica con lo sterzo?
La guida ufficiale allo steering dice che la compattazione automatica non è supportata per le risposte guidate. Progetta una strategia di contesto esplicita.
## Conclusione
Lo sterzo a metà giro rende reattivo il lungo lavoro di GPT-6 Astra, ma solo quando il client rispetta il suo protocollo. Tieni traccia degli eventi accettati, in sospeso, falliti, incompleti e successori; preserva i risultati degli strumenti; riconcilia gli effetti collaterali incerti; ed esponi uno stato dell'interfaccia onesto. Lo sterzo cambia la direzione dell'agente—non cancella la realtà dei sistemi distribuiti.





























































































