โฟลว์กระบวนการพร้อมท์ของผู้ใช้ GitHub Copilot

เสร็จสมบูรณ์เมื่อ

ในหน่วยนี้ เราจะอธิบายวิธีที่ GitHub Copilot เปลี่ยนพร้อมท์ของคุณให้เป็นโค้ดอัจฉริยะที่ใช้งานได้ โดยทั่วไป GitHub Copilot จะได้รับพร้อมท์และส่งกลับคำแนะนำโค้ดหรือการตอบกลับในกระแสข้อมูล กระบวนการนี้แนะนําโฟลว์ขาเข้าและขาออก

โฟลว์ขาเข้า:

ภาพประกอบของโฟลว์ขาเข้าของ GitHub Copilot

มาดูขั้นตอนทั้งหมดที่ Copilot ใช้เพื่อประมวลผลพร้อมท์ของผู้ใช้ให้เป็นคำแนะนำโค้ด

1. การส่งพร้อมท์และการรวบรวมบริบทที่ปลอดภัย

กระบวนการเริ่มต้นด้วยการส่งพร้อมท์ผู้ใช้ผ่าน HTTPS อย่างปลอดภัย ซึ่งรับรองว่าข้อคิดเห็นภาษาธรรมชาติของคุณที่ส่งไปยังเซิร์ฟเวอร์ของ GitHub Copilot มีความปลอดภัยและเป็นความลับ เพื่อปกป้องข้อมูลที่ละเอียดอ่อน

GitHub Copilot ได้รับพร้อมท์ของผู้ใช้อย่างปลอดภัย ซึ่งอาจเป็นการแชทของ Copilot หรือข้อคิดเห็นภาษาธรรมชาติที่คุณให้ไว้ภายในโค้ดของคุณ

Copilot จะรวบรวมรายละเอียดบริบทไปพร้อมกัน:

  • โค้ดก่อนและหลังตำแหน่งเคอร์เซอร์ ซึ่งช่วยให้เข้าใจบริบทของพร้อมท์ได้ทันที
  • ชื่อไฟล์และชนิดของไฟล์ที่กำลังแก้ไข ทำให้สามารถปรับแต่งคำแนะนำโค้ดสำหรับประเภทไฟล์เฉพาะได้
  • ข้อมูลเกี่ยวกับแท็บเปิดที่อยู่ติดกัน ช่วยให้มั่นใจว่าโค้ดที่สร้างขึ้นจะสอดคล้องกับส่วนโค้ดอื่นๆ ในโครงการเดียวกัน
  • ข้อมูลเกี่ยวกับโครงสร้างโครงการและพาธของไฟล์
  • ข้อมูลเกี่ยวกับภาษาโปรแกรมและเฟรมเวิร์ก
  • การประมวลผลล่วงหน้าโดยใช้เทคนิค Fill-in-the-Middle (FIM) เพื่อพิจารณาทั้งบริบทของโค้ดก่อนหน้าและต่อไปนี้ ขยายความเข้าใจของแบบจําลองให้การอนุญาตให้ Copilot สร้างคําแนะนําโค้ดที่ถูกต้องและเกี่ยวข้องมากขึ้นโดยใช้ประโยชน์จากบริบทที่กว้างขึ้น

ขั้นตอนเหล่านี้แปลคำขอระดับสูงของผู้ใช้ให้เป็นงานการเขียนโค้ดที่ชัดเจน

2. ตัวกรองพร็อกซี

เมื่อรวบรวมบริบทและสร้างพรอมต์แล้ว จะถูกส่งผ่านไปยังเซิร์ฟเวอร์พร็อกซีอย่างปลอดภัย ซึ่งเป็นโฮสต์ใน Microsoft Azure ในนามของผู้เช่า GitHub พร็อกซีทำหน้าที่กรองข้อมูลการรับส่ง, บล็อกความพยายามในการแฮ็คพร้อมท์หรือจัดการระบบเพื่อเปิดเผยรายละเอียดเกี่ยวกับวิธีที่โมเดลสร้างคำแนะนำโค้ด

3. การกรองความเป็นพิษ

