Quickstart: aangepaste vragen beantwoorden

Notitie

Azure Open AI On Your Data maakt gebruik van LLM's (Large Language Models) om vergelijkbare resultaten te produceren als aangepaste vraagantwoorden. Als u een bestaand aangepast vraagantwoordproject wilt verbinden met Azure Open AI On Your Data, raadpleegt u onze handleiding.

Notitie

Wilt u uw workloads migreren vanuit QnA Maker? Raadpleeg onze migratiehandleiding voor informatie over functievergelijkingen en migratiestappen.

Ga aan de slag met de aangepaste vraag die de clientbibliotheek beantwoordt. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor basistaken uit te proberen.

U kunt een aangepast vraagantwoordproject maken op basis van uw eigen inhoud, zoals veelgestelde vragen of producthandleidingen. Dit artikel bevat een voorbeeld van het maken van een aangepast vraagantwoordproject op basis van een producthandleiding om vragen te beantwoorden.

Vereisten

  • Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
  • Een taalresource waarvoor de aangepaste functie voor het beantwoorden van vragen is ingeschakeld. Onthoud uw Microsoft Entra-id, abonnement, taalresourcenaam die u hebt geselecteerd toen u de resource maakte.

Uw eerste aangepaste vraag-antwoordproject maken

  1. Meld u aan bij Language Studio met uw Azure-referenties.

  2. Schuif omlaag naar de sectie Antwoordvragen en selecteer Aangepaste vragen beantwoorden openen.

    Aangepaste vragen beantwoorden openen

  3. Als uw resource nog niet is verbonden met Azure Search, selecteert u Verbinding maken met Azure Search. Hiermee opent u een nieuw browsertabblad naar het deelvenster Functies van uw resource in Azure Portal.

    Verbinding maken naar Azure Search

  4. Selecteer Aangepaste vragen beantwoorden inschakelen, kies de Azure Search-resource waarmee u een koppeling wilt maken en selecteer Vervolgens Toepassen.

    Aangepaste vraagantwoorden inschakelen

  5. Ga terug naar het tabblad Language Studio. Mogelijk moet u deze pagina vernieuwen om de wijziging in uw resource te registreren. Selecteer Nieuw project maken.

  6. Kies de optie die ik wil instellen voor alle projecten die in deze resource> zijn gemaakt, de optie Volgende selecteren.>

  7. Voer een projectnaam in van Sample-project, een beschrijving van mijn eerste vraag die project beantwoordt en laat het standaardantwoord staan met de instelling Nee-antwoord gevonden.

  8. Controleer uw keuzes en selecteer Project maken

  9. Selecteer op de pagina Bronnen beheren de optie Bron-URL's> toevoegen.

  10. Selecteer Url toevoegen en voer de volgende waarden in en selecteer Alles toevoegen:

    URL-naam URL-waarde
    Gebruikershandleiding voor Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    Tijdens het extractieproces, dat enige tijd duurt, wordt het document gelezen en worden de vragen en antwoorden geïdentificeerd.

    Nadat u de bron hebt toegevoegd, kunt u vervolgens de broninhoud bewerken om meer aangepaste vraagantwoordsets toe te voegen.

Uw project testen

  1. Selecteer de koppeling naar uw bron. Hiermee wordt de projectpagina bewerken geopend.

  2. Selecteer Testen in de menubalk > Voer de vraag in Hoe kan ik mijn surface book instellen?. Er wordt een antwoord gegenereerd op basis van de vraagantwoordparen die automatisch zijn geïdentificeerd en geëxtraheerd uit uw bron-URL:

    Chatinterface voor vragen testen

    Als u het selectievakje inschakelt voor een kort antwoord, ziet u ook een nauwkeurig antwoord, indien beschikbaar, samen met het antwoordgedeelte in het testvenster wanneer u een vraag stelt.

  3. Selecteer Inspect (Inspecteren) om het antwoord gedetailleerder te onderzoeken. Het testvenster wordt gebruikt om uw wijzigingen in uw project te testen voordat u uw project implementeert.

    Het betrouwbaarheidsinterval bekijken

    In de inspect-interface ziet u het betrouwbaarheidsniveau dat deze reactie de vraag beantwoordt en rechtstreeks een bepaalde vraag en antwoordpaar bewerkt.

