Freigeben über


Schnellstart: Benutzerdefinierte Fragen und Antworten

Hinweis

Möchten Sie Ihre Workloads von QnA Maker migrieren? Informationen zu Funktionsvergleichen und Migrationsschritten finden Sie in unserem Migrationsleitfaden.

Führen Sie erste Schritte mit der Clientbibliothek für Fragen und Antworten aus. Führen Sie die nachfolgenden Schritte zum Installieren des Pakets aus, und testen Sie den Beispielcode für grundlegende Aufgaben.

Sie können ein Benutzerdefiniertes Fragen und Antworten-Projekt aus eigenen Inhalten erstellen, z. B. aus häufig gestellten Fragen oder Produkthandbüchern. Dieser Artikel enthält ein Beispiel zum Erstellen eines Benutzerdefinierten Fragen und Antworten-Projekts auf Grundlage eines Produkthandbuchs zum Beantworten von Fragen.

Voraussetzungen

  • Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
  • Eine Sprachressource mit aktiviertem Feature „Benutzerdefinierte Fragen und Antworten“. Merken Sie sich Ihre Microsoft Entra ID, Ihr Abonnement und den Namen der Sprachressource, den Sie beim Erstellen der Ressource ausgewählt haben.

Erstellen Ihres ersten Benutzerdefinierten Fragen und Antworten-Projekts

  1. Melden Sie sich mit Ihren Azure-Anmeldeinformationen bei Language Studio an.

  2. Scrollen Sie nach unten zum Abschnitt Fragen beantworten, und wählen Sie „Benutzerdefinierte Fragen und Antworten“ öffnen aus.

    Benutzerdefinierte Fragen und Antworten“ öffnen

  3. Wenn Ihre Ressource noch nicht mit Azure Search verbunden ist, wählen Sie Verbinden mit Azure Search aus. Dadurch wird eine neue Browserregisterkarte mit dem Bereich Features Ihrer Ressource im Azure-Portal geöffnet.

    Herstellen einer Verbindung mit Azure Search

  4. Wählen Sie Benutzerdefinierte Fragen und Antworten aktivieren, die zu verknüpfende Azure Search-Ressource und dann Anwenden aus.

    Benutzerdefinierte Fragen und Antworten“ aktivieren

  5. Kehren Sie zur Registerkarte „Language Studio“ zurück. Möglicherweise müssen Sie diese Seite aktualisieren, damit die Änderung Ihrer Ressource registriert wird. Wählen Sie Neues Projekt erstellen aus.

  6. Wählen Sie die Option Ich möchte die Sprache für alle Projekte festlegen, die in dieser Ressource> erstellt wurden Englisch>Weiter aus.

  7. Geben Sie den Projektnamen Sample-project sowie die Beschreibung My first question answering project ein, und übernehmen Sie die Einstellung Keine Antwort gefunden für die Standardantwort.

  8. Überprüfen Sie Ihre Auswahl, und wählen Sie Projekt erstellen aus.

  9. Wählen Sie auf der Seite Quellen verwalten die Option Quelle hinzufügen>URLs aus.

  10. Wählen Sie URL hinzufügen aus, geben Sie die folgenden Werte ein, und wählen Sie dann Alle hinzufügen aus:

    URL-Name URL-Wert
    Surface Book Benutzerhandbuch https://download.microsoft.com/download/7/B/1/7B10C82E-F520-4080-8516-5CF0D803EEE0/surface-book-user-guide-EN.pdf

    Der Extraktionsvorgang nimmt einen Moment in Anspruch, um das Dokument zu lesen sowie Fragen und Antworten zu identifizieren.

    Nachdem die Quelle erfolgreich hinzugefügt wurde, können Sie den Quellinhalt bearbeiten, um weitere benutzerdefinierte Fragen und Antworten-Sätze hinzuzufügen.

