Từ A đến Z: Cách dựng Lowcode Chatbot với Bot Composer

Bạn có thể nghĩ rằng tự làm chatbot thì khó lắm, sẽ mất nhiều thời gian, công sức và cần có kiến thức chuyên môn. Hết sức đơn giản, hãy để công cụ Bot Framework Composer giúp bạn tạo ra một chatbot nhanh - gọn - lẹ.

Bạn có thể dùng những component có sẵn để thiết kế đoạn hội thoại, tích hợp với những dịch vụ của bên thứ ba, quản lí state và properties, v.v.. mà không cần phải code. Hơn nữa, Bot Framework Composer giúp bạn trực tiếp sử dụng LUIS - một dịch vụ xử lí ngôn ngữ tự nhiên (NLP) để tích hợp AI vào chatbot mà không cần phải có nhiều kinh nghiệm trong lĩnh vực này.

Bài viết này sẽ giúp bạn hiểu về Bot Framework Composer thông qua hướng dẫn tạo một chatbot đơn giản với AI.

Cài đặt

Để cài đặt Bot Framework Composer (Composer), bạn hãy làm theo tài liệu hướng dẫn này nhé.

Tóm tắt, bạn cần phải cài đặt:

  • .NET Core SDK 3.1
  • Composer application (Windows, macOS hoặc Linux)
  • Bot Framework Emulator (công cụ testing chatbot)
  • Node.js (>= 12.13.0)

Danh sách trên có thể được cập nhật khi Composer cập nhật, nên bạn hãy kiểm tra tài liệu của Composer nếu gặp trục trặc nhé.

Tạo chatbot đơn giản

Trong demo này, chúng ta sẽ xây dựng chatbot giúp xem số lượng ca nhiễm COVID của một quốc gia xác định. Thông qua hướng dẫn, bạn sẽ hiểu được cách xây dựng đoạn hội thoại, cũng như sử dụng API của bên thứ ba trong Composer.

Chúng ta sẽ sử dụng API này để làm nguồn thông tin về ca nhiễm COVID.

Chúng ta sẽ bắt đầu với việc tạo chatbot từ lựa chọn “Create from scratch”.

Tiếp theo, tạo một trigger mới cho bot.

Chọn “Unknown intent” làm kiểu trigger. Chatbot sẽ điều hướng tất cả conversation vào trigger này (vì chưa có intent nào khác).

Bước đầu trong đoạn hội thoại, chatbot sẽ giới thiệu bản thân mình, nên ta sẽ tạo “Send a response” component với thông điệp giới thiệu.

Tiếp theo, chatbot sẽ hỏi người dùng xem họ muốn xem số ca nhiễm ở quốc gia nào, nên ta sẽ tạo “Ask a question > Multi-choice” component.

Trong khung promt box, điền thông điệp hỏi người dùng về thông tin quốc gia, và cung cấp một số lựa chọn sẵn để người dùng lựa chọn.

Cấu hình “User Input” như sau:

  • Phần “Property”, nhập “conversation.country”. Kết quả người dùng nhập sẽ được lưu trong biến này.
  • Phần “List style”, chọn “suggestedAction” để người dùng xem các lựa chọn dưới dạng box.
  • Phần “Array of choices”, chọn “simple choices” và cung cấp một số mã quốc gia (theo API document).

Tiếp theo, gọi 3rd party API để lấy thông tin, ta tạo “Access external resources > Send an HTTP request” component.

Cấu hình HTTP component như bên dưới:

=> (${conversation.country} được dùng để reference tới thông tin quốc gia mà ta đã yêu cầu user chọn trước đó)

  • Result property: conversation.result (chatbot sẽ lưu kết quả trả về từ API vào biến này)

Kết quả response sẽ được lưu vào biến conversation.result. Tiếp theo, chatbot sẽ hiển thị kết quả.

Chatbot muốn hiển thị kết quả với thông điệp “There are {number of cases} in {name of country} country”. Tên của quốc gia đã được lưu trong biến conversation.country. Số lượng ca nhiễm sẽ được lấy từ thuộc tính “Cases” của object cuối cùng trong biến conversation.result.

Để hiểu rõ hơn về cấu trúc của response, bạn hãy tham khảo thêm link này.

Ta tạo “Send a response” component với nội dung như bên dưới:

“conversation.result.content” là biến chứa nội dung của response. Bọc với method json() để chuyển nội dung này thành json object. Sau đó bọc với method last() để lấy object cuối cùng. Và lấy thuộc tính Cases từ đó. Lúc này, chatbot đã có một đoạn hội thoại tương đối hoàn chỉnh. Chúng ta có thể test thử với Bot Emulator bằng cách nhấn nút “Start Bot”. Đoạn hội thoại sẽ trông như bên dưới:

Tích hợp với LUIS

Để thực hiện phần này, bạn cần phải có tài khoản Azure và dịch vụ LUIS. Để tạo dịch vụ LUIS, bạn hãy làm theo hướng dẫn ở đây nha.

Sau đó đăng kí với LUIS, chúng ta sẽ được cấp authoring key và key này sẽ được dùng cho những phần tiếp theo.

Chúng ta sẽ thêm tính năng mới cho chatbot. Ta cần chatbot phân biệt giữa “view COVID cases” với những intent khác. Để làm việc này, chúng ta sẽ cập nhật khả năng phân biệt “view COVID cases” intent cùng với “country” entity cho chatbot.

Tạo intent và entity

Vào menu “User Input”, sau đó enable chế độ Edit của dialog. Định nghĩa “country” entity và “View COVID cases” intent như bên dưới:

Định nghĩa entity bằng cách sử dụng từ khóa @, trong ví dụ này, country entity được định nghĩa theo kiểu list với nhiều pattern khác nhau để chatbot có thể phát hiện được giá trị “quốc gia” trong đoạn hội thoại.

Định nghĩa intent bằng cách sử dụng từ khóa @ và cung cấp nhiều thông điệp mẫu cho bot để nhận diện intent này. Entity cũng có thể được dùng chung trong các thông điệp mẫu để tăng tính linh hoạt cho bot. Trong ví dụ, sẽ có 3 mẫu thông điệp. Trong thực tế, mỗi intent cần có khoảng 25 mẫu để đáp ứng được việc xử lí ngôn ngữ của người dùng.

Thay đổi trigger type

Sau khi tạo intent và entity, chúng ta cần thay đổi trigger type của dialog từ “Unknown Intent” thành defined intent (View-COVID-cases). Vì trigger type của dialog không thể thay đổi sau khi tạo, ta sẽ tạo một trigger mới như bên dưới:

Tiếp theo, ta quay lại dialog cũ, chọn tất cả component đã tạo, sau đó chọn Edit > Copy.

Trong dialog mới, dán đoạn hội thoại vào:

Cập nhật đoạn hội thoại sử dụng intent và entity

Sau khi tích hợp với LUIS, thông điệp của người dùng sẽ được phân tích tự động bởi LUIS, kết quả (gồm intent, các entity) sẽ được lưu vào biến trả về. Ví dụ, kết quả quốc gia country sẽ được lưu vào turn.recognized.entities.country.

Vì turn.recognized.entities.country là một mảng (theo format của LUIS), ta cần cập nhật đoạn hội thoại như bên dưới:

Giải thích:

Đoạn hội thoại đã được cập nhật để tương tác với kết quả từ LUIS. Khi ta khởi động bot, ta sẽ được hỏi về key của LUIS.

Đoạn hội thoại sẽ được cập nhật như bên dưới:

Một số tính năng khác

Cải thiện response bằng cách sử dụng template

Hiện tại, response của chatbot được định nghĩa trong “Send a response” component như bên dưới:

Ta sẽ cải thiện cách hiển thị bằng cách dùng tên quốc gia thay cho mã quốc gia (mà ta dùng để gọi API). Bên cạnh đó, ta sẽ cập nhật response method để tăng tính đa dụng và tái sử dụng bằng cách dùng message template.

Đầu tiên, định nghĩa 2 message template “DisplayResult” và “DisplayCountry” trong Bot Responses menu như bên dưới:

  • DisplayCountry template nhận mã quốc gia, và trả về tên quốc gia tương ứng
  • DisplayResult template nhận số lượng ca nhiễm và mã quốc gia, và trả về thông điệp

Tiếp theo, cập nhật “Send a response” component để sử dụng nhưng template này:

Đoạn hội thoại của Bot sẽ được cập nhật:

Triển khai (Deployment)

Composer hỗ trợ nhiều phương pháp triển khai cho chatbot.

Triển khai trên Azure WebApp / Azure Functions

Kiểu triển khai này cần phải có Azure account. Vào Publish menu, sau đó tạo publish profile với destination type phù hợp (WebApp hoặc Functions). Cần cấu hình thêm một số external services được sử dụng trong chatbot. Sau khi cấu hình, lưu publish profile và nhấn “Publish to selected profile” để publish chatbot trên Azure.

Để tham khảo thêm, bạn hãy xem tài liệu ở đây.

Triển khai trên local server / Triển khai sử dụng Docker

Bot có thể được khởi động ở local server trực tiếp bằng cách sử dụng Composer (như ta đã làm ở những bước trước, phương pháp này phù hợp khi triển khai Bot cho một số ít người dùng). Vì Composer có thể chạy được với nhiều OS, bạn có thể host chatbot ở nhiều loại server bạn muốn.

Hiện tại, Composer hỗ trợ 2 loại runtime là C# và JS. Runtime có thể được cấu hình trong Setting menu.

Ví dụ như bạn chọn JS, thư mục “runtime” sẽ được tải về trong bot project. Thư mục này sẽ chứa một Node project cần thiết để khởi động chatbot. Bạn có thể khởi động Node project này để khởi động bot bằng tay hoặc dựng CI/CD cho project. Bạn cũng có thể tạo Docker image cho bot server.

Trải nghiệm

Theo ý kiến riêng của mình, Bot Composer có những điểm ưu như sau:

  • Dễ cài đặt. Dễ sử dụng. Low-code.
  • Nhiều tài liệu để tham khảo.
  • Thường xuyên cập nhật cải tiến và thêm các tính năng mới

Trong quá trình sử dụng, mình cũng đã gặp một số vấn đề. Đầu tiên là việc triển khai trên Azure cần có kĩ năng giải quyết vấn đề trên Azure. Bên cạnh đó, có rất nhiều tính năng nâng cao cần tìm hiểu để lựa chọn phương pháp giải quyết phù hợp cho nhu cầu của bài toán.

Tuy nhiên, khi đã quen với việc sử dụng Composer thì việc tạo đoạn hội thoại sẽ trở nên đơn giản. Nhờ đó mà mình có thể tập trung để phát triển các thành phần khác trong hệ thống.

Vẫn còn nhiều tính năng của Bot Composer mà mình chưa giới thiệu hết được. Bạn có thể tự mình khám phá thêm để hành trình tạo ra trợ lí ảo cho riêng mình thêm phần thú vị nha. Hy vọng bạn đã thấy việc tạo chatbot trở nên đơn giản hơn nhờ Bot Composer.

Atekco - Home for Authentic Technical Consultants