Guida introduttiva: risposte alle domande personalizzate

Nota

Azure Open AI On Your Data usa modelli di linguaggio di grandi dimensioni (LLMS) per produrre risultati simili alla risposta alle domande personalizzate. Per connettere un progetto di risposta alle domande personalizzate esistente ad Azure Open AI On Your Data, consultare la guida.

Nota

Si sta cercando di eseguire la migrazione dei carichi di lavoro da QnA Maker? Per informazioni sui confronti delle funzionalità e sui passaggi di migrazione, vedere la guida alla migrazione.

Introduzione alla libreria client di risposte alle domande personalizzata. Seguire questi passaggi per installare il pacchetto e provare il codice di esempio per le attività di base.

È possibile creare un progetto personalizzato di risposte alle domande dai propri contenuti, ad esempio domande frequenti o manuali del prodotto. Questo articolo include un esempio di creazione di un progetto di risposta alle domande personalizzato da un manuale del prodotto, per rispondere alle domande.

Prerequisiti

  • Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
  • Risorsa della lingua con la funzionalità di risposta alle domande personalizzata abilitata. Ricordare l'ID Microsoft Entra, la sottoscrizione, il nome della risorsa di lingua selezionato al momento della creazione della risorsa.

Creare il primo progetto personalizzato di risposte alle domande

  1. Accedere a Language Studio con le credenziali di Azure.

  2. Scorrere verso il basso fino alla sezione Domande di risposta e selezionare Apri risposte alle domande personalizzate.

    Aprire risposte alle domande personalizzate

  3. Se la risorsa non è ancora connessa a Ricerca di Azure, selezionare Connessione a Ricerca di Azure. Verrà aperta una nuova scheda del browser nel riquadro Funzionalità della risorsa nel portale di Azure.

    Connettersi a Ricerca di Azure

  4. Selezionare Abilita risposte alle domande personalizzate, scegliere la risorsa di Ricerca di Azure a cui collegarsi e quindi selezionare Applica.

    Abilitare la risposta alle domande personalizzate

  5. Tornare alla scheda Language Studio. Potrebbe essere necessario aggiornare questa pagina per registrare la modifica nella risorsa. Selezionare Crea nuovo progetto.

  6. Scegliere l'opzione Che si vuole impostare la lingua per tutti i progetti creati in questa risorsa> selezionare Inglese> Selezionare Avanti.

  7. Immettere un nome di progetto Sample-project, una descrizione del progetto My first question answering e lasciare la risposta predefinita con l'impostazione Nessuna risposta trovata.

  8. Esaminare le scelte effettuate e selezionare Crea progetto

  9. Nella pagina Gestisci origini selezionare Aggiungi URL di origine>.

  10. Selezionare Aggiungi URL immettere i valori seguenti e quindi selezionare Aggiungi tutto:

    Nome URL Valore URL
    Manuale dell'utente di Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    Il processo di estrazione impiega alcuni minuti per leggere il documento e identificare le domande e risposte.

    Dopo aver aggiunto correttamente l'origine, è possibile modificare il contenuto di origine per aggiungere altri set di risposte alle domande personalizzati.

Testare il progetto

  1. Selezionare il collegamento all'origine. Verrà aperta la pagina di modifica del progetto.

  2. Selezionare Test dalla barra > dei menu Immettere la domanda Ricerca per categorie configurare il mio surface book?. Verrà generata una risposta in base alle coppie di risposte alle domande identificate ed estratte automaticamente dall'URL di origine:

    Testare l'interfaccia della chat delle domande

    Se si seleziona la casella per includere una risposta breve, verrà visualizzata anche una risposta precisa, se disponibile, insieme al passaggio della risposta nel riquadro di test quando si pone una domanda.

  3. Selezionare Ispeziona per esaminare la risposta in modo più dettagliato. La finestra di test viene usata per testare le modifiche apportate al progetto prima di distribuire il progetto.

    Visualizzare l'intervallo di confidenza

    Dall'interfaccia Inspect è possibile visualizzare il livello di attendibilità che questa risposta risponderà alla domanda e modificherà direttamente una determinata coppia di domande e risposte.

Distribuire il progetto

  1. Selezionare l'icona Distribuisci progetto per immettere il menu Distribuisci progetto.

    Distribuzione del progetto

    Quando si distribuisce un progetto, il contenuto del progetto passa dall'indice test a un prod indice in Ricerca di Azure.

  2. Selezionare Distribuisci> e quindi, quando richiesto, selezionare di nuovo Distribuisci.

    Distribuzione completata

    Il progetto è stato distribuito correttamente. È possibile usare l'endpoint per rispondere alle domande nella propria applicazione personalizzata per rispondere o in un bot.

Prerequisiti

  • La versione corrente di cURL. Negli argomenti di avvio rapido vengono usate diverse opzioni della riga di comando, indicate nella documentazione di cURL.
  • Sottoscrizione di Azure: creare un account gratuito
  • Per rispondere alle domande personalizzate è necessaria una risorsa lingua con la funzionalità di risposta alle domande personalizzata abilitata per generare una chiave API e un endpoint.
    • Dopo la distribuzione della risorsa lingua, selezionare Vai alla risorsa. Sarà necessaria la chiave e l'endpoint dalla risorsa creata per connettersi all'API. Incollare la chiave e l'endpoint nel codice seguente più avanti nella guida introduttiva.
  • Per creare una risorsa language con l'interfaccia della riga di comando di Azure, specificare le proprietà aggiuntive seguenti: --api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Progetto esistente su cui eseguire una query. Se non è stato configurato un progetto, è possibile seguire le istruzioni nella guida introduttiva di Language Studio. In alternativa, aggiungere un progetto che usa questo URL della Guida utente di Surface come origine dati.

Configurazione

Creare variabili di ambiente

L'applicazione deve essere autenticata per inviare richieste API. Per l'ambiente di produzione, usare un modo sicuro per archiviare e accedere alle credenziali. In questo esempio si scriveranno le credenziali nelle variabili di ambiente nel computer locale che esegue l'applicazione.

Suggerimento

Non includere la chiave direttamente nel codice e non pubblicarla pubblicamente. Per altre opzioni di autenticazione come Azure Key Vault, vedere l'articolo sicurezza dei servizi di intelligenza artificiale di Azure.

Per impostare la variabile di ambiente per la chiave della risorsa lingua, aprire una finestra della console e seguire le istruzioni per il sistema operativo e l'ambiente di sviluppo.

  1. Per impostare la LANGUAGE_KEY variabile di ambiente, sostituire your-key con una delle chiavi per la risorsa.
  2. Per impostare la LANGUAGE_ENDPOINT variabile di ambiente, sostituire your-endpoint con l'endpoint per la risorsa.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Nota

Se è sufficiente accedere alle variabili di ambiente nella console in esecuzione corrente, è possibile impostare la variabile di setxambiente con set anziché .

Dopo aver aggiunto le variabili di ambiente, potrebbe essere necessario riavviare tutti i programmi in esecuzione che dovranno leggere le variabili di ambiente, inclusa la finestra della console. Se ad esempio si usa Visual Studio come editor, riavviare Visual Studio prima di eseguire l'esempio.

Eseguire una query su un progetto

Generare una risposta da un progetto

Per eseguire query su un progetto personalizzato di risposte alle domande con le API REST e cURL, sono necessarie le informazioni seguenti:

Nome variabile Valore
Endpoint Questo valore è disponibile nella sezione Chiavi &ed endpoint durante l'esame della risorsa dalla portale di Azure. In alternativa, è possibile trovare il valore in Language Studio>question answering>Deploy project>Get prediction URL (Distribuisci progetto Get prediction URL). Un endpoint di esempio è: https://southcentralus.api.cognitive.microsoft.com/
API-Key Questo valore è disponibile nella sezione Chiavi &ed endpoint durante l'esame della risorsa dalla portale di Azure. È possibile usare Key1 o Key2. Avere sempre due chiavi valide per la rotazione sicura delle chiavi con tempi di inattività zero. In alternativa, è possibile trovare il valore in Language Studio>question answering>Deploy project>Get prediction URL (Distribuisci progetto Get prediction URL). Il valore della chiave fa parte della richiesta di esempio.
Project Nome del progetto di risposta alle domande personalizzato.
Deployment Esistono due valori possibili: test, e production. productiondipende dall'utente che ha distribuito il progetto dalla domanda di Language Studio>che risponde al>progetto Deploy( Distribuisci progetto).

Il comando cURL viene eseguito da una shell BASH. Modificare questo comando con il nome e la chiave della risorsa e con i valori e le dimensioni di JSON.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
  "question": "How much battery life do I have left?"
  }'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-knowledgebases?projectName={YOUR_PROJECT_NAME}&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Quando si esegue il codice precedente, se si usa l'origine dati dai prerequisiti, si otterrà una risposta simile alla seguente:

{
"answers": [
    {
      "questions": [
        "Check battery level"
      ],
      "answer": "If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.",
      "confidenceScore": 0.9185,
      "id": 101,
      "source": "https://support.microsoft.com/en-us/surface/how-to-use-your-surface-pen-8a403519-cd1f-15b2-c9df-faa5aa924e98",
      "metadata": {},
      "dialog": {
        "isContextOnly": false,
        "prompts": []
      }
    }
  ]
}

Restituisce confidenceScore un valore compreso tra 0 e 1. Si può pensare a questo come una percentuale e moltiplicare per 100 in modo che un punteggio di attendibilità pari a 0,9185 significa che la risposta alle domande personalizzata è del 91,85% sicura che questa è la risposta corretta alla domanda in base al progetto.

Se si desidera escludere risposte in cui il punteggio di attendibilità scende al di sotto di una determinata soglia, è possibile aggiungere il confidenceScoreThreshold parametro .

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
  "question": "How much battery life do I have left?",
  "confidenceScoreThreshold": "0.95",
  }'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com//language/:query-knowledgebases?projectName=Sample-project&api-version=2021-10-01&deploymentName={DEPLOYMENT_NAME}'

Poiché si sa dall'esecuzione precedente del codice che il punteggio di attendibilità è: .9185 l'impostazione della soglia su .95 comporterà la restituzione della risposta predefinita.

{
  "answers": [
    {
      "questions": [],
      "answer": "No good match found in KB",
      "confidenceScore": 0.0,
      "id": -1,
      "metadata": {}
    }
  ]
}

Eseguire query sul testo senza un progetto

È anche possibile usare risposte personalizzate alle domande senza un progetto con l'API REST predefinita per la risposta alle domande, chiamata tramite query-text. In questo caso, è possibile fornire risposte alle domande con una domanda e con i record di testo associati che si desidera cercare una risposta al momento dell'invio della richiesta.

Per questo esempio, è sufficiente modificare le variabili per API KEY e ENDPOINT.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question":"How long does it takes to charge a surface?",
"records":[
{"id":"doc1","text":"Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you\u0027re using your Surface for power-intensive activities like gaming or video streaming while you\u0027re charging it"},
{"id":"doc2","text":"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."}],
"language":"en",
"stringIndexType":"Utf16CodeUnit"
}'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-text?&api-version=2021-10-01'

Questo esempio restituirà un risultato di:

{  
"answers": [
    {
      "answer": "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
      "confidenceScore": 0.9118788838386536,
      "id": "doc1",
      "answerSpan": {
        "text": "two to four hours",
        "confidenceScore": 0.9850527,
        "offset": 27,
        "length": 18
      },
      "offset": 0,
      "length": 243
    },
    {
      "answer": "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it",
      "confidenceScore": 0.052793052047491074,
      "id": "doc1",
      "answerSpan": {
        "text": "longer",
        "confidenceScore": 0.6694634,
        "offset": 11,
        "length": 7
      },
      "offset": 109,
      "length": 134
    },
    {
      "answer": "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
      "confidenceScore": 0.017600709572434425,
      "id": "doc2",
      "answerSpan": {
        "text": "USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging",
        "confidenceScore": 0.1544854,
        "offset": 15,
        "length": 165
      },
      "offset": 0,
      "length": 280
    }
  ]
}

Usare questa guida introduttiva per la libreria client di risposte alle domande personalizzate per .NET per:

  • Ottenere una risposta da un progetto.
  • Ottenere una risposta da un corpo di testo inviato insieme alla domanda.
  • Ottenere il punteggio di attendibilità per la risposta alla domanda.

Pacchetto della documentazione di riferimento | (NuGet) | Codice sorgente della libreria di esempi aggiuntivi |

Prerequisiti

  • Sottoscrizione di Azure: creare un account gratuito
  • IDE di Visual Studio o la versione corrente di .NET Core.
  • Per rispondere alle domande personalizzate è necessaria una risorsa lingua con la funzionalità di risposta alle domande personalizzata abilitata per generare una chiave API e un endpoint.
    • Dopo la distribuzione della risorsa lingua, selezionare Vai alla risorsa. Sarà necessaria la chiave e l'endpoint dalla risorsa creata per connettersi all'API. Incollare la chiave e l'endpoint nel codice seguente più avanti nella guida introduttiva.
  • Per creare una risorsa language con l'interfaccia della riga di comando di Azure, specificare le proprietà aggiuntive seguenti: --api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Progetto esistente su cui eseguire una query. Se non è stato configurato un progetto, è possibile seguire le istruzioni nella guida introduttiva di Language Studio. In alternativa, aggiungere un progetto che usa questo URL della Guida utente di Surface come origine dati.

Configurazione

Creare variabili di ambiente

L'applicazione deve essere autenticata per inviare richieste API. Per l'ambiente di produzione, usare un modo sicuro per archiviare e accedere alle credenziali. In questo esempio si scriveranno le credenziali nelle variabili di ambiente nel computer locale che esegue l'applicazione.

Suggerimento

Non includere la chiave direttamente nel codice e non pubblicarla pubblicamente. Per altre opzioni di autenticazione come Azure Key Vault, vedere l'articolo sicurezza dei servizi di intelligenza artificiale di Azure.

Per impostare la variabile di ambiente per la chiave della risorsa lingua, aprire una finestra della console e seguire le istruzioni per il sistema operativo e l'ambiente di sviluppo.

  1. Per impostare la LANGUAGE_KEY variabile di ambiente, sostituire your-key con una delle chiavi per la risorsa.
  2. Per impostare la LANGUAGE_ENDPOINT variabile di ambiente, sostituire your-endpoint con l'endpoint per la risorsa.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Nota

Se è sufficiente accedere alle variabili di ambiente nella console in esecuzione corrente, è possibile impostare la variabile di setxambiente con set anziché .

Dopo aver aggiunto le variabili di ambiente, potrebbe essere necessario riavviare tutti i programmi in esecuzione che dovranno leggere le variabili di ambiente, inclusa la finestra della console. Se ad esempio si usa Visual Studio come editor, riavviare Visual Studio prima di eseguire l'esempio.

CLI

In una finestra di una console, ad esempio cmd, PowerShell o Bash, usare il comando dotnet new per creare una nuova app console con il nome question-answering-quickstart. Questo comando crea un semplice progetto C# "Hello World" con un unico file di origine: program.cs.

dotnet new console -n question-answering-quickstart

Spostarsi nella cartella dell'app appena creata. È possibile compilare l'applicazione con il comando seguente:

dotnet build

L'output di compilazione non deve contenere alcun avviso o errore.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

Nella directory dell'applicazione installare la libreria client di risposte alle domande personalizzate per .NET con il comando seguente:

dotnet add package Azure.AI.Language.QuestionAnswering

Eseguire una query su un progetto

Generare una risposta da un progetto

L'esempio seguente consentirà di eseguire query su un progetto usando GetAnswers per ottenere una risposta alla domanda.

Sarà necessario aggiornare il codice seguente e specificare i propri valori per le variabili seguenti.

Nome variabile Valore
endpoint Questo valore è disponibile nella sezione Chiavi &ed endpoint durante l'esame della risorsa dalla portale di Azure. In alternativa, è possibile trovare il valore in Language Studio>question answering>Deploy project>Get prediction URL (Distribuisci progetto Get prediction URL). Un endpoint di esempio è: https://southcentralus.api.cognitive.microsoft.com/
credential Questo valore è disponibile nella sezione Chiavi &ed endpoint durante l'esame della risorsa dalla portale di Azure. È possibile usare Key1 o Key2. Avere sempre due chiavi valide per la rotazione sicura delle chiavi con tempi di inattività zero. In alternativa, è possibile trovare il valore in Language Studio>question answering>Deploy project>Get prediction URL (Distribuisci progetto Get prediction URL). Il valore della chiave fa parte della richiesta di esempio.
projectName Nome del progetto di risposta alle domande personalizzato.
deploymentName Esistono due valori possibili: test, e production. productiondipende dall'utente che ha distribuito il progetto dalla domanda di Language Studio>che risponde al>progetto Deploy( Distribuisci progetto).

Importante

Al termine, ricordarsi di rimuovere la chiave dal codice e non renderlo mai pubblico. Per l'ambiente di produzione, usare un modo sicuro per archiviare e accedere alle credenziali, ad esempio Azure Key Vault. Per altre informazioni, vedere l'articolo sulla sicurezza dei servizi di intelligenza artificiale di Azure.

Dalla directory del progetto aprire il file program.cs e sostituire con il codice seguente:

using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;

namespace question_answering
{
    class Program
    {
        static void Main(string[] args)
        {

            // This example requires environment variables named "LANGUAGE_KEY" and "LANGUAGE_ENDPOINT"
            Uri endpoint = new Uri("LANGUAGE_ENDPOINT");
            AzureKeyCredential credential = new AzureKeyCredential("LANGUAGE_KEY");
            string projectName = "{YOUR-PROJECT-NAME}";
            string deploymentName = "production";

            string question = "How long should my Surface battery last?";

            QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
            QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);

            Response<AnswersResult> response = client.GetAnswers(question, project);

            foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
            {
                Console.WriteLine($"Q:{question}");
                Console.WriteLine($"A:{answer.Answer}");
            }
        }
    }
}

Mentre si codificano in modo rigido le variabili per l'esempio. Per la produzione, è consigliabile usare un modo sicuro per archiviare e accedere alle credenziali, Ad esempio, l'insieme di credenziali delle chiavi di Azure fornisce un'archiviazione delle chiavi sicura.

Dopo l'aggiornamento Program.cs con il codice precedente e la sostituzione dei valori delle variabili corretti. Eseguire l'applicazione con il comando dotnet run dalla directory dell'applicazione.

dotnet run

La risposta sarà simile alla seguente:

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.

Per informazioni sull'attendibilità della risposta personalizzata alle domande è che si tratta della risposta corretta, aggiungere un'istruzione di stampa aggiuntiva sotto le istruzioni print esistenti:

Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line

Se si esegue dotnet run di nuovo, si riceverà ora un risultato con un punteggio di attendibilità:

Q:How much battery life do I have left?
A:If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.
(0.9185)

Il punteggio di attendibilità restituisce un valore compreso tra 0 e 1. Si può pensare a questo come una percentuale e moltiplicare per 100 in modo che un punteggio di attendibilità pari a 0,9185 significa che la risposta alle domande personalizzata è del 91,85% sicura che questa è la risposta corretta alla domanda in base al progetto.

Se si desidera escludere le risposte in cui il punteggio di attendibilità scende al di sotto di una determinata soglia, usare AnswerOptions per aggiungere la ConfidenceScoreThreshold proprietà .

QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
AnswersOptions options = new AnswersOptions(); //Add this line
options.ConfidenceThreshold = 0.95; //Add this line

Response<AnswersResult> response = client.GetAnswers(question, project, options); //Add the additional options parameter

Poiché si sa dall'esecuzione precedente del codice che il punteggio di attendibilità è: .9185 l'impostazione della soglia su .95 comporterà la restituzione della risposta predefinita.

Q:How much battery life do I have left?
A:No good match found in KB
(0)

Eseguire query sul testo senza un progetto

È anche possibile usare risposte personalizzate alle domande senza un progetto con GetAnswersFromText. In questo caso, è possibile fornire risposte personalizzate alle domande con una domanda e con i record di testo associati che si desidera cercare una risposta al momento dell'invio della richiesta.

Per questo esempio, è sufficiente modificare le variabili per endpoint e credential.

using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;
using System.Collections.Generic;


namespace questionansweringcsharp
{
    class Program
    {
        static void Main(string[] args)
        {

            Uri endpoint = new Uri("https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/");
            AzureKeyCredential credential = new AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY");
            QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);

            IEnumerable<TextDocument> records = new[]
            {
                new TextDocument("doc1", "Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
                         "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it"),
                new TextDocument("doc2", "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
                         "The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."),
            };

            AnswersFromTextOptions options = new AnswersFromTextOptions("How long does it takes to charge a surface?", records);
            Response<AnswersFromTextResult> response = client.GetAnswersFromText(options);

           foreach (TextAnswer answer in response.Value.Answers)
            {
                if (answer.Confidence > .9)
                {
                    string BestAnswer = response.Value.Answers[0].Answer;

                    Console.WriteLine($"Q:{options.Question}");
                    Console.WriteLine($"A:{BestAnswer}");
                    Console.WriteLine($"Confidence Score: ({response.Value.Answers[0].Confidence:P2})"); //:P2 converts the result to a percentage with 2 decimals of accuracy. 
                    break;
                }
                else
                {
                    Console.WriteLine($"Q:{options.Question}");
                    Console.WriteLine("No answers met the requested confidence score.");
                    break;
                }
            }

        }
    }
}

Per eseguire il codice precedente, sostituire Program.cs con il contenuto del blocco di script precedente e modificare le endpoint variabili e credential in modo che corrispondano alla risorsa del linguaggio creata come parte dei prerequisiti.

In questo caso, viene eseguita l'iterazione di tutte le risposte e viene restituita solo la risposta con il punteggio di attendibilità più alto maggiore di 0,9. Per altre informazioni sulle opzioni disponibili con GetAnswersFromText.

Usare questa guida introduttiva per la libreria client di risposta alle domande personalizzata per Python per:

  • Ottenere una risposta da un progetto.
  • Ottenere una risposta da un corpo di testo inviato insieme alla domanda.
  • Ottenere il punteggio di attendibilità per la risposta alla domanda.

Pacchetto della documentazione di riferimento | (PyPI) | Codice sorgente della libreria di esempi aggiuntivo |

Prerequisiti

  • Sottoscrizione di Azure: creare un account gratuito
  • Python 3.x
  • Per rispondere alle domande personalizzate è necessaria una risorsa lingua con la funzionalità di risposta alle domande personalizzata abilitata per generare una chiave API e un endpoint.
    • Dopo la distribuzione della risorsa lingua, selezionare Vai alla risorsa. È necessaria la chiave e l'endpoint della risorsa creata per connettersi all'API. Incollare la chiave e l'endpoint nel codice seguente più avanti nella guida introduttiva.
  • Per creare una risorsa language con l'interfaccia della riga di comando di Azure, specificare le altre proprietà seguenti: --api-properties qnaAzureSearchEndpointId=/subscriptions/<azure-subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Search/searchServices/<azure-search-service-name> qnaAzureSearchEndpointKey=<azure-search-service-auth-key>
  • Progetto esistente su cui eseguire una query. Se non è stato configurato un progetto, è possibile seguire le istruzioni nella guida introduttiva di Language Studio. In alternativa, aggiungere un progetto che usa questo URL della Guida utente di Surface come origine dati.

Configurazione

Installare la libreria client

Dopo l'installazione di Python, è possibile installare la libreria client con:

pip install azure-ai-language-questionanswering

Eseguire una query su un progetto

Generare una risposta da un progetto

L'esempio seguente consentirà di eseguire query su un progetto usando get_answers per ottenere una risposta alla domanda. È possibile copiare questo codice in un file .py dedicato o in una cella in Jupyter Notebook/Lab.

È necessario aggiornare il codice seguente e specificare i propri valori per le variabili seguenti.

Nome variabile Valore
endpoint Questo valore è disponibile nella sezione Chiavi &ed endpoint durante l'esame della risorsa dalla portale di Azure. In alternativa, è possibile trovare il valore in Language Studio>question answering>Deploy project>Get prediction URL (Distribuisci progetto Get prediction URL). Un endpoint di esempio è: https://southcentralus.api.cognitive.microsoft.com/
credential Questo valore è disponibile nella sezione Chiavi &ed endpoint durante l'esame della risorsa dalla portale di Azure. È possibile usare Key1 o Key2. Avere sempre due chiavi valide per la rotazione sicura delle chiavi con tempi di inattività zero. In alternativa, è possibile trovare il valore in Language Studio>question answering>Deploy project>Get prediction URL (Distribuisci progetto Get prediction URL). Il valore della chiave fa parte della richiesta di esempio.
knowledge_base_project Nome del progetto di risposta alle domande.
deployment Esistono due valori possibili: test, e production. productiondipende dall'utente che ha distribuito il progetto dalla domanda di Language Studio>che risponde al>progetto Deploy( Distribuisci progetto).

Importante

Al termine, ricordarsi di rimuovere la chiave dal codice e non renderlo mai pubblico. Per l'ambiente di produzione, usare un modo sicuro per archiviare e accedere alle credenziali, ad esempio Azure Key Vault. Per altre informazioni, vedere l'articolo sulla sicurezza dei servizi di intelligenza artificiale di Azure.

from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient

endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("{YOUR-LANGUAGE-RESOURCE-KEY}")
knowledge_base_project = "{YOUR-PROJECT-NAME}"
deployment = "production"

def main():
    client = QuestionAnsweringClient(endpoint, credential)
    with client:
        question="How much battery life do I have left?"
        output = client.get_answers(
            question = question,
            project_name=knowledge_base_project,
            deployment_name=deployment
        )
    print("Q: {}".format(question))
    print("A: {}".format(output.answers[0].answer))

if __name__ == '__main__':
    main()

Durante la scrittura di hardcodeding delle variabili per l'esempio. Per la produzione, è consigliabile usare un modo sicuro per archiviare e accedere alle credenziali, Ad esempio, l'insieme di credenziali delle chiavi di Azure fornisce un'archiviazione delle chiavi sicura.

Quando si esegue il codice precedente, se si usa l'origine dati dai prerequisiti si ottiene una risposta simile alla seguente:

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.

Per informazioni sull'attendibilità della risposta personalizzata alle domande è che si tratta della risposta corretta, aggiungere un'altra istruzione print sotto le istruzioni print esistenti:

print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line 

A questo punto si riceverà un risultato con un punteggio di attendibilità:

Q: How much battery life do I have left?
A: If you want to see how much battery you have left, go to **Start  **> **Settings  **> **Devices  **> **Bluetooth & other devices  **, then find your pen. The current battery level will appear under the battery icon.
Confidence Score: 0.9185

Il punteggio di attendibilità restituisce un valore compreso tra 0 e 1. Si può pensare a questo come una percentuale e moltiplicare per 100 in modo che un punteggio di attendibilità pari a 0,9185 significa che la risposta alle domande personalizzata è del 91,85% sicura che questa è la risposta corretta alla domanda in base al progetto.

Se si desidera escludere risposte in cui il punteggio di attendibilità scende al di sotto di una determinata soglia, è possibile modificare AnswerOptions per aggiungere il confidence_threshold parametro .

        output = client.get_answers(
            confidence_threshold = 0.95, #add this line
            question = question,
            project_name=knowledge_base_project,
            deployment_name=deployment
        )

Poiché si è certi dell'esecuzione precedente del codice che il punteggio di attendibilità è: .9185 impostare la soglia per .95 ottenere la risposta predefinita restituita.

Q: How much battery life do I have left?
A: No good match found in KB
Confidence Score: 0.0

Eseguire query sul testo senza un progetto

È anche possibile usare risposte personalizzate alle domande senza un progetto con get_answers_from_text. In questo caso, è possibile fornire risposte personalizzate alle domande con una domanda e con i record di testo associati che si desidera cercare una risposta al momento dell'invio della richiesta.

Per questo esempio, è sufficiente modificare le variabili per endpoint e credential.

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.language.questionanswering import QuestionAnsweringClient
from azure.ai.language.questionanswering import models as qna

endpoint = "https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/"
credential = AzureKeyCredential("YOUR-LANGUAGE-RESOURCE-KEY")

def main():
    client = QuestionAnsweringClient(endpoint, credential)
    with client:
        question="How long does it takes to charge a surface?"
        input = qna.AnswersFromTextOptions(
            question=question,
            text_documents=[
                "Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. " +
                "It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.",
                "You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. " +
                "The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface.",
            ]
        )


        output = client.get_answers_from_text(input)

    best_answer = [a for a in output.answers if a.confidence > 0.9][0]
    print(u"Q: {}".format(input.question))
    print(u"A: {}".format(best_answer.answer))
    print("Confidence Score: {}".format(output.answers[0].confidence))

if __name__ == '__main__':
    main()

È possibile copiare questo codice in un file di .py dedicato o in una nuova cella in Jupyter Notebook/Lab. Questo esempio restituisce un risultato di:

Q: How long does it takes to charge surface?
A: Power and charging. It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you're using your Surface for power-intensive activities like gaming or video streaming while you're charging it.
Confidence Score: 0.9254655838012695

In questo caso, viene eseguita l'iterazione di tutte le risposte e viene restituita solo la risposta con il punteggio di attendibilità più alto maggiore di 0,9. Per altre informazioni sulle opzioni disponibili con get_answers_from_text, vedere i parametri AnswersFromTextOptions.

Pulire le risorse

Se si vuole pulire e rimuovere una sottoscrizione dei servizi di intelligenza artificiale di Azure, è possibile eliminare la risorsa o il gruppo di risorse. L'eliminazione del gruppo di risorse comporta anche l'eliminazione di tutte le altre risorse associate.

Esplorare l'API REST

Per informazioni sull'automazione della pipeline di risposte alle domande personalizzate, vedere la documentazione dell'API REST. Attualmente la funzionalità di creazione è disponibile solo tramite l'API REST:

Passaggi successivi