Từng bước tạo một Chatbot sử dụng AWS Lex và NodeJS

Trong xã hội ngày này, đặc biệt là thời đại 4.0 . Làm sao để có thể trả lời những câu đơn giản và liên tục với mọi khách hàng và người dùng ở mọi khung giờ là điều rất khó. Vì vậy chatbot được ra đời để giải quyết vấn đề đó, Sau đây chúng ta sẽ tìm hiểu chatbot là gì ? và xây dựng một chatbot NodeJS đơn giản7 min


1064
1.6k share, 1064 points

Chatbot là gì ?

Là một phần mềm máy tính giúp tương tác / nói chuyện với client TỰ ĐỘNG, 24/7.

Chatbot  là phần mềm được kết nối với app, web NodeJS,… , giúp người dùng có thể có những thông tin họ muốn.

Chatbot là một công cụ có thể giao tiếp, tương tác với con người thông qua trí tuệ nhân tạo(AI) đã được lập trình sẵn. Trong hầu hết các trường hợp thì chatbot được sử dụng qua ứng dụng nhắn tin để nói chuyện với con người.

Chatbot có thể sử dụng như một công cụ hiệu quả giúp cho việc chăm sóc khách hàng được thực hiện tự động 24/7. Trên thực tế, chatbot nhanh hơn con người trong việc đưa ra câu trả lời. Hơn nữa, với chatbot các doanh nghiệp sẽ không cần thuê nhân viên để chăm sóc khách hàng. Điều này giúp cho chi phí marketing của doanh nghiệp được giảm xuống.

Những điều cần biết về chatbot

Đầu tiên chúng nên cấu hình(config) chatbot trên AWS trước khi code bất kì thứ gì . Quá trình cấu hình sẽ thực hiện như sau:

  1. Xác định ý định để thực hiện logic phù hợp.
  2. Cung cấp các cách nói mẫu để làm cho chatbot thông minh hơn.
  3. Xác định bất kỳ thông tin được truyền vào từ client

Nếu bạn có kinh nghiệm sử dụng Alexa, một số thuật ngữ trên có thể bạn đã biết. Bất kể bạn đã làm gì với AWS Lex

Tạo chatbox đầu tiên

Trước khi config chatbot của mình, chúng tôi cần tạo nó. Từ trang AWS Lex , chọn custom bot để tạo chatbot NodeJS.

Xây dựng một Chatbots bằng AWS Lex và Nodejs
Chọn chatbot muốn tạo

Khi tạo chatbot NodeJS, hãy đặt tên cho nó, và chờ một tí.

Thiết lập những thông tin

Chúng ta cần điền những thông tin cần thiết vào chatbot mới được tạo

Xây dựng một Chatbots bằng AWS Lex và Nodejs
Điền thông tin vào chatbot vừa mối tạo

Tạo ra dòng cơ bản nhất là hỏi người tạo ra. Ở đây mình đặt tên cho nó là AboutIntent . Trong AboutIntent , chúng ta sẽ cần xác định một số cách nói mẫu, còn được gọi là cụm từ mẫu. Những cụm từ này là những câu có thể mà client có thể sử dụng khi tương tác với chatbot.

Ví dụ như sau

give me information about this bot
who made this bot

Bạn có thể nghĩ ra hết những câu dạng như thế, rất rất nhiều. AWS Lex rất thông minh và thực sự có thể học hỏi từ những câu mẫu của bạn. Điều này có nghĩa là bạn càng có nhiều câu mẫu, AWS Lex càng có thể điền vào chỗ trống nếu người dùng cung cấp những câu hỏi tương tự, những câu hỏi không có trong danh sách

Vì chưa kết nối AWS Lambda , ở đây chúng ta chọn Return parameters to client  trước khi lưu. Điều này về cơ bản sẽ cho chúng ta thấy ý định nào đã được chọn, nhưng thực tế không thực hiện bất kỳ logic nào.

Tạo thêm bot cho ý định khác

Chúng ta hãy xem một ví dụ khác về ý định.

Lần này đặt tên là FullNameIntent . Tên không quan trọng, miễn sao bạn dễ nhớ để có thể sử dụng ở AWS Lambda .

Xây dựng một Chatbots bằng AWS Lex và Nodejs
Đặt tên cho chatbot mới FullNameIntent

Tạo ra nhiều để dễ dàng biết những điều client gửi tới

Đây chỉ là một ví dụ đơn giản, nhưng chúng ta sẽ cho phép người dùng cung cấp tên đầy đủ của họ. Tất nhiên tên đầy đủ này sẽ khác nhau trên cơ sở mỗi người dùng. Vì vậy, hãy đặt tên cho nó và sau đó chọn AMAZON.Person làm loại. Tên không thực sự quan trọng miễn là bạn nhất quán

Sau đó, trong các cách nói mẫu của bạn, bao gồm các vị trí trong cách nói của bạn. Xác định một từ là một biến vị trí so với một từ thông thường có thể được xử lý bằng cách sử dụng dấu ngoặc nhọn.

