Snabbstart: svar på anpassade frågor

Kommentar

Azure Open AI On Your Data använder stora språkmodeller (LLM) för att ge liknande resultat som svar på anpassade frågor. Om du vill ansluta ett befintligt projekt för svar på anpassade frågor till Azure Open AI På dina data kan du läsa vår guide.

Kommentar

Vill du migrera dina arbetsbelastningar från QnA Maker? Se vår migreringsguide för information om funktionsjämförelser och migreringssteg.

Kom igång med den anpassade frågan som svarar på klientbiblioteket. Följ de här stegen för att installera paketet och prova exempelkoden för grundläggande uppgifter.

Du kan skapa en anpassad fråga som besvarar projektet från ditt eget innehåll, till exempel vanliga frågor och svar eller produkthandböcker. Den här artikeln innehåller ett exempel på hur du skapar en anpassad fråga som besvarar projekt från en produkthandbok för att besvara frågor.

Förutsättningar

  • Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
  • En språkresurs med funktionen för svar på anpassade frågor aktiverad. Kom ihåg ditt Microsoft Entra-ID, prenumeration, språkresursnamn som du valde när du skapade resursen.

Skapa ditt första projekt för svar på anpassade frågor

  1. Logga in på Language Studio med dina Azure-autentiseringsuppgifter.

  2. Rulla ned till avsnittet Svarsfrågor och välj Öppna svar på anpassade frågor.

    Öppna svar på anpassade frågor

  3. Om resursen ännu inte är ansluten till Azure Search väljer du Anslut till Azure Search. Då öppnas en ny webbläsarflik i fönstret Funktioner för resursen i Azure-portalen.

    Anslut till Azure Search

  4. Välj Aktivera svar på anpassade frågor, välj den Azure Search-resurs som du vill länka till och välj sedan Använd.

    Aktivera svar på anpassade frågor

  5. Gå tillbaka till fliken Language Studio. Du kan behöva uppdatera den här sidan för att den ska kunna registrera ändringen av resursen. Välj Skapa nytt projekt.

  6. Välj det alternativ som jag vill ange språket för alla projekt som skapats i den här resursen> och välj Engelska> Välj nästa.

  7. Ange ett projektnamn för Sample-project, en beskrivning av Mitt första frågesvarsprojekt och lämna standardsvaret med inställningen Inget svar hittades.

  8. Granska dina val och välj Skapa projekt

  9. På sidan Hantera källor väljer du Lägg till käll-URL>:er.

  10. Välj Lägg till URL ange följande värden och välj sedan Lägg till alla:

    URL-namn URL-värde
    Användarhandbok för Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    Extraheringsprocessen tar en stund att läsa dokumentet och identifiera frågor och svar.

    När du har lagt till källan kan du redigera källinnehållet för att lägga till fler anpassade svarsuppsättningar för frågor.

Testa projektet

  1. Välj länken till källan. Då öppnas sidan redigera projekt.

  2. Välj Testa i menyraden > Ange frågan Hur gör jag för att konfigurera min surface-bok?. Ett svar genereras baserat på de frågesvarspar som automatiskt identifierades och extraherades från käll-URL:en:

    Chattgränssnitt för testfråga

    Om du markerar kryssrutan för att inkludera korta svarssvar ser du också ett exakt svar, om tillgängligt, tillsammans med svarspassagen i testfönstret när du ställer en fråga.

  3. Välj Granska för att undersöka svaret i detalj. Testfönstret används för att testa dina ändringar i projektet innan du distribuerar projektet.

    Se konfidensintervallet

    Från gränssnittet Inspektera kan du se hur säkert det här svaret kommer att besvara frågan och redigera ett givet svarspar för frågor och svar direkt.

Distribuera projektet

  1. Välj ikonen Distribuera projekt för att ange menyn distribuera projekt.

    Distribuera projekt

    När du distribuerar ett projekt flyttas innehållet i projektet från indexet test till ett prod index i Azure Search.

  2. Välj Distribuera> och välj sedan Distribuera igen när du uppmanas att göra det.

    Distributionen har slutförts

    Projektet har nu distribuerats. Du kan använda slutpunkten för att besvara frågor i ditt eget anpassade program för att besvara eller i en robot.

