หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
Direct Line API ทําหน้าที่เป็นอินเทอร์เฟซการสื่อสารสําหรับแอปพลิเคชันไคลเอ็นต์เพื่อโต้ตอบกับตัวแทนการสนทนาที่สร้างด้วย Copilot Studio Direct Line API อํานวยความสะดวกในการส่งข้อความระหว่างแอปพลิเคชันไคลเอ็นต์และเอเจนต์ผ่านสตรีม WebSocket หรือคําขอ HTTP สําหรับการทดสอบประสิทธิภาพ Direct Line ช่วยให้เครื่องมือทดสอบโหลดสามารถจําลองพฤติกรรมของผู้ใช้จริง
สื่อสารกับ Direct Line โดยใช้ WebSockets
คุณสามารถปรับใช้ตัวแทนการสนทนาที่สร้างด้วย Copilot Studio ไปยังเว็บแอปพลิเคชันเป็น iframe แบบฝังตัวหรือโดยใช้พื้นที่ทํางานแบบกําหนดเอง ตัวเลือกการปรับใช้ทั้งสองใช้การสื่อสาร WebSocket กับ Direct Line หากคุณปรับใช้ตัวแทนการสนทนาของคุณกับแอปโดยใช้วิธีใดวิธีหนึ่งเหล่านี้ สคริปต์ทดสอบประสิทธิภาพของคุณควรใช้การสื่อสาร WebSocket เพื่อสร้างโหลดที่คล้ายกับพฤติกรรมของผู้ใช้จริง และวัดประสิทธิภาพด้วยความมั่นใจในระดับสูง
แอปพลิเคชันไคลเอ็นต์ที่ใช้การสื่อสาร Direct Line และ WebSocket ควรเป็นไปตามโฟลว์นี้:
- เมื่อต้องการเริ่มต้นการสนทนา แอปพลิเคชันไคลเอ็นต์ต้องได้รับโทเค็นการสนทนาก่อน หากเอเจนต์ของคุณได้รับการกําหนดค่าด้วยข้อมูลลับ Direct Line ให้รับโทเค็นโดยการเรียกตําแหน่งข้อมูลระดับภูมิภาค Direct Line โทเค็นสําหรับตัวแทนที่ไม่ได้ใช้ข้อมูลลับสามารถรับได้จากตําแหน่งข้อมูลโทเค็น
- แอปพลิเคชันไคลเอ็นต์ เริ่มต้นการสนทนา โดยใช้โทเค็น และรับรหัสการสนทนาและ URL สตรีม WebSocket
- ระบบจะส่งข้อความของผู้ใช้โดยการส่งคําขอ HTTP POST พร้อมรหัสการสนทนา
- ข้อความจากตัวแทนการสนทนาจะได้รับผ่านสตรีม WebSocket
สื่อสารกับ Direct Line โดยใช้ HTTP GET
หากเครื่องมือทดสอบโหลดของคุณไม่สามารถใช้การสื่อสาร WebSocket หรือหากแอปพลิเคชันที่เผชิญหน้ากับไคลเอ็นต์ของคุณไม่ได้ใช้การสื่อสาร WebSocket คุณสามารถรับกิจกรรมได้โดย การส่ง HTTP GET แทน ดังที่แสดงในไดอะแกรมต่อไปนี้ โฟลว์การเริ่มต้นการสนทนาจะไม่เปลี่ยนแปลง
วัดเวลาตอบสนอง
หากต้องการประเมินว่าโหลดส่งผลต่อประสบการณ์ของผู้ใช้อย่างไร ให้ตรวจสอบว่าสคริปต์การทดสอบประสิทธิภาพติดตามและรายงานเวลาตอบสนองสําหรับขั้นตอนต่อไปนี้
| ขั้นตอน | ผลกระทบต่อประสบการณ์ของผู้ใช้ |
|---|---|
| สร้างโทเค็น | เวลาที่ใช้ในการเริ่มต้นการสนทนาใหม่ |
| เริ่มการสนทนา | เวลาที่ใช้ในการเริ่มต้นการสนทนาใหม่ |
| ส่งกิจกรรม | เวลาที่ใช้ในการส่งข้อความผู้ใช้ใหม่ (ไม่รวมการตอบกลับของตัวแทน) |
| รับกิจกรรม/รับกิจกรรม | เวลาที่ใช้ในการตอบกลับของตัวแทน |
การติดตามเวลาตอบสนองสําหรับ Generate Token, Start Conversation และ Send Activity นั้นตรงไปตรงมาสําหรับเครื่องมือทดสอบการโหลด เนื่องจากขั้นตอนเหล่านี้ใช้คําขอ HTTP มาตรฐาน อย่างไรก็ตาม การวัดเวลาที่ตัวแทนใช้ในการตอบกลับข้อความของผู้ใช้นั้นซับซ้อนกว่า เนื่องจากเหตุผลดังต่อไปนี้:
การส่งและรับกิจกรรมผ่าน Direct Line เป็นไปตามรูปแบบแบบอะซิงโครนัส เมื่อข้อความของผู้ใช้ถูกส่งโดยใช้คําขอ ส่งกิจกรรม การตอบกลับจะไม่ใช่ข้อความจากตัวแทน แต่เป็นเพียงการยืนยันว่าข้อความของผู้ใช้ถูก โพสต์สําเร็จแล้ว
ตามการออกแบบ ตัวแทนการสนทนาอาจส่งข้อความจํานวนเท่าใดก็ได้เพื่อตอบกลับข้อความของผู้ใช้ ในกรณีส่วนใหญ่ คุณควรวัดเวลาที่ตัวแทนใช้ในการตอบกลับเป็นเวลาที่ผ่านไประหว่างข้อความผู้ใช้และข้อความตัวแทนล่าสุด ในตัวอย่างต่อไปนี้ ข้อความของผู้ใช้รายเดียวจะทริกเกอร์ข้อความตัวแทนสามข้อความ โดยมีการเรียกใช้ API ระหว่างนั้น แต่ละข้อความใช้เวลาประมาณสองวินาทีในการกลับมา อย่างไรก็ตาม จากมุมมองของผู้ใช้ ตัวแทนจะใช้เวลาหกวินาทีในการตอบสนองต่อคําขอของผู้ใช้
ระบุการตอบกลับล่าสุดของตัวแทน
ในการวัดเวลาที่ตัวแทนใช้ในการตอบกลับให้เสร็จสมบูรณ์ สคริปต์การทดสอบประสิทธิภาพของคุณต้อง:
- ระบุข้อความตัวแทนล่าสุดที่ตามหลังข้อความของผู้ใช้
- คํานวณความแตกต่างของเวลาระหว่างทั้งสอง
โปรโตคอลพื้นฐานที่ Copilot Studio ใช้ไม่มีแนวคิดของ 'การตอบสนองครั้งสุดท้าย' เนื่องจากทั้งตัวแทนและผู้ใช้สามารถส่งข้อความได้ตลอดเวลา ดังนั้น สคริปต์การทดสอบประสิทธิภาพของคุณต้องสันนิษฐานว่าหากตัวแทนไม่ส่งข้อความภายในกรอบเวลาที่กําหนด จะไม่มีการส่งข้อความเพิ่มเติมจนกว่าจะมีการส่งข้อความของผู้ใช้รายถัดไป การใช้งานตรรกะนี้จะแตกต่างกันไปตามวิธีที่สคริปต์ของคุณสื่อสารกับ Direct Line
ใช้ WebSockets
เมื่อสื่อสารกับ Direct Line ผ่าน WebSockets สมมติว่า ตัวแทนไม่ส่งข้อความอีกต่อไปเมื่อไม่สามารถอ่านเฟรมจาก WebSocket ได้อีกต่อไป คุณอาจเห็นสิ่งนี้ระบุโดยการหมดเวลาเมื่อพยายามอ่านเฟรมถัดไป แม้ว่าลักษณะการทํางานที่แน่นอนจะขึ้นอยู่กับการใช้งานของคุณ สําหรับการใช้งานอ้างอิงที่ใช้ WebSockets ให้พิจารณาใช้ HTTP GET
ใช้ HTTP GET
สคริปต์การทดสอบประสิทธิภาพที่ใช้ HTTP GET แทน WebSockets ควรสํารวจตําแหน่งข้อมูล กิจกรรม เพื่อรับข้อความผู้ใช้และเอเจนต์ทั้งชุด เมื่อทําโพล ตรวจสอบให้แน่ใจว่าได้ให้เวลาเพียงพอสําหรับตัวแทนของคุณในการตอบกลับ ตัวอย่างเช่น หากตัวแทนของคุณจําเป็นต้องเรียกใช้ API แบ็กเอนด์เพื่อตอบกลับการสอบถามของผู้ใช้ และ API ใช้เวลาถึงห้าวินาทีในการตอบกลับ สคริปต์ของคุณไม่ควรสํารวจตําแหน่งข้อมูลกิจกรรมจนกว่าจะผ่านไปห้าวินาที
เพย์โหลดแบบง่ายต่อไปนี้แสดงถึงการตอบสนองที่กลับมาจากตําแหน่งข้อมูลกิจกรรม:
[
{
"type": "message",
"id": "98SryQaHr2rGthOGpChPK2-us|0000012",
"timestamp": "2025-01-07T09:12:22.0329242Z",
"from": {
"id": "a688eb7d-092a-42a8-8ef5-73123b9c2aaa",
"name": ""
},
"conversation": {
"id": "98SryQaHr2rGthOGpChPK2-us"
},
"text": "I also want to set up a new account",
},
{
"type": "message",
"id": "98SryQaHr2rGthOGpChPK2-us|0000017",
"timestamp": "2025-01-07T09:12:24.5478686Z",
"from": {
"id": "4b56bfa5-5574-5bb3-7aa3-99b8798b9d90",
"name": "Load Testing",
"role": "bot"
},
"conversation": {
"id": "98SryQaHr2rGthOGpChPK2-us"
},
"text": "Sure, please bear with me as I set up your new account",
"replyToId": "98SryQaHr2rGthOGpChPK2-us|0000012",
},
{
"type": "message",
"id": "98SryQaHr2rGthOGpChPK2-us|0000018",
"timestamp": "2025-01-07T09:12:33.1960413Z",
"from": {
"id": "4b56bfa5-5574-5bb3-7aa3-99b8798b9d90",
"name": "Load Testing",
"role": "bot"
},
"conversation": {
"id": "98SryQaHr2rGthOGpChPK2-us"
},
"text": "Almost done! Thank you for your patience",
"replyToId": "98SryQaHr2rGthOGpChPK2-us|0000012",
},
{
"type": "message",
"id": "98SryQaHr2rGthOGpChPK2-us|0000019",
"timestamp": "2025-01-07T09:12:41.9166159Z",
"from": {
"id": "4b56bfa5-5574-5bb3-7aa3-99b8798b9d90",
"name": "Load Testing",
"role": "bot"
},
"conversation": {
"id": "98SryQaHr2rGthOGpChPK2-us"
},
"text": "All done! Your new account is now active.",
"inputHint": "acceptingInput",
"replyToId": "98SryQaHr2rGthOGpChPK2-us|0000012"
}
]
เมื่อคุณแยกวิเคราะห์เพย์โหลดและคํานวณเวลาตอบสนอง ให้พิจารณาแนวทางต่อไปนี้:
- ข้อความจากตัวแทนมีคุณสมบัติ
role: botในขณะที่ข้อความจากผู้ใช้ไม่มีroleคุณสมบัติ - ข้อความตัวแทนที่ส่งเพื่อตอบกลับข้อความ
replyToIdของผู้ใช้มีคุณสมบัติ ซึ่งมีค่าidของคุณสมบัติของข้อความผู้ใช้ - คุณสามารถคํานวณเวลาตอบกลับของตัวแทนเป็นความแตกต่างของเวลาระหว่างข้อความผู้ใช้และข้อความตัวแทนล่าสุดที่ตอบกลับข้อความผู้ใช้