Testen des Projekts

  1. Wählen Sie den Link zu Ihrer Quelle aus, dies wird die Seite „Projekt bearbeiten“ öffnen.

  2. Wählen Sie in der Menüleiste Test aus > geben Sie die Frage Wie richte ich mein Surface Book ein? ein. Eine Antwort wird basierend auf den Frage-Antwort-Paaren generiert, die automatisch ermittelt und aus Ihrer Quell-URL extrahiert wurden:

    Testen der Chatoberfläche für Fragen

    Wenn Sie das Kontrollkästchen Kurze Antwort einbeziehen aktivieren, wird auch eine genaue Antwort (falls verfügbar) zusammen mit der Antwort im Testbereich angezeigt, wenn Sie eine Frage stellen.

  3. Wählen Sie Untersuchen aus, um die Antwort ausführlicher zu untersuchen. Das Testfenster wird verwendet, um Änderungen am Projekt zu testen, bevor das Projekt bereitgestellt wird.

    Anzeigen des Konfidenzintervalls

    In der Untersuchen-Benutzeroberfläche können Sie das Konfidenzniveau sehen, das angibt, wie gut diese Antwort die Frage beantwortet, und ein bestimmtes Frage-Antwort-Antwortpaar direkt bearbeiten.

Bereitstellen des Projekts

  1. Wählen Sie das Symbol „Projekt bereitstellen“ aus, um das Menü „Projekt bereitstellen“ aufzurufen.

    Projekt bereitstellen

    Wenn Sie ein Projekt bereitstellen, wird der Inhalt Ihres Projekts vom test-Index in einen prod-Index in Azure Search verschoben.

  2. Wählen Sie Bereitstellen> aus, und wählen Sie dann erneut Bereitstellen aus, wenn Sie dazu aufgefordert werden.

    Erfolgreiche Bereitstellung

    Das Projekt wurde nun erfolgreich bereitgestellt. Sie können den Endpunkt verwenden, um Fragen in Ihrer eigenen benutzerdefinierten Anwendung oder in einem Bot zu beantworten.

Voraussetzungen

  • Aktuelle Version von cURL. In den Schnellstartanleitungen werden mehrere Befehlszeilenschalter verwendet, die in der cURL-Dokumentation angegeben sind.
  • Azure-Abonnement – Erstellen eines kostenlosen Kontos
  • Benutzerdefinierte Fragen und Antworten erfordern eine Sprachressource mit aktiviertem Feature „Benutzerdefinierte Fragen und Antworten“, um einen API-Schlüssel und Endpunkt zu generieren.
    • Wählen Sie nach der Bereitstellung der Sprachressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um eine Verbindung mit der API herstellen zu können. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
  • Um eine Sprachressource mit Azure CLI zu erstellen, geben Sie die folgenden zusätzlichen Eigenschaften an: --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>
  • Ein vorhandenes abzufragendes Projekt. Wenn Sie noch kein Projekt eingerichtet haben, können Sie den Anweisungen im Schnellstart von Language-Studio folgen. Oder fügen Sie ein Projekt hinzu, das diese URL für das Surface-Benutzerhandbuch als Datenquelle verwendet.

Einrichten

Erstellen von Umgebungsvariablen

Ihre Anwendung muss authentifiziert werden, um API-Anforderungen senden zu können. In der Produktionsumgebung sollten Sie eine sichere Methode zum Speichern Ihrer Anmeldeinformationen sowie zum Zugriff darauf verwenden. In diesem Beispiel schreiben Sie Ihre Anmeldeinformationen in Umgebungsvariablen auf dem lokalen Computer, auf dem die Anwendung ausgeführt wird.

Um die Umgebungsvariable für Ihren Sprachressourcenschlüssel festzulegen, öffnen Sie ein Konsolenfenster und befolgen die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Zum Festlegen der Umgebungsvariablen LANGUAGE_KEY ersetzen Sie your-key durch einen der Schlüssel für Ihre Ressource.
  • Zum Festlegen der Umgebungsvariablen LANGUAGE_ENDPOINT ersetzen Sie your-endpoint durch den Endpunkt für Ihre Ressource.

Wichtig

Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.

Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.

setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Hinweis

Wenn Sie nur in der aktuell ausgeführten Konsole auf die Umgebungsvariable zugreifen müssen, können Sie die Umgebungsvariable mit set anstelle von setx festlegen.

Nachdem Sie die Umgebungsvariable hinzugefügt haben, müssen Sie unter Umständen alle ausgeführten Programme neu starten, von denen die Umgebungsvariablen gelesen werden müssen, z. B. das Konsolenfenster. Wenn Sie beispielsweise Visual Studio als Editor verwenden, müssen Sie Visual Studio neu starten, bevor Sie das Beispiel ausführen.

