Menambahkan pemahaman bahasa alami ke bot Anda

BERLAKU UNTUK: SDK v4

Kemampuan untuk memahami apa arti pengguna Anda secara percakapan dan kontekstual dapat menjadi tugas yang sulit, tetapi dapat memberikan nuansa percakapan yang lebih alami kepada bot Anda. Pemahaman Bahasa (LUIS) adalah layanan API berbasis cloud yang memungkinkan Anda melakukan hal itu sehingga bot Anda dapat mengenali niat pesan pengguna, memungkinkan bahasa yang lebih alami dari pengguna Anda, dan mengarahkan alur percakapan dengan lebih baik.

Topik ini memandu Anda menambahkan LUIS ke aplikasi pemesanan penerbangan untuk mengenali berbagai niat dan entitas yang terkandung dalam input pengguna.

Prasyarat

Tentang sampel ini

Sampel bot inti ini menunjukkan contoh aplikasi pemesanan penerbangan bandara. Ini menggunakan layanan LUIS untuk mengenali input pengguna dan mengembalikan niat LUIS yang dikenali teratas.

Model bahasa berisi tiga niat: Book Flight, , Canceldan None. LUIS akan menggunakan niat ini untuk memahami apa yang dimaksud pengguna saat mereka mengirim pesan ke bot. Model bahasa juga mendefinisikan entitas yang dapat diekstrak LUIS dari input pengguna, seperti bandara asal atau tujuan.

Setelah setiap pemrosesan input pengguna, DialogBot menyimpan status saat ini dari dan UserStateConversationState. Setelah semua informasi yang diperlukan dikumpulkan, sampel pengkodean membuat reservasi pemesanan penerbangan demo. Dalam artikel ini kita akan membahas aspek LUIS dari sampel ini. Namun, alur umum sampel ditunjukkan di bawah ini:

  • OnMembersAddedAsync dipanggil ketika pengguna baru tersambung dan menampilkan kartu selamat datang.
  • OnMessageActivityAsync dipanggil untuk setiap input pengguna yang diterima.

LUIS sample logic flow

Modul OnMessageActivityAsync menjalankan dialog yang sesuai melalui Run metode ekstensi dialog. Kemudian dialog utama memanggil pembantu LUIS untuk menemukan niat pengguna penilaian teratas. Jika niat teratas untuk input pengguna mengembalikan "BookFlight", pembantu mengisi informasi dari pengguna yang dikembalikan LUIS. Setelah itu, dialog utama memulai BookingDialog, yang memperoleh informasi tambahan sesuai kebutuhan dari pengguna seperti:

  • Origin kota asal
  • TravelDate tanggal untuk memesan penerbangan
  • Destination kota tujuan

Artikel ini membahas cara menambahkan LUIS ke bot. Untuk informasi tentang menggunakan dialog atau status, lihat cara mengumpulkan input pengguna menggunakan perintah dialog atau menyimpan data pengguna dan percakapan.

Membuat aplikasi LUIS di portal LUIS

  1. Masuk ke portal LUIS dan jika diperlukan , buat akun dan sumber daya penulisan.

  2. Pada halaman Aplikasi percakapan di LUIS, pilih panah bawah di sebelah kanan Aplikasi baru lalu pilih Impor sebagai JSON.

    Create a new LUIS app

  3. Dalam dialog Impor aplikasi baru :

    1. Pilih file FlightBooking.json di folder CognitiveModels sampel.
    2. Masukkan FlightBooking sebagai nama opsional aplikasi, dan pilih Selesai.
  4. Anda mungkin diminta untuk meningkatkan entitas komposit Anda. Anda dapat mengabaikan ini dan memilih Ingatkan saya nanti:

    ignore-composite-entities

  5. Latih dan terbitkan aplikasi Anda ke lingkungan produksi . Untuk informasi selengkapnya, lihat dokumentasi LUIS tentang cara melatih dan menerbitkan aplikasi.