Förutsättningar

  • Den aktuella versionen av cURL. Flera kommandoradsväxlar används i snabbstarterna, som anges i cURL-dokumentationen.
  • Azure-prenumeration – Skapa en kostnadsfritt
  • Svar på anpassade frågor kräver en språkresurs med funktionen för svar på anpassade frågor aktiverad för att generera en API-nyckel och slutpunkt.
    • När språkresursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från den resurs som du skapar för att ansluta till API:et. Klistra in din nyckel och slutpunkt i koden nedan senare i snabbstarten.
  • Om du vill skapa en språkresurs med Azure CLI tillhandahåller du följande ytterligare egenskaper: --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>
  • Ett befintligt projekt att köra frågor mot. Om du inte har konfigurerat ett projekt kan du följa anvisningarna i Language Studio-snabbstarten. Eller lägg till ett projekt som använder den här url:en för användarhandboken för Surface som datakälla.

Konfigurera

Skapa miljövariabler

Ditt program måste autentiseras för att skicka API-begäranden. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter. I det här exemplet skriver du dina autentiseringsuppgifter till miljövariabler på den lokala dator som kör programmet.

Dricks

Inkludera inte nyckeln direkt i koden och publicera den aldrig offentligt. Mer autentiseringsalternativ som Azure Key Vault finns i säkerhetsartikeln för Azure AI-tjänster.

Om du vill ange miljövariabeln för din språkresursnyckel öppnar du ett konsolfönster och följer anvisningarna för operativsystemet och utvecklingsmiljön.

  1. Om du vill ange LANGUAGE_KEY miljövariabeln ersätter du your-key med en av nycklarna för resursen.
  2. Om du vill ange LANGUAGE_ENDPOINT miljövariabeln ersätter du your-endpoint med slutpunkten för resursen.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Kommentar

Om du bara behöver komma åt miljövariablerna i den aktuella konsolen som körs kan du ange miljövariabeln med set i stället för setx.

När du har lagt till miljövariablerna kan du behöva starta om alla program som körs och som behöver läsa miljövariablerna, inklusive konsolfönstret. Om du till exempel använder Visual Studio som redigerare startar du om Visual Studio innan du kör exemplet.

Fråga ett projekt

Generera ett svar från ett projekt

Om du vill köra frågor mot ett anpassat frågesvarsprojekt med REST API:er och cURL behöver du följande information:

Variabelnamn Värde
Endpoint Det här värdet finns i avsnittet Nycklar och slutpunkt när du undersöker resursen från Azure-portalen. Du kan också hitta värdet i Language Studio-frågan>som>svarar på Distribuera projektet>Hämta förutsägelse-URL. En exempelslutpunkt är: https://southcentralus.api.cognitive.microsoft.com/
API-Key Det här värdet finns i avsnittet Nycklar och slutpunkt när du undersöker resursen från Azure-portalen. Du kan använda antingen Key1 eller Key2. Har alltid två giltiga nycklar alltid för säker nyckelrotation utan stilleståndstid. Du kan också hitta värdet i Language Studio-frågan>som>svarar på Distribuera projektet>Hämta förutsägelse-URL. Nyckelvärdet är en del av exempelbegäran.
Project Namnet på ditt anpassade frågesvarsprojekt.
Deployment Det finns två möjliga värden: test, och production. productionär beroende av att du har distribuerat projektet från Language Studio-frågan>som>svarar på Distribuera projekt.

cURL-kommandot körs från ett BASH-gränssnitt. Redigera det här kommandot med ditt eget resursnamn, resursnyckel och JSON-värden och storleken på 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}'

När du kör koden ovan får du ett svar som ser ut så här om du använder datakällan från förhandskraven:

{
"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": []
      }
    }
  ]
}

confidenceScore Returnerar ett värde mellan 0 och 1. Du kan tänka dig detta som en procentandel och multiplicera med 100 så en konfidenspoäng på 0,9185 innebär att svar på anpassade frågor är 91,85 % övertygade om att detta är rätt svar på frågan baserat på projektet.

Om du vill undanta svar där konfidenspoängen understiger ett visst tröskelvärde kan du lägga till parametern confidenceScoreThreshold .

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}'

Eftersom vi vet från vår tidigare körning av koden att vår konfidenspoäng är: .9185 om du anger tröskelvärdet till .95 kommer standardsvaret att returneras.

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

Frågetext utan projekt

Du kan också använda svar på anpassade frågor utan ett projekt med den fördefinierade anpassade frågan som svarar på REST API, som anropas via query-text. I det här fallet anger du frågor som besvaras med både en fråga och tillhörande textposter som du vill söka efter ett svar när begäran skickas.

I det här exemplet behöver du bara ändra variablerna för API KEY och 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'

Det här exemplet returnerar ett resultat av:

{  
"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
    }
  ]
}

Använd den här snabbstarten för den anpassade frågan som besvarar klientbiblioteket för .NET för att:

  • Få ett svar från ett projekt.
  • Få ett svar från en texttext som du skickar tillsammans med din fråga.
  • Få förtroendepoängen för svaret på din fråga.

Referensdokumentation Paket (NuGet) | Ytterligare exempel | Bibliotekskällkod |

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt
  • Visual Studio IDE eller den aktuella versionen av .NET Core.
  • Svar på anpassade frågor kräver en språkresurs med funktionen för svar på anpassade frågor aktiverad för att generera en API-nyckel och slutpunkt.
    • När språkresursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från den resurs som du skapar för att ansluta till API:et. Klistra in din nyckel och slutpunkt i koden nedan senare i snabbstarten.
  • Om du vill skapa en språkresurs med Azure CLI tillhandahåller du följande ytterligare egenskaper: --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>
  • Ett befintligt projekt att köra frågor mot. Om du inte har konfigurerat ett projekt kan du följa anvisningarna i Language Studio-snabbstarten. Eller lägg till ett projekt som använder den här url:en för användarhandboken för Surface som datakälla.

Konfigurera

Skapa miljövariabler

Ditt program måste autentiseras för att skicka API-begäranden. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter. I det här exemplet skriver du dina autentiseringsuppgifter till miljövariabler på den lokala dator som kör programmet.

Dricks

Inkludera inte nyckeln direkt i koden och publicera den aldrig offentligt. Mer autentiseringsalternativ som Azure Key Vault finns i säkerhetsartikeln för Azure AI-tjänster.

Om du vill ange miljövariabeln för din språkresursnyckel öppnar du ett konsolfönster och följer anvisningarna för operativsystemet och utvecklingsmiljön.

  1. Om du vill ange LANGUAGE_KEY miljövariabeln ersätter du your-key med en av nycklarna för resursen.
  2. Om du vill ange LANGUAGE_ENDPOINT miljövariabeln ersätter du your-endpoint med slutpunkten för resursen.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Kommentar

Om du bara behöver komma åt miljövariablerna i den aktuella konsolen som körs kan du ange miljövariabeln med set i stället för setx.

När du har lagt till miljövariablerna kan du behöva starta om alla program som körs och som behöver läsa miljövariablerna, inklusive konsolfönstret. Om du till exempel använder Visual Studio som redigerare startar du om Visual Studio innan du kör exemplet.

CLI

I ett konsolfönster (till exempel cmd, PowerShell eller Bash) använder du dotnet new kommandot för att skapa en ny konsolapp med namnet question-answering-quickstart. Det här kommandot skapar ett enkelt "Hello World"-C#-projekt med en enda källfil: program.cs.

dotnet new console -n question-answering-quickstart

Ändra katalogen till den nyligen skapade appmappen. Du kan skapa programmet med:

dotnet build

Kompileringsutdata får inte innehålla några varningar eller fel.

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

I programkatalogen installerar du den anpassade frågan som svarar på klientbiblioteket för .NET med följande kommando:

dotnet add package Azure.AI.Language.QuestionAnswering

Fråga ett projekt

Generera ett svar från ett projekt

I exemplet nedan kan du fråga ett projekt med för GetAnswers att få ett svar på din fråga.

Du måste uppdatera koden nedan och ange dina egna värden för följande variabler.

