Snabbstart: QnA Maker-klientbibliotek

Kom igång med QnA Maker-klientbiblioteket. Följ de här stegen för att installera paketet och prova exempelkoden för grundläggande uppgifter.

Anteckning

QnA Maker-tjänsten dras tillbaka den 31 mars 2025. En nyare version av fråge- och svarsfunktionen är nu tillgänglig som en del av Azure Cognitive Service for Language. Information om funktioner för frågesvar i språktjänsten finns i frågor som besvaras. Från och med den 1 oktober 2022 kan du inte skapa nya QnA Maker-resurser. Information om hur du migrerar befintliga QnA Maker-kunskapsbaser till frågesvar finns i migreringsguiden.

Krav

Anteckning

Den här dokumentationen gäller inte för den senaste versionen. Om du vill veta mer om hur du använder REST-API:et med den senaste versionen kan du läsa om hur du besvarar REST API-snabbstarten

  • Den aktuella versionen av cURL. Flera kommandoradsväxlar används i snabbstarterna, som anges i cURL-dokumentationen.

  • Du måste ha en QnA Maker-resurs för att kunna använda nyckeln och resursnamnet. Du angav resursnamnet när resursen skapades och sedan skapades nyckeln åt dig. Resursnamnet används som underdomän för slutpunkten. Om du vill hämta nyckeln och resursnamnet väljer du Snabbstart för resursen i Azure-Portal. Resursnamnet är den första underdomänen för slutpunkts-URL:en:

    https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0

Varning

I följande BASH-exempel används radfortsättningstecknet \ . Om du i konsolen eller terminalen använder ett annat radfortsättningstecken använder du det här tecknet.

Skapa en kunskapsbas

Om du vill skapa en 知識庫 med REST-API:er och cURL måste du ha följande information:

Information cURL-konfiguration Syfte
QnA Maker-resursnamn URL används för att konstruera URL
QnA Maker-resursnyckel -h param för Ocp-Apim-Subscription-Key rubrik Autentisera till QnA Maker-tjänsten
JSON som beskriver 知識庫 -d Param Exempel på JSON
Storleken på JSON i byte -h param för Content-Size rubrik

Kommandot cURL körs från ett BASH-gränssnitt. Redigera det här kommandot med ditt eget resursnamn, resursnyckel och JSON-värden och storleken på JSON.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/knowledgebases/create \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
-H "Content-Type:application/json" \
-H "Content-Size:107" \
-d '{ name: "QnA Maker FAQ",urls: [ "https://learn.microsoft.com/azure/cognitive-services/qnamaker/faqs"]}'

CURL-svaret från QnA Maker innehåller , operationId som krävs för att hämta status för åtgärden.

{
  "operationState": "NotStarted",
  "createdTimestamp": "2020-02-27T04:11:22Z",
  "lastActionTimestamp": "2020-02-27T04:11:22Z",
  "userId": "9596077b3e0441eb93d5080d6a15c64b",
  "operationId": "95a4f700-9899-4c98-bda8-5449af9faef8"
}

Hämta status för åtgärden

När du skapar en 知識庫, eftersom åtgärden är asynkron, innehåller svaret information för att fastställa statusen.

Information cURL-konfiguration Syfte
QnA Maker-resursnamn URL används för att konstruera URL
Åtgärds-ID URL-väg /operations/REPLACE-WITH-YOUR-OPERATION-ID
QnA Maker-resursnyckel -h param för Ocp-Apim-Subscription-Key rubrik Autentisera till QnA Maker-tjänsten

Kommandot cURL körs från ett BASH-gränssnitt. Redigera det här kommandot med ditt eget resursnamn, resursnyckel och åtgärds-ID.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/operations/REPLACE-WITH-YOUR-OPERATION-ID \
-X GET \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY"

cURL-svaret innehåller statusen. Om åtgärdstillståndet resourceLocation lyckas inkluderar det 知識庫-ID:t.

{
   "operationState": "Succeeded",
   "createdTimestamp": "2020-02-27T04:54:07Z",
   "lastActionTimestamp": "2020-02-27T04:54:19Z",
   "resourceLocation": "/knowledgebases/fe3971b7-cfaa-41fa-8d9f-6ceb673eb865",
   "userId": "f596077b3e0441eb93d5080d6a15c64b",
   "operationId": "f293f218-d080-48f0-a766-47993e9b26a8"
}

Publicera kunskapsbas

Innan du frågar 知識庫 måste du:

  • Publicera kunskapsbas
  • Hämta slutpunktsnyckeln för körning

Den här uppgiften publicerar 知識庫. Att hämta slutpunktsnyckeln för körning är en separat uppgift.

Information cURL-konfiguration Syfte
QnA Maker-resursnamn URL används för att konstruera URL
QnA Maker-resursnyckel -h param för Ocp-Apim-Subscription-Key rubrik Autentisera till QnA Maker-tjänsten
Kunskapsbas-ID URL-väg /knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID

Kommandot cURL körs från ett BASH-gränssnitt. Redigera det här kommandot med ditt eget resursnamn, resursnyckel och 知識庫-ID.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID \
-v \
-X POST \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY" \
--data-raw ''

Svarsstatusen är 204 utan resultat. Använd kommandoradsparametern -v för att se utförliga utdata för cURL-kommandot. Detta inkluderar HTTP-status.

Få publicerad 知識庫 slutpunktsnyckel för körning

Innan du frågar 知識庫 måste du:

  • Publicera kunskapsbas
  • Hämta slutpunktsnyckeln för körning

Den här uppgiften hämtar slutpunktsnyckeln för körning. Att publicera 知識庫 är en separat uppgift.

Slutpunktsnyckeln för körning är samma nyckel för alla kunskapsbaser som använder QnA Maker-resursen.

Information cURL-konfiguration Syfte
QnA Maker-resursnamn URL används för att konstruera URL
QnA Maker-resursnyckel -h param för Ocp-Apim-Subscription-Key rubrik Autentisera till QnA Maker-tjänsten

Kommandot cURL körs från ett BASH-gränssnitt. Redigera det här kommandot med ditt eget resursnamn, resursnyckel.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/endpointkeys \
-X GET \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY"

cURL-svaret innehåller slutpunktsnycklarna för körning. Använd bara en av nycklarna när du frågar för att få ett svar från 知識庫.

{
  "primaryEndpointKey": "93e88a14-694a-44d5-883b-184a68aa8530",
  "secondaryEndpointKey": "92c98c16-ca31-4294-8626-6c57454a5063",
  "installedVersion": "4.0.5",
  "lastStableVersion": "4.0.6"
}

Fråga efter svar från publicerade 知識庫

Att få ett svar från kunskapen görs från en separat körning än att hantera 知識庫. Eftersom det är en separat körningsmiljö måste du autentisera med en körningsnyckel.

Information cURL-konfiguration Syfte
QnA Maker-resursnamn URL används för att konstruera URL
QnA Maker-körningsnyckel -h param för Authorization sidhuvud Nyckeln är en del av en sträng som innehåller ordet Endpointkey . Autentisera till QnA Maker-tjänsten
Kunskapsbas-ID URL-väg /knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID
JSON som beskriver frågan -d Param Parametrar för begärandetext och exempel på JSON
Storleken på JSON i byte -h param för Content-Size sidhuvud

Kommandot cURL körs från ett BASH-gränssnitt. Redigera det här kommandot med ditt eget resursnamn, resursnyckel och 知識庫-ID.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.azurewebsites.net/qnamaker/knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID/generateAnswer \
-X POST \
-H "Authorization: EndpointKey REPLACE-WITH-YOUR-RUNTIME-KEY" \
-H "Content-Type:application/json" \
-H "Content-Size:159" \
-d '{"question": "How are QnA Maker and LUIS used together?","top": 6,"isTest": true,  "scoreThreshold": 20, "strictFilters": [], "userId": "sd53lsY="}'

Ett lyckat svar innehåller det översta svaret tillsammans med annan information som ett klientprogram, till exempel en chattrobot, behöver för att visa ett svar för användaren.

Ta bort 知識庫

När du är klar med 知識庫 tar du bort den.

Information cURL-konfiguration Syfte
QnA Maker-resursnamn URL används för att konstruera URL
QnA Maker-resursnyckel -h param för Ocp-Apim-Subscription-Key sidhuvud Autentisera till QnA Maker-tjänsten
Kunskapsbas-ID URL-väg /knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID

Kommandot cURL körs från ett BASH-gränssnitt. Redigera det här kommandot med ditt eget resursnamn, resursnyckel och 知識庫-ID.

curl https://REPLACE-WITH-YOUR-RESOURCE-NAME.cognitiveservices.azure.com/qnamaker/v4.0/knowledgebases/REPLACE-WITH-YOUR-KNOWLEDGE-BASE-ID \
-X DELETE \
-v \
-H "Ocp-Apim-Subscription-Key: REPLACE-WITH-YOUR-RESOURCE-KEY"

Svarsstatusen är 204 utan resultat. Använd kommandoradsparametern -v för att se utförliga utdata för cURL-kommandot. Detta inkluderar HTTP-status.

Ytterligare resurser

