Rychlý start: Vlastní odpověď na otázky

Poznámka:

Azure Open AI On Your Data využívá velké jazykové modely (LLM) k vytvoření podobných výsledků jako vlastní odpověď na otázky. Pokud chcete připojit existující projekt pro odpovědi na otázky k Azure Open AI na vašich datech, projděte si naši příručku.

Poznámka:

Chcete migrovat úlohy z QnA Makeru? Informace o porovnání funkcí a postupu migrace najdete v našem průvodci migrací.

Začněte s vlastní klientskou knihovnou pro odpovědi na otázky. Podle těchto kroků nainstalujte balíček a vyzkoušejte ukázkový kód pro základní úlohy.

Vlastní projekt pro odpovědi na otázky můžete vytvořit z vlastního obsahu, jako jsou nejčastější dotazy nebo příručky k produktům. Tento článek obsahuje příklad vytvoření vlastního projektu pro odpovědi na otázky z příručky k produktu a odpovídání na otázky.

Požadavky

  • Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
  • Prostředek jazyka s povolenou funkcí pro odpovídání na vlastní otázky Zapamatujte si název prostředku Microsoft Entra ID, předplatného a jazyka, který jste vybrali při vytváření prostředku.

Vytvoření prvního vlastního projektu pro odpovědi na otázky

  1. Přihlaste se k sadě Language Studio pomocí svých přihlašovacích údajů Azure.

  2. Posuňte se dolů do části Otázky odpovědi a vyberte Otevřít vlastní odpovědi na otázky.

    Otevření vlastní odpovědi na otázky

  3. Pokud váš prostředek ještě není připojený ke službě Azure Search, vyberte Připojení ke službě Azure Search. Otevře se nová karta prohlížeče v podokně Funkce vašeho prostředku na webu Azure Portal.

    Připojení do služby Azure Search

  4. Vyberte Povolit vlastní odpovědi na otázky, zvolte prostředek Azure Search, na který chcete vytvořit odkaz, a pak vyberte Použít.

    Povolení vlastního odpovídání na otázky

  5. Vraťte se na kartu Language Studio. Možná bude potřeba aktualizovat tuto stránku, aby mohla zaregistrovat změnu prostředku. Vyberte Vytvořit nový projekt.

  6. Zvolte možnost , kterou chci nastavit jazyk pro všechny projekty vytvořené v tomto zdroji> , vyberte Angličtina> Vybrat další.

  7. Zadejte název projektu Sample-project, popis projektu Moje první odpověď na otázky a ponechte výchozí odpověď s nastavením Nenašla se žádná odpověď.

  8. Zkontrolujte volby a vyberte Vytvořit projekt.

  9. Na stránce Spravovat zdroje vyberte Přidat zdrojovou> adresu URL.

  10. Vyberte Přidat adresu URL zadejte následující hodnoty a pak vyberte Přidat vše:

    Název adresy URL Hodnota adresy URL
    Uživatelská příručka pro Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    Proces extrakce chvíli trvá, než si dokument přečte a identifikuje otázky a odpovědi.

    Po úspěšném přidání zdroje můžete zdrojový obsah upravit a přidat další vlastní sady odpovědí na otázky.

Otestování projektu

  1. Vyberte odkaz na váš zdroj. Otevře se stránka pro úpravy projektu.

  2. Na řádku nabídek vyberte Test zadat otázku Návody nastavení surface booku?.> Odpověď se vygeneruje na základě párů odpovědí na otázky, které se automaticky identifikovaly a extrahovaly z vaší zdrojové adresy URL:

    Testovací rozhraní chatu pro otázky

    Pokud zaškrtnete políčko pro zahrnutí odpovědi na krátkou odpověď , zobrazí se při kladení otázky také přesná odpověď, pokud je k dispozici, spolu s pasáží odpovědí v testovacím podokně.

  3. Pokud chcete odpověď prozkoumat podrobněji, vyberte Inspect (Prozkoumat). Testovací okno slouží k otestování změn projektu před nasazením projektu.

    Zobrazení intervalu spolehlivosti

    V rozhraní Kontrola můžete vidět úroveň spolehlivosti, že tato odpověď odpoví na otázku a přímo upraví danou dvojici otázek a odpovědí.