Bây giờ chúng ta có hai ý định khác nhau, chúng ta có thể tập trung vào một số logic thực tế.

Phát triển Logic Chatbot với AWS Lambda và NodeJS

Khi nói đến việc xác định logic chatbot, không có gì nhiều cho nó. Chúng ta sẽ tạo ra một hàm AWS Lambda nhận dữ liệu JSON làm đầu vào. Đầu vào JSON đó sẽ chứa thông tin như mục đích đã được kích hoạt, mọi dữ liệu vị trí có sẵn, v.v. và như một phản hồi chúng ta sẽ cung cấp dữ liệu JSON đáp ứng đặc tả AWS Lex . Những gì xảy ra ở giữa là tùy thuộc vào chúng ta.

Tạo hàm để nhận request

Hãy bắt đầu bằng cách tạo một ứng dụng NodeJS đơn giản . Tạo và mở tệp index.js trên máy tính của bạn:

const dispatcher = (event) => {
    let response = {
        sessionAttributes: event.sessionAttributes,
        dialogAction: {
            type: "Close",
            fulfillmentState: "",
            message: {
                "contentType": "PlainText",
                "content": ""
            }
        }
    };
    switch(event.currentIntent.name) {
        default:
            response.dialogAction.fulfillmentState = "Failed";
            response.dialogAction.message.content = "I don't know what you're asking...";
            break;
    }
    return response;
}
exports.handler = (event, context) => {
    return dispatcher(event);
}

Đoạn code trên là điểm khởi đầu của chúng ta. Khi chức năng được thực thi, chức năngdispatcher sẽ được sử dụng. Các eventtham số sẽ chứa các dữ liệu yêu cầu rằng AWS Lex cung cấp. Nó sẽ trông giống như thế này:

{
    "messageVersion": "1.0",
    "invocationSource": "NicTest",
    "userId": "Nic",
    "sessionAttributes": {},
    "bot": {
        "name": "LexTest",
        "alias": "$LATEST",
        "version": "$LATEST"
    },
    "outputDialogMode": "Text",
    "currentIntent": {
        "name": "AboutIntent",
        "slots": {},
        "confirmationStatus": "None"
    }
}

Tất nhiên yêu cầu trên chỉ là một ví dụ, nhưng định dạng mới là vấn đề. Các JSON sẽ bao gồm tên ý và bất kỳ thông tin. Bên trong chức năng dispatcher, chúng tôi bắt đầu định dạng response trả về Response được hoàn thành sau khi đủ điều kiện của switch. Chúng tôi muốn tìm hiểu ý định được gửi trước khi trả lời.

Cải tiến hơn

Để làm cho code của chúng ta có nhiều chức năng hơn, chúng ta có thể thêm các chức năng  dispatcher sau vào chức năng của chúng ta :

const dispatcher = (event) => {
    let response = {
        sessionAttributes: event.sessionAttributes,
        dialogAction: {
            type: "Close",
            fulfillmentState: "",
            message: {
                "contentType": "PlainText",
                "content": ""
            }
        }
    };
    switch(event.currentIntent.name) {
        case "AboutIntent":
            response.dialogAction.fulfillmentState = "Fulfilled";
            response.dialogAction.message.content = "Created by hocweb";
            break;
        case "FullNameIntent":
            response.dialogAction.fulfillmentState = "Fulfilled";
            response.dialogAction.message.content = "Hello " + event.currentIntent.slots.FullName + "!";
            break;
        default:
            response.dialogAction.fulfillmentState = "Failed";
            response.dialogAction.message.content = "I don't know what you're asking...";
            break;
    }
    return response;
}

Lưu ý rằng bây giờ chúng tôi đang kiểm tra AboutIntentcũng như FullNameIntent.

Bây giờ, file index.js của chúng ta đã hoàn tất cho ví dụ cụ thể này, nó có thể được thêm vào AWS Lambda . Chọn để tạo một hàm AWS Lambda mới với Node.js . Nó không thực sự quan trọng với những gì bạn gọi nó, nhưng sau khi bạn tạo hàm, hãy thêm dòng code Nodejs.

Với code được thêm vào, bạn có thể quay lại AWS Lex và thay đổi tùy chọn Fulfillment của từng mục đích thành chức năng AWS Lambda . Chọn chức năng Lambda bạn muốn sử dụng

Lưu từng ý định của bạn, sau đó xây dựng chatbot . Bạn sẽ có thể kiểm tra từng ý định của mình để xem liệu chúng có hoạt động như mong đợi hay không.

Kết luận

Bạn vừa thấy cách xây dựng một chatbot đơn giản bằng AWS Lex , AWS Lambda NodeJS đơn giản mà không cần kết nối chatbot này với bất kỳ dịch vụ nào như Slack hoặc Twitter ! 

Hãy tham khảo thêm về NodeJS : Crawl dữ liệu website bằng NodeJS với Scotch và Express


Like it? Share with your friends!

1064
1.6k share, 1064 points

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
1
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
1
win