OpenAI ใช้ Codex อย่างไร
ทีมเทคนิคจำนวนมากที่ OpenAI ไม่ว่าจะเป็นทีมความปลอดภัย วิศวกรรมฝ่ายผลิตภัณฑ์ ฝ่ายฟรอนต์เอนด์ ฝ่าย API ฝ่ายโครงสร้างพื้นฐาน และวิศวกรรมด้ารประสิทธิภาพ ต่างก็ใช้งาน Codex เป็นประจำทุกวัน หลายทีมกำลังใช้งานเครื่องมือนี้เพื่อเร่งกระบวนการทางวิศวกรรมที่หลากหลาย ตั้งแต่การทำความเข้าใจระบบที่ซับซ้อนและการปรับปรุงโครงสร้างโค้ดขนาดใหญ่ ไปจนถึงการส่งมอบฟีเจอร์ใหม่ๆ และการแก้ไขปัญหาทางระบบภายใต้กำหนดการที่เร่งด่วน
จากการรวบรวมข้อมูลผ่านการสัมภาษณ์วิศวกรของ OpenAI และข้อมูลการใช้งานภายใน เราได้สรุปกรณีศึกษา และแนวทางปฏิบัติที่ดีที่สุด ซึ่งแสดงให้เห็นว่า Codex ช่วยให้ทีมของเราทำงานได้รวดเร็วขึ้น ยกระดับคุณภาพงาน และจัดการกับความซับซ้อนในระดับมหภาคได้อย่างไร
Codex ช่วยให้ทีมของเราเรียนรู้ได้อย่างรวดเร็วในส่วนต่างๆ ของโค้ดเบสที่ไม่คุ้นเคย ระหว่างการเริ่มงาน การแก้บั๊ก หรือการตรวจสอบเหตุขัดข้อง
พวกเขามักใช้ Codex เพื่อค้นหาตรรกะหลักของฟีเจอร์ ทำแผนที่ความสัมพันธ์ระหว่างบริการหรือโมดูล และติดตามการไหลของข้อมูลในระบบ นอกจากนี้ยังช่วยให้เห็นรูปแบบสถาปัตยกรรมหรือช่องว่างในเอกสารประกอบที่ปกติแล้วต้องใช้แรงคนมากในการทำขึ้นมา
ระหว่างการตอบสนองต่อเหตุการณ์ Codex ช่วยให้วิศวกรเข้าใจขอบเขตงานใหม่ได้อย่างรวดเร็ว โดยแสดงปฏิสัมพันธ์ระหว่างคอมโพเนนต์ หรือ ติดตามว่าสถานะความล้มเหลวแพร่กระจายข้ามระบบอย่างไร
เรื่องเล่าจากทีมของเรา
“เวลาแก้บั๊ก ฉันจะใช้ Ask Mode เพื่อดูว่าปัญหาเดียวกันนี้อาจเกิดขึ้นที่ส่วนอื่นของโค้ดเบสตรงไหนอีกบ้าง”
อยากรู้ว่าตรรกะสำหรับการยืนยันตัวตน เอาไปใช้ตรงไหนของ Repo นี้
ช่วยสรุปให้หน่อยว่า Request Flow ของบริการนี้ทำงานอย่างไร ตั้งแต่จุดรับคำสั่งแรกไปจนถึงการตอบกลับ
มีโมดูลไหนที่ทำงานร่วมกับ [ชื่อโมดูล] บ้าง และเมื่อเกิดปัญหาขึ้น ระบบมีวิธีจัดการกับความล้มเหลวยังไง
โดยปกติแล้ว Codex มักถูกนำมาใช้เปลี่ยนแปลงโค้ดที่ครอบคลุมหลายไฟล์หรือหลายแพ็กเกจพร้อมกัน ยกตัวอย่างเช่น เมื่อวิศวกรต้องการอัปเดต API, ปรับเปลี่ยนรูปแบบการใช้งาน หรือย้ายไปใช้ระบบพึ่งพาตัวใหม่ Codex จะช่วยให้การปรับเปลี่ยนข้อมูลเป็นไปอย่างสม่ำเสมอและถูกต้องตรงกันทั้งหมด
เครื่องมือนี้มีประโยชน์อย่างยิ่งเมื่อต้องอัปเดตข้อมูลแบบเดียวกันในหลายสิบไฟล์ หรือในกรณีที่การอัปเดตต้องอาศัยความเข้าใจในโครงสร้างและความสัมพันธ์ของการพึ่งพา ซึ่งการใช้ Regex หรือการค้นหาและแทนที่แบบทั่วไปไม่สามารถทำได้ครอบคลุม
นอกจากนี้ยังใช้มันช่วยเคลียร์โค้ดให้สะอาดขึ้น เช่น การแยกโมดูลใหญ่ๆ ออกเป็นส่วนย่อย การเปลี่ยนวิธีเขียนแบบเดิมๆ มาเป็นแบบใหม่ที่ทันสมัยกว่า หรือการเตรียมโค้ดเพื่อให้รองรับการทดสอบ ได้ดียิ่งขึ้น
เรื่องเล่าจากทีมของเรา
“Codex จัดการเปลี่ยน getUserById() ตัวเก่าทุกตัวให้กลายเป็น Service Pattern แบบใหม่ แล้วก็เปิด PR ไว้ดเวย จากที่เคยต้องใช้เวลาหลายชั่วโมง ตอนนี้ทำเสร็จภายในไม่กี่นาที”
ช่วยแยกไฟล์นี้ออกเป็นโมดูลแยกตามหน้าที่การทำงาน แล้วก็ช่วยเขียนเทสของแต่ละโมดูลให้ด้วย
ช่วยเปลี่ยนโค้ดส่วนที่เข้าถึงฐานข้อมูลจาก Callback ให้เป็น Async/Await ทั้งหมดให้หน่อย
Codex ใช้สำหรับการระบุและแก้ไขปัญหาคอขวดด้านประสิทธิภาพ
ในระหว่างการปรับแต่งหรือการปรับปรุงความน่าเชื่อถือ วิศวกรมักใช้พรอมต์กับ Codex เพื่อวิเคราะห์เส้นทางการทำงานของโค้ดที่ช้าหรือใช้หน่วยความจำสูง เช่น ลูปที่ไม่มีประสิทธิภาพ การดำเนินการที่ซ้ำซ้อน หรือคิวรีที่มีต้นทุนสูง และเสนอทางเลือกที่ปรับให้เหมาะสมกว่า ซึ่งมักช่วยเพิ่มประสิทธิภาพและความน่าเชื่อถือได้อย่างมีนัยสำคัญ
นอกจากนี้เรายังใช้ Codex ช่วยดูแลคุณภาพโค้ดในภาพรวมด้วย โดยมันจะช่วยทักว่ามีตรงไหนที่เขียนแบบเสี่ยงๆ หรือยังใช้วิธีเก่าๆ ที่เขาเลิกใช้กันไปแล้วแต่ยังค้างอยู่ในระบบบ้าง ทีมเราใช้งานมันเป็นหลักเพื่อช่วยลดภาระหนี้ทางเทคนิคสะสม และคอยป้องกันไม่ให้ระบบที่เคยใช้งานได้ดีอยู่แล้วกลับมามีปัญหาซ้ำอีกในอนาคต
เรื่องเล่าจากทีมของเรา
“ฉันCodex ช่วยเช็กดูครับว่ามีจุดไหนที่มีการเรียกใช้ DB ซ้ำๆ จนทำให้ระบบกินทรัพยากรเยอะ มันช่วยชี้เป้าจุดที่ระบบทำงานหนัก แถมยังช่วยร่างวิธีดึงข้อมูลแบบเป็นชุดมาให้ด้วย เอามาปรับต่ออีกนิดหน่อยก็ใช้ได้แล้ว”
ปรับการทำงานของลูปนี้ให้มีประสิทธิภาพด้านการใช้หน่วยความจำ พร้อมทั้งอธิบายเหตุผลว่าทำไมเวอร์ชันของคุณถึงทำงานได้รวดเร็วกว่า
ค้นหาการดำเนินการที่ใช้ทรัพยากรสูงซ้ำๆ ในตัวจัดการคำขอนี้ และเสนอวิธีการใช้แคชเพื่อเพิ่มประสิทธิภาพ
แนะนำวิธีที่เร็วกว่าในการจัดชุดคำสั่งค้นหา DB ในฟังก์ชันนี้
Codex ช่วยให้วิศวกรเขียนการทดสอบได้รวดเร็วยิ่งขึ้น โดยเฉพาะในส่วนที่ความครอบคลุมยังไม่เพียงพอหรือขาดหายไปโดยสิ้นเชิง
เมื่อทำงานเกี่ยวกับการแก้บั๊กหรือการปรับโครงสร้างโค้ด วิศวกรมักขอให้ Codex แนะนำการทดสอบที่ครอบคลุมกรณีขอบหรือเส้นทางที่อาจล้มเหลว สำหรับโค้ดใหม่ สามารถสร้างการทดสอบหน่วยหรือการทดสอบการรวมระบบโดยอิงตามซิกเนเจอร์ของฟังก์ชันและตรรกะโดยรอบ
Codex มีประโยชน์อย่างยิ่งในการระบุเงื่อนไขขอบ เช่น อินพุตว่าง ความยาวสูงสุด หรือสถานะที่ผิดปกติ แต่ยังคงใช้ได้ ซึ่งมักถูกมองข้ามในการทดสอบในช่วงแรก
เรื่องเล่าจากทีมของเรา
“คืนไหนเห็นโมดูลไหนมีเทสครอบคลุมน้อย ผมก็แค่ปล่อยให้ Codex จัดการข้ามคืน พอตื่นมาก็ได้ PR ของ Unit Test ที่พร้อมรันได้เลย”
ช่วยเขียน Unit Test ของฟังก์ชันนี้ให้หน่อย ขอแบบครอบคลุมทั้งพวกเคสยากๆ แล้วก็กรณีที่ระบบอาจจะทำงานผิดพลาดด้วย
สร้างการทดสอบตามคุณสมบัติสำหรับเครื่องมือจัดเรียงนี้
ขยายไฟล์ทดสอบนี้ให้ครอบคลุมสถานการณ์ที่ยังขาดอยู่เกี่ยวกับอินพุตที่ค่าเป็น null และสถานะที่ไม่ถูกต้อง
Codex ช่วยให้ทีมทำงานได้เร็วขึ้นโดยการเร่งทั้งช่วงเริ่มต้นและช่วงท้ายของวงจรการพัฒนา
เมื่อเริ่มต้นพัฒนาฟีเจอร์ใหม่ วิศวกรจะใช้เครื่องมือนี้ในการสร้างโครงร่างพื้นฐาน ไม่ว่าจะเป็นการสร้างโฟลเดอร์ โมดูล หรือโครงร่าง API เพื่อให้ได้โค้ดที่สามารถรันได้ทันทีโดยไม่ต้องเสียเวลาเขียนโครงสร้างด้วยตัวเองทุกส่วน
Codex ช่วยให้ส่งมอบงานได้ทันเวลาโดยจัดการงานสนับสนุนที่จำเป็น เช่น การรับหน้าที่จัดการงานย่อยที่จำเป็น ไม่ว่าจะเป็นการคัดกรองบั๊ก การเติมเต็มส่วนประกอบสุดท้ายของระบบ รวมถึงการสร้างสคริปต์สำหรับเปิดตัว ระบบติดตามข้อมูล หรือไฟล์กำหนดค่า
สามารถเปลี่ยนผลตอบรับด้านผลิตภัณฑ์ให้กลายเป็นโค้ดเริ่มต้นได้อีกด้วย วิศวกรมักจะคัดลอกขอของผู้ใช้หรือสเปก แล้วให้ Codex ช่วยร่างโค้ดคร่าวๆ ขึ้นมาให้ก่อน จะได้กลับมาแก้หรือทำต่อให้เรียบร้อยกว่าเดิมทีหลังได้ง่ายๆ
“ฉันติดประชุมตลอดทั้งวัน แต่ก็ยังรวมโค้ดไปได้ถึง 4 PR เพราะมี Codex คอยช่วยทำงานอยู่เบื้องหลัง”
สร้างโครงเส้นทาง API ใหม่สำหรับ POST /events พร้อมการตรวจสอบความถูกต้องและการบันทึกเหตุการณ์เบื้องต้น
สร้าง Telemetry Hook สำหรับติดตามสถานะความสำเร็จและความล้มเหลวของขั้นตอน Onboarding โดยอ้างอิงจากแม่แบบที่แนบมานี้ [ใส่ตัวอย่างโค้ด Telemetry]
สร้างโครงร่างการทำงานเบื้องต้น โดยอ้างอิงตามรายละเอียดข้อกำหนดหรือข้อเสนอแนะที่แนบมานี้[เพิ่มข้อกำหนดหรือความคิดเห็นเกี่ยวกับผลิตภัณฑ์]
Codex ช่วยให้วิศวกรของเรายังคงรักษาประสิทธิภาพการทำงานไว้ได้ ถึงแม้ว่าตารางงานจะรวนหรือมีเรื่องด่วนเข้ามาแทรกอยู่ตลอดเวลาจนโดนขัดจังหวะบ่อยๆใช้เพื่อบันทึกงานที่ยังค้างอยู่ เปลี่ยนบันทึกสั้นๆ ให้กลายเป็นต้นแบบที่ใช้งานได้จริง หรือแยกงานประเภทสำรวจและค้นหาข้อมูลออกมา เพื่อกลับมาดำเนินการต่อในภายหลัง สิ่งนี้ช่วยให้การพักงานและกลับมาทำต่อทำได้ง่ายขึ้นโดยไม่สูญเสียบริบทของงานไป โดยเฉพาะในช่วงที่ต้องสแตนด์บายรอ หรือมีตารางการประชุมจำนวนมาก
“ถ้าเห็นงานแก้ไขเล็กๆ ที่โผล่เข้ามา จะสั่งงาน Codex แทนการสลับสาขา และค่อยไปตรวจสอบ PR ของมันตอนที่มีเวลา”
Codex ยังมีประโยชน์สำหรับงานแบบปลายเปิด เช่น การค้นหาแนวทางแก้ไขทางเลือกอื่นหรือการยืนยันการตัดสินใจด้านการออกแบบ คุณสามารถใช้พรอมต์เพื่อขอแนวทางที่แตกต่างกันในการแก้ปัญหา สำรวจรูปแบบที่ไม่คุ้นเคย หรือทดสอบสมมติฐานอย่างเข้มงวด สิ่งนี้ช่วยทำให้มองเห็นข้อแลกเปลี่ยน ขยายทางเลือกในการออกแบบ และทำให้การตัดสินใจด้านการนำไปใช้มีความเฉียบคมยิ่งขึ้น
ใช้สำหรับตรวจหาบั๊กที่เกี่ยวข้องกันเพื่อเพิ่มประสิทธิภาพในการแก้ไขระบบ Codex ช่วยค้นหารูปแบบโค้ดที่มีปัญหาหรือล้าสมัยในจุดอื่นๆ ของระบบ ซึ่งจะช่วยตรวจข้อผิดพลาดที่เกิดขึ้นซ้ำ หรือการทำความสะอาดโค้ดให้เสร็จสมบูรณ์ทำได้ง่ายขึ้น
“Codex ช่วยเวลาที่จะเริ่มโปรเจกต์ใหม่แล้วนึกไม่ออกว่าจะเริ่มตรงไหน ฉันแค่วางพวกรายละเอียดงานกับเอกสารลงไป แล้วมันก็ช่วยขึ้นโครงโค้ดให้ หรือช่วยทักว่าลืมจุดไหนไปบ้าง”
ถ้าระบบนี้เปลี่ยนไปทำงานแบบ Event-driven แทนที่จะเป็นแบบ Request/Response เดิม มันจะมีขั้นตอนการทำงานอย่างไรบ้าง
ช่วยหาโมดูลทั้งหมดที่มีการสร้างชุดคำสั่ง SQL ด้วยตนเอง แทนที่จะใช้งานเครื่องมือสร้างคำสั่งค้นหาของเรา
ช่วยปรับการเขียนโค้ดตรงนี้ให้เป็นแบบ Functional มากขึ้น โดยหลีกเลี่ยงการเปลี่ยนแปลงค่าของตัวแปร และผลกระทบข้างเคียง
Codex ทำงานได้ดีที่สุดเมื่อได้รับโครงสร้าง บริบท และพื้นที่ให้ทำซ้ำและปรับปรุง ต่อไปนี้คือนิสัยการทำงานบางส่วนที่ทีม OpenAI กำลังฝึกกันอยู่ เพื่อให้ใช้มันได้อย่างคุ้มค่าอย่างสม่ำเสมอในงานประจำวัน
สำหรับการเปลี่ยนแปลงขนาดใหญ่ ให้เริ่มต้นด้วยการใช้พรอมต์ให้ Codex จัดทำแผนการดำเนินการโดยใช้ Ask Mode ซึ่งแผนนี้จะถูกนำไปใช้เป็นข้อมูลตั้งต้นสำหรับการสั่งงานในขั้นตอนถัดไปเมื่อคุณสลับไปยัง Code Mode กระบวนการทำงานแบบสองขั้นตอนนี้ช่วยให้ Codex ทำงานอยู่บนพื้นฐานของข้อมูลที่ถูกต้อง และช่วยลดโอกาสเกิดข้อผิดพลาดในเอาต์พุต Codex ทำงานได้ดีที่สุดเมื่อใช้กับงานที่มีขอบเขตชัดเจน ประมาณว่าเป็นงานที่ถ้าเราหรือเพื่อนในทีมทำเองก็น่าจะเสร็จในหนึ่งชั่วโมง หรือเป็นงานที่เขียนโค้ดสักสองสามร้อยบรรทัด ประสิทธิภาพของโมเดลที่เพิ่มขึ้นจะช่วยให้สามารถจัดการงานที่มีขนาดใหญ่และซับซ้อนมากขึ้นได้
การตั้งค่าสคริปต์เริ่มต้นการทำงาน ตัวแปรสภาพแวดล้อม และการเข้าถึงอินเทอร์เน็ต ช่วยลดอัตราความผิดพลาดของ Codex ได้อย่างมาก ขณะที่คุณรันงาน ให้มองหาข้อผิดพลาดในการบิลด์ที่สามารถแก้ไขได้ในการกำหนดค่าสภาพแวดล้อมของ Codex แม้อาจต้องทำซ้ำอยู่สักสองสามรอบ แต่จะช่วยเพิ่มประสิทธิภาพได้อย่างมากในระยะยาว
Codex จะทำงานได้ดีขึ้นถ้าเราเขียนพรอมต์ให้เหมือนเวลาเราอธิบายงานใน PR หรือเขียนรายละเอียดใน Issue ซึ่งก็คือการใส่รายละเอียดอย่างพวกที่อยู่ไฟล์ ชื่อคอมโพเนนต์ ส่วนที่แก้โค้ด หรือตัดเอาข้อความในคู่มือมาใส่ด้วย ถ้าจุดไหนมันจำเป็นต้องมีข้อมูลพวกนี้ การเขียนพรอมต์โดยใช้รูปแบบอย่าง “ทำสิ่งนี้ในแบบเดียวกับที่ทำใน [module X]” ช่วยให้ผลลัพธ์ดีขึ้น
ส่งงานเพื่อเก็บไอเดียที่เกี่ยวข้อง งานที่ทำค้างไว้ หรือการแก้ไขเล็กๆ น้อยๆ ไม่จำเป็นต้องกดดันตัวเองให้สร้าง PR ที่สมบูรณ์แบบทั้งหมดภายในครั้งเดียว Codex เป็นพื้นที่เตรียมงานชั่วคราวที่ช่วยให้คุณกลับมาสานต่องานได้ทันทีเมื่อมีสมาธิ
ควรจัดทำและดูแลรักษาไฟล์ AGENTS.md เพื่อช่วยให้ Codex สามารถปฏิบัติงานภายใน Repo)ของคุณได้อย่างมีประสิทธิภาพมากขึ้นในทุกๆ พรอมต์ ไฟล์เหล่านี้มักจะมีหลักเกณฑ์การตั้งชื่อ ตรรกะทางธุรกิจ ข้อควรระวังที่รู้กันอยู่ หรือความเกี่ยวข้องระหว่างระบบที่ Codex ไม่สามารถอนุมานได้จากโค้ดเพียงอย่างเดียว เรียนรู้เพิ่มเติมเกี่ยวกับวิธีจัดโครงสร้างไฟล์ AGENTS.md ได้จากเอกสารนักพัฒนา
ฟีเจอร์ Best-of-N ช่วยให้คุณสร้างคำตอบหลายรายการพร้อมกันสำหรับงานเดียว เพื่อสำรวจแนวทางแก้ไขต่างๆ ได้อย่างรวดเร็วและเลือกคำตอบที่ดีที่สุด สำหรับงานที่ซับซ้อนมากขึ้น คุณสามารถตรวจสอบผลลัพธ์จากการทำซ้ำหลายรอบ และรวมบางส่วนจากคำตอบที่แตกต่างกันเพื่อให้ได้ผลลัพธ์ที่ดียิ่งขึ้น
แม้ว่า Codex จะยังอยู่ในช่วงทดสอบ แต่ก็ได้สร้างผลกระทบที่ชัดเจนต่อกระบวนการพัฒนาของเราแล้ว โดยช่วยให้เราทำงานได้รวดเร็วขึ้น เขียนโค้ดที่มีคุณภาพมากขึ้น และสามารถเริ่มทำงานที่ก่อนหน้านี้ไม่เคยถูกจัดลำดับความสำคัญได้สำเร็จ
เรารู้สึกตื่นเต้นกับศักยภาพที่รออยู่ข้างหน้า เมื่อโมเดลของเราดียิ่งขึ้นและ Codex ผสานรวมเข้ากับเวิร์กโฟลว์ของเราอย่างลึกซึ้งยิ่งขึ้น เราก็ตั้งตารอที่จะปลดล็อกวิธีที่ทรงพลังยิ่งขึ้นในการพัฒนาซอฟต์แวร์ด้วย Codex เราจะแบ่งปันสิ่งที่เราได้เรียนรู้ระหว่างทางอย่างต่อเนื่อง