Använd QnA Maker-klientbiblioteket för .NET för att:

  • Skapa en kunskapsbas
  • Uppdatera en kunskapsbas
  • Publicera en kunskapsbas
  • Hämta slutpunktsnyckel för förutsägelsekörning
  • Vänta på långvariga uppgifter
  • Ladda ned en kunskapsbas
  • Få svar från en kunskapsbas
  • Ta bort en kunskapsbas

Referensdokumentation | Bibliotekskällans kod | Paket (NuGet) | C#-exempel

Anteckning

Nya resurser som skapats efter den 1 juli 2019 använder anpassade underdomännamn. Mer information och en fullständig lista över regionala slutpunkter finns i Anpassade underdomännamn för Cognitive Services.

Krav

Anteckning

Den här dokumentationen gäller inte för den senaste versionen. Mer information om hur du använder C#-API:et med den senaste versionen finns i snabbstarten för C#-frågor.

  • Azure-prenumeration – Skapa en kostnadsfritt
  • Visual Studio IDE eller den aktuella versionen av .NET Core.
  • När du har din Azure-prenumeration skapar du en QnA Maker-resurs i Azure-Portal för att hämta redigeringsnyckeln och resursnamnet. När den har distribuerats väljer du Gå till resurs.
    • Du behöver nyckeln och resursnamnet från resursen som du skapar för att ansluta ditt program till QnA Maker-API:et. Klistra in nyckeln och resursnamnet i koden nedan senare i snabbstarten.
    • Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

Inrätta

CLI

I ett konsolfönster (till exempel cmd, PowerShell eller Bash) använder du dotnet new kommandot för att skapa en ny konsolapp med namnet qna-maker-quickstart. Det här kommandot skapar ett enkelt "Hallo Welt" C#-projekt med en enda källfil: program.cs.

dotnet new console -n qna-maker-quickstart

Ändra katalogen till den nyligen skapade appmappen. Du kan skapa programmet med:

dotnet build

Kompileringsutdata får inte innehålla några varningar eller fel.

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

Installera QnA Maker-klientbiblioteket för .NET i programkatalogen med följande kommando:

dotnet add package Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker --version 2.0.1

Tips

Vill du visa hela snabbstartskodfilen samtidigt? Du hittar den på GitHub, som innehåller kodexemplen i den här snabbstarten.

Använda direktiv

Öppna filen program.cs från projektkatalogen och lägg till följande using direktiv:

using Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker;
using Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker.Models;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

Prenumerationsnyckel och resursslutpunkter

I programmets Main -metod lägger du till variabler och kod, som visas i följande avsnitt, för att använda vanliga uppgifter i den här snabbstarten.

  • Vi använder prenumerationsnyckeln och redigeringsnyckeln synonymt. Mer information om redigeringsnyckeln finns i Nycklar i QnA Maker.

  • Värdet för QNA_MAKER_ENDPOINT har formatet https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Gå till Azure-Portal och leta reda på QnA Maker-resursen som du skapade i förutsättningarna. Välj sidan Nycklar och slutpunkt under Resurshantering för att hitta redigeringsnyckeln (prenumeration) och QnA Maker-slutpunkten.

QnA Maker-slutpunkt för redigering

  • Värdet för QNA_MAKER_RUNTIME_ENDPOINT har formatet https://YOUR-RESOURCE-NAME.azurewebsites.net. Gå till Azure-Portal och leta reda på QnA Maker-resursen som du skapade i förutsättningarna. Välj sidan Exportera mall under Automation för att hitta körningsslutpunkten.

QnA Maker Runtime-slutpunkt

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure 密钥保管库. Mer information finns i cognitive services-säkerhetsartikeln .

var authoringKey = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE";
var authoringURL = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE";
var queryingURL = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE";

Objektmodeller

QnA Maker använder två olika objektmodeller:

  • QnAMakerClient är objektet för att skapa, hantera, publicera och ladda ned kunskapsbasen.
  • QnAMakerRuntime är objektet för att fråga 知識庫 med GenerateAnswer-API:et och skicka nya föreslagna frågor med hjälp av tränings-API:et (som en del av aktiv inlärning).

Använd det här exemplet 知識庫

Den 知識庫 i den här snabbstarten börjar med två konversations-QnA-par, detta görs med syfte att förenkla exemplet och ha mycket förutsägbara ID:n som ska användas i metoden Update, och associera uppföljningsfrågor med frågor till nya par. Detta har planerats och implementerats i en viss ordning för den här snabbstarten.

Om du planerar att utveckla din 知識庫 över tid med uppföljningsuppmaningar som är beroende av befintliga QnA-par kan du välja:

  • För större kunskapsbaser kan du hantera 知識庫 i en textredigerare eller ett TSV-verktyg som stöder automatisering och sedan helt ersätta 知識庫 samtidigt med en uppdatering.
  • För mindre kunskapsbaser hanterar du uppföljningsprompterna helt i QnA Maker-portalen.

Information om QnA-paren som används i den här snabbstarten:

  • Typer av QnA-par – det finns 2 typer av QnA-par i den här 知識庫 efter uppdateringen: chitchat och domänspecifik information. Detta är typiskt om din kunskapsbas är knuten till ett konversationsprogram, till exempel en chattrobot.
  • Även om kunskapsbassvaren kan filtreras efter metadata eller använda uppföljningsprompter, visar den här snabbstarten inte det. Leta efter de språkagnostiska generateAnswer-exemplen här.
  • Svarstexten är markdown och kan innehålla en mängd olika markdown-objekt , till exempel bilder (offentligt tillgängliga internetbaserade bilder), länkar (till offentligt tillgängliga URL:er) och punktlistor. Den här snabbstarten använder inte den sorten.

QnAMakerClient-objektmodell

Den redigerande QnA Maker-klienten är ett QnAMakerClient-objekt som autentiserar till Azure med hjälp av Microsoft. Rest.ServiceClientCredentials, som innehåller din nyckel.

När klienten har skapats använder du egenskapen Kunskapsbas för att skapa, hantera och publicera din 知識庫.

Hantera din 知識庫 genom att skicka ett JSON-objekt. För omedelbara åtgärder returnerar en metod vanligtvis ett JSON-objekt som anger status. För långvariga åtgärder är svaret åtgärds-ID:t. Anropa klienten. Operations.GetDetailsAsync-metoden med åtgärds-ID :t för att fastställa status för begäran.

QnAMakerRuntimeClient-objektmodell

Förutsägelseklienten för QnA Maker är ett QnAMakerRuntimeClient-objekt som autentiserar till Azure med hjälp av Microsoft. Rest.ServiceClientCredentials, som innehåller din förutsägelsekörningsnyckel, returneras från redigeringsklientanropet när client.EndpointKeys.GetKeys kunskapsbasen har publicerats.

Använd metoden GenerateAnswer för att få ett svar från frågekörningen.

Kodexempel

De här kodfragmenten visar hur du gör följande med QnA Maker-klientbiblioteket för .NET:

Autentisera klienten för redigering av 知識庫

Instansiera ett klientobjekt med nyckeln och använd det med din resurs för att skapa slutpunkten för att skapa en QnAMakerClient med slutpunkten och nyckeln. Skapa ett ServiceClientCredentials-objekt .

var client = new QnAMakerClient(new ApiKeyServiceClientCredentials(authoringKey))
{ Endpoint = authoringURL };

Skapa en kunskapsbas

En 知識庫 lagrar fråge- och svarspar för CreateKbDTO-objektet från tre källor:

  • För redaktionellt innehåll använder du QnADTO-objektet .
    • Om du vill använda metadata och uppföljande frågor använder du den redaktionella kontexten, eftersom dessa data läggs till på individuell QnA-parnivå.
  • För filer använder du FileDTO-objektet . FileDTO innehåller filnamnet och den offentliga URL:en för att nå filen.
  • För URL:er använder du en lista med strängar för att representera offentligt tillgängliga URL:er.

Skapandesteget innehåller även egenskaper för kunskapsbasen:

  • defaultAnswerUsedForExtraction – vad som returneras när inget svar hittas
  • enableHierarchicalExtraction – skapa automatiskt promptrelationer mellan extraherade QnA-par
  • language – När du skapar den första kunskapsbasen för en resurs anger du vilket språk som ska användas i Azure Search-indexet.

Anropa metoden CreateAsync och skicka sedan det returnerade åtgärds-ID:t till metoden MonitorOperation för att söka efter status.

Den sista raden i följande kod returnerar 知識庫-ID från svaret från MonitorOperation.

private static async Task<string> CreateSampleKb(IQnAMakerClient client)
{
    var qna1 = new QnADTO
    {
        Answer = "Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base.",
        Questions = new List<string> { "How do I manage my knowledgebase?" },
        Metadata = new List<MetadataDTO> {
            new MetadataDTO { Name = "Category", Value = "api" },
            new MetadataDTO { Name = "Language", Value = "REST" }
        },

    };

    var qna2 = new QnADTO
    {
        Answer = "Yes, You can use our [.NET SDK](https://www.nuget.org/packages/Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker) with the [.NET Reference Docs](https://docs.microsoft.com/dotnet/api/microsoft.azure.cognitiveservices.knowledge.qnamaker?view=azure-dotnet) to manage your knowledge base.",
        Questions = new List<string> { "Can I program with C#?" },
        Metadata = new List<MetadataDTO> {
            new MetadataDTO { Name = "Category", Value = "api" },
            new MetadataDTO { Name = "Language", Value = ".NET" }
        }
    };

    var file1 = new FileDTO
    {
        FileName = "myfile.tsv",
        FileUri = "https://mydomain/myfile.tsv"

    };

    var createKbDto = new CreateKbDTO
    {
        Name = "QnA Maker .NET SDK Quickstart",
        QnaList = new List<QnADTO> { qna1, qna2 },
        //Files = new List<FileDTO> { file1 }

    };

    var createOp = await client.Knowledgebase.CreateAsync(createKbDto);
    createOp = await MonitorOperation(client, createOp);

    return createOp.ResourceLocation.Replace("/knowledgebases/", string.Empty);
}

