Udostępnij za pośrednictwem


Zaakceptuj sugerowane pytania dotyczące uczenia aktywnego w baza wiedzy

Uwaga

Usługa QnA Maker jest wycofywana 31 marca 2025 r. Nowsza wersja funkcji pytań i odpowiedzi jest teraz dostępna w ramach języka sztucznej inteligencji platformy Azure. Aby uzyskać odpowiedzi na pytania w usłudze językowej, zobacz odpowiadanie na pytania. Od 1 października 2022 r. nie będzie można tworzyć nowych zasobów usługi QnA Maker. Aby uzyskać informacje na temat migrowania istniejących baza wiedzy usługi QnA Maker do odpowiadania na pytania, zapoznaj się z przewodnikiem migracji.

Usługa Active Learning zmienia bazę wiedzy lub usługę wyszukiwania po zatwierdzeniu sugestii, a następnie zapisuje i trenuje. Jeśli zatwierdzisz sugestię, zostanie ona dodana jako pytanie alternatywne.

Włącz uczenie aktywne

Aby zobaczyć sugerowane pytania, musisz włączyć aktywne uczenie dla zasobu usługi QnA Maker.

Wyświetlanie sugerowanych pytań

  1. Aby wyświetlić sugerowane pytania, na stronie Edytowanie baza wiedzy wybierz pozycję Wyświetl opcje, a następnie wybierz pozycję Pokaż aktywne sugestie szkoleniowe. Ta opcja zostanie wyłączona, jeśli nie ma żadnych sugestii dotyczących żadnej pary pytań i odpowiedzi.

    W sekcji Edycja portalu wybierz pozycję Pokaż sugestie, aby wyświetlić nowe alternatywy pytań w usłudze Active Learning.

  2. Przefiltruj baza wiedzy przy użyciu par pytań i odpowiedzi, aby wyświetlić tylko sugestie, wybierając pozycję Filtruj według sugestii.

    Użyj przełącznika Filtruj według sugestii, aby wyświetlić tylko sugerowane alternatywy pytań aktywnego uczenia.

  3. Każda para pytań i odpowiedzi sugeruje nowe alternatywy pytań z znacznikiem wyboru, , aby zaakceptować pytanie lub odrzucić x sugestie. Wybierz znacznik wyboru, aby dodać pytanie.

    Wybierz lub odrzuć sugerowane alternatywy pytań w ramach aktywnej nauki, wybierając zielony znacznik wyboru lub czerwony znacznik usuwania.

    Możesz dodać lub usunąć wszystkie sugestie , wybierając pozycję Dodaj wszystko lub Odrzuć wszystko na pasku narzędzi kontekstowym.

  4. Wybierz pozycję Zapisz i trenuj, aby zapisać zmiany w baza wiedzy.

  5. Wybierz pozycję Publikuj , aby zezwolić na dostęp zmian z interfejsu API GenerateAnswer.

    Gdy klastrowane są co 5 lub więcej podobnych zapytań, co 30 minut usługa QnA Maker sugeruje alternatywne pytania dotyczące akceptowania lub odrzucania.

Sugestie dotyczące uczenia aktywnego są zapisywane w wyeksportowanym baza wiedzy

Gdy aplikacja ma włączoną aktywną naukę i eksportujesz aplikację, kolumna SuggestedQuestions w pliku tsv zachowuje aktywne dane szkoleniowe.

Kolumna SuggestedQuestions jest obiektem JSON informacji niejawnych, autosuggestedi jawnych opinii usersuggested . Przykładem tego obiektu JSON dla jednego przesłanego przez użytkownika pytania help jest:

[
    {
        "clusterHead": "help",
        "totalAutoSuggestedCount": 1,
        "totalUserSuggestedCount": 0,
        "alternateQuestionList": [
            {
                "question": "help",
                "autoSuggestedCount": 1,
                "userSuggestedCount": 0
            }
        ]
    }
]

Gdy ponownie zaimportujesz tę aplikację, aktywne uczenie będzie nadal zbierać informacje i zalecać sugestie dotyczące baza wiedzy.

Przepływ architektury do używania interfejsów API GenerateAnswer i Train z bota

Bot lub inna aplikacja kliencka powinna używać następującego przepływu architektury do korzystania z uczenia aktywnego:

  1. Bot pobiera odpowiedź z baza wiedzy za pomocą interfejsu API GenerateAnswer przy użyciu top właściwości w celu uzyskania wielu odpowiedzi.

  2. Bot określa jawną opinię:

    • Korzystając z własnej niestandardowej logiki biznesowej, odfiltruj niskie wyniki.
    • W botze lub aplikacji klienckiej wyświetl listę możliwych odpowiedzi dla użytkownika i uzyskaj wybraną odpowiedź użytkownika.
  3. Bot wysyła wybraną odpowiedź z powrotem do usługi QnA Maker za pomocą interfejsu API trenowania.

