สั่ง AI ทำปก แล้วมันส่งรูปคนนอนป่วยมาให้
codex exec คือ agent ไม่ใช่ image API สั่งแค่ทำรูปมันก็เลือกวิธีเอง ต้องเขียนปิดทางเลือกไว้ทั้งหัวและท้าย prompt ผลแปลกส่วนใหญ่มาจากทางที่เราลืมปิด
ผมทำปกให้เพจนี้จาก terminal มาสองเดือน สั่งทีเดียวได้ไฟล์ PNG ออกมาเลย ไม่ต้องเปิดโปรแกรมอะไร
มีอยู่วันนึงผมสั่งให้มันทำ brand board ใส่ swatch สี ใส่ตัวอย่างฟอนต์ ครบตามที่เขียนไว้ใน prompt
สิ่งที่ได้กลับมาคือรูปการ์ตูนคนนอนป่วยอยู่บนเตียง มีปรอทคาปากด้วย
ตอนนั้นงงมาก เพราะ prompt ไม่มีคำว่าป่วย ไม่มีคำว่าเตียง ไม่มีอะไรใกล้เคียงเลยสักคำ
ต้นเหตุที่ผมเข้าใจผิดมาตลอด
ผมนึกว่าคำสั่งที่ใช้อยู่มันคือ image API แบบส่ง prompt เข้าไป ได้รูปออกมา จบ
มันไม่ใช่ สิ่งที่ผมเรียกใช้จริงๆ คือ codex exec ซึ่งเป็น agent ไม่ใช่ endpoint พอบอกมันแค่ว่า "generate an image" มันจะไปเลือกวิธีเองว่าจะทำยังไงถึงจะได้ภาพมา
บางทีมันเรียก image model จริง บางทีมันเขียน SVG ส่งมาให้แทน บางทีมันตีความ prompt ใหม่ทั้งดุ้นแล้ววาดสิ่งที่มันคิดว่าเราน่าจะอยากได้
วันนั้นมันเลือกทางที่สาม
พอมองย้อนกลับไป มันไม่ได้ทำอะไรผิดเลย ผมสั่งว่า "ทำรูปให้หน่อย" แล้วมันก็ทำรูปให้ ตัว agent มีอิสระในการเลือกวิธี เพราะผมไม่เคยบอกว่าห้ามเลือกทางอื่น
บรรทัดเดียวที่แก้เรื่องนี้ได้
วิธีแก้คือเขียนให้ชัดตั้งแต่ต้นว่าห้ามไปทางอื่น แล้วย้ำอีกทีตอนท้าย
เปิดหัวด้วยบรรทัดนี้:
Generate an image using gpt-image-2 image generation.
Do NOT draw with code, SVG, HTML, or canvas.
Call the image model directly.
แล้วปิดท้าย prompt ด้วยบรรทัดนี้:
Generate the image with gpt-image-2 and save it as a PNG.
สองบรรทัดนี้ไม่ใช่ของประดับ ถ้าไม่มี agent จะกลับไปเลือกทางเองเหมือนเดิม ตั้งแต่ใส่เข้าไปผมยังไม่เจอเคสหลุดอีกเลย
อีกสองอย่างที่เสียเวลาไปเยอะกว่าจะรู้
อย่างแรกคือห้ามยิงพร้อมกันหลายรูปแล้วเดินหนี ตอนแรกผมสั่งทีเดียวห้ารูปเพราะคิดว่าประหยัดเวลา ปัญหาคือคำสั่งนี้มันรันแบบ background ทุกครั้ง เวลามันพังมันไม่ได้ error ออกมา มันเงียบ แล้วหน้าตาของงานที่พังกับงานที่สำเร็จมันเหมือนกันเป๊ะ จนกว่าจะไปเปิดไฟล์ดูจริงๆ ทีละอัน ทำทีละรูปแล้วเช็คก่อนค่อยทำอันต่อไป ช้ากว่าแต่ไม่ต้องมานั่งไล่ทีหลัง
อย่างที่สองคือมันไม่เหมาะกับงานที่มีหลายช่องหลายบล็อก พวก brand board หรือ swatch grid หรือ layout ที่ต้องวางของเป็นตารางเป๊ะๆ มันจะเบลอทุกครั้ง งานพวกนั้นผมย้ายไป render ด้วยโค้ดแทน เพราะต้องการความแน่นอน ส่วน image gen เอาไว้ทำปกที่เน้นตัวหนังสือ ไดอะแกรมง่ายๆ กับรูปเดี่ยวๆ ที่ไม่ต้องเป๊ะ
เรื่องที่ดีกว่าที่คิดคือภาษาไทย มันเรนเดอร์ได้ถูกต้อง สระไม่ลอย วรรณยุกต์ไม่หลุด ซึ่งเป็นจุดที่เครื่องมือ render ด้วยโค้ดพังบ่อยเวลาผสมไทยกับอังกฤษในบรรทัดเดียวกัน
สิ่งที่ได้กลับมาจริงๆ จากเรื่องนี้
ที่เล่ามาทั้งหมดมันไม่ใช่เรื่องของเครื่องมือทำรูป
มันคือการที่ผมสั่ง agent โดยคิดว่ากำลังเรียก function อยู่ พอผลลัพธ์ออกมาแปลก สัญชาตญาณแรกคือคิดว่าเครื่องมือมันห่วย ทั้งที่จริงๆ คือผมเปิดช่องให้มันตัดสินใจเอง แล้วมันก็ตัดสินใจ
เวลาผลลัพธ์จาก agent ออกมาไม่ตรงที่คิด ลองย้อนดูก่อนว่า prompt เราเปิดทางเลือกอะไรทิ้งไว้บ้างโดยไม่ได้ตั้งใจ ส่วนใหญ่มันไม่ได้ทำผิด มันแค่เดินไปในทางที่เราลืมปิด