Versionamento degli agenti
Il versionamento degli agenti ti consente di sperimentare diverse configurazioni del tuo agente senza mettere a rischio l’ambiente di produzione. Crea branch isolati, testa le modifiche e distribuisci gradualmente gli aggiornamenti usando la distribuzione percentuale del traffico.
Vuoi eseguire test A/B? Consulta Esperimenti per il workflow consigliato per testare le modifiche dell’agente sul traffico live.
Panoramica
Il sistema di versionamento offre:
- Snapshot immutabili della configurazione del tuo agente in qualsiasi momento
- Branch isolati per testare le modifiche prima della pubblicazione
- Suddivisione del traffico per distribuire gradualmente le modifiche a una percentuale di utenti
- Merge per trasferire le modifiche da qualsiasi branch a qualsiasi altro branch
- Rebase per trasferire in un branch le modifiche più recenti del branch principale
Una volta abilitato il versionamento su un agente, non può essere disabilitato. Tienilo presente prima di abilitare il versionamento sugli agenti esistenti.
Concetti fondamentali
Versioni
Una versione è uno snapshot immutabile della configurazione di un agente in un momento specifico. Ogni versione ha un ID univoco (formato: agtvrsn_xxxx) e contiene:
conversation_config- Prompt di sistema, impostazioni LLM, configurazione della voce, strumenti, knowledge baseplatform_settings- Sottoinsieme versionato che include impostazioni di valutazione, widget, raccolta dati e sicurezzaworkflow- Definizione completa del workflow con nodi e archi
Le versioni vengono create automaticamente quando salvi le modifiche a un agente versionato. Una volta creata, una versione non può essere modificata.
Branch
I branch sono linee di sviluppo denominate, simili ai branch git. Ti consentono di lavorare alle modifiche in isolamento prima di unirle di nuovo al branch principale.
- Ogni agente versionato ha un branch Principale che non può essere eliminato né archiviato
- Puoi creare branch aggiuntivi da qualsiasi versione di qualsiasi branch esistente, non solo dal branch principale
- I branch possono essere uniti in qualsiasi altro branch e i branch non principali possono essere sottoposti a rebase sul branch principale per riceverne le modifiche più recenti
- Ogni branch ha: ID (
agtbrch_xxxx), nome, descrizione e un elenco di versioni - I nomi dei branch possono contenere: lettere, numeri e
() [] {} - / .(massimo 140 caratteri)
Distribuzione del traffico
Il traffico può essere suddiviso percentualmente tra più branch, consentendo distribuzioni graduali e test A/B.
- Le percentuali devono sempre totalizzare esattamente 100%
- Il routing del traffico è deterministico in base all’ID della conversazione (lo stesso utente viene indirizzato in modo coerente allo stesso branch)
- Possono essere archiviati solo i branch non archiviati con traffico pari allo 0%
Bozze
Le modifiche non salvate vengono memorizzate come bozze, consentendoti di lavorare alle modifiche senza creare subito una nuova versione.
- Le bozze sono per utente e per branch (ogni membro del team ha la propria bozza)
- Le bozze vengono eliminate automaticamente quando viene effettuato il commit di una nuova versione
- Le bozze vengono eliminate anche quando si esegue il merge in un branch
Abilitare il versionamento
Il versionamento è facoltativo e deve essere abilitato esplicitamente. Puoi abilitarlo quando crei un nuovo agente o su un agente esistente.
Una volta abilitato, il versionamento non può essere disabilitato. Si tratta di una modifica permanente al tuo agente.
Abilitare durante la creazione di un agente
Abilita dalla dashboard
Abilita tramite API
Apri il tuo agente nella dashboard, vai su Impostazioni e abilita il versionamento. Una volta abilitato, la scheda Versionamento diventa disponibile per gestire branch, bozze, versioni e distribuzione del traffico.
Abilitare su un agente esistente
Abilita dalla dashboard
Abilita tramite API
Apri il tuo agente nella dashboard, vai su Impostazioni e attiva il versionamento.
Abilitando il versionamento viene creato il branch iniziale “Principale” con la prima versione contenente la configurazione corrente dell’agente.
Lavorare con i branch
Creare un branch
Puoi creare branch da qualsiasi versione di qualsiasi branch, non solo dal branch principale. Puoi includere facoltativamente modifiche alla configurazione che verranno applicate alla versione iniziale del nuovo branch.
Elencare i branch
Ottenere i dettagli del branch
Effettuare il commit delle modifiche
Quando aggiorni un agente con il versionamento abilitato, specifica branch_id per creare una nuova versione in quel branch.
Aggiorna dalla dashboard
Aggiorna tramite CLI
Aggiorna tramite API
Apri la scheda Versionamento dell’agente, passa al branch di destinazione, modifica la configurazione e salva per creare una nuova versione.
Viene creata automaticamente una nuova versione nel branch specificato e qualsiasi bozza esistente per quell’utente in quel branch viene eliminata.
Distribuire il traffico
Usa l’endpoint deployments per distribuire il traffico tra i branch. Ciò consente distribuzioni graduali e test A/B.
Il routing del traffico è deterministico in base all’ID della conversazione, assicurando che lo stesso utente raggiunga in modo coerente lo stesso branch tra una sessione e l’altra.
Unire i branch
Quando sei soddisfatto delle modifiche apportate a un branch, uniscile a un altro branch. Qualsiasi branch non archiviato può essere unito a qualsiasi altro branch non archiviato, non solo a main.
Per far revisionare le modifiche di un branch prima di unirle, oppure per raggiungere un branch per cui non disponi dell’accesso in scrittura, apri una proposta di unione invece di eseguire l’unione direttamente.
L’unione:
- Crea una nuova versione nel branch di destinazione con la configurazione del branch di origine
- Archivia facoltativamente il branch di origine (comportamento predefinito)
- Trasferisce automaticamente il traffico dal branch di origine al branch di destinazione
L’unione non riesce con no_new_changes_to_merge se il branch di origine è stato creato dal branch di destinazione
(e non contiene nuovi commit oltre a quelli del branch di destinazione), e con branch_already_merged se è già stato
unito a quella destinazione.
Risolvere i conflitti di unione
Se un’impostazione è stata modificata sia nel branch di origine sia in quello di destinazione dopo la loro divergenza, per impostazione predefinita viene mantenuto il valore del branch aggiornato più di recente. Imposta force=True per usare sempre il valore del branch di origine, indipendentemente dai timestamp.
Visualizza in anteprima il risultato di un’unione, inclusi i campi che verrebbero sovrascritti, prima di confermarla:
Rebase dei branch su main
Il rebase integra le modifiche più recenti dal branch main in un altro branch, in modo simile a un git rebase. In questo modo un branch a lungo termine rimane aggiornato con main senza unire ancora le modifiche del branch stesso.
Il rebase:
- Crea una nuova versione nel branch che incorpora le modifiche più recenti di main
- Mantiene le modifiche del branch: se un’impostazione è stata modificata sia nel branch sia in main, viene sempre mantenuto il valore del branch
- Non riesce con
branch_already_up_to_datese il branch include già tutte le modifiche di main
Solo i branch diversi da main possono essere sottoposti a rebase, e solo su main. Il rebase del branch main stesso
restituisce un errore cannot_rebase_main.
Visualizza in anteprima il risultato di un rebase prima di confermarlo:
Archiviare i branch
Archivia i branch che non ti servono più. In questo modo mantieni organizzato l’elenco dei branch.
Non puoi archiviare un branch a cui è assegnato traffico. Rimuovi tutto il traffico prima di archiviarlo.
Puoi annullare l’archiviazione dei branch impostando archived=False.
Recuperare versioni specifiche
Puoi recuperare un agente a una versione specifica o al tip di un branch.
Ottenere un agente a una versione specifica
Ottenere un agente al tip del branch
Includere le modifiche in bozza
Riferimento delle impostazioni
Impostazioni versionate
Queste impostazioni possono variare tra versioni e branch:
Impostazioni per agente
Queste impostazioni sono condivise tra tutte le versioni:
Le modifiche al nome e ai tag nei branch diversi da main non vengono mantenute nell’agente finché non vengono unite a main.
Best practice
Crea test prima di creare un branch
Configura test automatici che acquisiscano il comportamento previsto prima di creare un nuovo branch. Questo stabilisce una baseline e aiuta a individuare tempestivamente le regressioni mentre esegui iterazioni sul tuo esperimento.
Usa nomi descrittivi per i branch
Scegli nomi di branch che comunichino chiaramente lo scopo dell’esperimento. Includi il nome della funzionalità,
l’ipotesi o il numero del ticket per poterli identificare facilmente (ad esempio, feature/new-greeting-flow o
experiment/shorter-responses).
Documenta lo scopo dei branch
Usa il campo della descrizione del branch per spiegare quale ipotesi stai testando, quali metriche definiscono il successo e quali dipendenze o aspetti considerare. Questo aiuta i membri del team a comprendere gli esperimenti attivi.
Usa le bozze per i lavori in corso
Salva spesso le bozze mentre apporti modifiche. Così preservi il tuo lavoro senza creare versioni non necessarie. Esegui il commit solo quando sei pronto a testare o distribuire.
Inizia con piccole percentuali di traffico
Quando distribuisci un nuovo branch, inizia con il 5-10% del traffico. Questo limita l’esposizione in caso di problemi, continuando al contempo a fornire dati significativi.
Monitora le metriche chiave prima di aumentare il traffico
Usa la dashboard di analisi per confrontare le prestazioni dei branch. Controlla i tassi di completamento delle chiamate, la durata media delle conversazioni, i punteggi delle valutazioni di successo e i tassi di esecuzione degli strumenti. Aumenta il traffico solo quando le metriche raggiungono o superano la baseline del branch main.