Abfragen eines Projekts

Generieren einer Antwort aus einem Projekt

Für die Abfrage eines Benutzerdefinierte Fragen und Antworten-Projekts mit den REST-APIs und cURL benötigen Sie die folgenden Informationen:

Variablenname Wert
Endpoint Diesen Wert finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Alternativ finden Sie den Wert unter Language-Studio>Fragen und Antworten>Projekt bereitstellen>Vorhersage-URL abrufen. Beispielendpunkt: https://southcentralus.api.cognitive.microsoft.com/
API-Key Diesen Wert finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Sie können entweder „Schlüssel1“ oder „Schlüssel2“ verwenden. Es gibt immer zwei gültige Schlüssel für die sichere Schlüsselrotation ohne Downtime. Alternativ finden Sie den Wert unter Language-Studio>Fragen und Antworten>Projekt bereitstellen>Vorhersage-URL abrufen. Der Schlüsselwert ist Teil der Beispielanforderung.
Project Der Name Ihres Benutzerdefinierte Fragen und Antworten-Projekts.
Deployment Es gibt zwei mögliche Werte: test und production. production ist davon abhängig, dass Sie Ihr Projekt aus Language-Studio>Fragen und Antworten>Projekt bereitstellen bereitgestellt haben.

Der cURL-Befehl wird über eine Bash-Shell ausgeführt. Fügen Sie für diesen Befehl Ihren eigenen Ressourcennamen und Ressourcenschlüssel sowie die JSON-Werte und die JSON-Größe ein.

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

Wenn Sie den obigen Code ausführen und die Datenquelle aus den Voraussetzungen verwenden, erhalten Sie eine Antwort wie die folgende:

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

confidenceScore gibt einen Wert zwischen 0 und 1 zurück. Sie können sich dies wie einen Prozentsatz vorstellen und mit 100 multiplizieren. Somit bedeutet ein Vertrauenswert von 0,9185, dass Benutzerdefinierte Fragen und Antworten sich zu 91,85 % sicher ist, dass dies basierend auf dem Projekt die richtige Antwort auf die Frage ist.

Wenn Sie Antworten ausschließen möchten, deren Zuverlässigkeitsbewertung unter einem bestimmten Schwellenwert liegt, können Sie den Parameter confidenceScoreThreshold hinzufügen.

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

Da wir aufgrund der vorherigen Ausführung des Codes wissen, dass unsere Zuverlässigkeitsbewertung .9185 lautet, wird die Standardantwort zurückgegeben, wenn der Schwellenwert auf .95 festgelegt wird.

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

Abfragetext ohne Projekt

Sie können die Benutzerdefinierte Fragen und Antworten auch ohne ein Projekte verwenden mit der vorgefertigten REST-API für Benutzerdefinierte Fragen und Antworten, die über query-text aufgerufen wird. In diesem Fall werden für Fragen und Antworten sowohl eine Frage als auch die zugehörigen Textdatensätze bereitgestellt, die nach einer Antwort durchsucht werden sollen, wenn die Anforderung übermittelt wird.

Für dieses Beispiel müssen nur die Variablen für API KEY und ENDPOINT geändert werden.

curl -X POST -H "Ocp-Apim-Subscription-Key: $LANGUAGE_KEY" -H "Content-Type: application/json" -d '{
"question":"How long does it takes to charge a surface?",
"records":[
{"id":"doc1","text":"Power and charging.It takes two to four hours to charge the Surface Pro 4 battery fully from an empty state. It can take longer if you\u0027re using your Surface for power-intensive activities like gaming or video streaming while you\u0027re charging it"},
{"id":"doc2","text":"You can use the USB port on your Surface Pro 4 power supply to charge other devices, like a phone, while your Surface charges. The USB port on the power supply is only for charging, not for data transfer. If you want to use a USB device, plug it into the USB port on your Surface."}],
"language":"en",
"stringIndexType":"Utf16CodeUnit"
}'  '$LANGUAGE_ENDPOINT.api.cognitive.microsoft.com/language/:query-text?&api-version=2021-10-01'