Nasazení projektu

  1. Výběrem ikony Nasadit projekt zadejte nabídku nasazení projektu.

    Nasazení projektu

    Při nasazení projektu se obsah projektu přesune z indexu test na index ve službě prod Azure Search.

  2. Vyberte Nasadit> a po zobrazení výzvy znovu vyberte Nasadit .

    Úspěšné nasazení

    Váš projekt je teď úspěšně nasazený. Koncový bod můžete použít k zodpovězení otázek ve vlastní aplikaci, abyste mohli odpovědět nebo v robotovi.

Požadavky

  • Aktuální verze cURL. V rychlých startech se používá několik přepínačů příkazového řádku, které jsou uvedené v dokumentaci cURL.
  • Předplatné Azure: Můžete si ho vytvořit zdarma.
  • Vlastní odpověď na otázky vyžaduje prostředek jazyka s funkcí vlastní odpovědi na otázky, která je povolená k vygenerování klíče rozhraní API a koncového bodu.
    • Po nasazení prostředku jazyka vyberte Přejít k prostředku. Abyste se mohli připojit k rozhraní API, budete potřebovat klíč a koncový bod z prostředku, který vytvoříte. Klíč a koncový bod vložte do kódu níže v rychlém startu.
  • Pokud chcete vytvořit prostředek jazyka pomocí Azure CLI , zadejte následující další vlastnosti: --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>
  • Existující projekt, který se má dotazovat. Pokud jste projekt nenastavili, můžete postupovat podle pokynů v rychlém startu pro Language Studio. Nebo přidejte projekt, který používá tuto adresu URL uživatelské příručky pro Surface jako zdroj dat.

Nastavení

Vytvoření proměnných prostředí

Aby vaše aplikace odesílala požadavky rozhraní API, musí být ověřená. V produkčním prostředí použijte bezpečný způsob ukládání a přístupu k vašim přihlašovacím údajům. V tomto příkladu zapíšete přihlašovací údaje do proměnných prostředí na místním počítači, na kterém běží aplikace.

Tip

Nezahrňte klíč přímo do kódu a nikdy ho nesdělujte veřejně. Další možnosti ověřování, jako je Azure Key Vault, najdete v článku zabezpečení služeb Azure AI.

Pokud chcete nastavit proměnnou prostředí pro klíč prostředku jazyka, otevřete okno konzoly a postupujte podle pokynů pro operační systém a vývojové prostředí.

  1. Pokud chcete nastavit proměnnou LANGUAGE_KEY prostředí, nahraďte your-key jedním z klíčů pro váš prostředek.
  2. Pokud chcete nastavit proměnnou LANGUAGE_ENDPOINT prostředí, nahraďte your-endpoint koncovým bodem vašeho prostředku.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Poznámka:

Pokud potřebujete přístup pouze k proměnným prostředí v aktuální spuštěné konzole, můžete nastavit proměnnou set prostředí namísto setx.

Po přidání proměnných prostředí možná budete muset restartovat všechny spuštěné programy, které budou muset číst proměnné prostředí, včetně okna konzoly. Pokud například jako editor používáte Sadu Visual Studio, restartujte sadu Visual Studio před spuštěním příkladu.

Dotazování projektu

Vygenerování odpovědi z projektu

Pokud chcete dotazovat vlastní projekt odpovědi na otázky pomocí rozhraní REST API a cURL, potřebujete následující informace:

Název proměnné Hodnota
Endpoint Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Případně můžete najít hodnotu v otazníku jazyka Language Studio>odpovědi na>adresu URL získání predikce projektu Nasazení projektu.> Ukázkový koncový bod je: https://southcentralus.api.cognitive.microsoft.com/
API-Key Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Můžete použít klíč1 nebo klíč2. Vždy mít dva platné klíče vždy pro zabezpečenou obměnu klíčů s nulovým výpadkem. Případně můžete najít hodnotu v otazníku jazyka Language Studio>odpovědi na>adresu URL získání predikce projektu Nasazení projektu.> Hodnota klíče je součástí ukázkového požadavku.
Project Název vlastního projektu odpovídání na otázky
Deployment Existují dvě možné hodnoty: testa production. productionzávisí na tom, že jste projekt nasadili z otázky jazyka Studio>a odpovídá na>projekt Nasazení.

Příkaz cURL se spustí z prostředí BASH. Upravte tento příkaz s vlastním názvem prostředku, klíčem prostředku a hodnotami JSON a velikostí 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}'

Při spuštění výše uvedeného kódu, pokud používáte zdroj dat z předpokladů, získáte odpověď, která vypadá takto:

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

Vrátí confidenceScore hodnotu mezi 0 a 1. Můžete si to představit jako procento a vynásobit číslem 100, takže skóre spolehlivosti 0,9185 znamená, že vlastní odpověď na otázky je 91,85 % jistota, že je to správná odpověď na otázku založenou na projektu.

Pokud chcete vyloučit odpovědi, ve kterých skóre spolehlivosti klesne pod určitou prahovou hodnotu, můžete parametr přidat 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}'

Vzhledem k tomu, že z předchozího spuštění kódu víme, že naše skóre spolehlivosti je: .9185 nastavení prahové hodnoty na .95 výsledek vrátí výchozí odpověď .

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

Dotazování textu bez projektu

Vlastní odpovědi na otázky můžete použít i bez projektu s předem připraveným vlastním rozhraním REST API pro odpovědi na otázky, které se volá prostřednictvím query-text. V takovém případě zadáte odpověď na otázku a související textové záznamy, které chcete vyhledat v době odeslání požadavku.

V tomto příkladu stačí upravit pouze proměnné pro API KEY a 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'

Tento příklad vrátí výsledek:

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

Pomocí tohoto rychlého startu pro vlastní klientskou knihovnu pro odpovědi na otázky pro .NET můžete:

  • Získejte odpověď z projektu.
  • Získejte odpověď z textu, který odešlete spolu s otázkou.
  • Získejte skóre spolehlivosti odpovědi na vaši otázku.

Referenční dokumentace | Balíček (NuGet) | Další ukázky | – zdrojový kód knihovny

Požadavky

  • Předplatné Azure: Můžete si ho vytvořit zdarma.
  • Integrované vývojové prostředí sady Visual Studio nebo aktuální verze .NET Core.
  • Vlastní odpověď na otázky vyžaduje prostředek jazyka s funkcí vlastní odpovědi na otázky, která je povolená k vygenerování klíče rozhraní API a koncového bodu.
    • Po nasazení prostředku jazyka vyberte Přejít k prostředku. Abyste se mohli připojit k rozhraní API, budete potřebovat klíč a koncový bod z prostředku, který vytvoříte. Klíč a koncový bod vložte do kódu níže v rychlém startu.
  • Pokud chcete vytvořit prostředek jazyka pomocí Azure CLI , zadejte následující další vlastnosti: --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>
  • Existující projekt, který se má dotazovat. Pokud jste projekt nenastavili, můžete postupovat podle pokynů v rychlém startu pro Language Studio. Nebo přidejte projekt, který používá tuto adresu URL uživatelské příručky pro Surface jako zdroj dat.

Nastavení

Vytvoření proměnných prostředí

Aby vaše aplikace odesílala požadavky rozhraní API, musí být ověřená. V produkčním prostředí použijte bezpečný způsob ukládání a přístupu k vašim přihlašovacím údajům. V tomto příkladu zapíšete přihlašovací údaje do proměnných prostředí na místním počítači, na kterém běží aplikace.

Tip