Uw project implementeren

  1. Selecteer het pictogram Project implementeren om het menu Project implementeren in te voeren.

    Project implementeren

    Wanneer u een project implementeert, wordt de inhoud van uw project verplaatst van de test index naar een prod index in Azure Search.

  2. Selecteer Implementeren> en selecteer vervolgens opnieuw implementeren wanneer u hierom wordt gevraagd.

    Geslaagde implementatie

    Uw project is nu geïmplementeerd. U kunt het eindpunt gebruiken om vragen te beantwoorden in uw eigen aangepaste toepassing om te beantwoorden of in een bot.

Vereisten

  • De huidige versie van cURL. In deze quickstarts worden verschillende opdrachtregelopties gebruikt, die worden vermeld in de cURL-documentatie.
  • Azure-abonnement: Krijg een gratis abonnement
  • Voor het beantwoorden van aangepaste vragen is een taalresource vereist waarbij de functie voor het beantwoorden van aangepaste vragen is ingeschakeld om een API-sleutel en eindpunt te genereren.
    • Nadat de taalresource is geïmplementeerd, selecteert u Ga naar de resource. U hebt de sleutel en het eindpunt nodig van de resource die u maakt om verbinding te maken met de API. Plak uw sleutel en eindpunt verderop in de onderstaande code in de quickstart.
  • Als u een taalresource wilt maken met Azure CLI , biedt u de volgende aanvullende eigenschappen: --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>
  • Een bestaand project om een query uit te voeren. Als u geen project hebt ingesteld, kunt u de instructies volgen in de quickstart van Language Studio. Of voeg een project toe dat gebruikmaakt van deze URL van de Surface-gebruikershandleiding als gegevensbron.

Instellen

Omgevingsvariabelen maken

Uw toepassing moet worden geverifieerd om API-aanvragen te verzenden. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen. In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.

Tip

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Als u de omgevingsvariabele voor uw taalresourcesleutel wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.

  1. Als u de LANGUAGE_KEY omgevingsvariabele wilt instellen, vervangt u deze door your-key een van de sleutels voor uw resource.
  2. Als u de LANGUAGE_ENDPOINT omgevingsvariabele wilt instellen, vervangt your-endpoint u het eindpunt voor uw resource.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Notitie

Als u alleen toegang nodig hebt tot de omgevingsvariabelen in de huidige actieve console, kunt u de omgevingsvariabele instellen in set plaats van setx.

Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's opnieuw opstarten die de omgevingsvariabelen moeten lezen, inclusief het consolevenster. Als u bijvoorbeeld Visual Studio als editor gebruikt, start u Visual Studio opnieuw voordat u het voorbeeld uitvoert.

Een query uitvoeren op een project

Een antwoord genereren op basis van een project

Als u een query wilt uitvoeren op een aangepast vraagantwoord voor een project met de REST API's en cURL, hebt u de volgende informatie nodig:

Naam van de variabele Waarde
Endpoint Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt ook de waarde vinden in Language Studio-vraag>over het beantwoorden van de voorspellings-URL> van Deploy project>Get. Een voorbeeldeindpunt is: https://southcentralus.api.cognitive.microsoft.com/
API-Key Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt Key1 of Key2 gebruiken. Altijd twee geldige sleutels hebben voor veilige sleutelrotatie met nul downtime. U kunt ook de waarde vinden in Language Studio-vraag>over het beantwoorden van de voorspellings-URL> van Deploy project>Get. De sleutelwaarde maakt deel uit van de voorbeeldaanvraag.
Project De naam van uw aangepaste vraagantwoordproject.
Deployment Er zijn twee mogelijke waarden: test, en production. productionis afhankelijk van het feit dat u uw project hebt geïmplementeerd vanuit Language Studio-vraag>die het deploy-project beantwoordt.>