In diesem Beispiel wird folgendes Ergebnis zurückgeben:

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

Diese Schnellstartanleitung zur Clientbibliothek für Benutzerdefinierte Fragen und Antworten für .NET ermöglicht Folgendes:

  • Abrufen einer Antwort aus einem Projekt.
  • Erhalten einer Antwort auf der Grundlage eines Texts, den Sie zusammen mit Ihrer Frage übermitteln
  • Erhalten der Zuverlässigkeitsbewertung für die Antwort auf Ihre Frage

Referenzdokumentation | Paket (NuGet) | Weitere Beispiele | Quellcode der Bibliothek

Voraussetzungen

  • Azure-Abonnement – Erstellen eines kostenlosen Kontos
  • Die Visual Studio-IDE oder die aktuelle Version von .NET Core.
  • Benutzerdefinierte Fragen und Antworten erfordern eine Sprachressource mit aktiviertem Feature „Benutzerdefinierte Fragen und Antworten“, um einen API-Schlüssel und Endpunkt zu generieren.
    • Wählen Sie nach der Bereitstellung der Sprachressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um eine Verbindung mit der API herstellen zu können. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
  • Um eine Sprachressource mit Azure CLI zu erstellen, geben Sie die folgenden zusätzlichen Eigenschaften an: --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>
  • Ein vorhandenes abzufragendes Projekt. Wenn Sie noch kein Projekt eingerichtet haben, können Sie den Anweisungen im Schnellstart zum Language-Studio folgen. Oder fügen Sie ein Projekt hinzu, das diese URL für das Surface-Benutzerhandbuch als Datenquelle verwendet.

Einrichten

Erstellen von Umgebungsvariablen

Ihre Anwendung muss authentifiziert werden, um API-Anforderungen senden zu können. In der Produktionsumgebung sollten Sie eine sichere Methode zum Speichern Ihrer Anmeldeinformationen sowie zum Zugriff darauf verwenden. In diesem Beispiel schreiben Sie Ihre Anmeldeinformationen in Umgebungsvariablen auf dem lokalen Computer, auf dem die Anwendung ausgeführt wird.

Um die Umgebungsvariable für Ihren Sprachressourcenschlüssel festzulegen, öffnen Sie ein Konsolenfenster und befolgen die Anweisungen für Ihr Betriebssystem und Ihre Entwicklungsumgebung.

  • Zum Festlegen der Umgebungsvariablen LANGUAGE_KEY ersetzen Sie your-key durch einen der Schlüssel für Ihre Ressource.
  • Zum Festlegen der Umgebungsvariablen LANGUAGE_ENDPOINT ersetzen Sie your-endpoint durch den Endpunkt für Ihre Ressource.

Wichtig

Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.

Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.

setx LANGUAGE_KEY your-key
setx LANGUAGE_ENDPOINT your-endpoint

Hinweis

Wenn Sie nur in der aktuell ausgeführten Konsole auf die Umgebungsvariable zugreifen müssen, können Sie die Umgebungsvariable mit set anstelle von setx festlegen.

Nachdem Sie die Umgebungsvariable hinzugefügt haben, müssen Sie unter Umständen alle ausgeführten Programme neu starten, von denen die Umgebungsvariablen gelesen werden müssen, z. B. das Konsolenfenster. Wenn Sie beispielsweise Visual Studio als Editor verwenden, müssen Sie Visual Studio neu starten, bevor Sie das Beispiel ausführen.

Befehlszeilenschnittstelle (CLI)

Verwenden Sie in einem Konsolenfenster (z. B. cmd, PowerShell oder Bash) den Befehl dotnet new zum Erstellen einer neuen Konsolen-App mit dem Namen question-answering-quickstart. Dieser Befehl erstellt ein einfaches C#-Projekt vom Typ „Hallo Welt“ mit einer einzelnen Quelldatei: program.cs.

dotnet new console -n question-answering-quickstart

Wechseln Sie zum Ordner der neu erstellten App. Sie können die Anwendung mit folgendem Befehl erstellen:

dotnet build

Die Buildausgabe sollte keine Warnungen oder Fehler enthalten.

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

Installieren Sie im Anwendungsverzeichnis mit dem folgenden Befehl die Clientbibliothek für benutzerdefinierte Fragen und Antworten für .NET:

dotnet add package Azure.AI.Language.QuestionAnswering

Abfragen eines Projekts

Generieren einer Antwort aus einem Projekt

Im folgenden Beispiel können Sie ei Projekt mithilfe von GetAnswers abfragen, um eine Antwort auf Ihre Frage zu erhalten.

Aktualisieren den im Anschluss bereitgestellten Code mit Ihren eigenen Werten für die folgenden Variablen:

Variablenname Wert
endpoint Diesen Wert finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Alternativ finden Sie den Wert unter Language-Studio>Fragen und Antworten>Projekt bereitstellen>Vorhersage-URL abrufen. Beispielendpunkt: https://southcentralus.api.cognitive.microsoft.com/
credential Diesen Wert finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Sie können entweder „Schlüssel1“ oder „Schlüssel2“ verwenden. Es gibt immer zwei gültige Schlüssel für die sichere Schlüsselrotation ohne Downtime. Alternativ finden Sie den Wert unter Language-Studio>Fragen und Antworten>Projekt bereitstellen>Vorhersage-URL abrufen. Der Schlüsselwert ist Teil der Beispielanforderung.
projectName Der Name Ihres Benutzerdefinierte Fragen und Antworten-Projekts.
deploymentName Es gibt zwei mögliche Werte: test und production. production ist davon abhängig, dass Sie Ihr Projekt aus Language-Studio>Fragen und Antworten>Projekt bereitstellen bereitgestellt haben.

Wichtig

Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Azure KI Services-Sicherheit.

Öffnen Sie im Projektverzeichnis die Datei program.cs, und ersetzen Sie den Inhalt durch den folgenden Code:

using Azure;
using Azure.AI.Language.QuestionAnswering;
using System;

namespace question_answering
{
    class Program
    {
        static void Main(string[] args)
        {

            // This example requires environment variables named "LANGUAGE_KEY" and "LANGUAGE_ENDPOINT"
            Uri endpoint = new Uri("LANGUAGE_ENDPOINT");
            AzureKeyCredential credential = new AzureKeyCredential("LANGUAGE_KEY");
            string projectName = "{YOUR-PROJECT-NAME}";
            string deploymentName = "production";

            string question = "How long should my Surface battery last?";

            QuestionAnsweringClient client = new QuestionAnsweringClient(endpoint, credential);
            QuestionAnsweringProject project = new QuestionAnsweringProject(projectName, deploymentName);

            Response<AnswersResult> response = client.GetAnswers(question, project);

            foreach (KnowledgeBaseAnswer answer in response.Value.Answers)
            {
                Console.WriteLine($"Q:{question}");
                Console.WriteLine($"A:{answer.Answer}");
            }
        }
    }
}

In diesem Beispiel werden die Variablen hartcodiert. In der Produktionsumgebung sollten Sie eine sichere Methode zum Speichern Ihrer Anmeldeinformationen sowie zum Zugriff darauf verwenden. Beispielsweise bietet der Azure-Schlüsseltresor sichere Aufbewahrung von Schlüsseln.

Gehen Sie wie folgt vor, nachdem Sie Program.cs mit dem obigen Code aktualisiert und die korrekten Variablenwerte angegeben haben: Führen Sie die Anwendung mit dem Befehl dotnet run aus dem Anwendungsverzeichnis aus.

dotnet run

Die Antwort sieht wie folgt aus:

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.

Wenn Sie wissen möchten, wie zuverlässig Benutzerdefinierte Fragen und Antworten sind, können Sie im Anschluss an die bereits vorhandenen Print-Anweisungen eine weitere Print-Anweisung hinzufügen:

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

Wenn Sie dotnet run erneut ausführen, erhalten Sie ein Ergebnis mit einer Zuverlässigkeitsbewertung:

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)

Die Zuverlässigkeitsbewertung gibt einen Wert zwischen 0 und 1 zurück. Sie können sich dies wie einen Prozentsatz vorstellen und mit 100 multiplizieren. Somit bedeutet ein Vertrauenswert von 0,9185, dass Benutzerdefinierte Fragen und Antworten sich zu 91,85 % sicher ist, dass dies basierend auf dem Projekt die richtige Antwort auf die Frage ist.