Nezahrňte klíč přímo do kódu a nikdy ho nesdělujte veřejně. Další možnosti ověřování, jako je Azure Key Vault, najdete v článku zabezpečení služeb Azure AI.

Pokud chcete nastavit proměnnou prostředí pro klíč prostředku jazyka, otevřete okno konzoly a postupujte podle pokynů pro operační systém a vývojové prostředí.

  1. Pokud chcete nastavit proměnnou LANGUAGE_KEY prostředí, nahraďte your-key jedním z klíčů pro váš prostředek.
  2. Pokud chcete nastavit proměnnou LANGUAGE_ENDPOINT prostředí, nahraďte your-endpoint koncovým bodem vašeho prostředku.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Poznámka:

Pokud potřebujete přístup pouze k proměnným prostředí v aktuální spuštěné konzole, můžete nastavit proměnnou set prostředí namísto setx.

Po přidání proměnných prostředí možná budete muset restartovat všechny spuštěné programy, které budou muset číst proměnné prostředí, včetně okna konzoly. Pokud například jako editor používáte Sadu Visual Studio, restartujte sadu Visual Studio před spuštěním příkladu.

Rozhraní příkazového řádku

V okně konzoly (například cmd, PowerShell nebo Bash) pomocí dotnet new příkazu vytvořte novou konzolovou aplikaci s názvem question-answering-quickstart. Tento příkaz vytvoří jednoduchý projekt "Hello World" C# s jedním zdrojovým souborem: program.cs.

dotnet new console -n question-answering-quickstart

Změňte adresář na nově vytvořenou složku aplikace. Aplikaci můžete sestavit pomocí následujících:

dotnet build

Výstup sestavení by neměl obsahovat žádná upozornění ani chyby.

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

V adresáři aplikace nainstalujte vlastní klientskou knihovnu pro odpovědi na otázky pro .NET pomocí následujícího příkazu:

dotnet add package Azure.AI.Language.QuestionAnswering

Dotazování projektu

Vygenerování odpovědi z projektu

Následující příklad vám umožní dotazovat se na projekt pomocí GetAnswers získání odpovědi na vaši otázku.

Budete muset aktualizovat následující kód a zadat vlastní hodnoty pro následující proměnné.

Název proměnné Hodnota
endpoint Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Případně můžete najít hodnotu v otazníku jazyka Language Studio>odpovědi na>adresu URL získání predikce projektu Nasazení projektu.> Ukázkový koncový bod je: https://southcentralus.api.cognitive.microsoft.com/
credential Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Můžete použít klíč1 nebo klíč2. Vždy mít dva platné klíče vždy pro zabezpečenou obměnu klíčů s nulovým výpadkem. Případně můžete najít hodnotu v otazníku jazyka Language Studio>odpovědi na>adresu URL získání predikce projektu Nasazení projektu.> Hodnota klíče je součástí ukázkového požadavku.
projectName Název vlastního projektu odpovídání na otázky
deploymentName Existují dvě možné hodnoty: testa production. productionzávisí na tom, že jste projekt nasadili z otázky jazyka Studio>a odpovídá na>projekt Nasazení.

Důležité

Nezapomeňte klíč z kódu odebrat, až to budete hotovi, a nikdy ho veřejně neposílejte. V produkčním prostředí použijte bezpečný způsob ukládání přihlašovacích údajů a přístupu k vašim přihlašovacím údajům, jako je Azure Key Vault. Další informace najdete v článku zabezpečení služeb Azure AI.

V adresáři projektu otevřete soubor program.cs a nahraďte následujícím kódem:

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

I když v našem příkladu pevně zakódujeme proměnné. V produkčním prostředí zvažte použití zabezpečeného způsobu ukládání a přístupu k vašim přihlašovacím údajům. Azure Key Vault například poskytuje zabezpečené úložiště klíčů.

Po aktualizaci Program.cs pomocí výše uvedeného kódu a nahrazení ve správných hodnotách proměnných. Spusťte aplikaci příkazem dotnet run z adresáře aplikace.

dotnet run