Variabelnamn Värde
endpoint Det här värdet finns i avsnittet Nycklar och slutpunkt när du undersöker resursen från Azure-portalen. Du kan också hitta värdet i Language Studio-frågan>som>svarar på Distribuera projektet>Hämta förutsägelse-URL. En exempelslutpunkt är: https://southcentralus.api.cognitive.microsoft.com/
credential Det här värdet finns i avsnittet Nycklar och slutpunkt när du undersöker resursen från Azure-portalen. Du kan använda antingen Key1 eller Key2. Har alltid två giltiga nycklar alltid för säker nyckelrotation utan stilleståndstid. Du kan också hitta värdet i Language Studio-frågan>som>svarar på Distribuera projektet>Hämta förutsägelse-URL. Nyckelvärdet är en del av exempelbegäran.
projectName Namnet på ditt anpassade frågesvarsprojekt.
deploymentName Det finns två möjliga värden: test, och production. productionär beroende av att du har distribuerat projektet från Language Studio-frågan>som>svarar på Distribuera projekt.

Viktigt!

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i säkerhetsartikeln för Azure AI-tjänster.

Öppna filen program.cs från projektkatalogen och ersätt med följande kod:

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}");
            }
        }
    }
}

Medan vi hårdkodar variablerna för vårt exempel. För produktion bör du överväga att använda ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter. Azure Key Vault tillhandahåller till exempel säker nyckellagring.

När du har uppdaterat Program.cs med koden ovan och ersatt rätt variabelvärden. Kör programmet med kommandot från programkatalogen dotnet run .

dotnet run

Svaret ser ut så här:

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.

Om du vill ha information om hur säker svar på anpassade frågor är att det här är rätt svar lägger du till ytterligare en utskriftsinstruktion under de befintliga utskriftsinstruktionerna:

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

Om du kör dotnet run igen får du nu ett resultat med en konfidenspoäng:

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)

Konfidenspoängen returnerar ett värde mellan 0 och 1. Du kan tänka dig detta som en procentandel och multiplicera med 100 så en konfidenspoäng på 0,9185 innebär att svar på anpassade frågor är 91,85 % övertygade om att detta är rätt svar på frågan baserat på projektet.

Om du vill undanta svar där konfidenspoängen understiger ett visst tröskelvärde använder AnswerOptions du för att lägga ConfidenceScoreThreshold till egenskapen.

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

Eftersom vi vet från vår tidigare körning av koden att vår konfidenspoäng är: .9185 om du anger tröskelvärdet till .95 kommer standardsvaret att returneras.

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

Frågetext utan projekt

Du kan också använda svar på anpassade frågor utan ett projekt med GetAnswersFromText. I det här fallet anger du anpassade frågor som besvaras med både en fråga och de associerade textposter som du vill söka efter ett svar när begäran skickas.

I det här exemplet behöver du bara ändra variablerna för endpoint och 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;
                }
            }

        }
    }
}

Om du vill köra koden ovan ersätter Program.cs du med innehållet i skriptblocket ovan och ändrar variablerna och credential så att de endpoint motsvarar den språkresurs som du skapade som en del av förutsättningarna.

I det här fallet itererar vi genom alla svar och returnerar bara svaret med den högsta konfidenspoängen som är större än 0,9. Om du vill veta mer om de alternativ som är tillgängliga med GetAnswersFromText.

Använd den här snabbstarten för den anpassade frågan som besvarar klientbiblioteket för Python för att:

  • Få ett svar från ett projekt.
  • Få ett svar från en texttext som du skickar tillsammans med din fråga.
  • Få förtroendepoängen för svaret på din fråga.

Referensdokumentation Paket (PyPI) | Ytterligare exempel | Bibliotekskällkod |

Förutsättningar

  • Azure-prenumeration – Skapa en kostnadsfritt
  • Python 3.x
  • Svar på anpassade frågor kräver en språkresurs med funktionen för svar på anpassade frågor aktiverad för att generera en API-nyckel och slutpunkt.
    • När språkresursen har distribuerats väljer du Gå till resurs. Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta till API:et. Klistra in din nyckel och slutpunkt i koden nedan senare i snabbstarten.
  • Om du vill skapa en språkresurs med Azure CLI anger du följande andra egenskaper: --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>
  • Ett befintligt projekt att köra frågor mot. Om du inte har konfigurerat ett projekt kan du följa anvisningarna i Language Studio-snabbstarten. Eller lägg till ett projekt som använder den här url:en för användarhandboken för Surface som datakälla.