De cURL-opdracht wordt uitgevoerd vanuit een BASH-shell. Bewerk deze opdracht met uw eigen resourcenaam, resourcesleutel, JSON-waarden en JSON-grootte.

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

Wanneer u de bovenstaande code uitvoert, krijgt u een antwoord dat er als volgt uitziet als u de gegevensbron van de vereisten gebruikt:

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

De confidenceScore functie retourneert een waarde tussen 0 en 1. U kunt dit zien als een percentage en vermenigvuldigen met 100, dus een betrouwbaarheidsscore van 0,9185 betekent dat aangepaste vraagantwoorden 91,85% zeker zijn, is dit het juiste antwoord op de vraag op basis van het project.

Als u antwoorden wilt uitsluiten waarbij de betrouwbaarheidsscore onder een bepaalde drempelwaarde valt, kunt u de confidenceScoreThreshold parameter toevoegen.

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

Omdat we van onze vorige uitvoering van de code weten dat onze betrouwbaarheidsscore is: .9185 door de drempelwaarde in te .95 stellen, wordt het standaardantwoord geretourneerd.

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

Querytekst zonder project

U kunt ook aangepaste vragen beantwoorden zonder een project te gebruiken met de vooraf gemaakte aangepaste vraag die rest API beantwoordt, die wordt aangeroepen via query-text. In dit geval geeft u vragen beantwoorden met zowel een vraag als de bijbehorende tekstrecords die u wilt zoeken naar een antwoord op het moment dat de aanvraag wordt verzonden.

Voor dit voorbeeld hoeft u alleen de variabelen voor API KEY en 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'

In dit voorbeeld wordt een resultaat geretourneerd van:

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

Gebruik deze quickstart voor de aangepaste vraag die de clientbibliotheek voor .NET beantwoordt om:

  • Haal een antwoord op van een project.
  • Haal een antwoord op uit een teksttekst die u samen met uw vraag verzendt.
  • Haal de betrouwbaarheidsscore op voor het antwoord op uw vraag.

Referentiedocumentatiepakket (NuGet) | Aanvullende broncode voor voorbeeldenbibliotheek | |

Vereisten

  • Azure-abonnement: Krijg een gratis abonnement
  • De Visual Studio IDE of de huidige versie van .NET Core.
  • Voor het beantwoorden van aangepaste vragen is een taalresource vereist waarbij de functie voor het beantwoorden van aangepaste vragen is ingeschakeld om een API-sleutel en eindpunt te genereren.
    • Nadat de taalresource is geïmplementeerd, selecteert u Ga naar de resource. U hebt de sleutel en het eindpunt nodig van de resource die u maakt om verbinding te maken met de API. Plak uw sleutel en eindpunt verderop in de onderstaande code in de quickstart.
  • Als u een taalresource wilt maken met Azure CLI , biedt u de volgende aanvullende eigenschappen: --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>
  • Een bestaand project om een query uit te voeren. Als u geen project hebt ingesteld, kunt u de instructies volgen in de quickstart van Language Studio. Of voeg een project toe dat gebruikmaakt van deze URL van de Surface-gebruikershandleiding als gegevensbron.

Instellen

Omgevingsvariabelen maken

Uw toepassing moet worden geverifieerd om API-aanvragen te verzenden. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen. In dit voorbeeld schrijft u uw referenties naar omgevingsvariabelen op de lokale computer waarop de toepassing wordt uitgevoerd.

Tip

Neem de sleutel niet rechtstreeks op in uw code en plaats deze nooit openbaar. Zie het beveiligingsartikel over Azure AI-services voor meer verificatieopties, zoals Azure Key Vault.

Als u de omgevingsvariabele voor uw taalresourcesleutel wilt instellen, opent u een consolevenster en volgt u de instructies voor uw besturingssysteem en ontwikkelomgeving.

  1. Als u de LANGUAGE_KEY omgevingsvariabele wilt instellen, vervangt u deze door your-key een van de sleutels voor uw resource.
  2. Als u de LANGUAGE_ENDPOINT omgevingsvariabele wilt instellen, vervangt your-endpoint u het eindpunt voor uw resource.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Notitie

Als u alleen toegang nodig hebt tot de omgevingsvariabelen in de huidige actieve console, kunt u de omgevingsvariabele instellen in set plaats van setx.

Nadat u de omgevingsvariabelen hebt toegevoegd, moet u mogelijk alle actieve programma's opnieuw opstarten die de omgevingsvariabelen moeten lezen, inclusief het consolevenster. Als u bijvoorbeeld Visual Studio als editor gebruikt, start u Visual Studio opnieuw voordat u het voorbeeld uitvoert.

CLI

Gebruik in een consolevenster (zoals cmd, PowerShell of Bash) de opdracht dotnet new om een nieuwe console-app te maken met de naam question-answering-quickstart. Met deze opdracht maakt u een eenvoudig Hallo wereld-C#-project met één bronbestand: program.cs.

dotnet new console -n question-answering-quickstart

Wijzig uw map in de zojuist gemaakte app-map. U kunt de toepassing maken met:

dotnet build

De build-uitvoer mag geen waarschuwingen of fouten bevatten.

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

Installeer in de toepassingsmap de aangepaste vraag die de clientbibliotheek voor .NET beantwoordt met de volgende opdracht:

dotnet add package Azure.AI.Language.QuestionAnswering

Een query uitvoeren op een project

Een antwoord genereren op basis van een project

In het onderstaande voorbeeld kunt u een query uitvoeren op een project met behulp van GetAnswers een antwoord op uw vraag.

U moet de onderstaande code bijwerken en uw eigen waarden opgeven voor de volgende variabelen.

Naam van de variabele Waarde
endpoint Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt ook de waarde vinden in Language Studio-vraag>over het beantwoorden van de voorspellings-URL> van Deploy project>Get. Een voorbeeldeindpunt is: https://southcentralus.api.cognitive.microsoft.com/
credential Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt Key1 of Key2 gebruiken. Altijd twee geldige sleutels hebben voor veilige sleutelrotatie met nul downtime. U kunt ook de waarde vinden in Language Studio-vraag>over het beantwoorden van de voorspellings-URL> van Deploy project>Get. De sleutelwaarde maakt deel uit van de voorbeeldaanvraag.
projectName De naam van uw aangepaste vraagantwoordproject.
deploymentName Er zijn twee mogelijke waarden: test, en production. productionis afhankelijk van het feit dat u uw project hebt geïmplementeerd vanuit Language Studio-vraag>die het deploy-project beantwoordt.>

Belangrijk

Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.

Open in de projectmap het program.cs-bestand en vervang het door de volgende code:

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

Hoewel we de variabelen voor ons voorbeeld hard coderen. Overweeg om voor productie een veilige manier te gebruiken voor het opslaan en openen van uw referenties. Azure Key Vault biedt bijvoorbeeld beveiligde sleutelopslag.

Nadat u de bovenstaande code hebt bijgewerkt Program.cs en de juiste variabelewaarden hebt vervangen. Voer de toepassing uit vanuit uw toepassingsmap met de opdracht dotnet run.

dotnet run

Het antwoord ziet er als volgt uit:

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.

Voor informatie over hoe zeker aangepaste vragen beantwoorden is dat dit het juiste antwoord is, voegt u een extra afdrukinstructie toe onder de bestaande afdrukinstructies:

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

Als u het opnieuw uitvoert dotnet run , ontvangt u nu een resultaat met een betrouwbaarheidsscore:

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)

De betrouwbaarheidsscore retourneert een waarde tussen 0 en 1. U kunt dit zien als een percentage en vermenigvuldigen met 100, dus een betrouwbaarheidsscore van 0,9185 betekent dat aangepaste vraagantwoorden 91,85% zeker zijn, is dit het juiste antwoord op de vraag op basis van het project.

Als u antwoorden wilt uitsluiten waarbij de betrouwbaarheidsscore onder een bepaalde drempelwaarde valt, gebruikt AnswerOptions u om de ConfidenceScoreThreshold eigenschap toe te voegen.

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

Omdat we van onze vorige uitvoering van de code weten dat onze betrouwbaarheidsscore is: .9185 door de drempelwaarde in te .95 stellen, wordt het standaardantwoord geretourneerd.

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

Querytekst zonder project

U kunt ook aangepaste vragen beantwoorden zonder een project met GetAnswersFromText. In dit geval geeft u aangepaste vragen die beantwoorden met zowel een vraag als de bijbehorende tekstrecords die u wilt zoeken naar een antwoord op het moment dat de aanvraag wordt verzonden.

Voor dit voorbeeld hoeft u alleen de variabelen voor endpoint en 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;
                }
            }

        }
    }
}

Als u de bovenstaande code wilt uitvoeren, vervangt u de Program.cs inhoud van het bovenstaande scriptblok en wijzigt u de endpoint variabelen credential zodat deze overeenkomen met de taalresource die u hebt gemaakt als onderdeel van de vereisten.

In dit geval herhalen we alle antwoorden en retourneren we alleen het antwoord met de hoogste betrouwbaarheidsscore die groter is dan 0,9. Meer informatie over de beschikbare opties met GetAnswersFromText.

Gebruik deze quickstart voor de aangepaste vraag die de clientbibliotheek voor Python beantwoordt om het volgende te doen:

  • Haal een antwoord op van een project.
  • Haal een antwoord op uit een teksttekst die u samen met uw vraag verzendt.
  • Haal de betrouwbaarheidsscore op voor het antwoord op uw vraag.

Referentiedocumentatiepakket (PyPI) | Aanvullende broncode voor voorbeeldenbibliotheek | |

Vereisten

  • Azure-abonnement: Krijg een gratis abonnement
  • Python 3.x
  • Voor het beantwoorden van aangepaste vragen is een taalresource vereist waarbij de functie voor het beantwoorden van aangepaste vragen is ingeschakeld om een API-sleutel en eindpunt te genereren.
    • Nadat de taalresource is geïmplementeerd, selecteert u Ga naar de resource. U hebt de sleutel en het eindpunt nodig van de resource die u maakt om verbinding te maken met de API. Plak uw sleutel en eindpunt verderop in de onderstaande code in de quickstart.
  • Als u een taalresource wilt maken met Azure CLI , geeft u de volgende andere eigenschappen op: --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>
  • Een bestaand project om een query uit te voeren. Als u geen project hebt ingesteld, kunt u de instructies volgen in de quickstart van Language Studio. Of voeg een project toe dat gebruikmaakt van deze URL van de Surface-gebruikershandleiding als gegevensbron.

Instellen

De clientbibliotheek installeren

Na de installatie van Python kunt u de clientbibliotheek installeren met:

pip install azure-ai-language-questionanswering

Een query uitvoeren op een project

Een antwoord genereren op basis van een project

In het onderstaande voorbeeld kunt u een query uitvoeren op een project met behulp van get_answers om een antwoord op uw vraag te krijgen. U kunt deze code kopiëren naar een toegewezen .py-bestand of in een cel in Jupyter Notebook/Lab.

U moet de onderstaande code bijwerken en uw eigen waarden opgeven voor de volgende variabelen.