Se till att inkludera MonitorOperation funktionen, som refereras i koden ovan, för att kunna skapa en 知識庫.

Uppdatera en kunskapsbas

Du kan uppdatera en 知識庫 genom att skicka in 知識庫-ID:t och ett UpdatekbOperationDTO som innehåller lägg till, uppdatera och ta bort DTO-objekt till metoden UpdateAsync. Använd metoden MonitorOperation för att avgöra om uppdateringen lyckades.

private static async Task UpdateKB(IQnAMakerClient client, string kbId)
{

    var urls = new List<string> {
        "https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"
    };

    var updateOp = await client.Knowledgebase.UpdateAsync(kbId, new UpdateKbOperationDTO
    {
        // Create JSON of changes
        Add = new UpdateKbOperationDTOAdd
        {
            QnaList = new List<QnADTO> {
                new QnADTO {
                    Questions = new List<string> {
                        "bye",
                        "end",
                        "stop",
                        "quit",
                        "done"
                    },
                    Answer = "goodbye",
                    Metadata = new List<MetadataDTO> {
                        new MetadataDTO { Name = "Category", Value="Chitchat" },
                        new MetadataDTO { Name = "Chitchat", Value = "end" },
                    }
                },
                new QnADTO {
                    Questions = new List<string> {
                        "hello",
                        "hi",
                        "start"
                    },
                    Answer = "Hello, please select from the list of questions or enter a new question to continue.",
                    Metadata = new List<MetadataDTO> {
                        new MetadataDTO { Name = "Category", Value="Chitchat" },
                        new MetadataDTO { Name = "Chitchat", Value = "begin" }
                    },
                    Context = new QnADTOContext
                    {
                        IsContextOnly = false,
                        Prompts = new List<PromptDTO>
                        {
                            new PromptDTO
                            {
                                DisplayOrder =1,
                                DisplayText= "Use REST",
                                QnaId=1

                            },
                            new PromptDTO
                            {
                                DisplayOrder =2,
                                DisplayText= "Use .NET NuGet package",
                                QnaId=2

                            },
                        }
                    }
                },
            },
            Urls = urls
        },
        Update = null,
        Delete = null
    }); ;

    // Loop while operation is success
    updateOp = await MonitorOperation(client, updateOp);
}

Se till att inkludera MonitorOperation funktionen, som refereras i koden ovan, för att uppdatera en 知識庫.

Ladda ned en 知識庫

Använd metoden DownloadAsync för att ladda ned databasen som en lista över QnADocumentsDTO. Detta motsvarar inte QnA Maker-portalens export från sidan Inställningar eftersom resultatet av den här metoden inte är en fil.

private static async Task DownloadKb(IQnAMakerClient client, string kbId)
{
    var kbData = await client.Knowledgebase.DownloadAsync(kbId, EnvironmentType.Prod);
    Console.WriteLine("KB Downloaded. It has {0} QnAs.", kbData.QnaDocuments.Count);

    // Do something meaningful with data
}

Publicera en kunskapsbas

Publicera 知識庫 med metoden PublishAsync. Detta tar den aktuella sparade och tränade modellen, som refereras av 知識庫-ID:t, och publicerar den på slutpunkten. Det här är ett nödvändigt steg för att köra frågor mot din kunskapsbas.

private static async Task PublishKb(IQnAMakerClient client, string kbId)
{
    await client.Knowledgebase.PublishAsync(kbId);
}

Hämta frågekörningsnyckel

När en kunskapsbas har publicerats behöver du frågekörningsnyckeln för att köra frågor mot körningen. Det här är inte samma nyckel som används för att skapa det ursprungliga klientobjektet.

Använd metoden EndpointKeys för att hämta klassen EndpointKeysDTO .

Använd någon av de nyckelegenskaper som returneras i -objektet för att fråga kunskapsbasen.

private static async Task<String> GetQueryEndpointKey(IQnAMakerClient client)
{
    var endpointKeysObject = await client.EndpointKeys.GetKeysAsync();

    return endpointKeysObject.PrimaryEndpointKey;
}

En körningsnyckel krävs för att köra frågor mot din kunskapsbas.

Autentisera körningen för att generera ett svar

Skapa en QnAMakerRuntimeClient för att fråga 知識庫 för att generera ett svar eller träna från aktiv inlärning.

var runtimeClient = new QnAMakerRuntimeClient(new EndpointKeyServiceClientCredentials(primaryQueryEndpointKey))
{ RuntimeEndpoint = queryingURL };

Använd QnAMakerRuntimeClient för att:

  • få svar från kunskapsbasen
  • för att skicka nya föreslagna frågor till 知識庫 för aktiv inlärning.

Generera ett svar från 知識庫

Generera ett svar från en publicerad kunskapsbas med hjälp av RuntimeClient. GenerateAnswerAsync-metod . Den här metoden accepterar 知識庫-ID och QueryDTO. Få åtkomst till ytterligare egenskaper för QueryDTO, till exempel top och kontext som ska användas i chattroboten.

private static async Task GenerateAnswer(IQnAMakerRuntimeClient runtimeClient, string kbId)
{
    var response = await runtimeClient.Runtime.GenerateAnswerAsync(kbId, new QueryDTO { Question = "How do I manage my knowledgebase?" });
    Console.WriteLine("Endpoint Response: {0}.", response.Answers[0].Answer);

    // Do something meaningful with answer
}

Det här är ett enkelt exempel som frågar kunskapsbasen. Om du vill förstå avancerade frågescenarier kan du läsa andra frågeexempel.

Ta bort en kunskapsbas

Ta bort kunskapsbasen med hjälp av metoden DeleteAsync med en parameter för 知識庫-ID: t.

private static async Task DeleteKB(IQnAMakerClient client, string kbId)
{
    await client.Knowledgebase.DeleteAsync(kbId);
}

Hämta status för en åtgärd

Vissa metoder, till exempel skapa och uppdatera, kan ta tillräckligt med tid att en åtgärd returneras i stället för att vänta på att processen ska slutföras. Använd åtgärds-ID :t från åtgärden för att avsöka (med logik för omförsök) för att fastställa status för den ursprungliga metoden.

Loopen och Task.Delay i följande kodblock används för att simulera logik för omförsök. Dessa bör ersättas med din egen logik för återförsök.

private static async Task<Operation> MonitorOperation(IQnAMakerClient client, Operation operation)
{
    // Loop while operation is success
    for (int i = 0;
        i < 20 && (operation.OperationState == OperationStateType.NotStarted || operation.OperationState == OperationStateType.Running);
        i++)
    {
        Console.WriteLine("Waiting for operation: {0} to complete.", operation.OperationId);
        await Task.Delay(5000);
        operation = await client.Operations.GetDetailsAsync(operation.OperationId);
    }

    if (operation.OperationState != OperationStateType.Succeeded)
    {
        throw new Exception($"Operation {operation.OperationId} failed to completed.");
    }
    return operation;
}

Kör programmet

Kör programmet med dotnet run kommandot från programkatalogen.

dotnet run

Källkoden för det här exemplet finns på GitHub.

Använd QnA Maker-klientbiblioteket för Node.js för att:

  • Skapa en kunskapsbas
  • Uppdatera en kunskapsbas
  • Publicera en kunskapsbas
  • Hämta slutpunktsnyckel för förutsägelsekörning
  • Vänta på långvariga uppgifter
  • Ladda ned en kunskapsbas
  • Få svar från en kunskapsbas
  • Ta bort 知識庫

Referensdokumentation | Bibliotekskällans kod | Paket (npm) | Node.js exempel

Anteckning

Nya resurser som skapats efter den 1 juli 2019 använder anpassade underdomännamn. Mer information och en fullständig lista över regionala slutpunkter finns i Anpassade underdomännamn för Cognitive Services.

Krav

  • Azure-prenumeration – Skapa en kostnadsfritt
  • Den aktuella versionen av Node.js.
  • När du har din Azure-prenumeration skapar du en QnA Maker-resurs i Azure-Portal för att hämta din redigeringsnyckel och resurs. När den har distribuerats väljer du Gå till resurs.
    • Du behöver nyckeln och resursnamnet från resursen som du skapar för att ansluta ditt program till QnA Maker-API:et. Klistra in nyckeln och resursnamnet i koden nedan senare i snabbstarten.
    • Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

Inrätta

Skapa ett nytt Node.js-program

I ett konsolfönster (till exempel cmd, PowerShell eller Bash) skapar du en ny katalog för din app och navigerar till den.

mkdir qnamaker_quickstart && cd qnamaker_quickstart

npm init -y Kör kommandot för att skapa ett nodprogram med en package.json fil.

npm init -y

Installera klientbiblioteket

Installera följande NPM-paket:

npm install @azure/cognitiveservices-qnamaker
npm install @azure/cognitiveservices-qnamaker-runtime
npm install @azure/ms-rest-js

Appens package.json fil uppdateras med beroendena.

Skapa en fil med namnet index.js och importera följande bibliotek:

const msRest = require("@azure/ms-rest-js");
const qnamaker = require("@azure/cognitiveservices-qnamaker");
const qnamaker_runtime = require("@azure/cognitiveservices-qnamaker-runtime");

Skapa en variabel för resursens Azure-nyckel och resursnamn.

  • Vi använder prenumerationsnyckeln och redigeringsnyckeln synonymt. Mer information om redigeringsnyckeln finns i Nycklar i QnA Maker.

  • Värdet för QNA_MAKER_ENDPOINT har formatet https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Gå till Azure-Portal och leta reda på QnA Maker-resursen som du skapade i förutsättningarna. Välj sidan Nycklar och slutpunkt under Resurshantering för att hitta redigeringsnyckeln (prenumeration) och QnA Maker-slutpunkten.

QnA Maker-slutpunkt för redigering

  • Värdet för QNA_MAKER_RUNTIME_ENDPOINT har formatet https://YOUR-RESOURCE-NAME.azurewebsites.net. Gå till Azure-Portal och leta reda på QnA Maker-resursen som du skapade i förutsättningarna. Välj sidan Exportera mall under Automation för att hitta körningsslutpunkten.

QnA Maker Runtime-slutpunkt

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure 密钥保管库. Mer information finns i cognitive services-säkerhetsartikeln .

const subscription_key = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE";
const endpoint = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE";
const runtime_endpoint = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE";

Objektmodeller

QnA Maker använder två olika objektmodeller:

  • QnAMakerClient är objektet för att skapa, hantera, publicera och ladda ned kunskapsbasen.
  • QnAMakerRuntime är objektet för att fråga 知識庫 med GenerateAnswer-API:et och skicka nya föreslagna frågor med hjälp av tränings-API:et (som en del av aktiv inlärning).

QnAMakerClient-objektmodell

Redigeringsklienten för QnA Maker är ett QnAMakerClient-objekt som autentiserar till Azure med dina autentiseringsuppgifter, som innehåller din nyckel.

När klienten har skapats använder du kunskapsbasen för att skapa, hantera och publicera din 知識庫.

Hantera din 知識庫 genom att skicka ett JSON-objekt. För omedelbara åtgärder returnerar en metod vanligtvis ett JSON-objekt som anger status. För långvariga åtgärder är svaret åtgärds-ID:t. Anropa metoden client.operations.getDetails med åtgärds-ID :t för att fastställa status för begäran.

QnAMakerRuntimeClient-objektmodell

QnA Maker-förutsägelseklienten är ett QnAMakerRuntimeClient-objekt som autentiserar till Azure med hjälp av Microsoft. Rest.ServiceClientCredentials, som innehåller din förutsägelsekörningsnyckel, returneras från redigeringsklientanropet, klienten. EndpointKeys.getKeys när kunskapsbasen har publicerats.

Kodexempel

De här kodfragmenten visar hur du gör följande med QnA Maker-klientbiblioteket för .NET:

Autentisera klienten för redigering av 知識庫

Instansiera en klient med din slutpunkt och nyckel. Skapa ett ServiceClientCredentials-objekt med nyckeln och använd det med slutpunkten för att skapa ett QnAMakerClient-objekt .

const creds = new msRest.ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': subscription_key } });
const qnaMakerClient = new qnamaker.QnAMakerClient(creds, endpoint);
const knowledgeBaseClient = new qnamaker.Knowledgebase(qnaMakerClient);

Skapa en kunskapsbas

En 知識庫 lagrar fråge- och svarspar för CreateKbDTO-objektet från tre källor:

  • För redaktionellt innehåll använder du QnADTO-objektet .
    • Om du vill använda metadata och uppföljande frågor använder du den redaktionella kontexten, eftersom dessa data läggs till på individuell QnA-parnivå.
  • För filer använder du FileDTO-objektet . FileDTO innehåller filnamnet och den offentliga URL:en för att nå filen.
  • För URL:er använder du en lista med strängar för att representera offentligt tillgängliga URL:er.

Skapandesteget innehåller även egenskaper för kunskapsbasen:

  • defaultAnswerUsedForExtraction – vad som returneras när inget svar hittas
  • enableHierarchicalExtraction – skapa automatiskt promptrelationer mellan extraherade QnA-par
  • language – När du skapar den första kunskapsbasen för en resurs anger du vilket språk som ska användas i Azure Search-indexet.

Anropa create-metoden med 知識庫 information. Den 知識庫 informationen är i princip ett JSON-objekt.

När metoden create returneras skickar du det returnerade åtgärds-ID:t till wait_for_operation metod för att söka efter status. Metoden wait_for_operation returneras när åtgärden har slutförts. Parsa resourceLocation rubrikvärdet för den returnerade åtgärden för att hämta det nya 知識庫-ID:t.

const createKnowledgeBase = async (qnaClient, kbclient) => {

    console.log(`Creating knowledge base...`)

    const qna1 = {
        answer: "Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base.",
        questions: ["How do I manage my knowledgebase?"],
        metadata: [
            { name: "Category", value: "api" },
            { name: "Language", value: "REST" }
        ]
    };

    const qna2 = {
        answer: "Yes, You can use our JS SDK on NPM for [authoring](https://www.npmjs.com/package/@azure/cognitiveservices-qnamaker), [query runtime](https://www.npmjs.com/package/@azure/cognitiveservices-qnamaker-runtime), and [the reference docs](https://docs.microsoft.com/en-us/javascript/api/@azure/cognitiveservices-qnamaker/?view=azure-node-latest) to manage your knowledge base.",
        questions: ["How do I manage my knowledgebase?"],
        metadata: [
            { name: "Category", value: "api" },
            { name: "Language", value: "JavaScript" }
        ]
    };

    const create_kb_payload = {
        name: 'QnA Maker JavaScript SDK Quickstart',
        qnaList: [
            qna1,
            qna2
        ],
        urls: [],
        files: [
            /*{
                fileName: "myfile.md",
                fileUri: "https://mydomain/myfile.md"
            }*/
        ],
        defaultAnswerUsedForExtraction: "No answer found.",
        enableHierarchicalExtraction: true,
        language: "English"
    };

    const results = await kbclient.create(create_kb_payload)

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`Create request failed - HTTP status ${results._response.status}`)
        return
    }

    const operationResult = await wait_for_operation(qnaClient, results.operationId)

    if (!operationResult || !operationResult.operationState || !(operationResult.operationState = "Succeeded") || !operationResult.resourceLocation) {
        console.log(`Create operation state failed - HTTP status ${operationResult._response.status}`)
        return
    }

    // parse resourceLocation for KB ID
    const kbID = operationResult.resourceLocation.replace("/knowledgebases/", "");

    return kbID;
}

Se till att inkludera wait_for_operation funktionen, som refereras i koden ovan, för att kunna skapa en 知識庫.

Uppdatera en kunskapsbas

Du kan uppdatera en 知識庫 genom att skicka in 知識庫-ID och ett UpdateKbOperationDTO som innehåller lägg till, uppdatera och ta bort DTO-objekt i uppdateringsmetoden. DTU:er är också I princip JSON-objekt. Använd metoden wait_for_operation för att avgöra om uppdateringen lyckades.

const updateKnowledgeBase = async (qnaClient, kbclient, kb_id) => {

    console.log(`Updating knowledge base...`)

    const urls = [
        "https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"
    ]

    const qna3 = {
        answer: "goodbye",
        questions: [
            "bye",
            "end",
            "stop",
            "quit",
            "done"
        ],
        metadata: [
            { name: "Category", value: "Chitchat" },
            { name: "Chitchat", value: "end" }
        ]
    };

    const qna4 = {
        answer: "Hello, please select from the list of questions or enter a new question to continue.",
        questions: [
            "hello",
            "hi",
            "start"
        ],
        metadata: [
            { name: "Category", value: "Chitchat" },
            { name: "Chitchat", value: "begin" }
        ],
        context: {
            isContextOnly: false,
            prompts: [
                {
                    displayOrder: 1,
                    displayText: "Use REST",
                    qna: null,
                    qnaId: 1
                },
                {
                    displayOrder: 2,
                    displayText: "Use JS NPM package",
                    qna: null,
                    qnaId: 2
                },
            ]
        }
    };

    console.log(JSON.stringify(qna4))

    // Add new Q&A lists, URLs, and files to the KB.
    const kb_add_payload = {
        qnaList: [
            qna3,
            qna4
        ],
        urls: urls,
        files: []
    };

    // Bundle the add, update, and delete requests.
    const update_kb_payload = {
        add: kb_add_payload,
        update: null,
        delete: null,
        defaultAnswerUsedForExtraction: "No answer found. Please rephrase your question."
    };

    console.log(JSON.stringify(update_kb_payload))

    const results = await kbclient.update(kb_id, update_kb_payload)

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`Update request failed - HTTP status ${results._response.status}`)
        return false
    }

    const operationResult = await wait_for_operation(qnaClient, results.operationId)

    if (operationResult.operationState != "Succeeded") {
        console.log(`Update operation state failed - HTTP status ${operationResult._response.status}`)
        return false
    }

    console.log(`Update operation state ${operationResult._response.status} - HTTP status ${operationResult._response.status}`)
    return true
}