Wenn Sie Antworten ausschließen möchten, deren Zuverlässigkeitsbewertung unter einem bestimmten Schwellenwert liegt, können Sie mithilfe von AnswerOptions die Eigenschaft ConfidenceScoreThreshold hinzufügen.

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

Da wir aufgrund der vorherigen Ausführung des Codes wissen, dass unsere Zuverlässigkeitsbewertung .9185 lautet, wird die Standardantwort zurückgegeben, wenn der Schwellenwert auf .95 festgelegt wird.

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

Abfragetext ohne Projekt

Sie können Benutzerdefinierte Fragen und Antworten mit GetAnswersFromText auch ohne ein Projekt verwenden. In diesem Fall werden für Benutzerdefinierte Fragen und Antworten sowohl eine Frage als auch die zugehörigen Textdatensätze bereitgestellt, die nach einer Antwort durchsucht werden sollen, wenn die Anforderung übermittelt wird.

Für dieses Beispiel müssen nur die Variablen für endpoint und credential geändert werden.

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

        }
    }
}

Ersetzen Sie vor dem Ausführen des obigen Codes Program.cs durch den Inhalt des obigen Skriptblocks, und ändern Sie die Variablen endpoint und credential so, dass sie der Sprachressource entsprechen, die Sie im Rahmen der Vorbereitung erstellt haben.

Hier werden alle Antworten durchlaufen, und es wird nur die Antwort mit der höchsten Zuverlässigkeitsbewertung zurückgegeben, die größer als 0,9 ist. Machen Sie sich ausführlicher mit den verfügbaren Optionen für GetAnswersFromText vertraut.

Diese Schnellstartanleitung zur Clientbibliothek für Benutzerdefinierte Fragen und Antworten für Python ermöglicht Folgendes:

  • Abrufen einer Antwort aus einem Projekt.
  • Erhalten einer Antwort auf der Grundlage eines Texts, den Sie zusammen mit Ihrer Frage übermitteln
  • Erhalten der Zuverlässigkeitsbewertung für die Antwort auf Ihre Frage

Referenzdokumentation | Paket (PyPi) | Zusätzliche Beispiele auf GitHub | Quellcode der Bibliothek

Voraussetzungen

  • Azure-Abonnement – Erstellen eines kostenlosen Kontos
  • Python 3.x
  • Benutzerdefinierte Fragen und Antworten erfordern eine Sprachressource mit aktiviertem Feature „Benutzerdefinierte Fragen und Antworten“, um einen API-Schlüssel und Endpunkt zu generieren.
    • Wählen Sie nach der Bereitstellung der Sprachressource Zu Ressource wechseln aus. Sie benötigen den Schlüssel und Endpunkt der von Ihnen erstellten Ressource, um eine Verbindung mit der API herstellen zu können. Der Schlüssel und der Endpunkt werden weiter unten in der Schnellstartanleitung in den Code eingefügt.
  • Um eine Sprachressource mit Azure CLI zu erstellen, geben Sie die folgenden weiteren Eigenschaften an: --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>
  • Ein vorhandenes abzufragendes Projekt. Wenn Sie noch kein Projekt eingerichtet haben, können Sie den Anweisungen im Schnellstart zum Language-Studio folgen. Oder fügen Sie ein Projekt hinzu, das diese URL für das Surface-Benutzerhandbuch als Datenquelle verwendet.

Einrichten

Installieren der Clientbibliothek

Nach der Installation von Python, können Sie die Clientbibliothek mit Folgendem installieren:

pip install azure-ai-language-questionanswering

Abfragen eines Projekts

Generieren einer Antwort aus einem Projekt

Im folgenden Beispiel können Sie ein Projekt mithilfe von get_answers abfragen, um eine Antwort auf Ihre Frage zu erhalten. Sie können den Code in eine dedizierte PY-Datei oder in eine Zelle in Jupyter Notebook/Lab kopieren.

Aktualisieren den im Anschluss bereitgestellten Code mit Ihren eigenen Werten für die folgenden Variablen.

