บันทึกจากห้อง AI
มาตรวัดที่อ่านได้ศูนย์: สิบเจ็ดชั่วโมงที่ตัวนับการใช้งานของเรานับขาด โดยไม่มีอะไรพัง
เราย้ายที่เก็บการตั้งค่าของห้อง AI ส่วนใหญ่ในคืนวันที่ 9 ตุลาคม ตัวนับการใช้งานรายชั่วโมงยังอ่านที่เก่าอยู่ จึงนับได้น้อยลงเรื่อยๆ จนเหลือศูนย์แปดชั่วโมงติด ไม่มีข้อความเตือนสักบรรทัด เราเจอเพราะตัวเลขในตารางดูน้อยผิดปกติ
เจ็ดสิบสองข้อ ตอบสิบข้อ: คืนที่เราให้ห้อง AI ตรวจบันทึกของกันและกัน
คืนวันที่ 9 ตุลาคม ห้อง AI ของเราเขียนบันทึกทบทวนงานของตัวเอง แล้วให้อีกห้องหนึ่งมาเขียนข้อติไว้ท้ายไฟล์ ได้ข้อติมา 72 ข้อ ในไฟล์มีคำตอบเป็นลายลักษณ์อักษร 10 ข้อ อีก 62 ข้อไม่มีอะไรต่อท้าย บทนี้เล่าว่าสิบข้อที่ได้คำตอบต่างจากที่เหลืออย่างไร และเรายังไม่รู้อะไรเกี่ยวกับ 62 ข้อนั้น
คู่มือที่ตามเครื่องมือไม่ทัน: สิบสามชั่วโมง ผิดไปหกข้อ
ห้อง AI ของเราอ่านคู่มือหนึ่งหน้าก่อนสั่งงานผู้ช่วย คู่มือฉบับนั้นแก้ครั้งล่าสุดตอนตีหนึ่ง ตัวเครื่องมือถูกแก้ต่ออีกหลายครั้งจนถึงบ่ายสอง พอเราให้ผู้ช่วยอ่านสองไฟล์เทียบกันทีละข้อ ก็พบหกข้อที่คู่มือบอกอย่างหนึ่งแต่เครื่องมือทำอีกอย่าง บทนี้เล่าทั้งหกข้อ ข้อไหนอันตราย ทำไมการตรวจแบบนี้ถึงถูกมาก และคู่มือถูกแก้ภายในราวสิบนาทีหลังเราแจ้ง
บันทึกส่งต่องานที่เก่ากว่าความจริง: ห้อง AI เกือบปล่อยงานทับของที่ดีอยู่แล้ว
ห้อง AI ของเราเริ่มงานทุกรอบด้วยการอ่านบันทึกที่รอบก่อนเขียนทิ้งไว้ วันที่ 9 ตุลาคม ห้าห้องพบว่าบรรทัดในบันทึกแบบนั้นไม่ตรงกับของจริงแล้ว ห้องหนึ่งเกือบปล่อยงานซ้ำทับระบบที่ทำงานดีอยู่ อีกห้องเกือบสั่งงานสี่ชิ้นเพื่อแก้ของที่แก้ไปแล้ว บทนี้เล่าห้ากรณี สิ่งที่แต่ละห้องเปลี่ยน และข้อที่ยังเป็นแค่คำสัญญา
ผู้ตรวจที่กลายเป็นตรวจงานของตัวเอง: ตัวเลขจากการตรวจไขว้พันกว่าครั้งในวันเดียว
เราเพิ่มขั้นตรวจไขว้ให้งานที่โมเดลเปิดเขียนแล้วมีการแก้ไข โดยให้โมเดลอีกตัวอ่านงานก่อนส่งกลับ ในวันเดียวกันเราปิดโมเดลตัวที่สอง ขั้นตรวจยังทำงานต่อ แต่ผู้ตรวจกลายเป็นโมเดลตัวเดียวกับผู้เขียน บทความนี้เล่าตัวเลขก่อนและหลังจุดนั้น และบอกตรง ๆ ว่าตัวเลขพวกนี้พิสูจน์อะไรไม่ได้บ้าง
สิบเอ็ดข้อที่ล้มเองได้ สิบข้อที่เป็นแค่ข้อความ: คืนที่ห้อง AI ของเราตรวจกติกาของตัวเอง
หลังวันทำงานหนักวันที่ 9 ตุลาคม ห้อง AI สิบเจ็ดห้องของเราเขียนทบทวนงานของตัวเอง ให้ห้องอื่นมาอ่านแย้ง แล้วห้องหนึ่งรวบรวมกติกาที่ทุกห้องเขียนขึ้นใหม่วันนั้นมาแยกเป็นสองกองด้วยคำถามเดียว คือถ้าข้ามกติกานี้ไป จะมีอะไรล้มไหม บทความนี้เล่าว่าแยกแล้วได้อะไร และทำไมตัวเลขสิบเอ็ดต่อสิบยังใจดีเกินไป
ยังไม่อยู่ในสายหลัก ไม่ได้แปลว่ายังไม่มีใครทำ: วันที่ห้อง AI ของเราแก้งานซ้ำกันเอง
วันที่ 9 ตุลาคม ห้อง AI หลายห้องของเราสั่งแก้งานที่มีคนแก้ไว้แล้ว บางชิ้นแก้เสร็จและขึ้นใช้งานไปแล้ว บางชิ้นมีอีกห้องแก้ค้างอยู่ในคิวรอรวม ทุกห้องตรวจก่อนสั่งงาน แต่ตรวจคนละที่กับที่งานซ่อนอยู่ บทความนี้ไล่ว่างานที่ทำแล้วซ่อนได้กี่ที่ และด่านเก้าบรรทัดที่เราเขียนขึ้นคืนนั้นยังขาดอะไร
คำว่า "ไปได้" ต้องบอกว่าไปได้กับรุ่นไหน: บทเรียนจากการผูกคำอนุมัติกับรหัสรุ่นเต็ม
ในทีมที่ห้อง AI ตรวจงานกันเอง คำอนุมัติหนึ่งคำอาจถูกใช้กับโค้ดที่เปลี่ยนไปแล้วหลังอนุมัติ เราเจอเรื่องนี้จริงเมื่อ 7 ตุลาคม แล้วแก้ด้วยกติกาว่าคำอนุมัติต้องผูกกับรหัสรุ่นเต็มสี่สิบตัวอักษร บทความนี้เล่าว่ากติกานั้นพังได้กี่แบบในสองวันถัดมา ตั้งแต่พิมพ์เกินหนึ่งตัว ไปจนถึงด่านที่รับรหัสว่างเปล่า
ห้อง AI ที่เดาเวลาเอง: ตราเวลาในบันทึกเดินล้ำหน้านาฬิกาจริง
วันที่ 10 ตุลาคม ห้อง AI ของเราสามห้องพบว่าตราเวลาที่ตัวเองเขียนลงบันทึกเดินเร็วกว่านาฬิกาจริง ห้องหนึ่งล้ำไปราวสี่สิบห้านาที สาเหตุเดียวกันทั้งสามห้อง คือเขียนเวลาจากความรู้สึก ไม่ได้ถามนาฬิกา บทความสั้นนี้เล่าว่าเรารู้ได้อย่างไร และทำไมเรื่องเล็กแบบนี้ทำให้บันทึกทั้งฉบับเชื่อได้น้อยลง
คำสั่งที่ค้นหาโปรเซสแล้วเจอตัวเอง: ห้อง AI ฆ่าเชลล์ของตัวเองซ้ำกันทั้งวัน
วันที่ 9 ตุลาคม ห้อง AI ของเราหลายห้องสั่งปิดโปรเซสด้วยการค้นจากข้อความในบรรทัดคำสั่ง แล้วคำสั่งนั้นไปเจอตัวมันเองก่อน เชลล์ที่กำลังทำงานจึงตายคาที่ บันทึกสรุปปลายวันนับได้ห้าห้อง บทความนี้เล่ากลไก ทำไมเขียนเตือนแล้วยังเกิดซ้ำ และด่านสิบห้าบรรทัดที่มาแทนคำเตือน รวมถึงช่องที่ด่านยังไม่ครอบ
พิสูจน์ว่าตัวทดสอบจับได้จริง แล้วลบงานแก้ทิ้งไปด้วย: ความผิดเดิมสี่ครั้งในสามห้อง
เรามีกติกาว่าตัวทดสอบใหม่ทุกตัวต้องถูกพิสูจน์ว่าตกได้จริง วันที่ 9 ตุลาคม ขั้นตอนพิสูจน์นั้นเองลบงานแก้ที่ยังไม่ได้บันทึกทิ้งไปสี่ครั้งในสามห้อง ทั้งที่มีบทเรียนเขียนเตือนไว้แล้ว บทความนี้เล่าว่าทำไมคำเตือนไม่ช่วย และเครื่องมือที่มาแทนคำเตือน
หมดรอบ ไม่ใช่ทำเสร็จ: วันที่ตัวช่วยเขียนโค้ดของเราชนเพดานซ้ำๆ แล้วรายงานว่าเรียบร้อย
วันที่ 9 ตุลาคม ตัวช่วยเขียนโค้ดที่วิ่งบนเครื่องของเราเองชนเพดานจำนวนรอบในอย่างน้อยห้าห้อง และตัวครอบที่เรียกมันยังส่งรหัสจบว่าสำเร็จ บทความนี้เล่าว่างานแบบไหนชนเพดาน ทำไมการเพิ่มเพดานอย่างเดียวไม่พอ และสิ่งที่เราเปลี่ยนในใบสั่งงาน
เช้าเดียวบนขบวนปล่อยงานที่ AI เดินเอง: หกครั้งที่ขึ้นระบบจริง และห้าเรื่องที่สะดุด
เช้าวันที่ 10 ตุลาคม ห้อง AI ที่ดูแลการปล่อยงานของเรารวมงานเข้าสายหลักหลายสิบชิ้นและขึ้นระบบจริงหกครั้งก่อนบ่ายสอง บทความนี้ไม่ได้เล่าว่ามันเร็วแค่ไหน แต่เล่าห้าเรื่องที่สะดุดระหว่างทาง และกติกาที่เกิดขึ้นจากเรื่องเหล่านั้นในวันเดียวกัน
คัดลอกไฟล์จากกิ่งเก่า แล้วงานใหม่ของคนอื่นหายไปเงียบๆ
ในวันเดียว ห้อง AI สามห้องของเราเกือบลบงานที่คนอื่นเพิ่ง merge ไปโดยไม่รู้ตัว ด้วยคำสั่ง git ธรรมดาที่ไม่มีข้อความเตือนสักบรรทัด ผู้ตรวจเองก็เกือบปล่อยผ่าน เพราะตรวจว่าไฟล์เหมือนกัน แทนที่จะตรวจว่าบรรทัดที่เปลี่ยนเหมือนกัน บทความนี้เล่ากลไก และสิ่งที่เราเปลี่ยนจากบทเรียนเป็นสคริปต์
เก้านาทีที่ปล่อยงานไม่ได้ ทั้งที่ระบบไม่ได้ล่ม
กลางรอบปล่อยงานวันที่ 10 ตุลาคม ผู้ให้บริการโฮสต์ตอบกลับมาว่าแผนทดลองใช้หมดอายุ บริการที่รันอยู่ไม่สะดุดเลย สิ่งที่หายไปคือความสามารถในการเปลี่ยนแปลงมัน บทความนี้เล่าเก้านาทีนั้นทีละนาที และเหตุผลที่ไม่มีตัวเฝ้าระวังตัวไหนของเราจะจับเรื่องแบบนี้ได้
ศูนย์ข้อผิดพลาด เพราะตัวตรวจตายก่อนจะนับ
ตัวตรวจชนิดข้อมูลของเรารายงานข้อผิดพลาด 0 ทั้งก่อนและหลังแก้โค้ด งานจึงถูกรายงานว่าผ่าน ตัวเลขจริงคือ 3,058 สาเหตุคือโปรแกรมตรวจหน่วยความจำหมดแล้วตายไปก่อนพิมพ์อะไรออกมา บทความนี้เล่ากลไก วิธีแก้สองบรรทัด และเหตุผลที่เรายังไม่ถือว่าเรื่องนี้ปิด
เก้าชั่วโมงที่เราเร่งปิดงานค้าง แล้วพบว่าคอขวดไม่ใช่ AI
วันที่ 9 ตุลาคม เราให้ห้อง AI ทุกห้องเร่งปิดรายการงานค้างก้อนเดียวกัน ย้ายไปเครื่องใหญ่ขึ้น ขยายดิสก์ เพิ่มจำนวนงานที่รันพร้อมกัน ถึงเที่ยงคืนปิดได้ 149 รายการ บทความนี้เล่าว่าตัวเลขเดินอย่างไร อะไรพังระหว่างทาง และทำไมข้อสรุปของคืนนั้นคือ งานปิดได้เร็วเท่าที่คนตรวจทัน ไม่ใช่เร็วเท่าที่ AI เขียนทัน
การพิสูจน์ที่ไม่มีทางตก: เมื่อเราจงใจทำโค้ดพังแล้วเทสยังเขียวอยู่
เรามีกติกาว่าเทสทุกตัวต้องถูกพิสูจน์ด้วยการจงใจทำโค้ดให้พังแล้วดูว่าเทสจับได้ไหม คืนหนึ่งเราทำโค้ดพังแล้วเทสยังผ่าน สาเหตุคือข้อมูลตัวอย่างในเทสมีแต่ตัวเลข บทความนี้เล่ากลไกของมัน และบทเรียนหนึ่งบรรทัดที่ได้
"จัดการแล้ว" ไม่ใช่ "เสร็จแล้ว": คืนที่ห้องหนึ่งพบว่าตัวเลขของตัวเองผิด 35 รายการ
บันทึกของห้อง AI ห้องหนึ่งเขียนว่างานค้างเหลือศูนย์ ตัวเลขจริงคือ 35 ความผิดไม่ได้มาจากการนับพลาด แต่มาจากการนับคนละอย่างโดยไม่เขียนกำกับว่านับอะไร บทความนี้เล่าว่าจับได้อย่างไร และกติกาข้อหนึ่งที่เราเพิ่มหลังจากนั้น
สองชั่วโมงสิบนาทีที่เราให้โมเดลเปิดเป็นสมองของห้อง
เราทดลองให้โมเดลเปิดบนเครื่องของเราเองคิดแทน Claude ในห้องปล่อยงานสามชั่วโมง มันเดินได้สองชั่วโมงสิบนาทีแล้วค้าง ตัวเลขที่เราตั้งใจวัดกลับบอกอะไรไม่ได้ บทความนี้เล่าว่าเราตั้งการทดลองอย่างไร พังตรงไหน และเรียนอะไรจากการวัดผิดตัว
คลาสที่พังต่อหน้าผู้เรียน และการเดินย้อนเส้นทางลูกค้าทีละก้าว
เราทดสอบก่อนคลาสผ่านครบ 40 ข้อ แล้วคลาสก็ยังพัง เพราะรายการตรวจของเรามีเส้นทางผู้เรียนทางเดียว และผู้เรียนหลายคนไม่ได้เดินทางนั้น หลังจากนั้นเราเดินย้อนเส้นทางลูกค้าทั้งเส้น 13 ก้าว บทความนี้เล่าว่าเราเดินอย่างไรและเจออะไร
Qwen เป็นมือ Claude เป็นสมอง: สองวันแรกที่เราแยกคนคิดกับคนลงมือ
เราให้ Claude คิด วางแผน และตรวจงาน แล้วส่งงานเขียนโค้ดทั้งหมดให้โมเดลเปิดที่รันบนเครื่อง GPU ของเราเอง สองวันแรกมีงานวิ่งผ่านกว่าสองพันงาน บทความนี้เล่าว่าหนึ่งวันเดินอย่างไร ด่านตรวจอยู่ตรงไหน และอะไรพังบ้าง