Skills, Scheduled tasks และ Goal mode: สามฟีเจอร์ที่ให้ ChatGPT ทำงานเองโดยเราไม่ต้องนั่งสั่งทีละขั้น
Skills, Scheduled tasks และ Goal mode คือสามฟีเจอร์ใน ChatGPT และ Codex ที่ปล่อยให้ AI ทำงานเองโดยไม่ต้องนั่งสั่งทีละขั้น ทั้งสามอย่างมีหลักเดียวกันว่า ยิ่งปล่อยให้ AI ทำงานเองมากเท่าไร ก็ยิ่งต้องกำหนดขอบเขตให้ชัด

ChatGPT และ Codex (ตัวช่วยเขียนโค้ดของ OpenAI ที่สั่งงานด้วยการพิมพ์คำสั่ง) มีสามฟีเจอร์ที่ปล่อยให้ AI ทำงานเองได้โดยเราไม่ต้องนั่งเฝ้าหน้าจอคอยสั่งทีละขั้น คือ Skills, Scheduled tasks และ Goal mode
ปกติเวลาใช้ AI ทำงาน เราต้องพิมพ์คำสั่งทีละอัน รอมันตอบ แล้วพิมพ์ต่อ ต้องเฝ้าแบบนี้จนจบ สามฟีเจอร์นี้ช่วยตัดขั้นตอนการนั่งเฝ้าออกไป โดย Skills เก็บงานที่เราทำซ้ำทุกสัปดาห์ให้กลายเป็นสูตรตายตัว Scheduled tasks ตั้งเวลาให้งานรันเองแม้ตอนเราไม่อยู่ ส่วน Goal mode รับงานยาวหลายสิบขั้นแล้วทำต่อเนื่องจนเสร็จตามเป้าหมาย ทั้งสามฟีเจอร์นี้ใช้ได้ทั้งในแอป ChatGPT และใน Codex ที่เน้นงานเขียนโค้ด บางตัวอย่างจึงเน้นงานสายเทคนิค แต่หลักคิดเดียวกันนี้ใช้ได้กับทั้งงานที่ทำซ้ำและงานยาว เอกสารของ ChatGPT Learn แยกอธิบายแต่ละฟีเจอร์ไว้คนละชุด แต่ทั้งหมดอยู่บนหลักคิดเดียวกัน
แต่อิสระที่มากขึ้นก็มีสิ่งที่ต้องแลก ยิ่งเราไม่ได้นั่งดู AI ทำงาน ก็ยิ่งต้องกำหนดขอบเขตให้ชัดตั้งแต่แรก เพราะถ้ามันเข้าใจงานคลาดเคลื่อน มันจะเดินหน้าทำผิดไปเงียบๆ จนกว่าเราจะกลับมาเห็น นี่คือหลักที่เชื่อมทั้งสามฟีเจอร์เข้าด้วยกัน และเป็นเหตุผลว่าทำไมแต่ละอันถึงเริ่มต้นที่คำว่า "บอกให้ชัด" เหมือนกันหมด
เปลี่ยนงานซ้ำๆ ให้กลายเป็นสูตรตายตัว
Skills คือการเก็บวิธีทำงานหนึ่งอย่างไว้เป็นสูตรที่ AI หยิบมาทำตามได้เป๊ะทุกครั้ง หน้าตาจริงของมันเรียบง่ายกว่าที่คิด มันคือโฟลเดอร์หนึ่งที่มีไฟล์ชื่อ SKILL.md อยู่ข้างใน ไฟล์นี้บอกแค่สองอย่างที่จำเป็นคือชื่อของ skill (name) กับคำอธิบายว่ามันทำอะไร (description) เท่านี้ก็เป็น skill ที่ใช้งานได้แล้ว ส่วนอื่นอย่างสคริปต์ เอกสารอ้างอิง หรือไฟล์ประกอบ จะใส่เพิ่มก็ได้ ไม่ใส่ก็ได้
เบื้องหลังมันฉลาดกว่านั้นอีกชั้น AI ไม่ได้จำเนื้อหาเต็มของทุก skill ไว้ในหัวตลอดเวลา มันเก็บไว้แค่ชื่อกับคำอธิบายสั้นๆ ของแต่ละอัน รวมแล้วไม่เกิน 2% ของพื้นที่ความจำที่โมเดลมี (หรือราว 8,000 ตัวอักษรถ้าระบบไม่รู้ขนาดพื้นที่ความจำ) แล้วค่อยโหลดสูตรเต็มเข้ามาตอนที่เลือกใช้ skill นั้นจริงๆ เพราะแบบนี้เราถึงมี skill ไว้เป็นสิบๆ อันได้โดยไม่ทำให้มันช้าหรือสับสน
เวลาจะเรียกใช้มีสองแบบ แบบแรกคือเราเรียกเองด้วยการพิมพ์ /skills หรือพิมพ์ชื่อ skill นำหน้าด้วยเครื่องหมาย $ ตรงๆ ส่วนอีกแบบคือให้ Codex อ่านคำอธิบายของ skill แล้วเลือกใช้ให้ตรงกับงานที่เราสั่งโดยอัตโนมัติ จุดนี้เองเป็นเหตุผลว่าทำไมช่องคำอธิบายถึงสำคัญ เพราะมันคือสิ่งที่บอกว่าควรหยิบ skill นี้มาใช้ตอนไหน รูปแบบไฟล์ SKILL.md นี้ไม่ได้มีไว้ใช้กับ Codex เท่านั้น แต่ยึดตามมาตรฐานเปิดที่ชื่อ Agent Skills ซึ่งเครื่องมืออื่นก็ใช้ร่วมกันได้
แล้วจะสร้าง skill ยังไง มีสามทาง ทางแรกคือ Record & Replay ให้มันดูเราทำงานนั้นหนึ่งรอบ แล้วมันจะสรุปขั้นตอนออกมาเป็นสูตรให้เอง ทางที่สองคือใช้ตัวช่วยชื่อ $skill-creator ซึ่งจะถามว่า skill นี้ทำอะไร ควรทำงานตอนไหน และต้องมีสคริปต์หรือใช้แค่คำสั่งข้อความ ส่วนทางที่สามคือสร้างโฟลเดอร์ของ skill และเขียนไฟล์ SKILL.md เอง
ทางที่ง่ายที่สุดสำหรับคนเพิ่งเริ่ม คือเปิดแชตใหม่แล้วเล่าให้มันฟังว่าอยากได้อะไร ที่เหลือปล่อยให้ $skill-creator ถามต่อเอง ลองทำตามนี้ได้เลย
- เปิดแชตใหม่ใน ChatGPT หรือ Codex
- พิมพ์บอกงานที่ทำซ้ำบ่อยๆ เช่น "อยากได้ skill ที่สรุปอีเมลลูกค้าเป็นบูลเล็ตสามข้อ พร้อมจัดลำดับความเร่งด่วน"
- ตอบคำถามที่มันถามกลับ ทั้งเรื่องว่าทำอะไร ควรเริ่มทำงานตอนไหน ต้องมีสคริปต์ไหม แล้วมันจะร่างสูตรออกมาให้
พอเริ่มมี skill หลายอัน มีกฎง่ายๆ ที่ช่วยให้มันไม่พังคือ ให้แต่ละ skill โฟกัสงานเดียว อย่ายัดหลายงานรวมกัน เริ่มจากเขียนคำสั่งเป็นข้อความธรรมดาก่อน แล้วค่อยใช้สคริปต์เมื่อจำเป็นต้องได้ผลลัพธ์ที่แน่นอนหรือต้องต่อกับเครื่องมือภายนอกเท่านั้น เขียนขั้นตอนแบบสั่งตรงๆ ระบุว่าอินพุตคืออะไร เอาต์พุตหน้าตาแบบไหน จากนั้นลองใช้ prompt (ชุดคำสั่งที่เราพิมพ์บอก AI) ทดสอบว่า AI เลือก skill ได้ตรงกับคำอธิบายที่เราเขียนไว้จริงไหม
ตั้งเวลาให้งานรันเองตอนเราไม่อยู่
Scheduled tasks คืองานที่ตั้งเวลาให้รันซ้ำเป็นรอบๆ อยู่เบื้องหลัง เราดูสถานะทั้งหมดได้ในหน้า Scheduled ว่าอันไหนกำลังทำงาน อันไหนหยุดพักไว้ อันไหนเสร็จแล้ว รวมถึงดูรอบล่าสุดที่เพิ่งรันไปได้ด้วย เรื่องที่คนมักสับสนและควรแยกให้ชัดคือ Scheduled tasks มีสองแบบที่ทำงานต่างกัน
แบบเริ่มใหม่ทุกรอบ ทุกครั้งที่ถึงเวลา มันจะเปิดงานใหม่จาก prompt เดิมที่เราบันทึกไว้ เหมาะกับงานที่แต่ละรอบไม่ต้องรู้ว่ารอบก่อนทำอะไร เช่น การสรุปข่าวทุกเช้า เพราะรอบวันนี้ไม่จำเป็นต้องรู้ว่ารอบเมื่อวานสรุปอะไร
แบบต่อยอดจากงานเดิม (Schedule work from a task) มันจะกลับไปทำงานต่อในบทสนทนาเดิม โดยจำบริบทที่สะสมมาทั้งหมด เหมาะกับงานที่ต้องรู้ว่ารอบก่อนไปถึงไหน เช่น ติดตามความคืบหน้าของงานยาว คอยเช็กแหล่งข้อมูลที่เชื่อมไว้เป็นระยะ หรือรีวิวงานต่อเนื่องเป็นรอบๆ
จะเลือกอันไหน ให้ดูที่ตัวงาน ถ้างานแต่ละรอบเป็นอิสระต่อกันไม่ต้องจำของเก่า ใช้แบบเริ่มใหม่ ถ้างานต้องต่อเนื่องและอาศัยบริบทเดิม ใช้แบบต่อยอด
ถ้าอยากได้รอบเวลาที่ละเอียดกว่าตัวเลือกสำเร็จรูป เราตั้งเองได้ด้วยรูปแบบมาตรฐานที่เรียกว่า RRULE เช่น RRULE:FREQ=MONTHLY;BYMONTHDAY=1;BYHOUR=9;BYMINUTE=0 หมายถึงให้รันทุกวันที่ 1 ของเดือน เวลา 9 โมงเช้า
ที่น่าสนใจคือ Scheduled tasks ใช้ร่วมกับ Skills ได้โดยตรง เพราะในช่อง prompt ของงานที่ตั้งเวลา เราเรียก skill ด้วยชื่อของมัน ($ชื่อ-skill) ได้เลย ตัวอย่างในเอกสารคือ สร้าง skill ชื่อ recent-code-bugfix เพื่อค้นหาบั๊กที่เกิดจาก commit (จุดบันทึกการแก้โค้ดแต่ละครั้ง) ของเราในช่วงสัปดาห์ที่ผ่านมา แก้โค้ดเท่าที่จำเป็น ตรวจสอบผล แล้วรายงานกลับ จากนั้นตั้งเวลาให้มันรันทุก 24 ชั่วโมง เท่านี้ก็ได้ผู้ช่วยที่คอยไล่แก้บั๊กจากงานของเราให้ทุกวันโดยไม่ต้องสั่ง
มีจุดที่ต้องคอยดูอยู่อย่างหนึ่ง เราสามารถแยกงานที่ตั้งเวลาในโปรเจกต์โค้ดไปทำใน worktree (สำเนาโปรเจกต์แยกที่ให้งานหนึ่งทำโดยไม่ชนกับงานที่เราค้างอยู่) ได้ ข้อดีคืองานใหม่จะไม่ไปยุ่งกับงานเดิมที่เราค้างอยู่ แต่ถ้าปล่อยไว้นานๆ worktree พวกนี้จะสะสมมากขึ้นเรื่อยๆ จึงควรลบอันที่ไม่ใช้แล้วออกเป็นระยะ
งานยาวหลายสิบขั้น เริ่มจากบอกให้ชัดว่าแบบไหนถึงเรียกว่าเสร็จ

Goal mode คือโหมดสำหรับงานยาวที่มีหลายสิบขั้นตอน แทนที่จะสั่งทีละขั้น เราบอกมันสามอย่าง ได้แก่ ผลลัพธ์ที่ต้องการ ข้อจำกัด และเกณฑ์ว่าแบบไหนถึงถือว่าเสร็จ แล้วเก็บงานที่เกี่ยวข้องกันไว้ในบทสนทนาเดียว มันจะเลือกขั้นตอนถัดไปและตัดสินได้เองว่าเมื่อไหร่งานเสร็จ
วิธีเริ่มคือพิมพ์ /goal แล้วตามด้วยข้อความเป้าหมาย ข้อความนี้จะทำหน้าที่ทั้งเป็นคำสั่งแรกและเกณฑ์ตัดสินว่างานเสร็จ ระหว่างที่มันทำงาน เราใช้แถบความคืบหน้าเพื่อหยุดพัก สั่งทำต่อ แก้เป้าหมาย หรือล้างทิ้งได้ตลอด
แต่ถ้ายังนึกไม่ออกว่าปลายทางที่อยากได้หน้าตาเป็นยังไง อย่าเพิ่งตั้ง goal แต่ให้เริ่มจาก /plan ก่อน มันจะถามเราทีละข้อ ช่วยหาข้อจำกัดที่เรายังไม่ได้คิดถึง แล้วสรุปออกมาเป็นเป้าหมายที่มีเกณฑ์วัดผลชัดเจน จากนั้นค่อยนำเป้าหมายนั้นไปตั้งด้วย /goal
หัวใจของ Goal mode อยู่ที่นิยามของคำว่า "เสร็จ" เอกสารแบ่งรายละเอียดออกเป็นสามส่วน โดยควรใส่แต่ละส่วนให้ครบเมื่อเกี่ยวข้องกับงาน
- ผลลัพธ์ บอกผลที่ต้องการจริงๆ ไม่ใช่แค่กิจกรรมที่ให้ทำ
- ข้อจำกัด เครื่องมือที่ต้องใช้ ข้อห้าม สิ่งที่ต้องเข้ากันได้ หรือวิธีที่ห้ามใช้
- วิธีพิสูจน์ เทสต์ (โปรแกรมที่ไว้ตรวจว่าผลถูกต้อง) การวัด หรือเกณฑ์รีวิวที่ยืนยันว่างานเสร็จจริง ไม่ใช่แค่เคลมว่าเสร็จ
ตัวอย่างต่อไปนี้เป็นเป้าหมายสำหรับงานย้ายโค้ดจาก JavaScript ไป TypeScript (การเปลี่ยนภาษาที่ใช้เขียนโปรแกรมของทั้งโปรเจกต์) โดยเขียนครบทั้งสามส่วน
Migrate this codebase from JavaScript to TypeScript. Preserve existing behavior,
compile in strict mode without explicit any types, and make the full test suite pass.
ประโยคเดียวนี้มีองค์ประกอบครบทั้งสามส่วน ผลลัพธ์คือย้ายทั้งโปรเจกต์เป็น TypeScript ส่วนข้อจำกัดคือโปรแกรมต้องยังทำงานได้เหมือนเดิมและต้องคอมไพล์ (แปลงโค้ดให้พร้อมใช้งาน) ผ่านในโหมดตรวจเข้มงวด วิธีพิสูจน์คือชุดเทสต์ทั้งหมดต้องผ่าน มันเลยไม่มีทางอ้างว่าเสร็จทั้งที่งานยังไม่เรียบร้อย
เรื่องสำคัญที่หลายคนเข้าใจผิดคือ การตั้ง goal ไม่ได้แปลว่าให้สิทธิ์ AI มากขึ้น สิทธิ์และนโยบายการอนุมัติยังเหมือนเดิม ถ้าถึงจุดที่ต้องตัดสินใจ มันจะหยุดรอเราเสมอ ไม่ได้ถือวิสาสะทำเอง และถ้าอยากให้งานหลายอันทำพร้อมกัน แต่ละ goal จะเก็บบริบทและผลของตัวเองแยกกัน ข้อควรระวังคืออย่าให้สองงานไปแก้ไฟล์เดียวกันพร้อมกัน ถ้าเป็นงานโค้ด ควรแยก worktree เพื่อให้แต่ละงานมีสำเนาโปรเจกต์ของตัวเอง
ปล่อยมือได้ แต่ต้องกันความเสี่ยงไว้ก่อน

จุดที่ต้องระวังที่สุดเมื่อปล่อยให้ AI ทำงานเองคือขอบเขตสิทธิ์ที่ AI ได้รับ ทั้ง Scheduled tasks และ Goal mode รันในกรอบที่เรียกว่า sandbox (ขอบเขตที่กำหนดว่า AI ทำอะไรได้บ้าง) ซึ่งมีสามระดับ คือแบบอ่านอย่างเดียว แบบเขียนได้เฉพาะในพื้นที่งาน และแบบเข้าถึงได้เต็มที่
ระดับสุดท้ายเป็นระดับที่อันตราย เพราะมันแก้ไฟล์ รันคำสั่ง หรือต่อเน็ตได้เองโดยไม่ต้องถามเรา ยิ่งเป็นงานที่รันเองตอนเราไม่อยู่ ความเสี่ยงยิ่งสูง เอกสารจึงแนะนำให้ใช้แบบเขียนได้เฉพาะในพื้นที่งาน พร้อมกำหนดว่าระบบใช้คำสั่งใดได้บ้าง แทนที่จะเปิดสิทธิ์เต็มค้างไว้ตลอด ความสะดวกแบบนี้จึงมีสิ่งที่ต้องแลก ยิ่งเราไม่ได้นั่งเฝ้า ก็ยิ่งต้องกำหนดขอบเขตให้แคบไว้ก่อน
ถ้าสังเกตดีๆ จะเห็นว่าทั้งสามฟีเจอร์ไม่ได้ทำให้เราทำงานน้อยลงเฉยๆ แต่เปลี่ยนบทบาทของเราจากคนที่นั่งสั่งทีละขั้น มาเป็นคนกำหนดขอบเขตให้ชัดตั้งแต่ต้น Skills คือการเขียนสูตรให้ชัด Scheduled tasks คือการทดสอบ prompt ให้ได้ผลสม่ำเสมอก่อนปล่อยให้รันเอง และ Goal mode คือการบอกให้ชัดว่าเสร็จคืออะไร
เพราะสุดท้ายแล้ว ยิ่งเราปล่อยให้ AI ทำงานเองมากเท่าไร ขอบเขตที่เรากำหนดไว้ให้มันก็ยิ่งต้องชัดเจนขึ้นเท่านั้น
ที่มา:
- บทความ Build skills จาก ChatGPT Learn
- บทความ Scheduled tasks จาก ChatGPT Learn
- บทความ Long-running work จาก ChatGPT Learn