Mengapa menggunakan entitas

Entitas LUIS memungkinkan bot Anda untuk memahami peristiwa di luar niat standar. Ini memungkinkan Anda untuk mengumpulkan informasi tambahan dari pengguna yang dapat memungkinkan Anda melakukan streaming baris pertanyaan Anda dan merespons dengan lebih cerdas. Bersama dengan definisi untuk tiga niat LUIS 'Book Flight', 'Cancel', dan 'None' file FlightBooking.json juga berisi sekumpulan entitas seperti 'From.Airport' dan 'To.Airport'. Entitas ini memungkinkan LUIS mendeteksi dan mengembalikan informasi tambahan yang terkandung dalam input asli pengguna saat mereka meminta pemesanan perjalanan baru.

Mendapatkan nilai untuk menyambungkan ke aplikasi LUIS Anda

Setelah aplikasi LUIS diterbitkan, Anda dapat mengaksesnya dari bot Anda. Anda harus merekam beberapa nilai untuk mengakses aplikasi LUIS dari dalam bot Anda. Anda dapat mengambil informasi tersebut menggunakan portal LUIS.

Mengambil informasi aplikasi dari portal LUIS.ai

File pengaturan (appsettings.json, .env atau config.py) bertindak sebagai tempat untuk menggabungkan semua referensi layanan di satu tempat. Informasi yang Anda ambil akan ditambahkan ke file ini di bagian berikutnya.

  1. Pilih aplikasi LUIS yang dipublikasikan dari luis.ai.

  2. Dengan aplikasi LUIS yang dipublikasikan terbuka, pilih tab KELOLA .

  3. Pilih tab Pengaturan di sisi kiri dan rekam nilai yang ditampilkan untuk ID Aplikasi sebagai <YOUR_APP_ID>.

    Manage LUIS application information

  4. Pilih tab Sumber Daya Azure di sisi kiri dan pilih grup Sumber Daya Penulisan . Rekam nilai yang diperlihatkan untuk Lokasi sebagai <YOUR_REGION> dan Kunci Primer sebagai <YOUR_AUTHORING_KEY>.

    Manage LUIS authoring information

Memperbarui file pengaturan

Tambahkan informasi yang diperlukan untuk mengakses aplikasi LUIS Anda termasuk ID aplikasi, kunci penulisan, dan wilayah ke appsettings.json dalam file. Ini adalah nilai yang Anda simpan sebelumnya dari aplikasi LUIS yang dipublikasikan. Perhatikan bahwa nama host API harus dalam format <your region>.api.cognitive.microsoft.com.

appsetting.json

