Một chatbot để kiểm soát nội dung
Trong bài viết này, tôi đang tập hợp một chatbot cho Kiểm soát tài sản như một dự án nhỏ thú vị. Tại sao? Bởi vì tôi đã muốn triển khai một chatbot trong một thời gian - nếu chỉ để hiểu cách làm điều đó - và làm như vậy trong miền AC dường như là điều đương nhiên. Tôi cũng sẽ tích hợp nó với Slack để xem cách này có thể phù hợp với các công cụ và quy trình làm việc hiện có của tôi như thế nào.
Một chatbot để làm gì?
Bây giờ bạn sẽ bắt gặp chatbot ở nhiều nơi. Họ có thể có trên các trang web của công ty và giúp bạn trả lời các câu hỏi thường gặp, cho phép bạn đặt chỗ, v.v.
Trong trường hợp này, tôi muốn triển khai một nguyên mẫu của một chatbot để tích hợp với Slack cho phép tôi giao tiếp với Kiểm soát nội dung. Tôi có thể muốn hỏi nó để biết thông tin trạng thái của AC env của tôi hoặc yêu cầu dữ liệu.
Để hướng dẫn việc triển khai, tôi đã sử dụng các câu hỏi sau mà bot có thể trả lời:
- Giá cuối cùng cho XYZ là bao nhiêu?
- Mức cao nhất trong tháng này đối với XYZ là bao nhiêu?
- Có bao nhiêu nghi phạm ngày nay?
- Nhân rộng có được cập nhật không?
Vì vậy, chúng tôi đang triển khai bot từ đầu? Dĩ nhiên là không. Có một số giải pháp hiện có và tôi đã nhanh chóng chuyển sang sử dụng Google Dialogflow. Hãy xem cách này hoạt động như thế nào.
Xây dựng bot trong Dialogflow
Để xây dựng bot của chúng tôi trong Google Dialogflow, chúng tôi cần hiểu một số khái niệm:
- Ý định
- Thực thể
- Sự hoàn thành
Một ý định bao gồm mọi thứ thuộc về một chủ đề được xác định hẹp nhất định mà bot sẽ xử lý. Trong trường hợp của chúng tôi, đó là truy xuất giá cuối cùng có sẵn của một cổ phiếu từ hệ thống của chúng tôi. Chúng tôi sẽ sử dụng Dialogflow để huấn luyện bot hiểu khi nào cuộc trò chuyện có ý định như vậy bằng cách đưa ra các cụm từ huấn luyện. Chúng tôi sẽ thấy điều đó trong một phút.
Sau đó, các thực thể đang xây dựng các khối tạo nên cuộc trò chuyện của chúng ta và được quan tâm đặc biệt để chúng ta muốn lấy chúng làm tham số. Bây giờ, trong trường hợp của chúng ta, đó sẽ là biểu tượng mã AAPL khi chúng ta đặt câu hỏi "Giá cuối cùng cho AAPL là bao nhiêu?"
Cuối cùng, khái niệm thực hiện cho phép chúng tôi tiếp cận với các dịch vụ ở phía sau chatbot thông qua webhooks. Đó là chúng tôi sẽ liên lạc với Kiểm soát tài sản để truy vấn cổ phiếu nhất định và truy xuất giá khả dụng cuối cùng.
Bây giờ hãy xây dựng bot của chúng tôi.
Bước 1: Thiết lập bot của bạn.
Hướng tới https://dialogflow.cloud.google.com/#/login và đăng nhập. Sau đó, tạo một Đại lý AcChatBot:
Bước 2: Tạo một thực thể Cổ phiếu
Từ menu bên trái, nhấp vào Dấu cộng bên cạnh Thực thể, gọi nó là Cổ phiếu và nhập [A-Z][A-Z0-9]{1,6}
dưới dạng biểu thức chính quy. Mặc dù không hoàn toàn phù hợp với các biểu tượng mã, nhưng nó là đủ cho ví dụ của chúng tôi và hoạt động với việc kiểm tra các biểu thức chính quy do chính Dialogflow thực hiện (ví dụ: không quá rộng, v.v.). Sau đó, lưu nó.
Bước 3: Tạo ý định giá cuối cùng
Thời gian cho ý định giá cuối cùng của chúng tôi. Một lần nữa, từ menu bên trái, chọn Dấu cộng bên cạnh Ý định, gọi nó Last price
và nhấp vào THÊM PHRASING:
Nhập What is the last price for AAPL?
. Sau đó, đánh dấu AAPL
bằng chuột của bạn. Điều này sẽ hiển thị một cửa sổ bật lên. Tìm kiếm Stock
, sau đó chọn tùy chọn được trình bày:
Nếu thực hiện đúng, kết quả sẽ giống như thế này để đảm bảo rằng Dialogflow nắm bắt chính xác thực thể Stock:
QUAN TRỌNG! Sau đó cuộn xuống, mở phần Fulfillment, nhấp vào Enable Fulfillment và sau đó chuyển đổi để Enable webhook call for this intent
thích:
Điều này cho phép chúng tôi gọi chức năng phụ trợ của riêng mình và giao tiếp với Kiểm soát nội dung.
Đảm bảo lưu ý định trước khi tiếp tục.
Bước 4: Triển khai dịch vụ REST để truy xuất dữ liệu Kiểm soát nội dung
Một lần nữa, có nhiều cách để làm điều này. Chúng tôi sẽ sử dụng Spring Boot vì nó thực hiện tất cả các công việc nặng nhọc đối với chúng tôi và chúng tôi ở lại Java và do đó có thể sử dụng ngay lập tức cùng một API Java Kiểm soát nội dung mà Adetta sử dụng.
Nếu bạn chưa biết, Adetta là phần mềm tự động thử nghiệm của chúng tôi dành cho Kiểm soát nội dung. Đảm bảo bạn đã xem phần Giới thiệu về Adetta tại đây .
Bit thú vị là một lớp AcBotController
và handleIntent
phương thức của nó như hình dưới đây:
Bạn có thể thấy rằng webhook để thực hiện Dialogflow đang xử lý một yêu cầu ĐĂNG. Cả đầu vào và đầu ra của nó đều là JSON. Và chúng tôi sử dụng GoogleCloudDialogflowV2Webhook*
các lớp để xử lý cả JSON yêu cầu và phản hồi cho chúng tôi.
Việc xử lý thực tế của ý định được chuyển cho một AcBotIntentHandler mà chúng tôi nhận được từ việc gọi AcBotIntents.getHandlerFor(request)
. Hãy nhìn vào lớp học này:
Chúng tôi xây dựng một ánh xạ các ý định đến các trình xử lý (có nhớ Last price
ý định của chúng tôi không?) Và triển khai một phương thức để truy xuất một trình xử lý phù hợp với ý định được mã hóa trong đối tượng yêu cầu. Chúng tôi cũng xác định một trình xử lý mặc định trong trường hợp chúng tôi không thể tìm thấy một trình xử lý thực tế:
Bây giờ, để có được mức giá cuối cùng của chúng tôi cho một cổ phiếu nhất định, hãy xem AcBotLastPriceIntentHandler
:
Bạn thấy cách chúng tôi truy xuất thông số thực thể Stock của chúng tôi từ đối tượng yêu cầu bằng cách sử dụng request.getQueryResult().getParameters().getOrDefault("Stock", "")
và sau đó gọi getLastPriceMessageForStock
như được hiển thị ở đây:
Chúng tôi đề phòng giá trị cổ phiếu bị thiếu. Nếu không, chúng tôi duyệt qua hệ thống Kiểm soát tài sản của chúng tôi cho các cổ phiếu có mã đã cho. Trong trường hợp chúng tôi không có bất kỳ ADO nào như vậy, chúng tôi sẽ hiển thị thông báo tương ứng. Nếu không, chúng tôi tiếp tục truy xuất dữ liệu định giá cho mỗi ADO mà chúng tôi đã tìm thấy (trong khi đó chỉ nên là một ADO duy nhất, việc triển khai sẽ chỉ trả lại nhiều thông báo nếu cần).
Đây là cách chúng tôi tìm giá cuối cùng:
Chúng tôi tải thời gian của ADO, lấy bản ghi cuối cùng và - nếu có - tạo một thông báo sẽ đọc là The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00
. Và một lần nữa, chúng tôi đề phòng những trường hợp không tìm được giá.
Sử dụng Spring Boot, chúng tôi có thể kích hoạt điều này và có dịch vụ REST của chúng tôi chạy trên localhost: 8080 / ac-bot. Tiếp theo là gì?
Vâng, rõ ràng là chúng tôi đang gian lận một chút vì chúng tôi không triển khai dịch vụ này ở bất kỳ đâu, vì vậy để cung cấp dịch vụ từ bên ngoài, chúng tôi sẽ sử dụng ngrok để thiết lập một đường hầm cho chúng tôi:
Bước 5: Thiết lập webhook thực hiện của riêng chúng tôi
Tiếp theo, chúng tôi phải cho Dialogflow biết dịch vụ REST của chúng tôi ở đâu, vì vậy hãy quay lại đó và nhấp vào Thực hiện từ menu bên trái:
Sau đó nhập https://...
địa chỉ do ngrok cung cấp và đảm bảo rằng bạn thêm địa chỉ /ac-bot
vào cuối.
Ok, khoảnh khắc của sự thật. Ở góc trên cùng bên phải nơi có thông báo Try it now
, chúng ta có thể nhập What is the last price for AAPL?
và nếu mọi thứ hoạt động tốt, chúng ta sẽ nhận được câu trả lời sau:
Thật là thú vị!
Bước 6: Tích hợp chatbot của chúng tôi với Slack
Bây giờ, chúng tôi sẽ không tiếp tục sử dụng bảng điều khiển Dialogflow để chơi với bot của chúng tôi. Thay vào đó, chúng tôi sẽ tích hợp nó với Slack. Vì vậy, hãy chọn Tích hợp từ menu bên trái, tìm Slack và bắt đầu một bot thử nghiệm:
Sau đó, đi tới Slack và bắt đầu trò chuyện với bot:
Sau đó, chúng ta có thể lặp lại chu trình để triển khai các câu hỏi / ý định khác được nêu ở đầu bài viết.
Chốt lời
Tôi nghĩ rằng đó là niềm vui để làm. Và dễ dàng hơn tôi nghĩ. Tất nhiên, tôi đã đi một số đường tắt:
- Chỉ chạy dịch vụ cục bộ.
- Không cân nhắc về bảo mật, kiểm soát truy cập và lựa chọn môi trường Kiểm soát tài sản.
- Sử dụng bot rất hạn chế.
Tôi hy vọng bạn thích bài viết này. Hãy liên hệ để chia sẻ suy nghĩ của bạn, đặt câu hỏi, v.v. Chúng tôi sẵn sàng trợ giúp.