Azure Cognitive Language Services-Clientbibliothek für Fragen und Antworten für .NET– Version 1.1.0
Der Fragebeantwortungsdienst ist ein cloudbasierter API-Dienst, mit dem Sie eine Konversations-Frage-Antwort-Ebene über Ihren vorhandenen Daten erstellen können. Verwenden Sie es, um eine Wissensdatenbank zu erstellen, indem Sie Fragen und Antworten aus Ihren teilweise strukturierten Inhalten extrahieren, einschließlich FAQ, Handbüchern und Dokumenten. Beantworten Sie die Fragen der Benutzer automatisch mit den besten Antworten der QnAs in Ihrem Wissensdatenbank. Auch Ihr Wissensdatenbank wird intelligenter, da sie ständig aus dem Benutzerverhalten lernt.
Quellcode | Paket (NuGet) | API-Referenzdokumentation | Produktdokumentation | Proben | Migrationshandbuch
Erste Schritte
Installieren des Pakets
Installieren Sie die Azure Cognitive Language Services-Clientbibliothek für Fragen und Antworten für .NET mit NuGet:
dotnet add package Azure.AI.Language.QuestionAnswering
Voraussetzungen
- Ein Azure-Abonnement
- Eine vorhandene Frage-Antwort-Ressource
Obwohl Sie dieses SDK zum Erstellen und Importieren von Unterhaltungsprojekten verwenden können, ist Language Studio die bevorzugte Methode zum Erstellen von Projekten.
Authentifizieren des Clients
Um mit dem Frageantwortdienst zu interagieren, müssen Sie entweder eine instance der QuestionAnsweringClient
-Klasse zum Abfragen vorhandener Projekte oder eine instance für die QuestionAnsweringAuthoringClient
Verwaltung von Projekten in Ihrer Ressource erstellen. Sie benötigen einen Endpunkt und einen API-Schlüssel , um ein Clientobjekt zu instanziieren. Weitere Informationen zur Authentifizierung mit Cognitive Services finden Sie unter Authentifizieren von Anforderungen an Azure Cognitive Services.
Abrufen eines API-Schlüssels
Sie können den Endpunkt und einen API-Schlüssel aus der Cognitive Services-Ressource oder der Ressource "Fragen und Antworten" im Azure-Portal abrufen.
Alternativ können Sie den unten gezeigten Azure CLI-Befehl verwenden, um den API-Schlüssel aus der Ressource "Fragen und Antworten" abzurufen.
az cognitiveservices account keys list --resource-group <resource-group-name> --name <resource-name>
Erstellen eines QuestionAnsweringClient
Um zu QuestionAnsweringClient
verwenden, stellen Sie sicher, dass Sie die richtigen Namespaces verwenden:
using Azure.Core;
using Azure.AI.Language.QuestionAnswering;
Mit Ihrem Endpunkt und API-Schlüssel können Sie eine QuestionAnsweringClient
instanziieren:
Uri endpoint = new Uri("https://myaccount.cognitiveservices.azure.com/");
AzureKeyCredential credential = new AzureKeyCredential("{api-key}");
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
Erstellen eines QuestionAnsweringAuthoringClient
Um den QuestionAnsweringAuthoringClient
zu verwenden, verwenden Sie bei Bedarf zusätzlich zu den oben genannten Namespaces.
using Azure.AI.Language.QuestionAnswering.Authoring;
Mit Ihrem Endpunkt und API-Schlüssel können Sie eine QuestionAnsweringAuthoringClient
instanziieren:
Uri endpoint = new Uri("https://myaccount.cognitiveservices.azure.com/");
AzureKeyCredential credential = new AzureKeyCredential("{api-key}");
QuestionAnsweringAuthoringClient client = new QuestionAnsweringAuthoringClient(endpoint, credential);
Erstellen eines Clients mithilfe der Azure Active Directory-Authentifizierung
Sie können auch eine oder QuestionAnsweringAuthoringClient
eine QuestionAnsweringClient
AAD-Authentifizierung (Azure Active Directory) erstellen. Ihrem Benutzer oder Dienstprinzipal muss die Rolle "Cognitive Services-Sprachleser" zugewiesen sein.
Mit DefaultAzureCredential können Sie einen Dienst mithilfe einer verwalteten Identität oder eines Dienstprinzipals authentifizieren, sich als Entwickler authentifizieren, der an einer Anwendung arbeitet, und vieles mehr, ohne code zu ändern.
Bevor Sie oder DefaultAzureCredential
einen beliebigen Anmeldeinformationstyp aus Azure.Identity verwenden können, müssen Sie zunächst das Azure.Identity-Paket installieren.
Um mit einer Client-ID und einem Geheimschlüssel zu verwenden DefaultAzureCredential
, müssen Sie die AZURE_TENANT_ID
Umgebungsvariablen , AZURE_CLIENT_ID
und AZURE_CLIENT_SECRET
festlegen. Alternativ können Sie diese Werte auch an azure.Identity ClientSecretCredential
übergeben.
Stellen Sie sicher, dass Sie den richtigen Namespace für DefaultAzureCredential
am Anfang ihrer Quelldatei verwenden:
using Azure.Identity;
Anschließend können Sie eine instance von DefaultAzureCredential
erstellen und an eine neue instance Ihres Clients übergeben:
Uri endpoint = new Uri("https://myaccount.cognitiveservices.azure.com");
DefaultAzureCredential credential = new DefaultAzureCredential();
QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
Beachten Sie, dass regionale Endpunkte die AAD-Authentifizierung nicht unterstützen. Erstellen Sie stattdessen einen benutzerdefinierten Domänennamen für Ihre Ressource, um die AAD-Authentifizierung zu verwenden.
Wichtige Begriffe
QuestionAnsweringClient
Die QuestionAnsweringClient
ist die primäre Schnittstelle zum Stellen von Fragen mithilfe einer Wissensdatenbank mit Ihren eigenen Informationen oder texteingaben mit vortrainierten Modellen. Sie stellt sowohl synchrone als auch asynchrone APIs bereit, um Fragen zu stellen.
QuestionAnsweringAuthoringClient
stellt QuestionAnsweringAuthoringClient
eine Schnittstelle zum Verwalten von Fragen-Antwort-Projekten bereit. Beispiele für die verfügbaren Vorgänge sind das Erstellen und Bereitstellen von Projekten, das Aktualisieren Ihrer Wissensquellen und das Aktualisieren von Frage-Antwort-Paaren. Es stellt sowohl synchrone als auch asynchrone APIs bereit.
Threadsicherheit
Wir garantieren, dass alle Client-instance Methoden threadsicher und voneinander unabhängig sind (Richtlinie). Dadurch wird sichergestellt, dass die Empfehlung, Clientinstanzen wiederzuverwenden, immer sicher ist, auch über Threads hinweg.
Zusätzliche Konzepte
Clientoptionen | Zugreifen auf die Antwort | Vorgänge | mit langer AusführungsdauerBehandeln von Fehlern | Diagnose | Spott | Clientlebensdauer
Beispiele
QuestionAnsweringClient
Die Azure.AI.Language.QuestionAnswering-Clientbibliothek stellt sowohl synchrone als auch asynchrone APIs bereit.
In den folgenden Beispielen werden häufige Szenarien mit dem client
oben erstellten veranschaulicht.
Fragen stellen
Die einzige Eingabe, die erforderlich ist, um eine Frage mithilfe eines vorhandenen Wissensdatenbank zu stellen, ist nur die Frage selbst:
string projectName = "{ProjectName}";
string deploymentName = "{DeploymentName}";
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
Response<AnswersResult> response = client.GetAnswers("How long should my Surface battery last?", project);
foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
{
Console.WriteLine($"({answer.Confidence:P2}) {answer.Answer}");
Console.WriteLine($"Source: {answer.Source}");
Console.WriteLine();
}
Sie können zusätzliche Eigenschaften für QuestionAnsweringClientOptions
festlegen, um die Anzahl der Antworten zu begrenzen, eine minimale Konfidenzbewertung anzugeben und vieles mehr.
Stellen einer Folgefrage
Wenn Ihr Wissensdatenbank für "Chit-Chat" konfiguriert ist, können Sie eine Folgefrage stellen, sofern die vorherige Frage-Antwort-ID und optional die genaue Frage angegeben wird, die der Benutzer gestellt hat:
string projectName = "{ProjectName}";
string deploymentName = "{DeploymentName}";
// Answers are ordered by their ConfidenceScore so assume the user choose the first answer below:
KnowledgeBaseAnswer previousAnswer = answers.Answers.First();
QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);
AnswersOptions options = new AnswersOptions
{
AnswerContext = new KnowledgeBaseAnswerContext(previousAnswer.QnaId.Value)
};
Response<AnswersResult> response = client.GetAnswers("How long should charging take?", project, options);
foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
{
Console.WriteLine($"({answer.Confidence:P2}) {answer.Answer}");
Console.WriteLine($"Source: {answer.Source}");
Console.WriteLine();
}
QuestionAnsweringAuthoringClient
Die folgenden Beispiele zeigen häufige Szenarien mit der QuestionAnsweringAuthoringClient
in diesem Abschnitt erstellten instance.
Erstellen eines neuen Projekts
Um ein neues Projekt zu erstellen, müssen Sie den Namen des Projekts angeben und eine RequestContent
instance mit den Parametern erstellen, die zum Einrichten des Projekts erforderlich sind.
// Set project name and request content parameters
string newProjectName = "{ProjectName}";
RequestContent creationRequestContent = RequestContent.Create(
new {
description = "This is the description for a test project",
language = "en",
multilingualResource = false,
settings = new {
defaultAnswer = "No answer found for your question."
}
}
);
Response creationResponse = client.CreateProject(newProjectName, creationRequestContent);
// Projects can be retrieved as follows
Pageable<BinaryData> projects = client.GetProjects();
Console.WriteLine("Projects: ");
foreach (BinaryData project in projects)
{
Console.WriteLine(project);
}
Bereitstellen des Projekts
Ihre Projekte können mit oder DeployProjectAsync
mit dem synchronen DeployProject
bereitgestellt werden. Sie müssen lediglich den Namen des Projekts und den Bereitstellungsnamen angeben, den Sie verwenden möchten. Beachten Sie, dass sie mit dem Dienst keine leeren Projekte bereitstellen können.
// Set deployment name and start operation
string newDeploymentName = "{DeploymentName}";
Operation<BinaryData> deploymentOperation = client.DeployProject(WaitUntil.Completed, newProjectName, newDeploymentName);
// Deployments can be retrieved as follows
Pageable<BinaryData> deployments = client.GetDeployments(newProjectName);
Console.WriteLine("Deployments: ");
foreach (BinaryData deployment in deployments)
{
Console.WriteLine(deployment);
}
Hinzufügen einer Wissensquelle
Eine Möglichkeit zum Hinzufügen von Inhalten zu Ihrem Projekt besteht darin, eine Wissensquelle hinzuzufügen. Das folgende Beispiel zeigt, wie Sie eine RequestContent
instance einrichten können, um eine neue Wissensquelle vom Typ "url" hinzuzufügen.
// Set request content parameters for updating our new project's sources
string sourceUri = "{KnowledgeSourceUri}";
RequestContent updateSourcesRequestContent = RequestContent.Create(
new[] {
new {
op = "add",
value = new
{
displayName = "MicrosoftFAQ",
source = sourceUri,
sourceUri = sourceUri,
sourceKind = "url",
contentStructureKind = "unstructured",
refresh = false
}
}
});
Operation<Pageable<BinaryData>> updateSourcesOperation = client.UpdateSources(WaitUntil.Completed, newProjectName, updateSourcesRequestContent);
// Knowledge Sources can be retrieved as follows
Pageable<BinaryData> sources = updateSourcesOperation.Value;
Console.WriteLine("Sources: ");
foreach (BinaryData source in sources)
{
Console.WriteLine(source);
}
Problembehandlung
Allgemein
Wenn Sie mit der Cognitive Language Services-Clientbibliothek für Fragen und Antworten mithilfe des .NET SDK interagieren, entsprechen die vom Dienst zurückgegebenen Fehler denselben HTTP-status Codes, die für REST-API-Anforderungen zurückgegeben werden.
Wenn Sie beispielsweise eine Frage an eine nicht vorhandene Wissensdatenbank übermitteln, wird ein 400
Fehler zurückgegeben, der "Ungültige Anforderung" angibt.
try
{
QuestionAnsweringProject project = new QuestionAnsweringProject("invalid-knowledgebase", "test");
Response<AnswersResult> response = client.GetAnswers("Does this knowledge base exist?", project);
}
catch (RequestFailedException ex)
{
Console.WriteLine(ex.ToString());
}
Sie werden feststellen, dass zusätzliche Informationen protokolliert werden, z. B. die Clientanforderungs-ID des Vorgangs.
Azure.RequestFailedException: Please verify azure search service is up, restart the WebApp and try again
Status: 400 (Bad Request)
ErrorCode: BadArgument
Content:
{
"error": {
"code": "BadArgument",
"message": "Please verify azure search service is up, restart the WebApp and try again"
}
}
Headers:
x-envoy-upstream-service-time: 23
apim-request-id: 76a83876-22d1-4977-a0b1-559a674f3605
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Content-Type-Options: nosniff
Date: Wed, 30 Jun 2021 00:32:07 GMT
Content-Length: 139
Content-Type: application/json; charset=utf-8
Einrichten der Konsolenprotokollierung
Die einfachste Möglichkeit, die Protokolle anzuzeigen, besteht darin, die Konsolenprotokollierung zu aktivieren. Verwenden Sie die -Methode, um einen Azure SDK-Protokolllistener zu erstellen, der AzureEventSourceListener.CreateConsoleLogger
Nachrichten an die Konsole ausgibt.
// Setup a listener to monitor logged events.
using AzureEventSourceListener listener = AzureEventSourceListener.CreateConsoleLogger();
Weitere Informationen zu anderen Protokollierungsmechanismen finden Sie hier.
Nächste Schritte
- Sehen Sie sich unsere Beispiele an.
- Informieren Sie sich über die verschiedenen Features des Diensts "Fragen und Antworten".
- Probieren Sie unsere Servicedemos aus.
Mitwirken
Ausführliche Informationen zum Erstellen, Testen und Mitwirken zu dieser Bibliothek finden Sie im CONTRIBUTING.md .
Beiträge und Vorschläge für dieses Projekt sind willkommen. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. Weitere Informationen finden Sie unter cla.microsoft.com.
Wenn Sie einen Pull Request (PR) übermitteln, überprüft ein CLA-Bot automatisch, ob Sie eine Lizenzvereinbarung bereitstellen und den PR entsprechend ergänzen müssen (z.B. mit einer Bezeichnung oder einem Kommentar). Führen Sie einfach die Anweisungen des Bots aus. Sie müssen dies nur einmal für alle Repositorys ausführen, die unsere CLA verwenden.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Anmerkungen haben.
Azure SDK for .NET