Dialogflow – Đưa Chatbot dự báo thời tiết lên tầm cao mới (phần 1)

422

Trong bài viết đầu tiên, tôi đã giới thiệu với chúng ta các khái niệm Agent, Intent, Entity, và ở bài viết thứ hai là cách để tạo một Chatbot dự báo thời tiết rất, rất đơn giản từ các Prebuilt Agents. Trong phần một bài viết này, tôi muốn quay lại với các khái niệm quan trọng khác trong Dialogflow bao gồm:

  1. Fulfillment
  2. Context
  3. User say
  4. Action và Parameter

Nào hãy cùng nhau bắt đầu!

Fulfillment

Như hình ở trên, trong nội dung các intents về thời tiết, phần response là hoàn toàn trống rỗng, nên mỗi khi người dùng hỏi Chatbot thì nó không có gì để trả lời lại:

Và tôi đã phải bổ sung một vài “biện pháp nghiệp vụ” (code) thì sau đó mọi thứ đã tốt hơn

Theo định nghĩa của từ điển, FULFILLMENT là danh từ có nghĩa là thực hiện, hoàn thành, đáp ứng. Trong tài liệu của Dialogflow, Fulfillment (hay Webhook) là một API ở Backend mà chúng ta cần cung cấp để Dialogflow gọi đến khi cần xử lý nghiệp vụ trước khi Dialogflow trả lời lại cho người dùng.

Tuy nhiên, với cách mà tôi đang thực hiện việc Fulfillment cho Chatbot dự báo thời tiết hoàn toàn khác với cách ở trên, cách mà tôi đang thực hiện là

Theo tôi cách thực hiện Fulfillment nào cũng có cái hay của riêng nó.

Context

Theo từ điển, CONTEXT có nghĩa là bối cảnh, ngữ cảnh, phạm vi. Lấy ví dụ trong Chatbot, người dùng vừa hỏi “Thời tiết ở Hà Nội” và đã nhận được câu trả lời, họ đặt tiếp thêm một câu hỏi nữa “Vậy ở Đà Nẵng thì thế nào?”, trường hợp nếu không có context Chatbot không thể nào hiểu được người dùng đang hỏi vấn đề gì liên quan đến Đà Nẵng, còn trường hợp có context Chatbot sẽ biết ngay người dùng đang hỏi tiếp về thời tiết của Đà Nẵng.

Trong một Intent của Dialogflow có input context và output context như hình dưới đây:

Input context có nhiệm vụ giúp Dialogflow xác định Intent này chỉ được thực hiện khi đang có các context tương ứng

Mặc định, một context của Dialogflow sẽ hết hạn sau 5 lần requests hoặc 10 phút kể từ khi nó được tạo ra. Như trong hình, số 2 ở context weather có nghĩa là context này sẽ hết hạn sau 2 lần requests (hoặc sau 10 phút)

User say

Có 2 loại user say trong Dialogflow

  • @ Là những mẫu (template) văn bản
  •  Là những ví dụ (example) mà người dùng sẽ có thể nói

Mặc dù Dialogflow hỗ trợ cả hai loại hình trên, nhưng khuyến cáo chúng ta chỉ nên sử dụng loại số 2 (example) vì nó giúp cho việc học cũng như xử lý của Dialogflow hoạt động nhanh & tối ưu hơn.

Ngoài ra, chúng ta hãy ghi nhớ khi tạo intents, nếu nhập được càng nhiều các ví dụ ở user say thì càng giúp cho Chatbot càng “thông minh” hơn.

Action và Parameter

Trong source code Chatbot dự báo thời tiết củ chuối lần trước, nếu người dùng gửi nội dung không liên quan đến thời tiết thì luôn gặp lỗi

(Chắc có vài bạn đọc đã *b*e*e*p* rồi đúng không nào?!)

Lý do là tôi đã luôn cho rằng mọi văn bản mà người dùng đưa vào đều là hỏi thời tiết mà bỏ qua việc kiểm tra.

Action (hành động) chính là giá trị mà Dialogflow hỗ trợ để giúp lập trình phân biệt được trong trường hợp này đâu là các văn bản liên quan đến thời tiết và đâu là các văn bản khác. Đi kèm với Action là các Parameter (tham số)

Mỗi tham số là giá trị được trích xuất từ văn bản của người dùng thông qua việc sử dụng các entities tương ứng, ví dụ:

  • Tham số address, kiểu @sys.location, khi đó, trong văn bản của người dùng có Hà Nội, hay Đà Nẵng, Tokyo, New York, Paris,… thì sẽ được Dialogflow xử lý để gán vào cho tham số address
  • Tham số date-time, kiểu @sys.date-time, khi đó, trong văn bản của người dùng mà có Ngày mai, Thứ 6 này, Tuần tới,… thì sẽ được Dialogflow xử lý để gán vào cho tham số date-time

Khi định nghĩa các tham số, có các thông tin mà chúng ta cần quan tâm (^^ Để ý nhé)

  • Constant: Là giá trị mà chúng ta nhập vào ô value, tham số sẽ luôn luôn mang giá trị này
  • Default: Là giá trị mặc định được gán cho tham số nếu trong văn bản của người dùng không đề cập đến
  • IsList: Ví dụ người dùng hỏi thời tiết của Hà Nội, Đà Nẵng và Paris ngay trong một văn bản, thì IsList giúp Dialogflow xác định cả 3 giá trị sẽ được gán vào cho cùng 1 tham số
  • Required: Khi required được lựa chọn, nếu trong văn bản của người dùng mà Dialogflow không tìm được giá trị để gán vào cho tham số, Dialogflow sẽ đánh dấu để yêu cầu người dùng đưa vào.
    • Ví dụ tham số address là required, nhưng người dùng chỉ nhập vào là: Ngày mai thời tiết thế nào? Thì Dialogflow sẽ đánh dấu văn bản này chưa đầy đủ, còn thiếu địa chỉ.

Bắt đầu thấy rối rồi! Tập trung nhé, vì các tham số là cái mà chúng ta sẽ lập trình để xử lý. Sai con toán là bán luôn cái máy tính…

  • Kiểu @sys.date rất đặc biệt, khi văn bản của người dùng có ngày không đầy đủ, ví dụ Thứ 6, hay ngày 2 tháng 3,… thì Dialogflow sẽ tìm ngày trong tương lai gần nhất với văn bản. Tuy nhiên, bạn có thể chỉ định thêm các thông tin như:
    • $date.recent, trường hợp này Dialogflow sẽ tìm ngày gần nhất trong quá khứ
    • $date.partial, trường hợp này Dialogflow sẽ trả về dữ liệu ngày mà không có những thông tin thiếu, ví dụ ngày 2 tháng 3 thì Dialogflow sẽ trả về giá trị “UUUU-03-02”

Khi backend của bạn xử lý các tham số, sẽ có những trường hợp

  • Original: Ví dụ tham số của bạn kiểu @sys.number, khi người dùng nói “Hai” thì giá trị bạn nhận được là số 2, còn giá trị ở original vẫn là chuỗi “Hai”
  • Để lấy một tham số đã được lưu ở context thì sử dụng cách #context_name.parameter_name

Nguồn: Dialogflowvn