Odpověď bude vypadat takto:

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.

Informace o tom, jak sebevědomé vlastní odpovědi na otázky jsou, že se jedná o správnou odpověď, přidejte pod existující příkazy tisku další příkaz tisku:

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

Pokud provedete dotnet run akci znovu, zobrazí se vám výsledek se skóre spolehlivosti:

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)

Skóre spolehlivosti vrátí hodnotu mezi 0 a 1. Můžete si to představit jako procento a vynásobit číslem 100, takže skóre spolehlivosti 0,9185 znamená, že vlastní odpověď na otázky je 91,85 % jistota, že je to správná odpověď na otázku založenou na projektu.

Pokud chcete vyloučit odpovědi, ve kterých skóre spolehlivosti klesne pod určitou prahovou hodnotu, použijte AnswerOptions k přidání ConfidenceScoreThreshold vlastnosti.

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

Vzhledem k tomu, že z předchozího spuštění kódu víme, že naše skóre spolehlivosti je: .9185 nastavení prahové hodnoty na .95 výsledek vrátí výchozí odpověď .

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

Dotazování textu bez projektu

Můžete také použít vlastní odpovědi na otázky bez projektu s GetAnswersFromText. V takovém případě zadáte vlastní odpověď na otázku i související textové záznamy, které chcete při odeslání požadavku vyhledat.

V tomto příkladu stačí upravit pouze proměnné pro endpoint a 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;
                }
            }

        }
    }
}

Pokud chcete spustit výše uvedený kód, nahraďte Program.cs obsahem bloku skriptu výše a upravte endpoint proměnné credential tak, aby odpovídaly prostředku jazyka, který jste vytvořili v rámci požadavků.

V tomto případě iterujeme všechny odpovědi a vrátíme pouze odpověď s nejvyšším skóre spolehlivosti, které je větší než 0,9. Chcete-li pochopit více o možnostech, které jsou k dispozici pro GetAnswersFromText.

Pomocí tohoto rychlého startu můžete pro vlastní klientskou knihovnu pro odpovědi na otázky pro Python:

  • Získejte odpověď z projektu.
  • Získejte odpověď z textu, který odešlete spolu s otázkou.
  • Získejte skóre spolehlivosti odpovědi na vaši otázku.

Referenční dokumentace | Balíček (PyPI) | Další zdrojový kód knihovny ukázek |

Požadavky

  • Předplatné Azure: Můžete si ho vytvořit zdarma.
  • Python 3.x
  • Vlastní odpověď na otázky vyžaduje prostředek jazyka s funkcí vlastní odpovědi na otázky, která je povolená k vygenerování klíče rozhraní API a koncového bodu.
    • Po nasazení prostředku jazyka vyberte Přejít k prostředku. K připojení k rozhraní API potřebujete klíč a koncový bod z prostředku, který vytvoříte. Klíč a koncový bod vložte do kódu níže v rychlém startu.
  • Pokud chcete vytvořit prostředek jazyka pomocí Azure CLI , zadejte následující další vlastnosti: --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>
  • Existující projekt, který se má dotazovat. Pokud jste projekt nenastavili, můžete postupovat podle pokynů v rychlém startu pro Language Studio. Nebo přidejte projekt, který používá tuto adresu URL uživatelské příručky pro Surface jako zdroj dat.

Nastavení

Instalace klientské knihovny

Po instalaci Pythonu můžete nainstalovat klientskou knihovnu pomocí:

pip install azure-ai-language-questionanswering

Dotazování projektu

Vygenerování odpovědi z projektu

Následující příklad vám umožní dotazovat se na projekt pomocí get_answers a získat odpověď na vaši otázku. Tento kód můžete zkopírovat do vyhrazeného souboru .py nebo do buňky v aplikaci Jupyter Notebook/Lab.

Musíte aktualizovat následující kód a zadat vlastní hodnoty pro následující proměnné.