Se till att inkludera wait_for_operation funktionen, som refereras i koden ovan, för att kunna uppdatera en 知識庫.

Ladda ned en 知識庫

Använd nedladdningsmetoden för att ladda ned databasen som en lista över QnADocumentsDTO. Detta motsvarar inte QnA Maker-portalens export från sidan Inställningar eftersom resultatet av den här metoden inte är en TSV-fil.

const downloadKnowledgeBase = async (KBclient, kb_id) => {

    console.log(`Downloading knowledge base...`)

    var kbData = await KBclient.download(kb_id, "Prod");
    console.log(`Knowledge base downloaded. It has ${kbData.qnaDocuments.length} QnAs.`);

    // Do something meaningful with data
}

Publicera en kunskapsbas

Publicera 知識庫 med publiceringsmetoden. Detta tar den aktuella sparade och tränade modellen, som refereras av 知識庫-ID: t, och publicerar den på en slutpunkt. Kontrollera HTTP-svarskoden för att verifiera att publiceringen lyckades.

const publishKnowledgeBase = async (kbclient, kb_id) => {

    console.log(`Publishing knowledge base...`)

    const results = await kbclient.publish(kb_id)

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`Publish request failed - HTTP status ${results._response.status}`)
        return false
    }

    console.log(`Publish request succeeded - HTTP status ${results._response.status}`)

    return true
}

Köra frågor mot en kunskapsbas

Hämta frågekörningsnyckel

När en kunskapsbas har publicerats behöver du frågekörningsnyckeln för att köra frågor mot körningen. Det här är inte samma nyckel som används för att skapa det ursprungliga klientobjektet.

Använd metoden EndpointKeys.getKeys för att hämta klassen EndpointKeysDTO .

Använd någon av de nyckelegenskaper som returneras i -objektet för att fråga kunskapsbasen.

const getEndpointKeys = async (qnaClient) => {

    console.log(`Getting runtime endpoint keys...`)

    const runtimeKeysClient = await qnaClient.endpointKeys;
    const results = await runtimeKeysClient.getKeys()

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`GetEndpointKeys request failed - HTTP status ${results._response.status}`)
        return null
    }

    console.log(`GetEndpointKeys request succeeded - HTTP status ${results._response.status} - primary key ${results.primaryEndpointKey}`)

    return results.primaryEndpointKey
}

Autentisera körningen för att generera ett svar

Skapa en QnAMakerRuntimeClient för att fråga 知識庫 för att generera ett svar eller träna från aktiv inlärning.

const queryRuntimeCredentials = new msRest.ApiKeyCredentials({ inHeader: { 'Authorization': 'EndpointKey ' + primaryQueryRuntimeKey } });
const runtimeClient = new qnamaker_runtime.QnAMakerRuntimeClient(queryRuntimeCredentials, runtime_endpoint);

Använd QnAMakerRuntimeClient för att få ett svar från kunskapen eller för att skicka nya föreslagna frågor till 知識庫 för aktiv inlärning.

Generera ett svar från 知識庫

Generera ett svar från en publicerad 知識庫 med hjälp av metoden RuntimeClient.runtime.generateAnswer. Den här metoden accepterar 知識庫-ID och QueryDTO. Få åtkomst till ytterligare egenskaper för QueryDTO, till exempel top och kontext som ska användas i chattroboten.

const generateAnswer = async (runtimeClient, runtimeKey, kb_id) => {

    console.log(`Querying knowledge base...`)

    const requestQuery = await runtimeClient.runtime.generateAnswer(
        kb_id,
        {
            question: "How do I manage my knowledgebase?",
            top: 1,
            strictFilters: [
                { name: "Category", value: "api" }
            ]
        }
    );
    console.log(JSON.stringify(requestQuery));

}

Det här är ett enkelt exempel som frågar 知識庫. Om du vill förstå avancerade frågescenarier kan du läsa andra frågeexempel.

Ta bort en kunskapsbas

Ta bort 知識庫 med hjälp av borttagningsmetoden med en parameter för 知識庫-ID:t.

const deleteKnowledgeBase = async (KBclient, kb_id) => {

    console.log(`Deleting knowledge base...`)

    const results = await KBclient.deleteMethod(kb_id)

    if ( ! results._response.status.toString().startsWith("2")) {
        console.log(`Delete operation state failed - HTTP status ${results._response.status}`)
        return false
    }

    console.log(`Delete operation state succeeded - HTTP status ${results._response.status}`)
    return true
}

Hämta status för en åtgärd

Vissa metoder, till exempel skapa och uppdatera, kan ta tillräckligt med tid att en åtgärd returneras i stället för att vänta på att processen ska slutföras. Använd åtgärds-ID :t från åtgärden för att avsöka (med logik för omförsök) för att fastställa status för den ursprungliga metoden.

DelayTimer-anropet i följande kodblock används för att simulera logiken för omförsök. Ersätt detta med din egen logik för återförsök.

const wait_for_operation = async (qnaClient, operation_id) => {

    let state = "NotStarted"
    let operationResult = undefined

    while ("Running" === state || "NotStarted" === state) {

        operationResult = await qnaClient.operations.getDetails(operation_id)
        state = operationResult.operationState;

        console.log(`Operation state - ${state}`)

        await delayTimer(1000);
    }

    return operationResult;
}
const delayTimer = async (timeInMs) => {
    return await new Promise((resolve) => {
        setTimeout(resolve, timeInMs);
    });
}

Kör programmet

Kör programmet med node index.js kommandot från programkatalogen.

node index.js

Källkoden för det här exemplet finns på GitHub.

Använd QnA Maker-klientbiblioteket för Python för att:

  • Skapa en kunskapsbas
  • Uppdatera en kunskapsbas
  • Publicera en kunskapsbas
  • Hämta slutpunktsnyckel för förutsägelsekörning
  • Vänta på långvariga uppgifter
  • Ladda ned en kunskapsbas
  • Få svar från en kunskapsbas
  • Ta bort 知識庫

Referensdokumentation | Bibliotekskällans kod | Paket (PyPi) | Python-exempel

Anteckning

Nya resurser som skapats efter den 1 juli 2019 använder anpassade underdomännamn. Mer information och en fullständig lista över regionala slutpunkter finns i Anpassade underdomännamn för Cognitive Services.

Krav

Anteckning

Den här dokumentationen gäller inte för den senaste versionen. Mer information om hur du använder Python-API:et med den senaste versionen finns i frågan som besvarar Python-snabbstarten.

  • Azure-prenumeration – Skapa en kostnadsfritt
  • Python 3.x
  • När du har din Azure-prenumeration skapar du en QnA Maker-resurs i Azure-Portal för att hämta redigeringsnyckeln och slutpunkten. När den har distribuerats väljer du Gå till resurs.
    • Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till QnA Maker-API:et. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten.
    • Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

Inrätta

Installera klientbiblioteket

När du har installerat Python kan du installera klientbiblioteket med:

pip install azure-cognitiveservices-knowledge-qnamaker==0.2.0

Skapa ett nytt Python-program

Skapa en ny Python-fil med namnet quickstart-file.py och importera följande bibliotek.

import os
import time

from azure.cognitiveservices.knowledge.qnamaker.authoring import QnAMakerClient
from azure.cognitiveservices.knowledge.qnamaker.runtime import QnAMakerRuntimeClient
from azure.cognitiveservices.knowledge.qnamaker.authoring.models import QnADTO, MetadataDTO, CreateKbDTO, OperationStateType, UpdateKbOperationDTO, UpdateKbOperationDTOAdd, EndpointKeysDTO, QnADTOContext, PromptDTO
from azure.cognitiveservices.knowledge.qnamaker.runtime.models import QueryDTO
from msrest.authentication import CognitiveServicesCredentials

Skapa variabler för resursens Azure-slutpunkt och nyckel.

  • Vi använder prenumerationsnyckeln och redigeringsnyckeln synonymt. Mer information om redigeringsnyckeln finns i Nycklar i QnA Maker.

  • Värdet för QNA_MAKER_ENDPOINT har formatet https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Gå till Azure-Portal och leta reda på QnA Maker-resursen som du skapade i förutsättningarna. Välj sidan Nycklar och slutpunkt under Resurshantering för att hitta redigeringsnyckeln (prenumeration) och QnA Maker-slutpunkten.

QnA Maker-slutpunkt för redigering

  • Värdet för QNA_MAKER_RUNTIME_ENDPOINT har formatet https://YOUR-RESOURCE-NAME.azurewebsites.net. Gå till Azure-Portal och leta reda på QnA Maker-resursen som du skapade i förutsättningarna. Välj sidan Exportera mall under Automation för att hitta körningsslutpunkten.

QnA Maker Runtime-slutpunkt

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure 密钥保管库. Mer information finns i cognitive services-säkerhetsartikeln .

subscription_key = 'PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE'

authoring_endpoint = 'PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE'

runtime_endpoint = 'PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE'

Objektmodeller

QnA Maker använder två olika objektmodeller:

  • QnAMakerClient är objektet för att skapa, hantera, publicera och ladda ned kunskapsbasen.
  • QnAMakerRuntime är objektet för att fråga 知識庫 med GenerateAnswer-API:et och skicka nya föreslagna frågor med hjälp av tränings-API:et (som en del av aktiv inlärning).