Konfigurera

Installera klientbiblioteket

När du har installerat Python kan du installera klientbiblioteket med:

pip install azure-ai-language-questionanswering

Fråga ett projekt

Generera ett svar från ett projekt

I exemplet nedan kan du fråga ett projekt med hjälp av get_answers för att få ett svar på din fråga. Du kan kopiera den här koden till en dedikerad .py fil eller till en cell i Jupyter Notebook/Lab.

Du måste uppdatera koden nedan och ange dina egna värden för följande variabler.

Variabelnamn Värde
endpoint Det här värdet finns i avsnittet Nycklar och slutpunkt när du undersöker resursen från Azure-portalen. Du kan också hitta värdet i Language Studio-frågan>som>svarar på Distribuera projektet>Hämta förutsägelse-URL. En exempelslutpunkt är: https://southcentralus.api.cognitive.microsoft.com/
credential Det här värdet finns i avsnittet Nycklar och slutpunkt när du undersöker resursen från Azure-portalen. Du kan använda antingen Key1 eller Key2. Har alltid två giltiga nycklar alltid för säker nyckelrotation utan stilleståndstid. Du kan också hitta värdet i Language Studio-frågan>som>svarar på Distribuera projektet>Hämta förutsägelse-URL. Nyckelvärdet är en del av exempelbegäran.
knowledge_base_project Namnet på ditt frågesvarsprojekt.
deployment Det finns två möjliga värden: test, och production. productionär beroende av att du har distribuerat projektet från Language Studio-frågan>som>svarar på Distribuera projekt.

Viktigt!

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure Key Vault. Mer information finns i artikeln om Säkerhet för Azure AI-tjänster.

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

Medan vi hårdkodar variablerna för vårt exempel. För produktion bör du överväga att använda ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter. Azure Key Vault tillhandahåller till exempel säker nyckellagring.

När du kör koden ovan får du ett svar som ser ut så här om du använder datakällan från förhandskraven:

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.

Om du vill ha information om hur säker svar på anpassade frågor är att det här är rätt svar lägger du till en annan utskriftsinstruktion under de befintliga utskriftsinstruktionerna:

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

Nu får du ett resultat med en konfidenspoäng:

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

Konfidenspoängen returnerar ett värde mellan 0 och 1. Du kan tänka dig detta som en procentandel och multiplicera med 100 så en konfidenspoäng på 0,9185 innebär att svar på anpassade frågor är 91,85 % övertygade om att detta är rätt svar på frågan baserat på projektet.

Om du vill undanta svar där konfidenspoängen ligger under ett visst tröskelvärde kan du ändra AnswerOptions för att lägga till parametern confidence_threshold .

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

Eftersom vi vet från vår tidigare körning av koden att vår konfidenspoäng är: .9185 att ställa in tröskelvärdet så att .95 standardsvaret returneras.

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

Frågetext utan projekt

Du kan också använda svar på anpassade frågor utan projekt med get_answers_from_text. I det här fallet anger du anpassade frågor som besvaras med både en fråga och de associerade textposter som du vill söka efter ett svar när begäran skickas.

I det här exemplet behöver du bara ändra variablerna för endpoint och 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()

Du kan kopiera den här koden till en dedikerad .py fil eller till en ny cell i Jupyter Notebook/Lab. Det här exemplet returnerar ett resultat av:

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

I det här fallet itererar vi genom alla svar och returnerar bara svaret med den högsta konfidenspoängen som är större än 0,9. Mer information om vilka alternativ som är tillgängliga med get_answers_from_text finns i parametrarna AnswersFromTextOptions.

Rensa resurser

Om du vill rensa och ta bort en Azure AI-tjänstprenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort.

Utforska REST API

Information om hur du automatiserar din anpassade fråga som besvarar pipeline finns i REST API-dokumentationen. Redigeringsfunktioner är för närvarande endast tillgängliga via REST API:

Nästa steg