Copilot รวมกลไกการกรองเนื้อหาไว้ก่อนดำเนินการแยกจุดประสงค์และสร้างโค้ด เพื่อให้แน่ใจว่าโค้ดและการตอบสนองที่สร้างขึ้นจะไม่รวมหรือเลื่อนระดับ:

  • คำพูดที่ก่อความเกลียดชังและเนื้อหาที่ไม่เหมาะสม: Copilot ใช้อัลกอริทึมเพื่อตรวจหาและป้องกันการสร้างคำพูดที่แสดงความเกลียดชัง ภาษาที่ไม่เหมาะสม หรือเนื้อหาที่ไม่เหมาะสมที่อาจเป็นอันตรายหรือก้าวร้าว
  • ข้อมูลส่วนบุคคล: Copilot จะกรองข้อมูลส่วนบุคคล เช่น ชื่อ ที่อยู่ หรือหมายเลขประจำตัว เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้และความปลอดภัยของข้อมูล

4. การสร้างโค้ดด้วย LLM

สุดท้าย พร้อมท์ที่กรองและวิเคราะห์จะถูกส่งผ่านไปยังแบบจําลอง LLM ซึ่งสร้างคําแนะนําโค้ดที่เหมาะสม คําแนะนําเหล่านี้ขึ้นอยู่กับความเข้าใจของพร้อมท์และบริบทโดยรอบของ Copilot’เพื่อให้แน่ใจว่าโค้ดที่สร้างขึ้นมีความเกี่ยวข้อง ใช้งานได้ และสอดคล้องกับข้อกําหนดเฉพาะของโครงการ

โฟลว์ขาออก:

ภาพประกอบของโฟลว์ขาออกของ GitHub Copilot

5. หลังการประมวลผลและการตรวจสอบการตอบสนอง

เมื่อโมเดลก่อให้เกิดการตอบสนองตัวกรองความเป็นพิษจะกําจัดเนื้อหาที่เป็นอันตรายหรือเนื้อหาที่สร้างขึ้นไม่เหมาะสม พร็อกซีเซิร์ฟเวอร์จะใช้เลเยอร์สุดท้ายของการตรวจสอบเพื่อให้แน่ใจว่าโค้ดมีคุณภาพ ความปลอดภัย และมาตรฐานทางจริยธรรม การตรวจสอบเหล่านี้รวมถึง:

  • คุณภาพโค้ด : การตอบสนองจะถูกตรวจสอบสําหรับข้อบกพร่องหรือช่องโหว่ทั่วไป เช่น การเขียนสคริปต์ข้ามไซต์ (XSS) หรือการฉีด SQL เพื่อให้แน่ใจว่าโค้ดที่สร้างขึ้นนั้นมีเสถียรภาพและปลอดภัย
  • การจับคู่โค้ดสาธารณะ (ไม่บังคับ): ไม่บังคับ ผู้ดูแลระบบสามารถเปิดใช้งานตัวกรองที่ป้องกันไม่ให้ Copilot ส่งกลับคําแนะนํามากกว่า ~150 ตัว หากคล้ายกับรหัสสาธารณะที่มีอยู่ใน GitHub อย่างใกล้ชิด การดำเนินการนี้จะป้องกันไม่ให้มีการแนะนำการจับคู่ที่เหมือนกันว่าเป็นเนื้อหาต้นฉบับ หากคําตอบส่วนใดส่วนหนึ่งล้มเหลวในการตรวจสอบเหล่านี้ แสดงว่ารายการถูกตัดทอนหรือถูกละทิ้ง

6. การส่งมอบคําแนะนําและการเริ่มต้นรอบข้อเสนอแนะ

เฉพาะคําตอบที่ส่งผ่านตัวกรองทั้งหมดจะถูกส่งไปยังผู้ใช้เท่านั้น จากนั้น Copilot เริ่มต้นรอบคําติชมตามการดําเนินการของคุณเพื่อให้บรรลุสิ่งต่อไปนี้:

  • ขยายความรู้ของตนจากคำแนะนำที่ยอมรับ
  • เรียนรู้และปรับปรุงผ่านการปรับเปลี่ยนและการปฏิเสธคำแนะนำ

7. ทำซ้ำสำหรับคำสั่งที่ตามมา

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