Använd det här exemplet 知識庫

Den 知識庫 i den här snabbstarten börjar med två konversations-QnA-par, detta görs med syfte att förenkla exemplet och ha mycket förutsägbara ID:n som ska användas i metoden Update, och associera uppföljningsfrågor med frågor till nya par. Detta har planerats och implementerats i en viss ordning för den här snabbstarten.

Om du planerar att utveckla din 知識庫 över tid med uppföljningsuppmaningar som är beroende av befintliga QnA-par kan du välja:

  • För större kunskapsbaser kan du hantera 知識庫 i en textredigerare eller ett TSV-verktyg som stöder automatisering och sedan helt ersätta 知識庫 samtidigt med en uppdatering.
  • För mindre kunskapsbaser hanterar du uppföljningsprompterna helt i QnA Maker-portalen.

Information om QnA-paren som används i den här snabbstarten:

  • Typer av QnA-par – det finns 2 typer av QnA-par i den här 知識庫 efter uppdateringen: chitchat och domänspecifik information. Detta är typiskt om din kunskapsbas är knuten till ett konversationsprogram, till exempel en chattrobot.
  • Även om kunskapsbassvaren kan filtreras efter metadata eller använda uppföljningsprompter, visar den här snabbstarten inte det. Leta efter de språkagnostiska generateAnswer-exemplen här.
  • Svarstexten är markdown och kan innehålla en mängd olika markdown-objekt , till exempel bilder (offentligt tillgängliga internetbaserade bilder), länkar (till offentligt tillgängliga URL:er) och punktlistor. Den här snabbstarten använder inte den sorten.

QnAMakerClient-objektmodell

Den redigerande QnA Maker-klienten är ett QnAMakerClient-objekt som autentiserar till Azure med hjälp av Microsoft. Rest.ServiceClientCredentials, som innehåller din nyckel.

När klienten har skapats använder du egenskapen Kunskapsbas för att skapa, hantera och publicera din 知識庫.

Hantera din 知識庫 genom att skicka ett JSON-objekt. För omedelbara åtgärder returnerar en metod vanligtvis ett JSON-objekt som anger status. För långvariga åtgärder är svaret åtgärds-ID:t. Anropa metoden operations.get_details med åtgärds-ID:t för att fastställa status för begäran.

QnAMakerRuntimeClient-objektmodell

Förutsägelseklienten för QnA Maker är ett QnAMakerRuntimeClient objekt som autentiserar till Azure med hjälp av Microsoft. Rest.ServiceClientCredentials, som innehåller din förutsägelsekörningsnyckel, returneras från redigeringsklientanropet, klienten. EndpointKeysOperations.get_keys efter att kunskapsbasen har publicerats.

generate_answer Använd metoden för att få ett svar från frågekörningen.

Autentisera klienten för redigering av 知識庫

Instansiera en klient med din slutpunkt och nyckel. Skapa ett CognitiveServicesCredentials-objekt med nyckeln och använd det med slutpunkten för att skapa ett QnAMakerClient-objekt .

client = QnAMakerClient(endpoint=authoring_endpoint, credentials=CognitiveServicesCredentials(subscription_key))

Skapa en kunskapsbas

Använd klientobjektet för att hämta ett 知識庫 operations-objekt.

En 知識庫 lagrar fråge- och svarspar för CreateKbDTO-objektet från tre källor:

  • För redaktionellt innehåll använder du QnADTO-objektet .
    • Om du vill använda metadata och uppföljande frågor använder du den redaktionella kontexten, eftersom dessa data läggs till på individuell QnA-parnivå.
  • För filer använder du FileDTO-objektet . FileDTO innehåller filnamnet och den offentliga URL:en för att nå filen.
  • För URL:er använder du en lista med strängar för att representera offentligt tillgängliga URL:er.

Anropa create-metoden och skicka sedan det returnerade åtgärds-ID:t till metoden Operations.getDetails för att söka efter status.

Den sista raden i följande kod returnerar 知識庫-ID från svaret från MonitorOperation.

def create_kb(client):
    print ("Creating knowledge base...")

    qna1 = QnADTO(
        answer="Yes, You can use our [REST APIs](https://docs.microsoft.com/rest/api/cognitiveservices/qnamaker/knowledgebase) to manage your knowledge base.",
        questions=["How do I manage my knowledgebase?"],
        metadata=[
            MetadataDTO(name="Category", value="api"),
            MetadataDTO(name="Language", value="REST"),
        ]
    )

    qna2 = QnADTO(
        answer="Yes, You can use our [Python SDK](https://pypi.org/project/azure-cognitiveservices-knowledge-qnamaker/) with the [Python Reference Docs](https://docs.microsoft.com/python/api/azure-cognitiveservices-knowledge-qnamaker/azure.cognitiveservices.knowledge.qnamaker?view=azure-python) to manage your knowledge base.",
        questions=["Can I program with Python?"],
        metadata=[
            MetadataDTO(name="Category", value="api"),
            MetadataDTO(name="Language", value="Python"),
        ]
    )

    urls = []
    files = [
        FileDTO(
            file_name = "structured.docx",
            file_uri = "https://github.com/Azure-Samples/cognitive-services-sample-data-files/raw/master/qna-maker/data-source-formats/structured.docx"
        )]

    create_kb_dto = CreateKbDTO(
        name="QnA Maker Python SDK Quickstart",
        qna_list=[
            qna1,
            qna2
        ],
        urls=urls,
        files=[],
        enable_hierarchical_extraction=True,
        default_answer_used_for_extraction="No answer found.",
        language="English"
    )
    create_op = client.knowledgebase.create(create_kb_payload=create_kb_dto)

    create_op_monitor = _monitor_operation(client=client, operation=create_op)

    # Get knowledge base ID from resourceLocation HTTP header
    knowledge_base_ID = create_op_monitor.resource_location.replace("/knowledgebases/", "")
    print("Created KB with ID: {}".format(knowledge_base_ID))

    return knowledge_base_ID

Se till att inkludera _monitor_operation funktionen, som refereras i koden ovan, för att kunna skapa en 知識庫.

Uppdatera en kunskapsbas

Du kan uppdatera en 知識庫 genom att skicka in 知識庫-ID och ett UpdateKbOperationDTO som innehåller lägg till, uppdatera och ta bort DTO-objekt i uppdateringsmetoden. Använd metoden Operation.getDetail för att avgöra om uppdateringen lyckades.

def update_kb(client, kb_id):
    print ("Updating knowledge base...")

    qna3 = QnADTO(
        answer="goodbye",
        questions=[
            "bye",
            "end",
            "stop",
            "quit",
            "done"
            ],
        metadata=[
            MetadataDTO(name="Category", value="Chitchat"),
            MetadataDTO(name="Chitchat", value="end"),
        ]
    )

    qna4 = QnADTO(
        answer="Hello, please select from the list of questions or enter a new question to continue.",
        questions=[
            "hello",
            "hi",
            "start"
        ],
        metadata=[
            MetadataDTO(name="Category", value="Chitchat"),
            MetadataDTO(name="Chitchat", value="begin"),
        ],
        context = QnADTOContext(

            is_context_only = False,
            prompts = [

                PromptDTO(
                    display_order =1,
                    display_text= "Use REST",
                    qna_id=1

                ),
                PromptDTO(
                    display_order =2,
                    display_text= "Use .NET NuGet package",
                    qna_id=2
                ),
            ]
        )

    )

    urls = [
        "https://docs.microsoft.com/azure/cognitive-services/QnAMaker/troubleshooting"
    ]



    update_kb_operation_dto = UpdateKbOperationDTO(
        add=UpdateKbOperationDTOAdd(
            qna_list=[
                qna3,
                qna4
            ],
            urls = urls,
            files=[]
        ),
        delete=None,
        update=None
    )
    update_op = client.knowledgebase.update(kb_id=kb_id, update_kb=update_kb_operation_dto)
    _monitor_operation(client=client, operation=update_op)
    print("Updated knowledge base.")

Se till att inkludera _monitor_operation funktionen, som refereras i koden ovan, för att kunna uppdatera en 知識庫.

Ladda ned en 知識庫

Använd nedladdningsmetoden för att ladda ned databasen som en lista över QnADocumentsDTO. Detta motsvarar inte QnA Maker-portalens export från sidan Inställningar eftersom resultatet av den här metoden inte är en TSV-fil.

def download_kb(client, kb_id):
    print("Downloading knowledge base...")
    kb_data = client.knowledgebase.download(kb_id=kb_id, environment="Prod")
    print("Downloaded knowledge base. It has {} QnAs.".format(len(kb_data.qna_documents)))

Publicera en kunskapsbas

Publicera 知識庫 med publiceringsmetoden. Detta tar den aktuella sparade och tränade modellen, som refereras av 知識庫-ID: t, och publicerar den på en slutpunkt.

def publish_kb(client, kb_id):
    print("Publishing knowledge base...")
    client.knowledgebase.publish(kb_id=kb_id)
    print("Published knowledge base.")

Köra frågor mot en kunskapsbas

Hämta frågekörningsnyckel

När en kunskapsbas har publicerats behöver du frågekörningsnyckeln för att köra frågor mot körningen. Det här är inte samma nyckel som används för att skapa det ursprungliga klientobjektet.

