1. Giới thiệu

“Chatbot” đã không còn xa lạ với người dùng ngày nay. Công nghệ chatbot được ứng dụng để thực thi tác vụ khác nhau trong khắp các lĩnh vực. Chatbot hoạt động trên các mạng xã hội, các ứng dụng giao tiếp hay những công cụ cộng tác hàng ngày. Bạn đã bao giờ nghĩ về việc tự tạo ra một chatbot cho riêng mình?

Có thể bạn sẽ nghĩ rằng “tự làm chatbot thì khó lắm”, rằng “làm chatbot sẽ mất nhiều thời gian, công sức, và cả kiến thức chuyên môn”. Nhiều lí do đã cản bạn bắt đầu hành trình của mình. Vậy thì hãy để công cụ Bot Framework Composer cho bạn một khía cạnh mới về việc tạo ra chatbot. 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 3rd party service, quản lí state và properties… mà không cần 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 trí tuệ nhân tạo (AI) vào chatbot mà bạn 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.

2. Cài đặt

Để cài đặt Bot Framework Composer (Composer), hãy theo tài liệu hướng dẫn https://docs.microsoft.com/en-us/composer/setup-yarn

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)
  • js (>= 12.13.0)

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

3. 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 3rd party API trong Composer.

Chúng ta sẽ sử dụng API https://documenter.getpostman.com/view/10808728/SzS8rjbc để 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ạp “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:

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, hãy tham khảo https://api.covid19api.com/total/dayone/country/vietnam/status/confirmed).

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:

4. 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, hãy làm theo hướng dẫn in https://www.luis.ai/.

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

Chúng ta sẽ thêm tính năng mới cho chatbot. Chúng 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.

4.1 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.

4.2 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:

4.3 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, và kết quả (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:

Đ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:

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

5.1 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:

5.2 Triển khai (Deployment)

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

1. 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, hãy xem tài liệu https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-deploy-az-cli.

2. 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: 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.

6. Trải nghiệm

Theo ý kiến riêng của tôi, 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, tôi cũng đã gặp các vấn đề như:

  • Việc triển khai trên Azure cần có kĩ năng giải quyết vấn đề trên Azure
  • 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

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

7. Kết luận

Thông qua bài viết, tôi hy vọng chatbot sẽ trở nên đơn giản và phù hợp hơn để bạn bắt đầu tạo chatbot. Vẫn còn nhiều tính năng của Bot Composer mà tôi chưa giới thiệu hết được. Nhưng hãy để những tính năng này trở thành điều thú vị cho bạn khám phá trên hành trình tạo ra trợ lí ảo cho riêng mình.

Trần Gia Quốc Hưng – Ban Giải pháp và Công nghệ, FPT Software

Tin liên quan: