Guida introduttiva: risposta alle domande

Attività iniziali con la libreria client di risposte alle domande personalizzate. Seguire questi passaggi per installare il pacchetto e provare il codice di esempio per le attività di base.

È possibile creare un progetto di risposta alle domande dal proprio contenuto, ad esempio domande frequenti o manuali del prodotto. Questo articolo include un esempio di creazione di un progetto di risposta alle domande 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 Azure Active Directory, la sottoscrizione, il nome della risorsa della lingua selezionato al momento della creazione della risorsa.

Creare il primo progetto di risposta 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.

    Open custom question answering

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

    Connect to Azure Search

  4. Selezionare Abilita risposte alle domande personalizzate, scegliere la risorsa ricerca di Azure da collegare e quindi selezionare Applica.

    Enable custom question answering

  5. Tornare alla scheda Language Studio. Potrebbe essere necessario aggiornare questa pagina per registrare la modifica alla 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> Seleziona avanti.

  7. Immettere un nome di progetto sample-project, una descrizione del progetto di risposta alla prima domanda e lasciare la risposta predefinita con un'impostazione di Nessuna risposta trovata.

  8. Esaminare le scelte e selezionare Crea progetto

  9. Nella pagina Gestisci origini selezionare AggiungiURL di origine>.

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

    Nome URL Valore URL
    guida utente 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 dell'origine per aggiungere altri set di risposte alle domande personalizzate.

Testare il progetto

  1. Selezionare il collegamento all'origine, verrà aperta la pagina modifica knowledge base.

  2. Selezionare Test nella barra > dei menu Immettere la domanda Ricerca per categorie configurare il mio libro di superficie?. Una risposta verrà generata in base alle coppie di risposte alla domanda identificate automaticamente ed estratte dall'URL di origine:

    Test question chat interface

    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 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.

    See the confidence interval

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

Distribuire il progetto

  1. Selezionare l'icona Distribuisci knowledge base per immettere il menu Distribuisci knowledge base.

    Deploy knowledge base

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

  2. Selezionare Distribuisci> e quindi quando richiesto selezionare Di nuovo Distribuisci .

    Successful deployment

    Il progetto viene ora distribuito correttamente. È possibile usare l'endpoint per rispondere alle domande nell'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
  • La risposta alle domande richiede 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. È necessario che 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 del linguaggio con l'interfaccia della riga di comando di Azure, fornire le proprietà aggiuntive seguenti durante la creazione della risorsa di risorse configurare la risposta personalizzata alle domande con la risorsa lingua --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>
  • Un knowledge base esistente da eseguire una query. Se non è stato configurato un knowledge base, è possibile seguire le istruzioni riportate nella guida introduttiva di Language Studio. In alternativa, aggiungere un knowledge base che usa l'URL della Guida utente di Surface come origine dati.

Eseguire query su una knowledge base

Generare una risposta da un knowledge base

Per eseguire una query su un progetto/knowledge base con le API REST e cURL, sono necessarie le informazioni seguenti:

Nome variabile Valore
Endpoint Questo valore è disponibile nella sezione Endpoint chiavi & durante l'esame della risorsa dalla portale di Azure. In alternativa, è possibile trovare il valore in Language Studio>che risponde alla risposta all'URL> di stimaDistribuisci knowledge base>Get. Un endpoint di esempio è: https://southcentralus.api.cognitive.microsoft.com/
API-Key Questo valore è disponibile nella sezione Endpoint chiavi & 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>che risponde alla risposta all'URL> di stimaDistribuisci knowledge base>Get. Il valore della chiave fa parte della richiesta di esempio.
Project Nome del progetto di risposta alle domande.
Deployment Esistono due valori possibili: teste production. productiondipende dalla distribuzione dell'knowledge base dalla domanda di Language Studio>che risponde alle> knowledge basedi distribuzione.

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: {YOUR_API_KEY}" -H "Content-Type: application/json" -d '{
  "question": "How much battery life do I have left?"
  }'  'https://{YOUR_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 al 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 rispondere alle domande è 91,85% sicuro che questa è la risposta corretta alla domanda in base al knowledge base.

Se si desidera escludere le risposte in cui il punteggio di attendibilità è inferiore a una determinata soglia, è possibile aggiungere il confidenceScoreThreshold parametro.

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

Poiché si conosce dall'esecuzione precedente del codice che il punteggio di attendibilità è: .9185 impostando la soglia su .95 verrà restituita la risposta predefinita .

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

Eseguire query di testo senza un knowledge base

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

Per questo esempio è necessario modificare solo le variabili per API KEY e ENDPOINT.

curl -X POST -H "Ocp-Apim-Subscription-Key: {YOUR_API_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"
}'  'https://{YOUR_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 per .NET per:

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

Documentazione di| riferimento sulle API Codice | sorgente Pacchetti (NuGet) | Esempi |

Prerequisiti

  • Sottoscrizione di Azure: creare un account gratuito
  • IDE di Visual Studio o la versione corrente di .NET Core.
  • La risposta alle domande richiede 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. È necessario che 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 del linguaggio con l'interfaccia della riga di comando di Azure, fornire le proprietà aggiuntive seguenti durante la creazione della risorsa di risorse configurare la risposta personalizzata alle domande con la risorsa lingua --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>
  • Un knowledge base esistente da eseguire una query. Se non è stato configurato un knowledge base, è possibile seguire le istruzioni riportate nella guida introduttiva di Language Studio. In alternativa, aggiungere un knowledge base che usa l'URL della Guida utente di Surface come origine dati.

Configurazione

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 risposta alle domande personalizzata per .NET con il comando seguente:

dotnet add package Azure.AI.Language.QuestionAnswering

Eseguire query su una knowledge base

Generare una risposta da un knowledge base

L'esempio seguente consente di eseguire query su un knowledge base 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 Endpoint chiavi & durante l'esame della risorsa dalla portale di Azure. In alternativa, è possibile trovare il valore in Language Studio>che risponde alla risposta all'URL> di stimaDistribuisci knowledge base>Get. Un endpoint di esempio è: https://southcentralus.api.cognitive.microsoft.com/
credential Questo valore è disponibile nella sezione Endpoint chiavi & 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>che risponde alla risposta all'URL> di stimaDistribuisci knowledge base>Get. Il valore della chiave fa parte della richiesta di esempio.
projectName Nome del progetto di risposta alle domande.
deploymentName Esistono due valori possibili: teste production. productiondipende dalla distribuzione dell'knowledge base dalla domanda di Language Studio>che risponde alle> knowledge basedi distribuzione.

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)
        {

            Uri endpoint = new Uri("https://{YOUR-ENDPOINT}.api.cognitive.microsoft.com/");
            AzureKeyCredential credential = new AzureKeyCredential("{YOUR-LANGUAGE-RESOURCE-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}");
            }
        }
    }
}

Sebbene si stia codificando in modo rigido le variabili per l'esempio. Per la produzione, è consigliabile usare un modo sicuro per archiviare e accedere alle credenziali, Ad esempio, Azure Key Vault fornisce una risorsa di archiviazione sicura per le chiavi.

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 sul modo in cui la risposta alla domanda sicura è che questa è la risposta corretta aggiungere un'istruzione di stampa aggiuntiva sotto le istruzioni di stampa 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 rispondere alle domande è 91,85% sicuro che questa è la risposta corretta alla domanda in base al knowledge base.

Se si desidera escludere le risposte in cui il punteggio di attendibilità è inferiore a 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 conosce dall'esecuzione precedente del codice che il punteggio di attendibilità è: .9185 impostando la soglia su .95 verrà restituita la risposta predefinita .

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

Eseguire query di testo senza un knowledge base

È anche possibile usare la risposta alle domande senza un knowledge base con GetAnswersFromText. In questo caso, si fornisce una risposta alle domande con una domanda e i record di testo associati che si desidera cercare una risposta al momento dell'invio della richiesta.

Per questo esempio è necessario modificare solo 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 con Program.cs il contenuto del blocco di script precedente e modificare le endpoint variabili e credential per corrispondere 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 per Python:

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

Documentazione di | riferimento sulle API Codice | sorgente Pacchetto (PyPI) | Esempi di Python |

Prerequisiti

  • Sottoscrizione di Azure: creare un account gratuito
  • Python 3.x
  • La risposta alle domande richiede 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. È necessario che 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 del linguaggio con l'interfaccia della riga di comando di Azure, fornire le proprietà aggiuntive seguenti durante la creazione della risorsa di risorse configurare la risposta personalizzata alle domande con la risorsa lingua --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>
  • Un knowledge base esistente da eseguire una query. Se non è stato configurato un knowledge base, è possibile seguire le istruzioni riportate nella guida introduttiva di Language Studio. In alternativa, aggiungere un knowledge base che usa l'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 query su una knowledge base

Generare una risposta da un knowledge base

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

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

Nome variabile Valore
endpoint Questo valore è disponibile nella sezione Endpoint chiavi & durante l'esame della risorsa dalla portale di Azure. In alternativa, è possibile trovare il valore in Language Studio>che risponde alla risposta all'URL> di stimaDistribuisci knowledge base>Get. Un endpoint di esempio è: https://southcentralus.api.cognitive.microsoft.com/
credential Questo valore è disponibile nella sezione Endpoint chiavi & 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>che risponde alla risposta all'URL> di stimaDistribuisci knowledge base>Get. 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: teste production. productiondipende dalla distribuzione dell'knowledge base dalla domanda di Language Studio>che risponde alle> knowledge basedi distribuzione.
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()

Sebbene si stia codificando in modo rigido le variabili per l'esempio. Per la produzione, è consigliabile usare un modo sicuro per archiviare e accedere alle credenziali, Ad esempio, Azure Key Vault fornisce una risorsa di archiviazione sicura per le chiavi.

Quando si esegue il codice precedente, se si usa l'origine dati dai prerequisiti si otterrà una risposta simile al 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 sul modo in cui la risposta alla domanda sicura è che questa è la risposta corretta aggiungere un'istruzione di stampa aggiuntiva sotto le istruzioni di stampa esistenti:

print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence_score)) # 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 rispondere alle domande è 91,85% sicuro che questa è la risposta corretta alla domanda in base al knowledge base.

Se si desidera escludere risposte in cui il punteggio di attendibilità è inferiore a 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 conosce dall'esecuzione precedente del codice che il punteggio di attendibilità è: .9185 impostando la soglia su .95 verrà restituita la risposta predefinita .

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

Eseguire query di testo senza un knowledge base

È anche possibile usare la risposta alle domande senza un knowledge base con get_answers_from_text. In questo caso, si fornisce una risposta alle domande con una domanda e i record di testo associati che si desidera cercare una risposta al momento dell'invio della richiesta.

Per questo esempio è necessario modificare solo 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 con estensione py dedicato o in una nuova cella in Jupyter Notebook/Lab. Questo esempio restituirà 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 a Servizi cognitivi, è possibile eliminare la risorsa o il gruppo di risorse. Eliminando il gruppo di risorse vengono eliminate anche tutte le altre risorse associate.

Esplorare l'API REST

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

Passaggi successivi