Rychlý start: Vlastní odpověď na otázky
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
Přihlaste se k sadě Language Studio pomocí svých přihlašovacích údajů Azure.
Posuňte se dolů do části Otázky odpovědi a vyberte Otevřít vlastní odpovědi na otázky.
Pokud váš prostředek ještě není připojený ke službě Azure Search, vyberte Připojit ke službě Azure Search. Otevře se nová karta prohlížeče v podokně Funkce vašeho prostředku na webu Azure Portal.
Vyberte Povolit vlastní odpovědi na otázky, zvolte prostředek Azure Search, na který chcete vytvořit odkaz, a pak vyberte Použít.
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.
Zvolte možnost , kterou chci nastavit jazyk pro všechny projekty vytvořené v tomto zdroji> , vyberte Angličtina> Vybrat další.
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ěď.
Zkontrolujte volby a vyberte Vytvořit projekt.
Na stránce Spravovat zdroje vyberte Přidat zdrojovou> adresu URL.
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
Vyberte odkaz na váš zdroj. Otevře se stránka pro úpravy projektu.
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:
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ě.
Pokud chcete odpověď prozkoumat podrobněji, vyberte Inspect (Prozkoumat). Testovací okno slouží k otestování změn projektu před nasazením projektu.
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
Výběrem ikony Nasadit projekt zadejte nabídku nasazení projektu.
Při nasazení projektu se obsah projektu přesune z indexu
test
na index ve služběprod
Azure Search.Vyberte Nasadit> a po zobrazení výzvy znovu vyberte Nasadit .
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.
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í.
- Pokud chcete nastavit proměnnou
LANGUAGE_KEY
prostředí, nahraďteyour-key
jedním z klíčů pro váš prostředek. - Pokud chcete nastavit proměnnou
LANGUAGE_ENDPOINT
prostředí, nahraďteyour-endpoint
koncovým bodem vašeho prostředku.
Důležité
Pokud používáte klíč rozhraní API, uložte ho bezpečně někam jinam, například ve službě Azure Key Vault. Nezahrnujte klíč rozhraní API přímo do kódu a nikdy ho nevštěvujte veřejně.
Další informace o zabezpečení služeb AI najdete v tématu Ověřování požadavků na služby Azure AI.
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: test a production . production zá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.
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í.
- Pokud chcete nastavit proměnnou
LANGUAGE_KEY
prostředí, nahraďteyour-key
jedním z klíčů pro váš prostředek. - Pokud chcete nastavit proměnnou
LANGUAGE_ENDPOINT
prostředí, nahraďteyour-endpoint
koncovým bodem vašeho prostředku.
Důležité
Pokud používáte klíč rozhraní API, uložte ho bezpečně někam jinam, například ve službě Azure Key Vault. Nezahrnujte klíč rozhraní API přímo do kódu a nikdy ho nevštěvujte veřejně.
Další informace o zabezpečení služeb AI najdete v tématu Ověřování požadavků na služby Azure AI.
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: test a production . production zá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: test a production . production zá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:
- Referenční informace k rozhraní API pro vytváření
- Příklady CURL rozhraní API pro vytváření
- Referenční informace k rozhraní API modulu runtime