Szybki start: odpowiadanie na pytania niestandardowe
Uwaga
Czy chcesz migrować obciążenia z usługi QnA Maker? Zapoznaj się z naszym przewodnikiem migracji , aby uzyskać informacje na temat porównań funkcji i kroków migracji.
Rozpocznij pracę z niestandardową biblioteką klienta odpowiadającą na pytania. Wykonaj następujące kroki, aby zainstalować pakiet i wypróbować przykładowy kod dla podstawowych zadań.
Możesz utworzyć niestandardowy projekt odpowiadania na pytania na podstawie własnej zawartości, takiej jak często zadawane pytania lub podręczniki produktów. Ten artykuł zawiera przykład tworzenia niestandardowego projektu odpowiedzi na pytania z podręcznika produktu w celu udzielenia odpowiedzi na pytania.
Wymagania wstępne
- Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
- Zasób językowy z włączoną funkcją odpowiadania na pytania niestandardowe. Zapamiętaj identyfikator Entra firmy Microsoft, subskrypcję, nazwę zasobu języka wybraną podczas tworzenia zasobu.
Tworzenie pierwszego niestandardowego projektu odpowiadania na pytania
Zaloguj się do programu Language Studio przy użyciu poświadczeń platformy Azure.
Przewiń w dół do sekcji Odpowiedzi na pytania i wybierz pozycję Otwórz niestandardowe odpowiadanie na pytania.
Jeśli zasób nie jest jeszcze połączony z usługą Azure Search, wybierz pozycję Połącz z usługą Azure Search. Spowoduje to otwarcie nowej karty przeglądarki w okienku Funkcje zasobu w witrynie Azure Portal.
Wybierz pozycję Włącz niestandardowe odpowiadanie na pytania, wybierz zasób usługi Azure Search, do których chcesz utworzyć link, a następnie wybierz pozycję Zastosuj.
Wróć do karty Language Studio. Może być konieczne odświeżenie tej strony, aby zarejestrować zmianę zasobu. Wybierz pozycję Utwórz nowy projekt.
Wybierz opcję Chcę ustawić język dla wszystkich projektów utworzonych w tym zasobie>, wybierz pozycję Angielski wybierz pozycję Dalej>.
Wprowadź nazwę projektu Sample-project, opis mojego pierwszego projektu odpowiedzi na pytanie i pozostaw domyślną odpowiedź z ustawieniem Nie znaleziono odpowiedzi.
Przejrzyj wybrane opcje i wybierz pozycję Utwórz projekt
Na stronie Zarządzanie źródłami wybierz pozycję Dodaj źródłowe>adresy URL.
Wybierz pozycję Dodaj adres URL , wprowadź następujące wartości, a następnie wybierz pozycję Dodaj wszystko:
Nazwa adresu URL Wartość adresu URL Podręcznik użytkownika Surface Book https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf Proces wyodrębniania zajmuje kilka chwil, aby odczytać dokument i zidentyfikować pytania i odpowiedzi.
Po pomyślnym dodaniu źródła możesz edytować zawartość źródłową, aby dodać więcej niestandardowych zestawów odpowiedzi na pytania.
Testowanie projektu
Wybierz link do źródła. Spowoduje to otwarcie strony edycji projektu.
Wybierz pozycję Testuj na pasku > menu Wprowadź pytanie, Jak mogę skonfigurować książkę surface?. Odpowiedź zostanie wygenerowana na podstawie par odpowiedzi na pytanie, które zostały automatycznie zidentyfikowane i wyodrębnione ze źródłowego adresu URL:
Jeśli zaznaczysz pole wyboru, aby uwzględnić krótką odpowiedź , zobaczysz również dokładną odpowiedź, jeśli jest dostępna, wraz z fragmentem odpowiedzi w okienku testu podczas zadawania pytania.
Wybierz pozycję Zbadaj, aby bardziej szczegółowo sprawdzić odpowiedź. Okno testowe służy do testowania zmian w projekcie przed wdrożeniem projektu.
W interfejsie Inspekcja można zobaczyć poziom pewności, że ta odpowiedź będzie odpowiadać na pytanie i bezpośrednio edytować daną parę pytań i odpowiedzi.
Wdrażanie projektu
Wybierz ikonę Wdróż projekt, aby wprowadzić menu wdrażania projektu.
Podczas wdrażania projektu zawartość projektu przechodzi z indeksu do indeksu
test
prod
w usłudze Azure Search.Wybierz pozycję Wdróż, a następnie po wyświetleniu monitu wybierz pozycję Wdróż> ponownie.
Projekt został pomyślnie wdrożony. Możesz użyć punktu końcowego, aby odpowiedzieć na pytania we własnej aplikacji niestandardowej, aby odpowiedzieć na nie lub w botze.
Wymagania wstępne
- Bieżąca wersja programu cURL. Kilka przełączników wiersza polecenia jest używanych w przewodnikach Szybki start, które zostały zanotowane w dokumentacji biblioteki cURL.
- Subskrypcja platformy Azure — utwórz bezpłatnie
- Niestandardowe odpowiadanie na pytania wymaga zasobu language z włączoną funkcją niestandardowego odpowiadania na pytania w celu wygenerowania klucza interfejsu API i punktu końcowego.
- Po wdrożeniu zasobu Language wybierz pozycję Przejdź do zasobu. Aby nawiązać połączenie z interfejsem API, potrzebny będzie klucz i punkt końcowy z utworzonego zasobu. Wklej klucz i punkt końcowy do poniższego kodu w dalszej części przewodnika Szybki start.
- Aby utworzyć zasób języka za pomocą interfejsu wiersza polecenia platformy Azure, podaj następujące dodatkowe właściwości:
--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>
- Istniejący projekt do wykonywania zapytań. Jeśli projekt nie został skonfigurowany, możesz postępować zgodnie z instrukcjami w przewodniku Szybki start programu Language Studio. Możesz też dodać projekt, który używa tego adresu URL podręcznika użytkownika urządzenia Surface jako źródła danych.
Konfigurowanie
Tworzenie zmiennych środowiskowych
Aby wysyłać żądania interfejsu API, aplikacja musi być uwierzytelniona. W środowisku produkcyjnym należy użyć bezpiecznego sposobu przechowywania poświadczeń i uzyskiwania do nich dostępu. W tym przykładzie zostaną zapisane poświadczenia do zmiennych środowiskowych na komputerze lokalnym z uruchomioną aplikacją.
Aby ustawić zmienną środowiskową dla klucza zasobu Language, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.
- Aby ustawić zmienną
LANGUAGE_KEY
środowiskową, zastąpyour-key
element jednym z kluczy zasobu. - Aby ustawić zmienną
LANGUAGE_ENDPOINT
środowiskową, zastąpyour-endpoint
element punktem końcowym zasobu.
Ważne
Jeśli używasz klucza interfejsu API, zapisz go bezpiecznie w innym miejscu, na przykład w usłudze Azure Key Vault. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie.
Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach Azure AI.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
Uwaga
Jeśli musisz uzyskać dostęp tylko do zmiennych środowiskowych w bieżącej uruchomionej konsoli, możesz ustawić zmienną środowiskową z wartością set
zamiast setx
.
Po dodaniu zmiennych środowiskowych może być konieczne ponowne uruchomienie wszystkich uruchomionych programów, które będą musiały odczytać zmienne środowiskowe, w tym okno konsoli. Jeśli na przykład używasz programu Visual Studio jako edytora, uruchom ponownie program Visual Studio przed uruchomieniem przykładu.
Wykonywanie zapytań względem projektu
Generowanie odpowiedzi na podstawie projektu
Aby wykonać zapytanie dotyczące niestandardowego projektu odpowiedzi na pytania przy użyciu interfejsów API REST i biblioteki cURL, potrzebne są następujące informacje:
Nazwa zmiennej | Wartość |
---|---|
Endpoint |
Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Alternatywnie możesz znaleźć wartość w artykule Language Studio>question answering>Deploy project Get prediction URL (Wdrażanie projektu>Uzyskiwanie adresu URL przewidywania). Przykładowy punkt końcowy to: https://southcentralus.api.cognitive.microsoft.com/ |
API-Key |
Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Możesz użyć Key1 lub Key2. Zawsze posiadanie dwóch prawidłowych kluczy zawsze w celu zapewnienia bezpiecznej rotacji kluczy z zerowym przestojem. Alternatywnie możesz znaleźć wartość w artykule Language Studio>question answering>Deploy project Get prediction URL (Wdrażanie projektu>Uzyskiwanie adresu URL przewidywania). Wartość klucza jest częścią przykładowego żądania. |
Project |
Nazwa niestandardowego projektu odpowiadania na pytania. |
Deployment |
Istnieją dwie możliwe wartości: test , i production . production program jest zależny od wdrożenia projektu z poziomu programu Language Studio>z odpowiedzią>na pytanie Wdrażanie projektu. |
Polecenie cURL jest wykonywane z powłoki BASH. Edytuj to polecenie przy użyciu własnej nazwy zasobu, klucza zasobu i wartości JSON oraz rozmiaru kodu 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}'
Po uruchomieniu powyższego kodu, jeśli używasz źródła danych z wymagań wstępnych, otrzymasz odpowiedź, która wygląda następująco:
{
"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": []
}
}
]
}
Funkcja confidenceScore
zwraca wartość z zakresu od 0 do 1. Możesz pomyśleć o tym jak o wartości procentowej i pomnożyć przez 100, więc współczynnik ufności 0,9185 oznacza, że niestandardowe odpowiadanie na pytania wynosi 91,85% przekonanych, że jest to prawidłowa odpowiedź na pytanie na podstawie projektu.
Jeśli chcesz wykluczyć odpowiedzi, w których współczynnik ufności spadnie poniżej określonego confidenceScoreThreshold
progu, możesz dodać parametr .
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}'
Ponieważ wiemy z poprzedniego wykonania kodu, że nasz współczynnik ufności to: .9185
ustawienie progu na .95
wartość spowoduje zwrócenie odpowiedzi domyślnej.
{
"answers": [
{
"questions": [],
"answer": "No good match found in KB",
"confidenceScore": 0.0,
"id": -1,
"metadata": {}
}
]
}
Tekst zapytania bez projektu
Możesz również użyć niestandardowego odpowiadania na pytania bez projektu przy użyciu wstępnie utworzonego niestandardowego interfejsu API REST odpowiadania na pytania, który jest wywoływany za pomocą metody query-text
. W takim przypadku należy podać odpowiedź na pytanie zarówno przy użyciu pytania, jak i skojarzonych rekordów tekstowych, które chcesz wyszukać w momencie wysłania żądania.
W tym przykładzie wystarczy zmodyfikować zmienne dla API KEY
i 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'
W tym przykładzie zostanie zwrócony wynik:
{
"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
}
]
}
Skorzystaj z tego przewodnika Szybki start, aby uzyskać niestandardową bibliotekę klienta odpowiadającą na pytania dla platformy .NET, aby:
- Uzyskaj odpowiedź z projektu.
- Uzyskaj odpowiedź z treści tekstu wysyłanego wraz z pytaniem.
- Uzyskaj współczynnik ufności odpowiedzi na twoje pytanie.
Dokumentacja referencyjna | Package (NuGet) | Dodatkowe przykłady | kod źródłowy biblioteki
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz bezpłatnie
- Środowisko IDE programu Visual Studio lub bieżąca wersja platformy .NET Core.
- Niestandardowe odpowiadanie na pytania wymaga zasobu language z włączoną funkcją niestandardowego odpowiadania na pytania w celu wygenerowania klucza interfejsu API i punktu końcowego.
- Po wdrożeniu zasobu Language wybierz pozycję Przejdź do zasobu. Aby nawiązać połączenie z interfejsem API, potrzebny będzie klucz i punkt końcowy z utworzonego zasobu. Wklej klucz i punkt końcowy do poniższego kodu w dalszej części przewodnika Szybki start.
- Aby utworzyć zasób języka za pomocą interfejsu wiersza polecenia platformy Azure, podaj następujące dodatkowe właściwości:
--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>
- Istniejący projekt do wykonywania zapytań. Jeśli projekt nie został skonfigurowany, możesz postępować zgodnie z instrukcjami w przewodniku Szybki start dla programu Language Studio. Możesz też dodać projekt, który używa tego adresu URL podręcznika użytkownika urządzenia Surface jako źródła danych.
Konfigurowanie
Tworzenie zmiennych środowiskowych
Aby wysyłać żądania interfejsu API, aplikacja musi być uwierzytelniona. W środowisku produkcyjnym należy użyć bezpiecznego sposobu przechowywania poświadczeń i uzyskiwania do nich dostępu. W tym przykładzie zostaną zapisane poświadczenia do zmiennych środowiskowych na komputerze lokalnym z uruchomioną aplikacją.
Aby ustawić zmienną środowiskową dla klucza zasobu Language, otwórz okno konsoli i postępuj zgodnie z instrukcjami dotyczącymi systemu operacyjnego i środowiska programistycznego.
- Aby ustawić zmienną
LANGUAGE_KEY
środowiskową, zastąpyour-key
element jednym z kluczy zasobu. - Aby ustawić zmienną
LANGUAGE_ENDPOINT
środowiskową, zastąpyour-endpoint
element punktem końcowym zasobu.
Ważne
Jeśli używasz klucza interfejsu API, zapisz go bezpiecznie w innym miejscu, na przykład w usłudze Azure Key Vault. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie.
Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach Azure AI.
setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint
Uwaga
Jeśli musisz uzyskać dostęp tylko do zmiennych środowiskowych w bieżącej uruchomionej konsoli, możesz ustawić zmienną środowiskową z wartością set
zamiast setx
.
Po dodaniu zmiennych środowiskowych może być konieczne ponowne uruchomienie wszystkich uruchomionych programów, które będą musiały odczytać zmienne środowiskowe, w tym okno konsoli. Jeśli na przykład używasz programu Visual Studio jako edytora, uruchom ponownie program Visual Studio przed uruchomieniem przykładu.
CLI
W oknie konsoli (takim jak cmd, PowerShell lub Bash) użyj dotnet new
polecenia , aby utworzyć nową aplikację konsolową o nazwie question-answering-quickstart
. To polecenie tworzy prosty projekt języka C# "Hello World" z jednym plikiem źródłowym: program.cs.
dotnet new console -n question-answering-quickstart
Zmień katalog na nowo utworzony folder aplikacji. Aplikację można skompilować za pomocą następujących funkcji:
dotnet build
Dane wyjściowe kompilacji nie powinny zawierać żadnych ostrzeżeń ani błędów.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
W katalogu aplikacji zainstaluj niestandardową bibliotekę klienta odpowiadającą na pytania dla platformy .NET za pomocą następującego polecenia:
dotnet add package Azure.AI.Language.QuestionAnswering
Wykonywanie zapytań względem projektu
Generowanie odpowiedzi na podstawie projektu
Poniższy przykład umożliwia wykonywanie zapytań dotyczących projektu przy użyciu GetAnswers
metody w celu uzyskania odpowiedzi na twoje pytanie.
Musisz zaktualizować poniższy kod i podać własne wartości dla następujących zmiennych.
Nazwa zmiennej | Wartość |
---|---|
endpoint |
Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Alternatywnie możesz znaleźć wartość w artykule Language Studio>question answering>Deploy project Get prediction URL (Wdrażanie projektu>Uzyskiwanie adresu URL przewidywania). Przykładowy punkt końcowy to: https://southcentralus.api.cognitive.microsoft.com/ |
credential |
Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Możesz użyć Key1 lub Key2. Zawsze posiadanie dwóch prawidłowych kluczy zawsze w celu zapewnienia bezpiecznej rotacji kluczy z zerowym przestojem. Alternatywnie możesz znaleźć wartość w artykule Language Studio>question answering>Deploy project Get prediction URL (Wdrażanie projektu>Uzyskiwanie adresu URL przewidywania). Wartość klucza jest częścią przykładowego żądania. |
projectName |
Nazwa niestandardowego projektu odpowiadania na pytania. |
deploymentName |
Istnieją dwie możliwe wartości: test , i production . production program jest zależny od wdrożenia projektu z poziomu programu Language Studio>z odpowiedzią>na pytanie Wdrażanie projektu. |
Ważne
Pamiętaj, aby usunąć klucz z kodu po zakończeniu i nigdy nie publikować go publicznie. W przypadku środowiska produkcyjnego użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak usługa Azure Key Vault. Aby uzyskać więcej informacji, zobacz artykuł Dotyczący zabezpieczeń usług Azure AI.
W katalogu projektu otwórz plik program.cs i zastąp ciąg następującym kodem:
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}");
}
}
}
}
Chociaż kodujemy stałe zmienne dla naszego przykładu. W przypadku środowiska produkcyjnego rozważ użycie bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń. Na przykład usługa Azure Key Vault zapewnia bezpieczny magazyn kluczy.
Po zaktualizowaniu Program.cs
przy użyciu powyższego kodu i podstawieniu w poprawnych wartościach zmiennych. Uruchom aplikację za pomocą dotnet run
polecenia z katalogu aplikacji.
dotnet run
Odpowiedź będzie wyglądać następująco:
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.
Aby uzyskać informacje na temat pewności, w jaki sposób niestandardowe odpowiadanie na pytania jest poprawne, dodaj dodatkową instrukcję drukowania poniżej istniejących instrukcji drukowania:
Console.WriteLine($"Q:{question}");
Console.WriteLine($"A:{answer.Answer}");
Console.WriteLine($"({answer.Confidence})"); // add this line
Jeśli wykonasz dotnet run
ponownie, otrzymasz wynik z oceną ufności:
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)
Wynik ufności zwraca wartość z zakresu od 0 do 1. Możesz pomyśleć o tym jak o wartości procentowej i pomnożyć przez 100, więc współczynnik ufności 0,9185 oznacza, że niestandardowe odpowiadanie na pytania wynosi 91,85% przekonanych, że jest to prawidłowa odpowiedź na pytanie na podstawie projektu.
Jeśli chcesz wykluczyć odpowiedzi, w których współczynnik ufności spadnie poniżej określonego progu, użyj polecenia AnswerOptions
, aby dodać ConfidenceScoreThreshold
właściwość .
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
Ponieważ wiemy z poprzedniego wykonania kodu, że nasz współczynnik ufności to: .9185
ustawienie progu na .95
wartość spowoduje zwrócenie odpowiedzi domyślnej.
Q:How much battery life do I have left?
A:No good match found in KB
(0)
Tekst zapytania bez projektu
Możesz również użyć niestandardowego odpowiadania na pytania bez projektu za pomocą polecenia GetAnswersFromText
. W takim przypadku należy podać niestandardową odpowiedź na pytanie oraz skojarzone rekordy tekstowe, na które chcesz wyszukać odpowiedź w momencie wysłania żądania.
W tym przykładzie wystarczy zmodyfikować zmienne dla endpoint
i 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;
}
}
}
}
}
Aby uruchomić powyższy kod, zastąp Program.cs
element zawartością powyższego bloku skryptu i zmodyfikuj endpoint
zmienne i credential
, aby odpowiadały zasobowi języka utworzonemu w ramach wymagań wstępnych.
W takim przypadku iterujemy wszystkie odpowiedzi i zwracamy tylko odpowiedź z najwyższym współczynnikiem ufności większym niż 0,9. Aby dowiedzieć się więcej o opcjach dostępnych w programie GetAnswersFromText
.
Skorzystaj z tego przewodnika Szybki start, aby uzyskać niestandardową bibliotekę klienta odpowiadającą na pytania dla języka Python:
- Uzyskaj odpowiedź z projektu.
- Uzyskaj odpowiedź z treści tekstu wysyłanego wraz z pytaniem.
- Uzyskaj współczynnik ufności odpowiedzi na twoje pytanie.
Dokumentacja referencyjna | Package (PyPI) | Dodatkowe przykłady | kod źródłowy biblioteki
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz bezpłatnie
- Python 3.x
- Niestandardowe odpowiadanie na pytania wymaga zasobu language z włączoną funkcją niestandardowego odpowiadania na pytania w celu wygenerowania klucza interfejsu API i punktu końcowego.
- Po wdrożeniu zasobu Language wybierz pozycję Przejdź do zasobu. Potrzebny jest klucz i punkt końcowy z utworzonego zasobu, aby nawiązać połączenie z interfejsem API. Wklej klucz i punkt końcowy do poniższego kodu w dalszej części przewodnika Szybki start.
- Aby utworzyć zasób języka za pomocą interfejsu wiersza polecenia platformy Azure, podaj następujące inne właściwości:
--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>
- Istniejący projekt do wykonywania zapytań. Jeśli projekt nie został skonfigurowany, możesz postępować zgodnie z instrukcjami w przewodniku Szybki start dla programu Language Studio. Możesz też dodać projekt, który używa tego adresu URL podręcznika użytkownika urządzenia Surface jako źródła danych.
Konfigurowanie
Instalowanie biblioteki klienta
Po zainstalowaniu środowiska Python możesz zainstalować bibliotekę klienta przy użyciu następującego polecenia:
pip install azure-ai-language-questionanswering
Wykonywanie zapytań względem projektu
Generowanie odpowiedzi na podstawie projektu
Poniższy przykład umożliwia wykonywanie zapytań dotyczących projektu przy użyciu get_answers w celu uzyskania odpowiedzi na pytanie. Możesz skopiować ten kod do dedykowanego pliku .py lub do komórki w aplikacji Jupyter Notebook/Lab.
Musisz zaktualizować poniższy kod i podać własne wartości dla następujących zmiennych.
Nazwa zmiennej | Wartość |
---|---|
endpoint |
Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Alternatywnie możesz znaleźć wartość w artykule Language Studio>question answering>Deploy project Get prediction URL (Wdrażanie projektu>Uzyskiwanie adresu URL przewidywania). Przykładowy punkt końcowy to: https://southcentralus.api.cognitive.microsoft.com/ |
credential |
Tę wartość można znaleźć w sekcji Klucze i punkt końcowy podczas badania zasobu z poziomu witryny Azure Portal. Możesz użyć Key1 lub Key2. Zawsze posiadanie dwóch prawidłowych kluczy zawsze w celu zapewnienia bezpiecznej rotacji kluczy z zerowym przestojem. Alternatywnie możesz znaleźć wartość w artykule Language Studio>question answering>Deploy project Get prediction URL (Wdrażanie projektu>Uzyskiwanie adresu URL przewidywania). Wartość klucza jest częścią przykładowego żądania. |
knowledge_base_project |
Nazwa projektu odpowiedzi na pytanie. |
deployment |
Istnieją dwie możliwe wartości: test , i production . production program jest zależny od wdrożenia projektu z poziomu programu Language Studio>z odpowiedzią>na pytanie Wdrażanie projektu. |
Ważne
Pamiętaj, aby usunąć klucz z kodu po zakończeniu i nigdy nie publikować go publicznie. W przypadku środowiska produkcyjnego użyj bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń, takich jak usługa Azure Key Vault. Aby uzyskać więcej informacji, zobacz artykuł Azure AI Services security (Zabezpieczenia usług 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()
Mimo że kodujemy stałe zmienne dla naszego przykładu. W przypadku środowiska produkcyjnego rozważ użycie bezpiecznego sposobu przechowywania i uzyskiwania dostępu do poświadczeń. Na przykład usługa Azure Key Vault zapewnia bezpieczny magazyn kluczy.
Po uruchomieniu powyższego kodu, jeśli używasz źródła danych z wymagań wstępnych, otrzymasz odpowiedź, która wygląda następująco:
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.
Aby uzyskać informacje na temat tego, jak pewna jest pewność, że niestandardowe odpowiadanie na pytanie jest poprawne, dodaj kolejną instrukcję drukowania poniżej istniejących instrukcji drukowania:
print("Q: {}".format(question))
print("A: {}".format(output.answers[0].answer))
print("Confidence Score: {}".format(output.answers[0].confidence)) # add this line
Otrzymasz teraz wynik z współczynnikiem ufności:
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
Wynik ufności zwraca wartość z zakresu od 0 do 1. Możesz pomyśleć o tym jak o wartości procentowej i pomnożyć przez 100, więc współczynnik ufności 0,9185 oznacza, że niestandardowe odpowiadanie na pytania wynosi 91,85% przekonanych, że jest to prawidłowa odpowiedź na pytanie na podstawie projektu.
Jeśli chcesz wykluczyć odpowiedzi, w których współczynnik ufności spadnie poniżej określonego progu, możesz zmodyfikować parametr AnswerOptions , aby dodać confidence_threshold
parametr .
output = client.get_answers(
confidence_threshold = 0.95, #add this line
question = question,
project_name=knowledge_base_project,
deployment_name=deployment
)
Ponieważ wiemy z poprzedniego wykonania kodu, że nasz współczynnik ufności to: .9185
ustawienie progu .95
na wyniki zwracanej odpowiedzi domyślnej.
Q: How much battery life do I have left?
A: No good match found in KB
Confidence Score: 0.0
Tekst zapytania bez projektu
Możesz również użyć niestandardowej odpowiedzi na pytania bez projektu z get_answers_from_text. W takim przypadku należy podać niestandardową odpowiedź na pytanie oraz skojarzone rekordy tekstowe, na które chcesz wyszukać odpowiedź w momencie wysłania żądania.
W tym przykładzie wystarczy zmodyfikować zmienne dla endpoint
i 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()
Możesz skopiować ten kod do dedykowanego pliku .py lub do nowej komórki w aplikacji Jupyter Notebook/Lab. Ten przykład zwraca wynik:
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
W takim przypadku iterujemy wszystkie odpowiedzi i zwracamy tylko odpowiedź z najwyższym współczynnikiem ufności większym niż 0,9. Aby dowiedzieć się więcej o opcjach dostępnych za pomocą get_answers_from_text, zapoznaj się z parametrami AnswersFromTextOptions.
Czyszczenie zasobów
Jeśli chcesz wyczyścić i usunąć subskrypcję usług Azure AI, możesz usunąć zasób lub grupę zasobów. Usunięcie grupy zasobów powoduje również usunięcie wszelkich innych skojarzonych z nią zasobów.
Poznawanie interfejsu API REST
Aby dowiedzieć się więcej na temat automatyzacji niestandardowego potoku odpowiadania na pytania, zapoznaj się z dokumentacją interfejsu API REST. Obecnie funkcja tworzenia jest dostępna tylko za pośrednictwem interfejsu API REST:
- Dokumentacja interfejsu API tworzenia
- Przykłady biblioteki cURL interfejsu API tworzenia
- Dokumentacja interfejsu API środowiska uruchomieniowego