Chatbot สำหรับการควบคุมสินทรัพย์
ในบทความนี้ฉันกำลังรวบรวม chatbot สำหรับการควบคุมสินทรัพย์เป็นโปรเจ็กต์เล็ก ๆ ที่สนุกสนาน ทำไม? เนื่องจากฉันต้องการใช้งาน chatbot มาระยะหนึ่งแล้ว - หากเพียงเพื่อเข้าใจวิธีการทำเช่นนั้น - และการทำเช่นนั้นในโดเมน AC ก็ดูเป็นธรรมชาติ ฉันจะรวมเข้ากับ Slack เพื่อดูว่าสิ่งนี้จะเข้ากับเครื่องมือและเวิร์กโฟลว์ที่มีอยู่แล้วได้อย่างไร
แชทบอททำอะไร?
ตอนนี้คุณจะเจอแชทบอทในหลาย ๆ ที่ พวกเขาอาจอยู่ในเว็บไซต์ของ บริษัท และช่วยให้คุณได้รับคำตอบสำหรับคำถามที่พบบ่อยอนุญาตให้คุณทำการจอง ฯลฯ
ในกรณีนี้ฉันต้องการใช้ต้นแบบของ chatbot เพื่อผสานรวมกับ Slack ที่ช่วยให้ฉันสื่อสารกับ Asset Control ได้ ฉันอาจต้องการขอข้อมูลสถานะของ AC env หรือขอข้อมูล
เพื่อเป็นแนวทางในการใช้งานฉันใช้คำถามต่อไปนี้ที่บอทควรจะตอบได้:
- XYZ ราคาสุดท้ายคือเท่าไร?
- เดือนนี้ XYZ สูงแค่ไหน?
- วันนี้มีผู้ต้องสงสัยกี่คน?
- การจำลองแบบทันสมัยหรือไม่
ดังนั้นเรากำลังใช้บอทตั้งแต่เริ่มต้นหรือไม่? ไม่แน่นอน มีวิธีแก้ปัญหามากมายและฉันก็ตัดสินใจอย่างรวดเร็วสำหรับ Google Dialogflow ลองดูวิธีการทำงานนี้
การสร้างบอทใน Dialogflow
ในการสร้างบอทของเราในGoogle Dialogflowเราจำเป็นต้องเข้าใจแนวคิดบางประการ:
- เจตนา
- เอนทิตี
- การปฏิบัติตาม
Intent จะรวมทุกอย่างที่เป็นของหัวข้อที่กำหนดไว้อย่างแคบซึ่งบอทควรจัดการ ในกรณีของเรานั่นคือการดึงราคาล่าสุดที่มีอยู่ของหุ้นออกจากระบบของเรา เราจะใช้ Dialogflow เพื่อฝึกบอทให้เข้าใจเมื่อการสนทนาเกี่ยวกับเจตนาดังกล่าวโดยให้วลีฝึกอบรมแก่เขา เราจะเห็นว่าในไม่กี่นาที
จากนั้นเอนทิตีจะเป็นหน่วยการสร้างที่ประกอบกันเป็นบทสนทนาของเราและมีความสนใจเป็นพิเศษเพื่อที่เราจะจับมันเป็นพารามิเตอร์ ตอนนี้ในกรณีของเราที่จะเป็นสัญลักษณ์ AAPL เมื่อเราถามคำถามว่า "ราคาสุดท้ายของ AAPL คือเท่าไร"
สุดท้ายแนวคิดการเติมเต็มช่วยให้เราสามารถเข้าถึงบริการที่ด้านหลังของแชทบอตผ่านเว็บฮุก นั่นคือเราจะสื่อสารกับการควบคุมสินทรัพย์เพื่อค้นหาหุ้นที่ระบุและเรียกราคาล่าสุดที่มี
ตอนนี้มาสร้างบอทของเรา
ขั้นตอนที่ 1: ตั้งค่าบอทของคุณ
มุ่งหน้าไปที่ https://dialogflow.cloud.google.com/#/login และลงชื่อเข้าใช้จากนั้นสร้าง Agent AcChatBot:
ขั้นตอนที่ 2: สร้างเอนทิตีหุ้น
จากเมนูทางด้านซ้ายให้คลิกบวกถัดจากเอนทิตีเรียกว่าหุ้นและป้อน[A-Z][A-Z0-9]{1,6}
เป็นนิพจน์ทั่วไป แม้ว่าจะไม่ตรงทั้งหมดสำหรับสัญลักษณ์สัญลักษณ์ แต่ก็เพียงพอสำหรับตัวอย่างของเราและใช้ได้กับการตรวจสอบนิพจน์ทั่วไปที่ดำเนินการโดย Dialogflow เอง (เช่นไม่กว้างเกินไปเป็นต้น) จากนั้นบันทึก
ขั้นตอนที่ 3: สร้างเจตนาราคาสุดท้าย
ถึงเวลาสำหรับเจตนาราคาสุดท้ายของเรา อีกครั้งจากเมนูทางด้านซ้ายให้เลือกเครื่องหมายบวกที่อยู่ถัดจากเจตนาเรียกมันLast price
แล้วคลิกเพิ่มวลีการฝึกอบรม:
What is the last price for AAPL?
เข้าสู่ จากนั้นไฮไลต์AAPL
ด้วยเมาส์ของคุณ จะมีป๊อปอัปขึ้นมา ค้นหาStock
จากนั้นเลือกตัวเลือกที่นำเสนอ:
หากทำถูกต้องผลลัพธ์จะมีลักษณะดังนี้เพื่อให้แน่ใจว่า Dialogflow จับเอนทิตี Stock ได้อย่างถูกต้อง:
สำคัญ! จากนั้นเลื่อนลงเปิดส่วน Fulfillment คลิก Enable Fulfillment จากนั้นสลับตามEnable webhook call for this intent
ต้องการ:
ซึ่งทำให้เราสามารถเรียกใช้ฟังก์ชันแบ็กเอนด์ของเราเองและสื่อสารกับการควบคุมสินทรัพย์ได้
อย่าลืมบันทึกเจตนาก่อนดำเนินการต่อ
ขั้นตอนที่ 4: ใช้บริการ REST เพื่อดึงข้อมูลการควบคุมสินทรัพย์
อีกครั้งมีหลายวิธีในการทำเช่นนี้ เราจะใช้ Spring Boot เหมือนเป็นการยกของหนักสำหรับเราและเราอยู่ใน Java ดังนั้นจึงสามารถใช้งาน Asset Control Java API เดียวกันกับที่Adettaใช้ได้ทันที
หากคุณยังไม่รู้ Adetta คือซอฟต์แวร์ทดสอบอัตโนมัติสำหรับการควบคุมสินทรัพย์ ให้แน่ใจว่าจะมีลักษณะที่เป็นที่รู้เบื้องต้นเกี่ยวกับ Adetta ที่นี่
บิตที่น่าสนใจคือคลาสAcBotController
และhandleIntent
วิธีการดังที่แสดงด้านล่าง:
คุณจะเห็นได้ว่า webhook สำหรับการดำเนินการ Dialogflow กำลังจัดการคำขอ POST ทั้งอินพุตและเอาต์พุตคือ JSON และเราใช้GoogleCloudDialogflowV2Webhook*
คลาสเพื่อจัดการทั้งคำขอและการตอบกลับ JSON ให้เรา
การจัดการที่แท้จริงของความตั้งใจที่จะถูกส่งไปยัง AcBotIntentHandler AcBotIntents.getHandlerFor(request)
เราได้รับจากการโทร ลองดูคลาสนี้:
เราสร้างการแมปของ Intent ไปยังตัวจัดการ (จำLast price
เจตนาของเราได้หรือไม่) และใช้วิธีการดึงตัวจัดการที่เหมาะสมตามเจตนาที่เข้ารหัสในอ็อบเจ็กต์คำขอ นอกจากนี้เรายังกำหนดตัวจัดการเริ่มต้นในกรณีที่เราไม่พบตัวจัดการจริง:
ตอนนี้เพื่อรับราคาสุดท้ายของเราสำหรับหุ้นที่กำหนดให้ดูที่AcBotLastPriceIntentHandler
:
คุณสามารถดูวิธีที่เราดึงพารามิเตอร์ Stock entity ของเราจากออบเจ็กต์คำขอโดยใช้request.getQueryResult().getParameters().getOrDefault("Stock", "")
แล้วเรียกgetLastPriceMessageForStock
ตามที่แสดงที่นี่:
เราป้องกันตัวเองจากมูลค่าหุ้นที่ขาดหายไป มิฉะนั้นเราจะเรียกดูระบบการควบคุมสินทรัพย์ของเราเพื่อหาหุ้นที่มีสัญลักษณ์ที่กำหนด ในกรณีที่เราไม่มี ADO ดังกล่าวเราจะแสดงข้อความที่เกี่ยวข้อง มิฉะนั้นเราจะยังคงดึงข้อมูลราคาสำหรับ ADO แต่ละรายการที่เราพบ (ในขณะที่ควรเป็น ADO เดียวการใช้งานจะส่งคืนข้อความหลายข้อความหากจำเป็น)
นี่คือวิธีที่เราค้นหาราคาล่าสุด:
เราโหลด timeseries ของ ADO ที่ได้รับการบันทึกที่ผ่านมาและ - ถ้าปัจจุบัน - The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00
สร้างข้อความที่จะอ่านเป็น และอีกครั้งที่เราป้องกันตัวเองจากกรณีที่เราไม่สามารถหาราคาได้
การใช้ Spring Boot เราสามารถเริ่มต้นสิ่งนี้และให้บริการ REST ของเราทำงานบน localhost: 8080 / ac-bot อะไรต่อไป?
เห็นได้ชัดว่าเรากำลังโกงเล็กน้อยเนื่องจากเราไม่ได้ใช้บริการนี้ทุกที่ดังนั้นเพื่อให้สามารถใช้งานได้จากภายนอกเราจะใช้ngrokเพื่อตั้งค่าอุโมงค์สำหรับเรา:
ขั้นตอนที่ 5: ตั้งค่า webhook การเติมเต็มของเราเอง
ต่อไปเราต้องแจ้งให้ Dialogflow ทราบว่าบริการ REST ของเราอยู่ที่ไหนจึงกลับไปที่นั่นและคลิก Fulfillment จากเมนูทางด้านซ้าย:
จากนั้นป้อนที่https://...
อยู่ที่กำหนดโดย ngrok และตรวจสอบให้แน่ใจว่าคุณได้เพิ่ม/ac-bot
ที่อยู่ในตอนท้าย
โอเคช่วงเวลาแห่งความจริง ที่มุมขวาบนที่ระบุTry it now
เราสามารถพิมพ์What is the last price for AAPL?
และหากทุกอย่างทำงานได้ดีเราควรได้รับคำตอบต่อไปนี้:
นี่มันน่าตื่นเต้น!
ขั้นตอนที่ 6: รวมแชทบอทของเรากับ Slack
ตอนนี้เราจะไม่ใช้คอนโซล Dialogflow เพื่อเล่นกับบอทของเราต่อไป แต่เราจะรวมเข้ากับ Slack ดังนั้นเลือกการรวมจากเมนูทางด้านซ้ายค้นหา Slack และเริ่มบอททดสอบ:
จากนั้นตรงไปที่ Slack และเริ่มแชทกับบอท:
จากนั้นเราสามารถทำซ้ำรอบเพื่อใช้คำถาม / เจตนาอื่น ๆ ที่ระบุไว้ในตอนต้นของบทความ
ปิดคำ
ฉันคิดว่าเป็นเรื่องสนุกที่ได้ทำ และง่ายกว่าที่คิดอีกด้วย แน่นอนฉันตัดสั้นหลายอย่าง:
- เรียกใช้บริการภายในเครื่องเท่านั้น
- ไม่คำนึงถึงความปลอดภัยการควบคุมการเข้าถึงและการเลือกสภาพแวดล้อมการควบคุมสินทรัพย์
- การใช้บอทที่ จำกัด มาก
ฉันหวังว่าคุณจะสนุกกับบทความนี้ ติดต่อเพื่อแบ่งปันความคิดถามคำถามและอื่น ๆ เราพร้อมให้ความช่วยเหลือ