Chatbot สำหรับการควบคุมสินทรัพย์

Oct 29 2020
ในบทความนี้ฉันกำลังรวบรวม chatbot สำหรับการควบคุมสินทรัพย์เป็นโปรเจ็กต์เล็ก ๆ ที่สนุกสนาน ทำไม? เนื่องจากฉันต้องการใช้งาน chatbot มาระยะหนึ่งแล้ว - หากเพียงเพื่อเข้าใจวิธีการทำเช่นนั้น - และการทำเช่นนั้นในโดเมน AC ก็ดูเป็นธรรมชาติ

ในบทความนี้ฉันกำลังรวบรวม 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 และเริ่มแชทกับบอท:

จากนั้นเราสามารถทำซ้ำรอบเพื่อใช้คำถาม / เจตนาอื่น ๆ ที่ระบุไว้ในตอนต้นของบทความ

ปิดคำ

ฉันคิดว่าเป็นเรื่องสนุกที่ได้ทำ และง่ายกว่าที่คิดอีกด้วย แน่นอนฉันตัดสั้นหลายอย่าง:

  • เรียกใช้บริการภายในเครื่องเท่านั้น
  • ไม่คำนึงถึงความปลอดภัยการควบคุมการเข้าถึงและการเลือกสภาพแวดล้อมการควบคุมสินทรัพย์
  • การใช้บอทที่ จำกัด มาก

ฉันหวังว่าคุณจะสนุกกับบทความนี้ ติดต่อเพื่อแบ่งปันความคิดถามคำถามและอื่น ๆ เราพร้อมให้ความช่วยเหลือ