Vào một ngày đẹp nhất trời và chán nản. Tôi lang thang trên các diễn lũ về Tech và đọc được một post về chat bot nó có cái brand name nghe tương đối là simple tuy thế cực có lợi với mọi thanh niên ao ước tiếp cận cùng với "chat bot".
Bạn đang xem: Cách tạo chatbot bằng Python

Đôi đường nét về Chatter
Bot
Chatter
Bot là một thư viện Python giúp cho bạn tạo ra một chat bot có khả năng trả lời auto từ input đầu vào của người dùng. Chatter
Bot thực hiện thuật toán lựa chọn của sản phẩm học để tạo nên các nhiều loại Response không giống nhau. Điều này giúp những nhà phạt triển dễ dàng tạo những chatbot có chức năng trò chuyện và auto hóa cuộc hội thoại với những người dùng. Để biết thêm chi tiết về các ý tưởng phát minh và khái niệm phía sau Chatter
Bot hãy coi Process Flow Diagram (Sơ trang bị luồng xử lý ở mặt dưới).
Một ví dụ cho một cuộc đối thoại giữa người và bot:
user: Good morning! How are you doing?bot: I am doing very well, thank you for asking.user: You"re welcome.bot: vị you lượt thích hats?Độc lập Ngôn ngữ
Thiết kế Độc lập ngôn ngữ của Chatter
Bot cho phép nó được đào tạo và giảng dạy để rất có thể nói bất kể ngôn ngữ nào. Xung quanh ra bản chất Machinelearing của Chatter
Bot chất nhận được một Instance là tác nhân nâng cao kiến thức của chính nó về các phản ứng có thể có khi nó địa chỉ với con fan và từ các nguồn dữ liệu khác.
Cách Chatter
Bot hoạt động
Chatter
Bot là 1 thư viện Python có thiết kế để giúp dễ dàng tạo 1 phần mềm cơ mà ở đó nó rất có thể tham gia vào việc giao tiếp hay có cách gọi khác là chatbot.
Một instance của Chatter
Bot chưa được train, start mà chưa có kiến thức về cách giao tiếp. Từng khi người tiêu dùng nhập một statement, thư viện đã lưu văn phiên bản mà họ đang nhập với văn bạn dạng mà bot phản hồi lại. Khi con số input nhưng Chatter
Bot nhận được tăng thì con số các response mà nó rất có thể trả lời tương tự như độ đúng mực của từng response có tương quan đến input statement đó cũng tăng theo.
Chương trình này chắt lọc response tương xứng nhất bằng phương pháp tìm tìm statement sẽ biết sát nghĩa độc nhất vô nhị với input đầu vào statement, tiếp đến nó chọn 1 response từ những response đang biết của statement đó. (Cái này khá giống với phầm mềm Simimi)
Process Flow Diagram