Variablenname Wert
endpoint Diesen Wert finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Alternativ finden Sie den Wert unter Language-Studio>Fragen und Antworten>Projekt bereitstellen>Vorhersage-URL abrufen. Beispielendpunkt: https://southcentralus.api.cognitive.microsoft.com/
credential Diesen Wert finden Sie im Abschnitt Schlüssel und Endpunkt, wenn Sie die Ressource über das Azure-Portal untersuchen. Sie können entweder „Schlüssel1“ oder „Schlüssel2“ verwenden. Es gibt immer zwei gültige Schlüssel für die sichere Schlüsselrotation ohne Downtime. Alternativ finden Sie den Wert unter Language-Studio>Fragen und Antworten>Projekt bereitstellen>Vorhersage-URL abrufen. Der Schlüsselwert ist Teil der Beispielanforderung.
knowledge_base_project Der Name Ihres Projekts für Fragen und Antworten.
deployment Es gibt zwei mögliche Werte: test und production. production ist davon abhängig, dass Sie Ihr Projekt aus Language-Studio>Fragen und Antworten>Projekt bereitstellen bereitgestellt haben.

Wichtig

Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Sicherheit von Azure KI Services.

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

In diesem Beispiel werden die Variablen hartcodiert. In der Produktionsumgebung sollten Sie eine sichere Methode zum Speichern Ihrer Anmeldeinformationen sowie zum Zugriff darauf verwenden. Beispielsweise bietet der Azure-Schlüsseltresor sichere Aufbewahrung von Schlüsseln.

Wenn Sie den obigen Code ausführen und die Datenquelle aus den Voraussetzungen verwenden, erhalten Sie eine Antwort wie die folgende:

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.

Wenn Sie wissen möchten, wie zuverlässig Benutzerdefinierte Fragen und Antworten sind, können Sie im Anschluss an die bereits vorhandenen Print-Anweisungen eine weitere Print-Anweisung hinzufügen:

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

Nun erhalten Sie ein Ergebnis mit einer Zuverlässigkeitsbewertung:

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

Die Zuverlässigkeitsbewertung gibt einen Wert zwischen 0 und 1 zurück. Sie können sich dies wie einen Prozentsatz vorstellen und mit 100 multiplizieren. Somit bedeutet ein Vertrauenswert von 0,9185, dass Benutzerdefinierte Fragen und Antworten sich zu 91,85 % sicher ist, dass dies basierend auf dem Projekt die richtige Antwort auf die Frage ist.

Wenn Sie Antworten ausschließen möchten, deren Zuverlässigkeitsbewertung unter einem bestimmten Schwellenwert liegt, können Sie die Antwortoptionen (AnswerOptions) ändern, um den Parameter confidence_threshold hinzuzufügen.

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

Da wir aufgrund der vorherigen Ausführung des Codes wissen, dass unsere Zuverlässigkeitsbewertung .9185 lautet, wird die Standardantwort zurückgegeben, wenn der Schwellenwert auf .95 festgelegt wird.

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

Abfragetext ohne Projekt

Sie können Benutzerdefinierte Fragen und Antworten mit get_answers_from_text auch ohne ein Projekt verwenden. In diesem Fall werden für Benutzerdefinierte Fragen und Antworten sowohl eine Frage als auch die zugehörigen Textdatensätze bereitgestellt, die nach einer Antwort durchsucht werden sollen, wenn die Anforderung übermittelt wird.

Für dieses Beispiel müssen nur die Variablen für endpoint und credential geändert werden.

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

Sie können den Code in eine dedizierte PY-Datei oder in eine neue Zelle in Jupyter Notebook/Lab kopieren. In diesem Beispiel wird folgendes zurückgegeben:

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

Hier werden alle Antworten durchlaufen, und es wird nur die Antwort mit der höchsten Zuverlässigkeitsbewertung zurückgegeben, die größer als 0,9 ist. Weitere Informationen zu den verfügbaren Optionen für get_answers_from_text finden Sie in den AnswersFromTextOptions-Parametern.

Bereinigen von Ressourcen

Wenn Sie ein Azure KI Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die ihr zugeordnet sind.

Erkunden der REST-API

Informationen zum Automatisieren Ihrer Pipeline für Benutzerdefinierte Fragen und Antworten finden Sie in der REST-API-Dokumentation. Derzeit ist die Erstellungsfunktion nur über die REST-API verfügbar:

Nächste Schritte