การสร้างรูปภาพที่ดีด้วย AI ไม่ควรให้ความรู้สึกเหมือนการร่ายมนตร์ แต่ทว่านั่นคือสิ่งที่ทีมส่วนใหญ่ทำ พวกเขาไล่ล่าหาการผสมผสานของคำคุณศัพท์ที่เหมาะสม โดยหวังว่าคำว่า "cinematic," "hyper-detailed," หรือ "8K" จะช่วยปลดล็อกผลลัพธ์ที่ต้องการได้ สมาชิกคนหนึ่งในทีมอาจจะยึดติดกับคำว่า "bokeh" และ "golden hour" ในขณะที่อีกคนคอยจดบันทึกชุดคำศัพท์ "วิเศษ" ที่เจอในกระทู้ Reddit ไว้ในสเปรดชีตส่วนตัว ผลลัพธ์ที่ได้จึงคาดเดาได้เสมอ นั่นคือรูปภาพแต่ละรูปดูไม่เหมือนกันเลย รอบการตรวจงานยืดเยื้อออกไป และไม่มีใครสามารถอธิบายได้ว่าทำไมพรอมต์บางอันถึงได้ผล ในขณะที่บางอันกลับล้มเหลว
เทคนิคเฉพาะตัวไม่สามารถขยายผลได้ (scale) และมันไม่เคยทำได้เลย เมื่อทุกคนเขียนพรอมต์เหมือนกำลังแต่งบทกวี ความสม่ำเสมอก็จะหายไป ดีไซน์เนอร์คนหนึ่งต้องการลุคมินิมอล อีกคนต้องการความรู้สึกแบบภาพยนตร์ ทั้งคู่ใช้คำที่คลุมเครือเหมือนกันแต่จินตนาการถึงผลลัพธ์ที่ต่างกันโดยสิ้นเชิง ความวุ่นวายนี้จะปรากฏให้เห็นในคิวการตรวจงาน ผู้มีส่วนได้ส่วนเสียปฏิเสธรูปภาพด้วยเหตุผลที่ไม่มีใครสามารถสืบย้อนกลับไปถึงคำสั่งเฉพาะเจาะจงได้ มันเป็นเพราะการเลือกใช้คำ? ลำดับของคำ? หรืออารมณ์ของภาพ? สุดท้ายทีมงานต้องลงเอยด้วยการเขียนพรอมต์ใหม่ทั้งหมดตั้งแต่ต้น แทนที่จะแก้ไขจุดที่ผิดพลาดจริงๆ
ผมใช้เวลาศึกษาพรอมต์คุณภาพสูงกว่า 12,502 รายการจาก GitHub และ Evolink.ai รูปแบบที่ปรากฏออกมาไม่ใช่เรื่องของความคิดสร้างสรรค์เลย พรอมต์ที่ให้ผลลัพธ์ที่เชื่อถือได้และทำซ้ำได้นั้น อ่านดูเหมือน "ข้อกำหนดทางเทคนิค" (technical specifications) มากกว่าเรื่องสั้น ผู้เขียนไม่ได้พยายามทำให้โมเดลประทับใจด้วยภาษาที่สละสลวย แต่พวกเขากำลังสร้างคำสั่งในแบบที่วิศวกรสร้างแผนผัง: มีความแม่นยำ เป็นลำดับชั้น และชัดเจน
นั่นหมายความว่าคุณควรเลิกคิดแบบนักเขียนเชิงสร้างสรรค์ และเริ่มคิดแบบนักเขียนข้อกำหนดทางเทคนิค ความแตกต่างนี้ไม่ใช่แค่เรื่องทางทฤษฎี การเขียนเชิงสร้างสรรค์คือการวางคำคุณศัพท์ซ้อนกันแล้วหวังว่าจะเกิดอารมณ์ภาพ แต่การเขียนข้อกำหนดคือการแยกตัวแปรและควบคุมพวกมันทีละส่วน
นี่คือโครงสร้าง 6 ชั้นที่ปรากฏอยู่ในพรอมต์ที่มีประสิทธิภาพสูงเหล่านั้นอย่างสม่ำเสมอ
Goal
เริ่มจากการกำหนดว่ารูปภาพนี้มีไว้เพื่ออะไร คุณกำลังสร้างภาพ hero shot ของสินค้าสำหรับหน้า landing page? แผนภาพทางเทคนิคสำหรับเอกสารประกอบ? หรือตัวละครสไปรต์ (character sprite) สำหรับเกม? เป้าหมายจะเป็นตัวกำหนดทุกการตัดสินใจที่ตามมา หากไม่มีเปหมาย คุณก็เหมือนกำลังยิงธนูไปอย่างไร้ทิศทางแล้วมานั่งบ่นเรื่องลูกธนู
Canvas
วางรากฐานทางเทคนิคก่อนที่คุณจะเริ่มบรรยายองค์ประกอบภาพแม้แต่ชิ้นเดียว กำหนดอัตราส่วนภาพ (aspect ratio), ความละเอียด (resolution) และขอบเขตสี (color space/gamut) เมื่อจำเป็น หากรูปภาพของคุณต้องเป็นแบนเนอร์โซเชียลมีเดีย ให้ระบุเป็น 16:9 หากต้องเป็นไอคอนแอปมือถือ ให้ระบุเป็น 1:1 ผืนผ้าใบคือกรอบภาพ หากคุณกำหนดผิด แม้แต่ตัวแบบที่สมบูรณ์แบบก็อาจจะดูผิดที่ผิดทางได้
Layout
อธิบายว่าสิ่งต่างๆ ควรอยู่ตรงไหนและอะไรคือสิ่งที่สำคัญที่สุด ตัวแบบอยู่ตรงกลางหรือไม่? ถูกดันไปทางซ้ายหนึ่งในสามเพื่อเว้นที่ว่างสำหรับพาดหัวข่าวใช่ไหม? คุณต้องการพื้นที่ว่าง (negative space) สำหรับวางข้อความ หรือต้องการให้ภาพเต็มเฟรม? เลย์เอาต์คือการสร้างลำดับความสำคัญ มันบอกโมเดลว่าอะไรควรเป็นจุดสนใจและอะไรควรมีพื้นที่หายใจ ให้คิดซะว่ามันคือการทำ wireframe ด้วยตัวอักษร
Subject
จากนั้นจึงลงรายละเอียดองค์ประกอบภาพหลัก จงระบุให้ชัดเจนเกี่ยวกับวัตถุ, บุคคล, สัตว์ หรือฉาก แทนที่จะใช้คำว่า "สุนัข" ให้ใช้คำว่า "สุนัขพันธุ์บีเกิลขนาดกลางในขณะกำลังก้าวเดิน มองจากมุมต่ำแบบสามส่วน (low three-quarter angle)" แทนที่จะใช้คำว่า "รถยนต์" ให้ใช้คำว่า "รถซีดานสีเงินจอดทำมุม 45 องศากับกล้อง เห็นด้านคนขับชัดเจน" เลเยอร์ของตัวแบบคือจุดที่ความแม่นยำสำคัญที่สุด เพราะโมเดล AI มักจะเลือกค่าเริ่มต้นเป็นเวอร์ชันที่ธรรมดาที่สุดของสิ่งที่คุณบรรยาย จงกำจัดความธรรมดาออกไปโดยการระบุรูปทรง, มุมมอง และลักษณะที่มองเห็นให้แคบลง
Style
ระบุชื่อสไตล์ให้เฉพาะเจาะจง อย่าบรรยายแค่ความรู้สึก จงพูดว่า "1980s editorial fashion photography" หรือ "flat vector illustration in the style of mid-century travel posters" หรือ "Unreal Engine 5 render with physically based materials" หรือ "ink wash painting on rice paper" ยิ่งคุณระบุชื่ออ้างอิงสไตล์ได้ชัดเจนและมีขอบเขตมากเท่าไหร่ โมเดลก็ยิ่งไม่ต้องเดาน้อยลงเท่านั้น หากคุณพูดว่า "modern" คนสิบคนจะจินตนาการถึงยุคสมัยที่ต่างกันสิบแบบ แต่ถ้าคุณพูดว่า "Bauhaus poster design from 1923" คุณได้ปิดช่องว่างนั้นแล้ว
Constraints
ระบุสิ่งที่ห้ามปรากฏอย่างชัดเจน เลเยอร์นี้จะช่วยป้องกันอุบัติเหตุแปลกๆ ที่ทำให้เสียเวลาในการตรวจงาน หากคุณกำลังสร้างภาพพอร์ตเทรตสำหรับเว็บไซต์องค์กร ให้กำหนดข้อห้ามเกี่ยวกับใบหน้าที่เบลอ, แว่นกันแดด หรือโลโก้แบรนด์ที่มองเห็นได้ หากคุณต้องการพื้นหลังที่สะอาดเพื่อนำไปตัดต่อ ให้กำหนดข้อห้ามเกี่ยวกับสีไล่ระดับ (gradients), ข้อความ หรือวัตถุอื่นๆ Constraints ทำหน้าที่เหมือนราวกันตก (guardrails) หากไม่มีพวกมัน โมเดลจะใส่สิ่งต่างๆ เข้ามาอย่างอิสระ ซึ่งอาจทำลายการนำภาพไปใช้งานได้อย่างเงียบเชียบ
ให้ผมแสดงให้คุณเห็นว่าสิ่งนี้เมื่อนำไปใช้จริงจะเป็นอย่างไร ลองจินตนาการว่าคุณต้องการรูปภาพสำหรับส่วนหัว (header) ของแดชบอร์ด SaaS
วิธีแบบเดิมจะมีลักษณะแบบนี้: "ภาพประกอบสมัยใหม่ที่สวยงามของหญิงสาววัยทำงานที่มีความสุข กำลังทำงานบนแล็ปท็อปในออฟฟิศที่สว่างสดใสและมีสีสัน ดีไซน์สะอาดตา คุณภาพสูง ไม่มีมือที่ดูผิดปกติ"
ส่วนวิธีแบบใช้ Framework จะเป็นแบบนี้:
- เป้าหมาย: ภาพ Hero สำหรับหน้า Pricing ของ B2B SaaS ต้องดูน่าเชื่อถือและเป็นมืออาชีพ
- Canvas: แบนเนอร์แบบ Ultrawide อัตราส่วน 21:9 เหมาะสำหรับส่วนหัวของเว็บไซต์, RGB
- Layout: ตัวแบบนั่งอยู่ทางหนึ่งในสามด้านขวา เว้นที่ว่างด้านหนึ่งในสามด้านซ้ายไว้สำหรับวางข้อความทับ (text overlay) โดยเฉพาะ และสายตาของตัวแบบมองไปทางซ้ายเล็กน้อยไปยังพื้นที่สำหรับพาดหัว
- Subject: ผู้หญิงในชุด Business Casual กำลังพิมพ์งานบนแล็ปท็อปสีเงินทรงบาง มองจากมุมเฉียง (three-quarter view) จากทางซ้ายของกล้อง เห็นมือบนคีย์บอร์ดอย่างชัดเจน
- Style: ภาพถ่ายไลฟ์สไตล์แนวองค์กร (Corporate lifestyle photography), แสงธรรมชาติแบบฟุ้งละมุน (soft diffused daylight), โทนสีกลางที่มีสีฟ้าแซมเล็กน้อย, หน้าชัดหลังเบลอ (shallow depth of field)
- ข้อจำกัด: ไม่มีโลโก้ปรากฏบนเสื้อผ้า, ไม่มีข้อความบนหน้าจอ, ไม่มีคนอื่น, ไม่มีสิ่งของวางระเกะระกะบนโต๊ะ, ไม่ยิ้มกว้างจนเกินไป
สังเกตสิ่งที่เกิดขึ้นนะครับ ไม่มีใครกำลัง "อธิษฐาน" (wish) ขอให้ได้ภาพที่ต้องการ แต่ทุกเลเยอร์จะควบคุมตัวแปรหนึ่งอย่างอย่างแม่นยำ
ทำไมสิ่งนี้ถึงเปลี่ยนทุกอย่าง
โครงสร้างนี้ช่วยแก้ปัญหาสำคัญสองประการที่ทีมต้องเผชิญอยู่ทุกวัน
อย่างแรก คือการปรับปรุงงาน (iteration) แบบแยกส่วนสามารถทำได้ เมื่อผู้มีส่วนได้ส่วนเสีย (stakeholder) บอกว่าภาพดูเป็นกันเองเกินไป คุณไม่จำเป็นต้องเขียน Prompt ใหม่ทั้งหมด เพียงแค่เปิดเลเยอร์ Style แล้วเปลี่ยนจาก "corporate lifestyle photography" เป็น "studio editorial portrait" เมื่อฝ่ายการตลาดบอกว่าข้อความที่วางทับ (text overlay) ถูกกลืนหายไป คุณไม่ต้องเดาสุ่มหาคำคุณศัพท์ใหม่ๆ แต่ให้ไปที่เลเยอร์ Layout แล้วเพิ่มพื้นที่ว่าง (negative space) แต่ละเลเยอร์ถูกแยกออกจากกัน คุณสามารถปรับจูนเครื่องจักรได้โดยไม่ต้องเปลี่ยนเครื่องยนต์ใหม่
อย่างที่สอง คือการสร้างความรับผิดชอบที่ชัดเจน เมื่อทีมใช้ Framework ร่วมกัน คุณจะรู้ทันทีว่าความผิดพลาดเกิดขึ้นที่จุดไหน หากองค์ประกอบภาพดูยุ่งเหยิง นั่นคือปัญหาที่ Layout หากภาพเบลอหรือจุดโฟกัสผิดที่ นั่นคือปัญหาที่ Canvas หรือ Subject หากความสวยงามดูไม่ตรงตามแบรนด์ นั่นคือปัญหาที่ Style คุณจะเลิกถกเถียงกันแบบคลุมเครือเรื่อง "Vibes" และเริ่มแก้ไขที่เลเยอร์เฉพาะเจาะจงแทน สิ่งนี้จะเปลี่ยนความคิดเห็นส่วนตัวให้กลายเป็นคำแนะนำที่นำไปปฏิบัติได้จริง (actionable feedback)
Prompt ที่ดีไม่ใช่เรื่องของการใช้ไหวพริบ ความฉลาดหลักแหลมนั้นเปราะบาง การเล่นคำหรือการใช้ภาษาที่สละสลวยอาจทำให้ผู้อ่านที่เป็นมนุษย์รู้สึกเพลิดเพลิน แต่สำหรับโมเดลที่พยายามทำตามคำสั่ง สิ่งเหล่านี้คือ "Noise" (สัญญาณรบกวน) สิ่งที่ใช้งานได้จริงคือโครงสร้าง และสิ่งที่ขยายผลได้ (scale) ก็คือโครงสร้าง
เมื่อคุณสร้าง Framework ขึ้นมา คุณจะเลิกสอนคนอื่นว่าต้องเขียน Prompt อย่างไร แต่คุณกำลังมอบระบบที่ใช้งานได้ผลทุกครั้ง เพื่อนร่วมทีมใหม่ไม่จำเป็นต้องใช้เวลาถึงหกเดือนเพื่อซึมซับความรู้เรื่อง Keyword ที่รู้กันเฉพาะกลุ่ม (tribal knowledge) พวกเขาแค่กรอกข้อมูลลงในหกเลเยอร์ ผู้ตรวจสอบก็ไม่ต้องคอยตามหาคนเขียน Prompt เพื่อถามว่าพวกเขาหมายถึงอะไร เพราะความหมายถูกแยกย่อยและระบุไว้ชัดเจนอยู่แล้ว
นั่นคือวิธีที่คุณจะได้ทั้งความเร็วและคุณภาพไปพร้อมๆ กัน ไม่ใช่ด้วยการใช้คำคุณศัพท์ที่หรูหราขึ้น แต่ด้วยสถาปัตยกรรม (architecture) ที่ดีขึ้น
หากคุณต้องการเจาะลึกเรื่อง Workflow ของ AI แบบมีโครงสร้าง เรามีการพูดคุยเรื่องนี้และระบบที่ใช้งานได้จริงอื่นๆ ใน GyaanSetu learning community โดยไม่จำเป็นต้องใช้ Keyword วิเศษใดๆ