Använd metoden EndpointKeysOperations.get_keys för att hämta klassen EndpointKeysDTO .

Använd någon av de nyckelegenskaper som returneras i -objektet för att fråga kunskapsbasen.

def getEndpointKeys_kb(client):
    print("Getting runtime endpoint keys...")
    keys = client.endpoint_keys.get_keys()
    print("Primary runtime endpoint key: {}.".format(keys.primary_endpoint_key))

    return keys.primary_endpoint_key

Autentisera körningen för att generera ett svar

Skapa en QnAMakerRuntimeClient för att fråga 知識庫 för att generera ett svar eller träna från aktiv inlärning.

runtimeClient = QnAMakerRuntimeClient(runtime_endpoint=runtime_endpoint, credentials=CognitiveServicesCredentials(queryRuntimeKey))

Använd QnAMakerRuntimeClient för att få ett svar från kunskapen eller för att skicka nya föreslagna frågor till 知識庫 för aktiv inlärning.

Generera ett svar från 知識庫

Generera ett svar från en publicerad 知識庫 med hjälp av metoden QnAMakerRuntimeClient.runtime.generate_answer. Den här metoden accepterar 知識庫-ID och QueryDTO. Få åtkomst till ytterligare egenskaper för QueryDTO, till exempel top och kontext som ska användas i chattroboten.

def generate_answer(client, kb_id, runtimeKey):
    print ("Querying knowledge base...")

    authHeaderValue = "EndpointKey " + runtimeKey

    listSearchResults = client.runtime.generate_answer(kb_id, QueryDTO(question = "How do I manage my knowledgebase?"), dict(Authorization=authHeaderValue))

    for i in listSearchResults.answers:
        print(f"Answer ID: {i.id}.")
        print(f"Answer: {i.answer}.")
        print(f"Answer score: {i.score}.")

Det här är ett enkelt exempel på frågor mot 知識庫. Om du vill förstå avancerade frågescenarier kan du läsa andra frågeexempel.

Ta bort en kunskapsbas

Ta bort 知識庫 med hjälp av borttagningsmetoden med en parameter för 知識庫-ID:t.

def delete_kb(client, kb_id):
    print("Deleting knowledge base...")
    client.knowledgebase.delete(kb_id=kb_id)
    print("Deleted knowledge base.")

Hämta status för en åtgärd

Vissa metoder, till exempel skapa och uppdatera, kan ta tillräckligt med tid att en åtgärd returneras i stället för att vänta på att processen ska slutföras. Använd åtgärds-ID:t från åtgärden för att avsöka (med logik för omförsök) för att fastställa status för den ursprungliga metoden.

SetTimeout-anropet i följande kodblock används för att simulera asynkron kod. Ersätt detta med logik för återförsök.

def _monitor_operation(client, operation):

    for i in range(20):
        if operation.operation_state in [OperationStateType.not_started, OperationStateType.running]:
            print("Waiting for operation: {} to complete.".format(operation.operation_id))
            time.sleep(5)
            operation = client.operations.get_details(operation_id=operation.operation_id)
        else:
            break
    if operation.operation_state != OperationStateType.succeeded:
        raise Exception("Operation {} failed to complete.".format(operation.operation_id))

    return operation

Kör programmet

Kör programmet med Python-kommandot i snabbstartsfilen.

python quickstart-file.py

Källkoden för det här exemplet finns på GitHub.

Använd QnA Maker-klientbiblioteket för Java för att:

  • Skapa en kunskapsbas
  • Uppdatera en kunskapsbas
  • Publicera en kunskapsbas
  • Hämta slutpunktsnyckel för förutsägelsekörning
  • Vänta på långvariga uppgifter
  • Ladda ned en kunskapsbas
  • Få svar från en kunskapsbas
  • Ta bort 知識庫

Bibliotekskällans kod | Paket | Prover

Anteckning

Nya resurser som skapats efter den 1 juli 2019 använder anpassade underdomännamn. Mer information och en fullständig lista över regionala slutpunkter finns i Anpassade underdomännamn för Cognitive Services.

