Menambahkan pemahaman bahasa alami ke bot Anda

BERLAKU UNTUK: SDK v4

Catatan

Pemahaman Bahasa (LUIS) akan dihentikan pada 1 Oktober 2025. Mulai 1 April 2023, Anda tidak akan dapat membuat sumber daya LUIS baru. Versi pemahaman bahasa yang lebih baru sekarang tersedia sebagai bagian dari Bahasa Azure AI.

Pemahaman bahasa percakapan (CLU), fitur Bahasa Azure AI, adalah versi LUIS yang diperbarui. Untuk informasi selengkapnya tentang dukungan pemahaman bahasa di Bot Framework SDK, lihat Pemahaman bahasa alami.

Kemampuan untuk memahami apa arti pengguna Anda secara percakapan dan kontekstual bisa 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 niat dan entitas yang berbeda yang terkandung dalam input pengguna.

Catatan

Bot Framework JavaScript, C#, dan Python SDK akan terus didukung, namun, Java SDK dihentikan dengan dukungan jangka panjang akhir yang berakhir pada November 2023.

Bot yang ada yang dibangun dengan Java SDK akan terus berfungsi.

Untuk pembuatan bot baru, pertimbangkan untuk menggunakan Power Virtual Agents dan baca tentang memilih solusi chatbot yang tepat.

Untuk informasi selengkapnya, lihat Masa depan pembuatan bot.

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 pengodean membuat reservasi pemesanan penerbangan demo. Dalam artikel ini, kita akan membahas aspek LUIS dari sampel ini. Namun, alur umum sampel adalah:

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

Diagram kelas yang menguraikan struktur sampel C#.

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 Impor, lalu Impor sebagai JSON.
  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. Situs ini dapat menampilkan Cara membuat aplikasi LUIS yang efektif dan Memutakhirkan dialog entitas komposit Anda. Anda dapat menutup dialog ini dan melanjutkan.
  5. Latih aplikasi Anda, lalu 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, sehingga bot Anda dapat mengajukan pertanyaan 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 diterbitkan dari luis.ai.

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

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

    Cuplikan layar halaman Kelola yang menampilkan ID aplikasi Anda.

  4. Pilih Sumber Daya Azure, lalu Sumber Daya Prediksi. Catat nilai yang ditampilkan untuk Lokasi sebagai <YOUR_REGION> dan Kunci Primer sebagai <YOUR_AUTHORING_KEY>.

    Cuplikan layar halaman Kelola yang menampilkan lokasi dan kunci utama Anda.

    Atau, Anda dapat menggunakan wilayah dan kunci utama untuk sumber daya penulisan Anda.

Memperbarui file pengaturan

Tambahkan informasi yang diperlukan untuk mengakses aplikasi LUIS Anda termasuk ID aplikasi, kunci penulisan, dan wilayah ke appsettings.json dalam file. Pada langkah sebelumnya, Anda mengambil nilai-nilai ini dari aplikasi LUIS yang diterbitkan. Nama host API harus dalam format <your region>.api.cognitive.microsoft.com.

appsetting.json

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

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 ke file appsetting.json. Kelas FlightBookingRecognizer berisi kode dengan pengaturan Anda dari file appsetting.json dan meminta layanan LUIS dengan metode panggilan RecognizeAsync .

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 "perjalanan ke paris" atau "pergi dari paris ke berlin". Gunakan ucapan apa pun yang ditemukan dalam file FlightBooking.json untuk melatih niat "Pesan penerbangan".

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

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

Informasi Tambahan

Untuk informasi selengkapnya tentang LUIS, lihat dokumentasi LUIS:

Tip

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