Użyj właściwości top w żądaniu GenerateAnswer, aby uzyskać kilka pasujących odpowiedzi

Podczas przesyłania pytania do usługi QnA Maker w celu uzyskania odpowiedzi top właściwość treści JSON ustawia liczbę odpowiedzi do zwrócenia.

{
    "question": "wi-fi",
    "isTest": false,
    "top": 3
}

Użyj właściwości score wraz z logiką biznesową, aby uzyskać listę odpowiedzi, aby wyświetlić użytkownika

Gdy aplikacja kliencka (na przykład czatbot) otrzyma odpowiedź, zostaną zwrócone 3 najważniejsze pytania. score Użyj właściwości , aby przeanalizować bliskość między wynikami. Ten zakres sąsiedztwa jest określany przez własną logikę biznesową.

{
    "answers": [
        {
            "questions": [
                "Wi-Fi Direct Status Indicator"
            ],
            "answer": "**Wi-Fi Direct Status Indicator**\n\nStatus bar icons indicate your current Wi-Fi Direct connection status:  \n\nWhen your device is connected to another device using Wi-Fi Direct, '$  \n\n+ *+ ' Wi-Fi Direct is displayed in the Status bar.",
            "score": 74.21,
            "id": 607,
            "source": "Bugbash KB.pdf",
            "metadata": []
        },
        {
            "questions": [
                "Wi-Fi - Connections"
            ],
            "answer": "**Wi-Fi**\n\nWi-Fi is a term used for certain types of Wireless Local Area Networks (WLAN). Wi-Fi communication requires access to a wireless Access Point (AP).",
            "score": 74.15,
            "id": 599,
            "source": "Bugbash KB.pdf",
            "metadata": []
        },
        {
            "questions": [
                "Turn Wi-Fi On or Off"
            ],
            "answer": "**Turn Wi-Fi On or Off**\n\nTurning Wi-Fi on makes your device able to discover and connect to compatible in-range wireless APs.  \n\n1.  From a Home screen, tap ::: Apps > e Settings .\n2.  Tap Connections > Wi-Fi , and then tap On/Off to turn Wi-Fi on or off.",
            "score": 69.99,
            "id": 600,
            "source": "Bugbash KB.pdf",
            "metadata": []
        }
    ]
}

Obserwowanie aplikacji klienckiej, gdy pytania mają podobne wyniki

Aplikacja kliencka wyświetla pytania z opcją dla użytkownika, aby wybrać pojedyncze pytanie , które najbardziej reprezentuje ich intencję.

Gdy użytkownik wybierze jedno z istniejących pytań, aplikacja kliencka wyśle wybór użytkownika jako opinię przy użyciu interfejsu API trenowania usługi QnA Maker. Ta opinia kończy pętlę informacji zwrotnych dotyczących uczenia aktywnego.

Interfejs API trenowania

Aktywna opinia szkoleniowa jest wysyłana do usługi QnA Maker za pomocą żądania POST trenowania interfejsu API. Podpis interfejsu API to:

POST https://<QnA-Maker-resource-name>.azurewebsites.net/qnamaker/knowledgebases/<knowledge-base-ID>/train
Authorization: EndpointKey <endpoint-key>
Content-Type: application/json
{"feedbackRecords": [{"userId": "1","userQuestion": "<question-text>","qnaId": 1}]}
Właściwość żądania HTTP Nazwisko Typ Cel
Parametr trasy adresu URL Identyfikator bazy wiedzy string Identyfikator GUID baza wiedzy.
Niestandardowa poddomena Nazwa zasobu usługi QnAMaker string Nazwa zasobu jest używana jako niestandardowa poddomena dla usługi QnA Maker. Jest to dostępne na stronie Ustawienia po opublikowaniu baza wiedzy. Jest on wymieniony jako .host
Nagłówek Typ zawartości string Typ nośnika treści wysyłanej do interfejsu API. Wartość domyślna to: application/json
Nagłówek Autoryzacja string Klucz punktu końcowego (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Treść wpisu Obiekt JSON JSON Opinia szkoleniowa

Treść JSON ma kilka ustawień:

Właściwość treści JSON Typ Cel
feedbackRecords tablica Lista opinii.
userId string Identyfikator użytkownika osoby akceptującej sugerowane pytania. Format identyfikatora użytkownika jest do Ciebie. Na przykład adres e-mail może być prawidłowym identyfikatorem użytkownika w architekturze. Opcjonalny.
userQuestion string Dokładny tekst zapytania użytkownika. Wymagany.
qnaID Liczba Identyfikator pytania, który znajduje się w odpowiedzi GenerateAnswer.

Przykładowa treść JSON wygląda następująco:

{
    "feedbackRecords": [
        {
            "userId": "1",
            "userQuestion": "<question-text>",
            "qnaId": 1
        }
    ]
}

Pomyślna odpowiedź zwraca stan 204 i brak treści odpowiedzi JSON.

Batch wiele rekordów opinii w jednym wywołaniu

W aplikacji po stronie klienta, takiej jak bot, można przechowywać dane, a następnie wysyłać wiele rekordów w jednej treści JSON w tablicy feedbackRecords .

Przykładowa treść JSON wygląda następująco:

{
    "feedbackRecords": [
        {
            "userId": "1",
            "userQuestion": "How do I ...",
            "qnaId": 1
        },
        {
            "userId": "2",
            "userQuestion": "Where is ...",
            "qnaId": 40
        },
        {
            "userId": "3",
            "userQuestion": "When do I ...",
            "qnaId": 33
        }
    ]
}

Przykładowy kod platformy Bot Framework

Kod platformy botów musi wywołać interfejs API trenowania, jeśli zapytanie użytkownika powinno być używane do aktywnego uczenia. Do pisania są dwa fragmenty kodu:

  • Określanie, czy zapytanie powinno być używane na potrzeby uczenia aktywnego
  • Wysyłanie zapytania z powrotem do interfejsu API trenowania usługi QnA Maker na potrzeby aktywnego uczenia

W przykładzie usługi Azure Bot oba te działania zostały zaprogramowane.

Przykładowy kod języka C# dla trenowania interfejsu API za pomocą platformy Bot Framework 4.x

Poniższy kod ilustruje sposób wysyłania informacji z powrotem do usługi QnA Maker przy użyciu interfejsu API trenowania.

public class FeedbackRecords
{
    // <summary>
    /// List of feedback records
    /// </summary>
    [JsonProperty("feedbackRecords")]
    public FeedbackRecord[] Records { get; set; }
}

/// <summary>
/// Active learning feedback record
/// </summary>
public class FeedbackRecord
{
    /// <summary>
    /// User id
    /// </summary>
    public string UserId { get; set; }

    /// <summary>
    /// User question
    /// </summary>
    public string UserQuestion { get; set; }

    /// <summary>
    /// QnA Id
    /// </summary>
    public int QnaId { get; set; }
}

/// <summary>
/// Method to call REST-based QnAMaker Train API for Active Learning
/// </summary>
/// <param name="endpoint">Endpoint URI of the runtime</param>
/// <param name="FeedbackRecords">Feedback records train API</param>
/// <param name="kbId">Knowledgebase Id</param>
/// <param name="key">Endpoint key</param>
/// <param name="cancellationToken"> Cancellation token</param>
public async static void CallTrain(string endpoint, FeedbackRecords feedbackRecords, string kbId, string key, CancellationToken cancellationToken)
{
    var uri = endpoint + "/knowledgebases/" + kbId + "/train/";

    using (var client = new HttpClient())
    {
        using (var request = new HttpRequestMessage())
        {
            request.Method = HttpMethod.Post;
            request.RequestUri = new Uri(uri);
            request.Content = new StringContent(JsonConvert.SerializeObject(feedbackRecords), Encoding.UTF8, "application/json");
            request.Headers.Add("Authorization", "EndpointKey " + key);

            var response = await client.SendAsync(request, cancellationToken);
            await response.Content.ReadAsStringAsync();
        }
    }
}

Przykładowy kod Node.js dla trenowania interfejsu API za pomocą platformy Bot Framework 4.x

Poniższy kod ilustruje sposób wysyłania informacji z powrotem do usługi QnA Maker przy użyciu interfejsu API trenowania.

async callTrain(stepContext){

    var trainResponses = stepContext.values[this.qnaData];
    var currentQuery = stepContext.values[this.currentQuery];

    if(trainResponses.length > 1){
        var reply = stepContext.context.activity.text;
        var qnaResults = trainResponses.filter(r => r.questions[0] == reply);

        if(qnaResults.length > 0){

            stepContext.values[this.qnaData] = qnaResults;

            var feedbackRecords = {
                FeedbackRecords:[
                    {
                        UserId:stepContext.context.activity.id,
                        UserQuestion: currentQuery,
                        QnaId: qnaResults[0].id
                    }
                ]
            };

            // Call Active Learning Train API
            this.activeLearningHelper.callTrain(this.qnaMaker.endpoint.host, feedbackRecords, this.qnaMaker.endpoint.knowledgeBaseId, this.qnaMaker.endpoint.endpointKey);

            return await stepContext.next(qnaResults);
        }
        else{

            return await stepContext.endDialog();
        }
    }

    return await stepContext.next(stepContext.result);
}

Najlepsze rozwiązania

Aby uzyskać najlepsze rozwiązania dotyczące korzystania z uczenia aktywnego, zobacz Najlepsze rozwiązania.

Następne kroki