Krav

  • Azure-prenumeration – Skapa en kostnadsfritt
  • JDK
  • När du har din Azure-prenumeration skapar du en QnA Maker-resurs i Azure-Portal för att hämta redigeringsnyckeln och slutpunkten. När den har distribuerats väljer du Gå till resurs.
    • Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till QnA Maker-API:et. Klistra in nyckeln och slutpunkten i koden nedan senare i snabbstarten.
    • Du kan använda den kostnadsfria prisnivån (F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.

Inrätta

Installera klientbiblioteken

När du har installerat Java kan du installera klientbiblioteken med hjälp av Maven från MVN-lagringsplatsen.

Skapa ett nytt Java-program

Skapa en ny fil med namnet quickstart.java och importera följande bibliotek.

/* Download the following files.
 * - https://repo1.maven.org/maven2/com/microsoft/azure/cognitiveservices/azure-cognitiveservices-qnamaker/1.0.0-beta.1/azure-cognitiveservices-qnamaker-1.0.0-beta.1.jar
 * - https://repo1.maven.org/maven2/com/microsoft/azure/cognitiveservices/azure-cognitiveservices-qnamaker/1.0.0-beta.1/azure-cognitiveservices-qnamaker-1.0.0-beta.1.pom
 * Move the downloaded .jar file to a folder named "lib" directly under the current folder.
 * Rename the downloaded file to pom.xml.
 * At the command line, run
 * mvn dependency:copy-dependencies
 * This will download the .jar files depended on by azure-cognitiveservices-qnamaker-1.0.0-beta.1.jar to the folder "target/dependency" under the current folder. Move these .jar files to the "lib" folder as well.
 */
import com.microsoft.azure.cognitiveservices.knowledge.qnamaker.*;
import com.microsoft.azure.cognitiveservices.knowledge.qnamaker.models.*;

import java.io.*;
import java.lang.Object.*;
import java.time.format.DateTimeFormatter;  
import java.time.LocalDateTime; 
import java.util.*;
import java.net.*;

Skapa variabler för resursens Azure-slutpunkt och nyckel.

  • Vi använder prenumerationsnyckeln och redigeringsnyckeln synonymt. Mer information om redigeringsnyckeln finns i Nycklar i QnA Maker.

  • Värdet för QNA_MAKER_ENDPOINT har formatet https://YOUR-RESOURCE-NAME.cognitiveservices.azure.com. Gå till Azure-Portal och leta reda på QnA Maker-resursen som du skapade i förutsättningarna. Välj sidan Nycklar och slutpunkt under Resurshantering för att hitta redigeringsnyckeln (prenumeration) och QnA Maker-slutpunkten.

QnA Maker-slutpunkt för redigering

  • Värdet för QNA_MAKER_RUNTIME_ENDPOINT har formatet https://YOUR-RESOURCE-NAME.azurewebsites.net. Gå till Azure-Portal och leta reda på QnA Maker-resursen som du skapade i förutsättningarna. Välj sidan Exportera mall under Automation för att hitta körningsslutpunkten.

QnA Maker Runtime-slutpunkt

Viktigt

Kom ihåg att ta bort nyckeln från koden när du är klar och publicera den aldrig offentligt. För produktion använder du ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter som Azure 密钥保管库. Mer information finns i cognitive services-säkerhetsartikeln .

private static String authoring_key = "PASTE_YOUR_QNA_MAKER_AUTHORING_SUBSCRIPTION_KEY_HERE";
private static String authoring_endpoint = "PASTE_YOUR_QNA_MAKER_AUTHORING_ENDPOINT_HERE";
private static String runtime_endpoint = "PASTE_YOUR_QNA_MAKER_RUNTIME_ENDPOINT_HERE";

Objektmodeller

QnA Maker använder två olika objektmodeller:

  • QnAMakerClient är objektet för att skapa, hantera, publicera och ladda ned kunskapsbasen.
  • QnAMakerRuntime är objektet för att fråga 知識庫 med GenerateAnswer-API:et och skicka nya föreslagna frågor med hjälp av tränings-API:et (som en del av aktiv inlärning).

Använd det här exemplet 知識庫

Den 知識庫 i den här snabbstarten börjar med två konversations-QnA-par, detta görs med syfte att förenkla exemplet och ha mycket förutsägbara ID:n som ska användas i metoden Update, och associera uppföljningsfrågor med frågor till nya par. Detta har planerats och implementerats i en viss ordning för den här snabbstarten.

Om du planerar att utveckla din 知識庫 över tid med uppföljningsuppmaningar som är beroende av befintliga QnA-par kan du välja:

  • För större kunskapsbaser kan du hantera 知識庫 i en textredigerare eller ett TSV-verktyg som stöder automatisering och sedan helt ersätta 知識庫 samtidigt med en uppdatering.
  • För mindre kunskapsbaser hanterar du uppföljningsprompterna helt i QnA Maker-portalen.

Information om QnA-paren som används i den här snabbstarten:

  • Typer av QnA-par – det finns 2 typer av QnA-par i den här 知識庫 efter uppdateringen: chitchat och domänspecifik information. Detta är typiskt om din kunskapsbas är knuten till ett konversationsprogram, till exempel en chattrobot.
  • Även om kunskapsbassvaren kan filtreras efter metadata eller använda uppföljningsprompter, visar den här snabbstarten inte det. Leta efter de språkagnostiska generateAnswer-exemplen här.
  • Svarstexten är markdown och kan innehålla en mängd olika markdown-objekt , till exempel bilder (offentligt tillgängliga internetbaserade bilder), länkar (till offentligt tillgängliga URL:er) och punktlistor. Den här snabbstarten använder inte den sorten.

QnAMakerClient-objektmodell

Den redigerande QnA Maker-klienten är ett QnAMakerClient-objekt som autentiserar till Azure med hjälp av MsRest::ServiceClientCredentials, som innehåller din nyckel.

När klienten har skapats använder du metoderna i klientens Knowledgebases-egenskap för att skapa, hantera och publicera din 知識庫.

För omedelbara åtgärder returnerar en metod vanligtvis resultatet, om det finns några. För långvariga åtgärder är svaret ett åtgärdsobjekt . Anropa metoden getDetails med operation.operationId värdet för att fastställa status för begäran.

QnAMakerRuntimeClient-objektmodell

QnA Maker-klienten för körning är ett QnAMakerRuntimeClient-objekt .

När du har publicerat din 知識庫 med redigeringsklienten använder du körningsklientens generateAnswer-metod för att få ett svar från 知識庫.

Du skapar en körningsklient genom att anropa QnAMakerRuntimeManager.authenticate och skicka en slutpunktsnyckel för körning. Om du vill hämta slutpunktsnyckeln för körning använder du redigeringsklienten för att anropa getKeys.

Autentisera klienten för redigering av 知識庫

Skapa en instans av en klient med redigeringsslutpunkten och prenumerationsnyckeln.

/* Note QnAMakerManager.authenticate() does not set the baseUrl paramater value
 * as the value for QnAMakerClient.endpoint, so we still need to call withEndpoint().
 */
QnAMakerClient authoring_client = QnAMakerManager.authenticate(authoring_key).withEndpoint(authoring_endpoint);
Knowledgebases kb_client = authoring_client.knowledgebases();
Operations ops_client = authoring_client.operations();
EndpointKeys keys_client = authoring_client.endpointKeys();

Skapa en kunskapsbas

En 知識庫 lagrar fråge- och svarspar för CreateKbDTO-objektet från tre källor:

  • För redaktionellt innehåll använder du QnADTO-objektet .
    • Om du vill använda metadata och uppföljande frågor använder du den redaktionella kontexten, eftersom dessa data läggs till på individuell QnA-parnivå.
  • För filer använder du FileDTO-objektet . FileDTO innehåller filnamnet och den offentliga URL:en för att nå filen.
  • För URL:er använder du en lista med strängar för att representera offentligt tillgängliga URL:er.

Anropa create-metoden och skicka operationId sedan egenskapen för den returnerade åtgärden till metoden getDetails för att söka efter status.

Den sista raden i följande kod returnerar 知識庫-ID:t.

public String create_kb () throws Exception {
    System.out.println("Creating KB...");

    String name = "QnA Maker FAQ from quickstart";

    var metadata = new MetadataDTO()
        .withName ("Category")
        .withValue ("api");

    List<MetadataDTO> metadata_list = Arrays.asList(new MetadataDTO[]{ metadata });

    var qna = new QnADTO()
        .withAnswer ("You can use our REST APIs to manage your knowledge base.")
        .withQuestions ( Arrays.asList(new String[]{ "How do I manage my knowledgebase?" }))
        .withMetadata (metadata_list);

    List<QnADTO> qna_list = Arrays.asList(new QnADTO[]{ qna });

    var urls = Arrays.asList(new String[]{ "https://docs.microsoft.com/en-in/azure/cognitive-services/qnamaker/faqs" });

    var payload = new CreateKbDTO().withName(name).withQnaList(qna_list).withUrls(urls);

    var result = kb_client.create(payload);
    var kb_id = wait_for_operation(result);

    System.out.println("Created KB with ID: " + kb_id + ".\n");
    return kb_id;
}

Uppdatera en kunskapsbas

Du kan uppdatera en 知識庫 genom att anropa uppdatering och skicka in 知識庫-ID:t och ett UpdateKbOperationDTO-objekt. Objektet kan i sin tur innehålla:

Skicka egenskapen för operationId den returnerade åtgärden till metoden getDetails för att söka efter status.

public void update_kb (String kb_id) throws Exception {
    System.out.println("Updating KB...");

    var update = new UpdateKbOperationDTOUpdate().withName ("New KB name");

    var payload = new UpdateKbOperationDTO().withUpdate((UpdateKbOperationDTOUpdate)update);

    var result = kb_client.update(kb_id, payload);
    wait_for_operation(result);

    System.out.println("Updated KB.");
}

Ladda ned en 知識庫

Använd nedladdningsmetoden för att ladda ned databasen som en lista över QnADocumentsDTO. Detta motsvarar inte QnA Maker-portalens export från sidan Inställningar eftersom resultatet av den här metoden inte är en TSV-fil.

public void download_kb(String kb_id) {
    System.out.println("Downloading KB...");

    var kb_data = kb_client.download(kb_id, EnvironmentType.PROD);
    System.out.println("KB Downloaded. It has " + kb_data.qnaDocuments().size() + " question/answer sets.");

    System.out.println("Downloaded KB.\n");
}

Publicera en kunskapsbas

Publicera 知識庫 med publiceringsmetoden. Detta tar den aktuella sparade och tränade modellen, som refereras av 知識庫-ID: t, och publicerar den på en slutpunkt.

public void publish_kb(String kb_id) {
    System.out.println("Publishing KB...");
    kb_client.publish(kb_id);
    System.out.println("KB published.\n");
}

Generera ett svar från 知識庫

När en 知識庫 har publicerats behöver du slutpunktsnyckeln för körning för att köra frågor mot 知識庫. Detta är inte samma som prenumerationsnyckeln som används för att skapa redigeringsklienten.

Använd metoden getKeys för att hämta ett EndpointKeysDTO-objekt .

Skapa en körningsklient genom att anropa QnAMakerRuntimeManager.authenticate och skicka en slutpunktsnyckel för körning från EndpointKeysDTO-objektet.

Generera ett svar från en publicerad 知識庫 med hjälp av metoden generateAnswer. Den här metoden accepterar 知識庫-ID och ett QueryDTO-objekt.

public void query_kb(String kb_id) {
    System.out.println("Sending query to KB...");
    
    var runtime_key = keys_client.getKeys().primaryEndpointKey();
    QnAMakerRuntimeClient runtime_client = QnAMakerRuntimeManager.authenticate(runtime_key).withRuntimeEndpoint(runtime_endpoint);
    var query = (new QueryDTO()).withQuestion("How do I manage my knowledgebase?");
    var result = runtime_client.runtimes().generateAnswer(kb_id, query);
    System.out.println("Answers:");
    for (var answer : result.answers()) {
        System.out.println(answer.answer().toString());
    };
    System.out.println();
}

Det här är ett enkelt exempel på frågor mot en 知識庫. Om du vill förstå avancerade frågescenarier kan du läsa andra frågeexempel.

Ta bort en kunskapsbas

Ta bort 知識庫 med hjälp av borttagningsmetoden med en parameter för 知識庫-ID:t.

public void delete_kb(String kb_id) {
    System.out.println("Deleting KB...");
    kb_client.delete(kb_id);
    System.out.println("KB deleted.\n");
}

Hämta status för en åtgärd

Vissa metoder, till exempel skapa och uppdatera, kan ta tillräckligt med tid att en åtgärd returneras i stället för att vänta på att processen ska slutföras. Använd åtgärds-ID:t från åtgärden för att avsöka (med logik för omförsök) för att fastställa status för den ursprungliga metoden.

public String wait_for_operation(Operation op) throws Exception {
    System.out.println ("Waiting for operation to finish...");
    Boolean waiting = true;
    String result = "";
    while (true == waiting) {
        var op_ = ops_client.getDetails(op.operationId());
        var state = op_.operationState();
        if (OperationStateType.FAILED == state) {
            throw new Exception("Operation failed.");
        }
        if (OperationStateType.SUCCEEDED == state) {
            waiting = false;
            // Remove "/knowledgebases/" from the resource location.
            result = op_.resourceLocation().replace("/knowledgebases/", "");
        }
        if (true == waiting) {
            System.out.println("Waiting 10 seconds for operation to complete...");
            Thread.sleep(10000);
        }
    }
    return result;
}

Kör programmet

Här är huvudmetoden för programmet.

    public static void main(String[] args) {
        try {
            Quickstart quickstart = new Quickstart();
            String kb_id = quickstart.create_kb();
//			quickstart.list_kbs();
            quickstart.update_kb(kb_id);
            quickstart.publish_kb(kb_id);
            quickstart.download_kb(kb_id);
            quickstart.query_kb(kb_id);
            quickstart.delete_kb(kb_id);
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

Kör programmet på följande sätt. Detta förutsätter att ditt klassnamn är Quickstart och att dina beroenden finns i en undermapp med namnet lib under den aktuella mappen.

javac Quickstart.java -cp .;lib\*
java -cp .;lib\* Quickstart

Källkoden för det här exemplet finns på GitHub.

Rensa resurser

Om du vill rensa och ta bort en Cognitive Services-prenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort.

Nästa steg