หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
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 เป็นไปตามรูปแบบอะซิงโครนัส เมื่อข้อความของผู้ใช้ถูกส่งโดยใช้คำขอ Send Activity การตอบกลับจะไม่ใช่ข้อความจากเอเจนต์ แต่เป็นเพียงการยืนยันว่าข้อความของผู้ใช้ถูกโพสต์สำเร็จแล้ว
ตามการออกแบบ เอเจนต์การสนทนาอาจส่งข้อความจำนวนเท่าใดก็ได้เพื่อตอบกลับข้อความของผู้ใช้ ดังนั้น ในกรณีส่วนใหญ่ คุณควรวัดเวลาที่เอเจนต์ใช้ในการตอบเป็นเวลาที่ผ่านไประหว่างข้อความของผู้ใช้และข้อความของเอเจนต์ที่ส่งล่าสุด ในตัวอย่างต่อไปนี้ ข้อความของผู้ใช้หนึ่งข้อความทริกเกอร์ข้อความของเอเจนต์สามข้อความ โดยมีการเรียกใช้ API ระหว่างนั้น แต่ละข้อความใช้เวลาประมาณสองวินาทีในการตอบกลับ อย่างไรก็ตาม จากมุมมองของผู้ใช้ เอเจนต์จะใช้เวลาหกวินาทีในการตอบคำขอของผู้ใช้
ระบุการตอบล่าสุดของเอเจนต์
เพื่อวัดระยะเวลาที่เอเจนต์ใช้ในการการตอบจนเสร็จสมบูรณ์ สคริปต์ทดสอบประสิทธิภาพของคุณจำเป็นต้อง:
- ระบุข้อความเอเจนต์ล่าสุดที่ตามหลังข้อความของผู้ใช้
- คำนวณความแตกต่างของเวลาระหว่างสองค่า
โปรโตคอลพื้นฐานที่ Copilot Studio ใช้ไม่มีแนวคิดเรื่อง “last response” เพราะทั้งเอเจนต์และผู้ใช้สามารถส่งข้อความได้ทุกเมื่อ ดังนั้น สคริปต์ทดสอบประสิทธิภาพของคุณต้องสันนิษฐานว่า หากเอเจนต์ไม่ส่งข้อความภายในระยะเวลาที่กำหนด จะไม่มีข้อความเพิ่มเติมจากเอเจนต์จนกว่าจะมีข้อความใหม่จากผู้ใช้ การนำตรรกะนี้ไปใช้จะแตกต่างกันไปตามวิธีที่สคริปต์ของคุณสื่อสารกับ 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ของข้อความของผู้ใช้ - คุณสามารถคำนวณเวลาการตอบของเอเจนต์ได้โดยใช้ระยะเวลาระหว่างข้อความของผู้ใช้กับข้อความของเอเจนต์ล่าสุดที่ตอบกลับข้อความของผู้ใช้