Naam van de variabele Waarde
endpoint Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt ook de waarde vinden in Language Studio-vraag>over het beantwoorden van de voorspellings-URL> van Deploy project>Get. Een voorbeeldeindpunt is: https://southcentralus.api.cognitive.microsoft.com/
credential Deze waarde vindt u in de sectie Sleutels en eindpunt bij het onderzoeken van uw resource vanuit de Azure Portal. U kunt Key1 of Key2 gebruiken. Altijd twee geldige sleutels hebben voor veilige sleutelrotatie met nul downtime. U kunt ook de waarde vinden in Language Studio-vraag>over het beantwoorden van de voorspellings-URL> van Deploy project>Get. De sleutelwaarde maakt deel uit van de voorbeeldaanvraag.
knowledge_base_project De naam van uw vraagantwoordproject.
deployment Er zijn twee mogelijke waarden: test, en production. productionis afhankelijk van het feit dat u uw project hebt geïmplementeerd vanuit Language Studio-vraag>die het deploy-project beantwoordt.>

Belangrijk

Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en maak deze sleutel nooit openbaar. Gebruik voor productie een veilige manier om uw referenties op te slaan en te openen, zoals Azure Key Vault. Zie het beveiligingsartikel over Azure AI-services voor meer informatie.

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

Hoewel we de variabelen voor ons voorbeeld hard coderen. Overweeg om voor productie een veilige manier te gebruiken voor het opslaan en openen van uw referenties. Azure Key Vault biedt bijvoorbeeld beveiligde sleutelopslag.

Wanneer u de bovenstaande code uitvoert en u de gegevensbron uit de vereisten gebruikt, krijgt u een antwoord dat er als volgt uitziet:

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.

Voor informatie over hoe zeker aangepaste vragen beantwoorden is dat dit het juiste antwoord is, voegt u een andere afdrukinstructie toe onder de bestaande afdrukinstructies:

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

U ontvangt nu een resultaat met een betrouwbaarheidsscore:

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

De betrouwbaarheidsscore retourneert een waarde tussen 0 en 1. U kunt dit zien als een percentage en vermenigvuldigen met 100, dus een betrouwbaarheidsscore van 0,9185 betekent dat aangepaste vraagantwoorden 91,85% zeker zijn, is dit het juiste antwoord op de vraag op basis van het project.

Als u antwoorden wilt uitsluiten waarbij de betrouwbaarheidsscore onder een bepaalde drempelwaarde valt, kunt u de AnswerOptions wijzigen om de confidence_threshold parameter toe te voegen.

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

Omdat we weten dat onze betrouwbaarheidsscore uit de vorige uitvoering van de code bestaat: .9185 de drempelwaarde instellen op .95 resultaten in het standaardantwoord dat wordt geretourneerd.

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

Querytekst zonder project

U kunt ook aangepaste vragen beantwoorden zonder een project met get_answers_from_text. In dit geval geeft u aangepaste vragen die beantwoorden met zowel een vraag als de bijbehorende tekstrecords die u wilt zoeken naar een antwoord op het moment dat de aanvraag wordt verzonden.

Voor dit voorbeeld hoeft u alleen de variabelen voor endpoint en 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()

U kunt deze code kopiëren naar een toegewezen .py-bestand of naar een nieuwe cel in Jupyter Notebook/Lab. In dit voorbeeld wordt een resultaat geretourneerd van:

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 dit geval herhalen we alle antwoorden en retourneren we alleen het antwoord met de hoogste betrouwbaarheidsscore die groter is dan 0,9. Raadpleeg de parameters AnswersFromTextOptions voor meer informatie over de opties die beschikbaar zijn met get_answers_from_text.

Resources opschonen

Als u een Azure AI-servicesabonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.

De REST-API verkennen

Raadpleeg de REST API-documentatie voor meer informatie over het automatiseren van uw aangepaste vraagantwoordpijplijn. De ontwerpfunctionaliteit is momenteel alleen beschikbaar via REST API:

Volgende stappen