{
  "MicrosoftAppType": "",
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "MicrosoftAppTenantId": "",
  "LuisAppId": "",
  "LuisAPIKey": "",

Mengonfigurasi bot Anda untuk menggunakan aplikasi LUIS Anda

Pastikan bahwa paket NuGet Microsoft.Bot.Builder.AI.Luis diinstal untuk proyek Anda.

Untuk menyambungkan ke layanan LUIS, bot menarik informasi yang Anda tambahkan di atas dari file appsetting.json. Kelas FlightBookingRecognizer berisi kode dengan pengaturan Anda dari file appsetting.json dan meminta layanan LUIS dengan memanggil RecognizeAsync metode .

FlightBookingRecognizer.cs

public class FlightBookingRecognizer : IRecognizer
{
    private readonly LuisRecognizer _recognizer;

    public FlightBookingRecognizer(IConfiguration configuration)
    {
        var luisIsConfigured = !string.IsNullOrEmpty(configuration["LuisAppId"]) && !string.IsNullOrEmpty(configuration["LuisAPIKey"]) && !string.IsNullOrEmpty(configuration["LuisAPIHostName"]);
        if (luisIsConfigured)
        {
            var luisApplication = new LuisApplication(
                configuration["LuisAppId"],
                configuration["LuisAPIKey"],
                "https://" + configuration["LuisAPIHostName"]);
            // Set the recognizer options depending on which endpoint version you want to use.
            // More details can be found in https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-migration-api-v3
            var recognizerOptions = new LuisRecognizerOptionsV3(luisApplication)
            {
                PredictionOptions = new Bot.Builder.AI.LuisV3.LuisPredictionOptions
                {
                    IncludeInstanceData = true,
                }
            };

            _recognizer = new LuisRecognizer(recognizerOptions);
        }
    }

    // Returns true if luis is configured in the appsettings.json and initialized.
    public virtual bool IsConfigured => _recognizer != null;

    public virtual async Task<RecognizerResult> RecognizeAsync(ITurnContext turnContext, CancellationToken cancellationToken)
        => await _recognizer.RecognizeAsync(turnContext, cancellationToken);

    public virtual async Task<T> RecognizeAsync<T>(ITurnContext turnContext, CancellationToken cancellationToken)
        where T : IRecognizerConvert, new()
        => await _recognizer.RecognizeAsync<T>(turnContext, cancellationToken);
}

FlightBookingEx.cs berisi logika untuk mengekstrak Dari, Ke dan TravelDate; ini memperluas kelas FlightBooking.cs parsial yang digunakan untuk menyimpan hasil LUIS saat memanggil FlightBookingRecognizer.RecognizeAsync<FlightBooking> dari MainDialog.cs.

CognitiveModels\FlightBookingEx.cs

// Extends the partial FlightBooking class with methods and properties that simplify accessing entities in the luis results
public partial class FlightBooking
{
    public (string From, string Airport) FromEntities
    {
        get
        {
            var fromValue = Entities?._instance?.From?.FirstOrDefault()?.Text;
            var fromAirportValue = Entities?.From?.FirstOrDefault()?.Airport?.FirstOrDefault()?.FirstOrDefault();
            return (fromValue, fromAirportValue);
        }
    }

    public (string To, string Airport) ToEntities
    {
        get
        {
            var toValue = Entities?._instance?.To?.FirstOrDefault()?.Text;
            var toAirportValue = Entities?.To?.FirstOrDefault()?.Airport?.FirstOrDefault()?.FirstOrDefault();
            return (toValue, toAirportValue);
        }
    }

    // This value will be a TIMEX. And we are only interested in a Date so grab the first result and drop the Time part.
    // TIMEX is a format that represents DateTime expressions that include some ambiguity. e.g. missing a Year.
    public string TravelDate
        => Entities.datetime?.FirstOrDefault()?.Expressions.FirstOrDefault()?.Split('T')[0];
}

LUIS sekarang dikonfigurasi dan terhubung untuk bot Anda.

Menguji bot

Unduh dan instal Emulator Kerangka Kerja Bot terbaru

  1. Jalankan sampel secara lokal di komputer Anda. Jika Anda memerlukan instruksi, lihat README file untuk Sampel C#, Sampel JS , atau Sampel Python.

  2. Di Emulator, ketik pesan seperti "travel to paris" atau "going from paris to berlin". Gunakan ucapan apa pun yang ditemukan dalam file FlightBooking.json untuk melatih niat "Pesan penerbangan".

LUIS booking input

Jika niat teratas yang dikembalikan dari LUIS diselesaikan ke "Pesan penerbangan" bot Anda akan mengajukan pertanyaan tambahan sampai memiliki informasi yang cukup yang disimpan untuk membuat pemesanan perjalanan. Pada titik itu akan mengembalikan informasi pemesanan ini kembali kepada pengguna Anda.

LUIS booking result

Pada titik ini, logika bot kode akan direset dan Anda dapat terus membuat pemesanan tambahan.

Informasi Tambahan

Untuk informasi selengkapnya tentang LUIS, lihat dokumentasi LUIS:

Catatan

Bagian yang berbeda dari SDK menentukan kelas atau elemen entitas terpisah. Untuk entitas pesan, lihat Entitas dan jenis aktivitas.

Langkah berikutnya