Název proměnné Hodnota
endpoint Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Případně můžete najít hodnotu v otazníku jazyka Language Studio>odpovědi na>adresu URL získání predikce projektu Nasazení projektu.> Ukázkový koncový bod je: https://southcentralus.api.cognitive.microsoft.com/
credential Tuto hodnotu najdete v části Klíče a koncový bod při zkoumání prostředku na webu Azure Portal. Můžete použít klíč1 nebo klíč2. Vždy mít dva platné klíče vždy pro zabezpečenou obměnu klíčů s nulovým výpadkem. Případně můžete najít hodnotu v otazníku jazyka Language Studio>odpovědi na>adresu URL získání predikce projektu Nasazení projektu.> Hodnota klíče je součástí ukázkového požadavku.
knowledge_base_project Název projektu odpovídání na otázky
deployment Existují dvě možné hodnoty: testa production. productionzávisí na tom, že jste projekt nasadili z otázky jazyka Studio>a odpovídá na>projekt Nasazení.

Důležité

Nezapomeňte klíč z kódu odebrat, až to budete hotovi, a nikdy ho veřejně neposílejte. V produkčním prostředí použijte bezpečný způsob ukládání přihlašovacích údajů a přístupu k vašim přihlašovacím údajům, jako je Azure Key Vault. Další informace najdete v článku zabezpečení služeb Azure AI.

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

I když pro náš příklad pevně zakódujeme proměnné. V produkčním prostředí zvažte použití zabezpečeného způsobu ukládání a přístupu k vašim přihlašovacím údajům. Azure Key Vault například poskytuje zabezpečené úložiště klíčů.

Když výše uvedený kód spustíte, pokud používáte zdroj dat z předpokladů, získáte odpověď, která vypadá takto:

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.

Informace o tom, jak sebevědomé vlastní odpovědi na otázky jsou, že se jedná o správnou odpověď, přidejte pod existující příkazy tisku další příkaz tisku:

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

Teď dostanete výsledek se skóre spolehlivosti:

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

Skóre spolehlivosti vrátí hodnotu mezi 0 a 1. Můžete si to představit jako procento a vynásobit číslem 100, takže skóre spolehlivosti 0,9185 znamená, že vlastní odpověď na otázky je 91,85 % jistota, že je to správná odpověď na otázku založenou na projektu.

Pokud chcete vyloučit odpovědi, kde skóre spolehlivosti klesne pod určitou prahovou hodnotu, můžete upravit AnswerOptions a přidat confidence_threshold parametr.

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

Vzhledem k tomu, že z předchozího spuštění kódu víme, že naše skóre spolehlivosti je: .9185 nastavení prahové hodnoty na .95 výsledek vrácení výchozí odpovědi .

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

Dotazování textu bez projektu

Vlastní odpovědi na otázky můžete použít i bez projektu s get_answers_from_text. V takovém případě zadáte vlastní odpověď na otázku i související textové záznamy, které chcete při odeslání požadavku vyhledat.

V tomto příkladu stačí upravit pouze proměnné pro endpoint a 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()

Tento kód můžete zkopírovat do vyhrazeného souboru .py nebo do nové buňky v aplikaci Jupyter Notebook/Lab. Tento příklad vrátí výsledek:

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

V tomto případě iterujeme všechny odpovědi a vrátíme pouze odpověď s nejvyšším skóre spolehlivosti, které je větší než 0,9. Další informace o možnostech dostupných v get_answers_from_text najdete v parametrech AnswersFromTextOptions.

Vyčištění prostředků

Pokud chcete vyčistit a odebrat předplatné služeb Azure AI, můžete odstranit prostředek nebo skupinu prostředků. Odstraněním skupiny prostředků se odstraní také všechny ostatní prostředky, které jsou k ní přidružené.

Zkoumání rozhraní REST API

Informace o automatizaci vlastního kanálu pro odpovědi na otázky najdete v dokumentaci k rozhraní REST API. Funkce vytváření obsahu je v současné době k dispozici pouze prostřednictvím rozhraní REST API:

Další kroky