Linee guida per il debug
SI APPLICA A: SDK v4
I bot sono app complesse, con molte parti che interagiscono. Come qualsiasi altra app complessa, possono causare bug o comportamenti del bot diversi da quanto previsto.
L'esecuzione del debug del bot in alcuni casi può essere un'attività difficile. Ogni sviluppatore ha il proprio modo preferito per eseguire tale attività. Le linee guida seguenti sono suggerimenti che si applicano alla maggior parte dei bot.
Dopo aver verificato il funzionamento del bot, il passaggio successivo consiste nel connetterlo a un canale. A tale scopo, è possibile distribuire il bot in un server di staging e creare un client direct line a cui connettersi al bot. Per altre informazioni, vedere Connettere un bot a direct line.
La creazione di un client personalizzato consente di definire i lavori interni del canale e di testare il modo in cui il bot risponde a determinati scambi di attività. Dopo aver effettuato la connessione al client, eseguire i test per configurare lo stato del bot e verificare le funzionalità. Se il bot usa una funzionalità specifica, ad esempio il riconoscimento vocale, l'uso di tali canali consente di verificarla.
Nota
Quando si distribuisce un bot in Azure, viene effettuato il provisioning del canale chat Web per impostazione predefinita.
L'uso di Bot Framework Emulator e chat Web tramite portale di Azure qui può fornire altre informazioni sulle prestazioni del bot durante l'interazione con canali diversi.
L'esecuzione del debug del bot è analoga a quella di altre app multithread, grazie alla possibilità di impostare punti di interruzione o di usare funzionalità come la finestra immediata.
I bot seguono un paradigma di programmazione basato su eventi, che può essere difficile da comprendere se non lo si conosce a sufficienza. L'uso di un bot senza stati, multithread e basato su chiamate asincrone/in attesa può provocare bug imprevisti. Durante l'esecuzione del debug, il bot funziona in modo analogo ad altre app multithread. Di seguito vengono illustrati alcuni suggerimenti, strumenti e risorse utili.
Informazioni sulle attività del bot con l'emulatore
Il bot è coinvolto in diversi tipi di attività, oltre alla normale attività di scambio dei messaggi. La conoscenza di tali attività consente di codificare il bot in modo efficiente e di verificare che le attività inviate e ricevute dal bot siano quelle previste. L'uso dell'emulatore mostrerà quali attività sono, quando si verificano e quali informazioni contengono. Per altre informazioni, vedere Eseguire il debug con l'emulatore.
Salvataggio e recupero delle interazioni utente con le trascrizioni
L'archiviazione trascrizioni BLOB di Azure offre una risorsa specializzata in cui è possibile archiviare e recuperare le trascrizioni che contengono le interazioni tra gli utenti e il bot.
Inoltre, dopo avere archiviato le interazioni degli input utente, è possibile usare lo "strumento di esplorazione dell'archiviazione" di Azure per visualizzare manualmente i dati contenuti nelle trascrizioni archiviate all'interno dell'archivio trascrizioni BLOB. L'esempio seguente apre "Storage Explorer" dalle impostazioni per "mynewtestblobstorage". Per aprire un input utente salvato, selezionare: Blob Container > ChannelId > TranscriptId > ConversationId
Verrà aperto l'input di conversazione utente archiviato in formato JSON. L'input dell'utente viene mantenuto insieme alla chiave "text:". Per altre informazioni sulla creazione e sull'uso di un file di trascrizione del bot, vedere Eseguire il debug del bot usando i file di trascrizione.
Funzionamento del middleware
Al primo tentativo, l'uso del middleware potrebbe non essere intuitivo, in particolare nei riguardi della continuazione (o corto circuito) dell'esecuzione. Il middleware può essere eseguito all'inizio o alla fine di un turno, con una chiamata al delegato next()
che indica quando l'esecuzione viene passata alla logica del bot.
Se si usano più parti di middleware ed è il modo in cui la pipeline è orientata, il delegato può passare l'esecuzione a un'altra parte del middleware. Maggiori dettagli sulla pipeline middleware del bot possono chiarire l'idea.
Se il next()
delegato non viene chiamato, viene definito routing a corto circuito. Tale condizione si verifica quando il middleware soddisfa l'attività corrente e determina che non è necessario trasferire l'esecuzione.
Comprendere quando e perché, i cortocircuiti middleware possono aiutare a indicare quale parte del middleware deve venire prima nella pipeline. Inoltre, comprendere cosa aspettarsi è importante per il middleware predefinito fornito dall'SDK o da altri sviluppatori. Può essere utile, inizialmente, creare il proprio middleware per eseguire alcune prove prima di usare il middleware incorporato.
Per altre informazioni su come eseguire il debug di un bot usando il middleware di ispezione, vedere Eseguire il debug di un bot con middleware di ispezione.
Informazioni sullo stato
Il monitoraggio dello stato è una parte importante del bot, in particolare per le attività complesse. È consigliabile in generale elaborare le attività il più rapidamente possibile e consentire il completamento dell'elaborazione in modo che lo stato sia persistente. Le attività possono essere inviate al bot quasi contemporaneamente e possono introdurre bug confusi a causa dell'architettura asincrona.
In particolare, assicurarsi che lo stato sia persistente in modo da corrispondere alle aspettative. A seconda del punto in cui si trova lo stato persistente, gli emulatori di archiviazione per Cosmos DB e Archiviazione tabelle di Azure consentono di verificare tale stato prima di usare l'archiviazione di produzione.
Importante
La classe CosmosDbStorage è stata deprecata. I contenitori creati in origine con CosmosDbStorage non avevano set di chiavi di partizione e avevano la chiave di partizione predefinita di _/partitionKey.
I contenitori creati con l'archiviazione cosmos DB possono essere usati con l'archiviazione partizionata di Cosmos DB. Per altre informazioni, vedere Partizionamento in Azure Cosmos DB.
Si noti anche che, a differenza dell'archiviazione di Cosmos DB legacy, l'archiviazione partizionata di Cosmos DB non crea automaticamente un database all'interno dell'account Cosmos DB. È necessario creare manualmente un nuovo database, ma ignorare la creazione manuale di un contenitore perché CosmosDbPartitionedStorage creerà automaticamente il contenitore.
Come usare i gestori di attività
I gestori di attività possono introdurre un altro livello di complessità, soprattutto perché ogni attività viene eseguita in un thread indipendente (o in Web worker, a seconda del linguaggio). A seconda delle operazioni eseguite dai gestori, questo può causare problemi in cui lo stato corrente non è quello previsto.
Lo stato predefinito viene scritto alla fine di un turno, ma qualsiasi attività generata da tale turno viene eseguita indipendentemente dalla pipeline corrispondente. Spesso questa situazione non ha alcun impatto, ma se il gestore di attività cambia stato, è necessario che lo stato sia scritto per contenere tale modifica. In tal caso la pipeline del turno può attendere che l'attività termini l'elaborazione prima del completamento per garantire che registri lo stato corretto per tale turno.
Il metodo send activity e i relativi gestori pongono un problema unico. La semplice chiamata di send activity dal gestore on send activities causa una biforcazione infinita dei thread. Esistono soluzioni alternative per tale problema, ad esempio l'aggiunta di altri messaggi alle informazioni in uscita o la scrittura in un altro percorso, come la console o un file, per evitare un arresto anomalo del bot.
Debug di un bot di produzione
Quando il bot è in produzione, è possibile eseguire il debug del bot da qualsiasi canale usando Dev Tunnels. La connessione senza problemi del bot a più canali è una funzionalità chiave disponibile in Bot Framework. Per altre informazioni, vedere Eseguire il debug di un bot da qualsiasi canale usando devtunnel e Eseguire il debug di una competenza o di un consumer di competenze.
Passaggi successivi
Risorse aggiuntive
- Debug in Visual Studio
- Debug, traccia e profilatura per il framework del bot
- Usare l'oggetto ConditionalAttribute per i metodi da non includere nel codice di produzione
- Usare strumenti come Fiddler per visualizzare il traffico di rete
- Risolvere i problemi generali e gli altri articoli sulla risoluzione dei problemi in tale sezione