Cài đặt
Chú ý phải các các thư viện hỗ trợ:
tensorflownumpypandassklearnimutilsNếu bạn mới ban đầu với Chatter
Bot, chúng ta nên thiết đặt phiên bản mới nhất của chính nó từ Python Package Index (Py
Pi), để setup Chatter
Bot bằng pip, bạn sử dụng lệnh sau trong Terminal.
pip install chatterbotCài để từ Git
Hub
Bạn gồm thể setup phiên phiên bản development tiên tiến nhất của Chatter
Bot trực tiếp từ Git
Hub bằng cách sử dụng pip:
pip install git+git://emcanbaove.edu.vn.com/gunthercox/Chatter
Bot.git
masterCài đặt từ Source
Tải về bạn dạng sao của code bên trên Git
Hub. Bạn phải cài đặt git để gia công điều này.
git clone https://emcanbaove.edu.vn.com/gunthercox/Chatter
Bot.git
Cài để code mà chúng ta vừa tải bằng phương pháp sử dụng pip
pip install ./Chatter
Bot
Kiểm tra phiên bản Chatter
Bot mà chúng ta vừa download đặt
Bạn thực hiện lệnh sau để soát sổ phiên bạn dạng của Chatter
Bot vừa new cài đặt.
python -m chatterbot --version
Nâng cấp Chatter
Bot lên phiên phiên bản mới nhất
Giống như bất kể phần mượt nào, Chatterbot đã được đổi mới theo thời gian. Thường xuyên thì, bạn không phải thay đổi bất kể điều gì trong code của bản thân để hưởng lợi từ phiên bản mới.
Đôi khi, có những biến đổi sẽ yêu mong sửa thay đổi code của khách hàng hoặc sẽ sở hữu những thay đổi giúp bạn cải thiện chất lượng code của mình bằng phương pháp sử dụng những nhân kiệt mới.
Có thể coi các bạn dạng release của Chatter Bot tại đây:.https://emcanbaove.edu.vn.com/gunthercox/Chatter
Bot/releases
Một số sản phẩm cơ phiên bản ban đầu
Tạo mới một chat bot
from chatterbot import Chat
Botchatbot = Chat
Bot("Ron Obvious")Chú thích:Tham số yêu mong duy độc nhất của Chat
Bot là tên. Bạn cũng có thể đặt tên của chính nó sao cũng được. Và chúng ta cũng có thể gọi ra tên của chat bot trải qua thuộc tính name.
Training mang lại chatbot
Sau lúc tạo bắt đầu một instance Chatbot, bạn đã có thể train mang lại nó. Training là 1 trong những cách xuất sắc để đảm bảo rằng con bot của bạn khởi đầu với một lượng kỹ năng về các response mà lại nó có thể sử dụng. Cách thức training lúc này là dấn một list các statement (câu nói) trong cuộc rỉ tai thông thường. Cụ thể về phần training rất có thể mình vẫn viết trong bài bác sau.
Chatter Bot này sẽ có một vài bộ ngữ điệu nên chúng ta cũng có thể sử dụng luôn mà không cần phải training lại. Tuy vậy với tiến Vieetjj thì chắc yêu cầu training đấy.
Một lấy ví dụ nho nhỏ tuổi cho việc training bé bot này:
from chatterbot.trainers import List
Trainer conversation = < "Hello", "Hi there!", "How are you doing?", "I"m doing great.", "That is good to hear", "Thank you.", "You"re welcome.">trainer = List
Trainer(chatbot)trainer.train(conversation)Để lôi ra response trả về. Ở đây tham số đầu vào là một input của người tiêu dùng và respone là câu ý kiến của bot:
response = chatbot.get_response("Good morning!")print(response) Thiết lập storage adapter
Chatter
Bot đi kèm với các adapter class tích hợp chất nhận được nó kết nối với nhiều loại database không giống nhau. Trong khuyên bảo này, sẽ sử dụng SQLStorage
Adapter được cho phép chat bot kết nối tới SQL database. Khoác định, adapter này sẽ khởi tạo một SQLite database.
Tham số database được sử dụng để chỉ định băng thông đến database nhưng mà chat bot sẽ sử dụng. Trong lấy ví dụ này, sẽ thực hiện database sqlite:///database.sqlite3. Tập tin này sẽ tiến hành tạo tự động nếu nó không tồn tại.
bot = Chat
Bot( "Norman", storage_adapter="chatterbot.storage.SQLStorage
Adapter", database_uri="sqlite:///database.sqlite3")Chú thích:
SQLStorage
Adapter là adapter mặc định của Chatter
Bot. Ví như bạn không chỉ là định một adapter nào trong constructor, adapter SQLStorage
Adapter vẫn được tự động hóa sử dụng.
Chỉ định các logic adapter
Tham số logic_adapters là một list các logic adapter. Trong Chatter
Bot, một xúc tích adapter là một trong class dấn một input atatement và trả về một response đến statement đó.
Có thể chọn thực hiện nhiều lô ghích adapter nếu như muốn (Có thể tham khảo thêm tại trang chủ của chatterbot). Trong lấy ví dụ như này, ta áp dụng hai logic adapter. Time
Logic
Adapter trả về thời hạn hiện trên khi input statement hỏi nó. Mathematical
Evaluation adapter sử dụng toán tử cơ phiên bản (cộng trừ nhân chia) để giải quyết và xử lý các vấn đề toán học.
bot = Chat
Bot( "Norman", storage_adapter="chatterbot.storage.SQLStorage
Adapter", logic_adapters=< "chatterbot.logic.Mathematical
Evaluation", "chatterbot.logic.Time
Logic
Adapter" >, database_uri="sqlite:///database.sqlite3")Training chat bot
Lúc này chat bot của doanh nghiệp – Norman đã học cách giao tiếp khi bạn nói chuyện với nó. Chúng ta có thể tăng tốc quá trình này bằng cách training nó với các ví dụ về cuộc hội thoại hiện có(như ví dụ bên trên kia). Rất có thể chạy quy trình training này các lần để củng cố những response ưa thích cho những input statement chũm thể. Bạn cũng có thể chạy lệnh train trên các cuộc đối thoại mẫu khác nhau để tăng độ rộng của các input nhưng mà chat bot của chúng ta có thể phản hồi lại. (Chi máu về thuật toán sẽ được trình bày sau)
Một số ví dụ ứng dụng Chatter Bot
Một số ví dụ
Ví dụ đối chọi giản
from chatterbot import Chat
Botfrom chatterbot.trainers import List
Trainer # Create a new chat bot named Charliechatbot = Chat
Bot("Charlie") trainer = List
Trainer(chatbot) trainer.train(< "Hi, can I help you?", "Sure, I"d like to book a flight to Iceland.", "Your flight has been booked.">) # Get a response to the đầu vào text "I would like to book a flight."response = chatbot.get_response("I would like to book a flight.") print(response)Ví dụ trên Terminal
Đoạn code này sẽ cho thấy thêm cách chế tạo một terminal client đối chọi giản cho phép bạn tiếp xúc với chat bot của mình bằng phương pháp nhập vào terminal.
from chatterbot import Chat
Bot # Uncomment the following lines lớn enable verbose logging# import logging# logging.basic
Config(level=logging.INFO) # Create a new instance of a Chat
Botbot = Chat
Bot( "Terminal", storage_adapter="chatterbot.storage.SQLStorage
Adapter", logic_adapters=< "chatterbot.logic.Mathematical
Evaluation", "chatterbot.logic.Time
Logic
Adapter", "chatterbot.logic.Best
Match" >, database_uri="sqlite:///database.db") print("Type something to lớn begin...") # The following loop will execute each time the user enters inputwhile True: try: user_input = input() bot_response = bot.get_response(user_input) print(bot_response) # Press ctrl-c or ctrl-d on the keyboard lớn exit except (Keyboard
Interrupt, EOFError, System
Exit): breakSử dụng Mongo
DB
Để khai báo mang lại Chatter
Bot thực hiện adapter này, các bạn sẽ cần để tham số storage_adapter.
Đây là code mẫu:
from chatterbot import Chat
Bot # Uncomment the following lines to lớn enable verbose logging# import logging# logging.basic
Config(level=logging.INFO) # Create a new Chat
Bot instance bot = Chat
Bot( "Terminal", storage_adapter="chatterbot.storage.Mongo
Database
Adapter", logic_adapters=< "chatterbot.logic.Best
Match" >, database_uri="mongodb://localhost:27017/chatterbot-database") print("Type something khổng lồ begin...") while True: try: user_input = input() bot_response = bot.get_response(user_input) print(bot_response) # Press ctrl-c or ctrl-d on the keyboard to exit except (Keyboard
Interrupt, EOFError, System
Exit): breakVí dụ về thời hạn và Tính toán
Chatter
Bot có khả năng đánh giá bán natural language được cho phép nó xử lý và đánh giá các đầu vào Toán học (Mathematical) và thời hạn (Time-Based) tất yếu là bởi tiếng Anh. Giờ đồng hồ việt chúng ta cần bắt buộc training
from chatterbot import Chat
Bot bot = Chat
Bot( "Math & Time Bot", logic_adapters=< "chatterbot.logic.Mathematical
Evaluation", "chatterbot.logic.Time
Logic
Adapter" >) # Print an example of getting one math based responseresponse = bot.get_response("What is 4 + 9?")print(response) # Print an example of getting one time based responseresponse = bot.get_response("What time is it?")print(response)Sử dụng SQL Adapter
Dữ liệu của Chatter
Bot hoàn toàn có thể được giữ và mang ra từ SQL database.
from chatterbot import Chat
Bot # Uncomment the following lines khổng lồ enable verbose logging# import logging# logging.basic
Config(level=logging.INFO) # Create a new instance of a Chat
Botbot = Chat
Bot( "SQLMemory
Terminal", storage_adapter="chatterbot.storage.SQLStorage
Adapter", database_uri=None, logic_adapters=< "chatterbot.logic.Mathematical
Evaluation", "chatterbot.logic.Time
Logic
Adapter", "chatterbot.logic.Best
Match" >) # Get a few responses from the bot bot.get_response("What time is it?") bot.get_response("What is 7 plus 7?")Read-only mode
Chat bot của bạn sẽ học dựa vào mỗi đầu vào statement new mà nó thừa nhận được. Nếu bạn muốn tắt thiên tài học này sau thời điểm bot của người tiêu dùng đã được train, bạn có thể truyền giá bán trị mang đến tham số readonly=True khi khởi chế tác chat bot.
chatbot = Chat
Bot("Johnny Five", read_only=True)
Tổng kết phần
Qua phần trên tôi đã trình bày một vài kiến thức cơ bạn dạng về chatter bot và một số tính năng tuyệt ho của nó. Vào phần sau mình sẽ trình bày thêm về (kỹ thuật training, xúc tích adapters, ... ) cùng tích vừa lòng vào django
Trong bài viết này mình đã hướng dẫn các bạn chi tiết sinh sản 1 botchat dễ dàng và đơn giản trên facebook sử dụng wit.ai, ngôn ngữ mình áp dụng là python với mình sử dụng heroku để triển khai server. Mình đang đi một cách cụ thể nhất rất có thể để số đông bạn do dự gì về python vẫn có thể có được thành phầm của riêng những bạn.
1. Tạo phầm mềm trên wit.ai :
Các bạn truy vấn vào trang chủ wit.ai chọn đăng nhập bởi facebook hoặc emcanbaove.edu.vn
Bạn tiếp tục chọn new phầm mềm -> nhập tên app, vào mục Visibility ghi nhớ để cơ chế Open -> Create
Nếu bạn muốn xây dựng một chatbot bởi tiếng việt thì chuyển ngữ điệu thành giờ đồng hồ Việt nhé
2. Tò mò về hình ảnh wit.ai :
Mình sẽ chia sẻ về giao diện trang chủ wit.ai

Utterance : đấy là phần câu thoại mà nhỏ bot của bạn sẽ nhận được để phân tích
Intents : Ý định của câu thoại đó
Traits : Đặc điểm của câu thoại
3. Phương pháp phân tích câu thoại :
Mình sẽ phân tích mẫu 1 câu thoại cùng training câu thoại kia để phần đa người hoàn toàn có thể dễ dàng làm sau này
ví dụ fanpage facebook mình là fanpage bán giày và mình nhận được câu hỏi là : “ chúng ta có bán giầy Nike SB kích thước UK 10 ko vậy ? “ mình vẫn hướng dẫn các bạn phân tích câu thoại này.
ở đây chúng ta thấy các từ “giày Nike SB” là sản phẩm của chính bản thân mình bán, các từ “size UK 10” là form size của giầy khách yêu cầu mua, còn sót lại 2 các từ “bạn có phân phối “ và “ ko vậy ?” là 2 cụm từ thể hiện hành vi cần cài đặt của tín đồ mua. Sau khoản thời gian phân tích được các từ trong câu ta đề xuất cho bot học nhằm hiểu, khi bot gặp mặt những trường phù hợp này bot đang biết đấy là người hỏi mua giầy Nike SB kích thước UK 10, từ đó sẽ đưa ra được câu trả lời phù hợp. Mình bước đầu dạy bot nhé :v

Học càng nhiều tài liệu thì bot của ta đang càng thông minh.
Sau khi đã triển khai xong 1 con bot vừa ý hiện nay là lúc chúng ta cần liên kết con bot cùng với fanpage bán sản phẩm của mình.Đầu tiên chúng ta vào trang web giành cho developers trên https://developers.facebook.com và đk cho bản thân 1 phầm mềm bằng facebook (phần này cũng như như wit)Sao khi xong đăng ký tại đồ họa developer ở đoạn Access tokens chúng ta chọn Add or remove pages cùng thêm fanpage của bản thân cần kết nối chat bot vào. Vậy là chấm dứt !

5. Kết nối wit cùng với fanpage bằng python :
Mình vẫn hướng dẫn các bạn sử dụng ngôn từ python để kết nối wit với fanpage.
Đầu tiên bạn cần thiết đặt 2 tủ sách wit cùng flask về máy của bản thân mình bằng các mở terminal với gõ :
Lưu ý phiên bản phải bảo đảm máy của công ty đã setup python nhé ( ví như chưa bạn có thể search google mình không thích đi thừa kỹ các cái google đã có )
Sau khi setup thành công chúng ta tạo 1 file main.py và xào luộc đoạn code này vào :
#Python libraries that we need lớn import for our botimport randomfrom flask import Flask, request, Responsefrom pymessenger.bot import Botfrom wit import Witimport requestsapp = Flask(__name__)ACCESS_TOKEN = "ACCESS_TOKEN"VERIFY_TOKEN = "VERIFY_TOKEN"WIT_TOKEN = "ACCESS_TOKEN"bot = Bot(ACCESS_TOKEN)client = Wit(access_token=WIT_TOKEN)#We will receive messages that Facebook sends our bot at this endpoint
app.route("/webhook", methods=<"GET", "POST">)def receive_message(): if request.method == "GET": """Before allowing people lớn message your bot, Facebook has implemented a verify token that confirms all requests that your bot receives came from Facebook.""" token_sent = request.args.get("hub.verify_token") return verify_fb_token(token_sent) #if the request was not get, it must be POST và we can just proceed with sending a message back to lớn user else: """ Handler for webhook (currently for postback và messages) """ data = request.json if data<"object"> == "page": for entry in data<"entry">: # get all the messages messages = entry<"messaging"> if messages<0>: # Get the first message message = messages<0> # Yay! We got a new message! # We retrieve the Facebook user ID of the sender fb_id = message<"sender"><"id"> print("fb_id :", fb_id) # We retrieve the message nội dung text = message<"message"><"text"> print("text:", text) # Let"s forward the message khổng lồ Wit /message # & customize our response to the message in handle_message response = client.message(text) handle_message(response=response, fb_id=fb_id) else: return "Received Different Event" return "Message Processed!!!"def verify_fb_token(token_sent): #take token sent by facebook và verify it matches the verify token you sent #if they match, allow the request, else return an error if token_sent == VERIFY_TOKEN: return request.args.get("hub.challenge") return "Invalid verification token"def fb_message(sender_id, text): """ Function for returning response lớn messenger """ data = "recipient": "id": sender_id, "message": "text": text # setup the query string with your PAGE TOKEN qs = "access_token=" + ACCESS_TOKEN # Send POST request khổng lồ messenger resp = requests.post("https://graph.facebook.com/me/messages?" + qs, json=data) return resp.contentdef first_trait_value(traits, trait): """ Returns first trait value """ if trait not in traits: return None val = traits
Lưu ý : chúng ta chỉ chuyển đổi 3 giá trị ACCESS_TOKEN, VERIFY_TOKEN, WIT_TOKEN. ACCESS_TOKEN chính là token bạn lấy trong https://developers.facebook.com trên mục Generate TokenVERIFY_TOKEN là mã kín đáo bạn tự tạo để liên kết đến fanpage facebook của bạn
WIT_TOKEN là token các bạn lấy vào https://wit.ai tại mục Server Access Token tại đoạn setting
6. Deploy tệp tin lên heroku:
Sau lúc đã liên kết thành công chúng ta cần deploy file đó lên server để sở hữu thể vận động được. Mình chọn heroku vì chưng nó dễ dàng deploy và nhất là nó không tính phí :v
Sau khi đk tài khoản xong các bạn vào thư mục bạn đã lưu file app.py thường xuyên tạo 1 tệp tin mới có tên là wsgi.py và sao chép đoạn code sau đây vào.
Đợi trung bình 3-5ph nhằm code của khách hàng được deploy lên server.
Sau khi deploy thành công bạn vào lại trang https://developers.facebook.com ở phần messenger chúng ta chọn setting với dán mặt đường dẫn bạn vừa deploy được vào ô Callback URL , và Verify Token là token bạn đã tạo trong code ở file main.py.
Xem thêm:
Vậy là xong, vậy là bạn đã tạo được 1 con chatbot mang lại fanpage của riêng rẽ mình. Để bé chatbot sáng dạ thì bạn phải mang đến nó học tập thật những nhé. ở đoạn hàm handle_message chúng ta modify theo mục tiêu riêng của từng các bạn nhé. Với đây là hiệu quả của mình. Chúc phần đông người thành công xuất sắc .