- ในความเป็นจริงที่โมเดล AI สำหรับเขียนโค้ดยัง ทำตามคำสั่งเดี่ยวได้ไม่อย่างน่าเชื่อถือ ก็ยังมีความคาดหวังเกินจริงต่อการเขียนโค้ดแบบเอเจนต์ที่ทำงานอัตโนมัติอยู่เบื้องหลัง
- ผู้เขียนพบปัญหาว่าแม้จะให้ ฟังก์ชัน Golang ขนาดราว 100 บรรทัด เป็นโค้ดอ้างอิงแล้ว ทั้ง GPT-5 และ Gemini Pro ก็ยังตกหล่นบางตรรกะหรือพลาดการอัปเดตบางส่วน
- การให้ระบบแบบเอเจนต์ จัดการ 50 ไฟล์และหลายฟังก์ชันโดยอัตโนมัติ ยังเป็นเรื่องไม่สมจริงในระดับเทคโนโลยีปัจจุบัน และอาจเสี่ยงทำให้เสียเวลากับการดีบักมากขึ้น
- เสียงตอบรับจากชุมชนแบ่งออกเป็นสองฝั่ง คือมองว่ายังพอใช้ได้ในวงจำกัดหากมี การพรอมป์ตอย่างเป็นระบบ การทำเอกสาร และการตรวจสอบทีละขั้น กับอีกฝั่งที่มองว่าเอเจนต์ยังไม่พร้อมใช้งานจริง
- ปัจจุบัน LLM ยังเป็น ระบบฐานความรู้มากกว่าความฉลาด ดังนั้นแนวทางที่เป็นจริงกว่าคือการใช้งานแบบเป็น “เครื่องมือ” โดยให้นักพัฒนาใส่บริบทเองและตรวจสอบทีละขั้น
ประเด็นปัญหาที่ผู้เขียนต้นฉบับตั้งคำถาม
- กรณีคำสั่งง่าย ๆ ยังล้มเหลว: ให้ฟังก์ชัน Golang 100 บรรทัดเป็นข้อมูลอ้างอิง แล้วขอให้อัปเดตอีกฟังก์ชันหนึ่งให้มีโครงสร้างแบบเดียวกัน แต่ทั้ง GPT-5 และ Gemini Pro ก็ยังตกหล่นบางตรรกะหรือพลาดบางจุดที่ต้องอัปเดต
- ความไม่สมจริงของการเขียนโค้ดแบบเอเจนต์: ในเมื่อแม้แต่ฟังก์ชันเดียวก็ยังจัดการได้ไม่ดี การปล่อยให้ระบบแบบเอเจนต์ไปแก้หลายฟังก์ชันข้าม 50 ไฟล์อย่างอัตโนมัติก็ยิ่งน่ากังวลว่าจะสร้างปัญหามากกว่าเดิม
- คำถามเรื่องการอัปเดตไฟล์ 6000 บรรทัด: ขอความเห็นจากชุมชนว่าควรแก้ไฟล์ขนาดราว 6000 บรรทัดอย่างปลอดภัยอย่างไร เช่น กรณีอัปเดตเวอร์ชัน Stripe
กรณีใช้งานเชิงบวกและวิธีการ
แนวทางทำเอกสารและสร้างดัชนีอย่างเป็นระบบ
- ใช้ไฟล์อ้างอิงแบบ Markdown: เก็บข้อมูลอ้างอิงไว้ในไฟล์
.md แล้วสั่งให้ AI อ่าน จะช่วยเพิ่มความสม่ำเสมอและความแม่นยำ
- ตัวอย่างพรอมป์ต: "อ้างอิงไฟล์
goLang_Update_reference.md ที่แนบมา สรุปจุดสำคัญของฟังก์ชัน update และใช้สิ่งนี้เป็นฐานในการร่างการอัปเดตซอฟต์แวร์"
- สร้างดัชนีในเครื่อง: สำหรับไฟล์ขนาดใหญ่ (6000 บรรทัดขึ้นไป) ให้สแกนเป็นช่วงละ 1000 บรรทัดเพื่อสร้างดัชนีที่มีชื่อฟังก์ชันและตำแหน่งบรรทัดอ้างอิง
- เวลาทำงานฝั่งฟรอนต์เอนด์อาจแยกใช้ดัชนีเฉพาะส่วน เช่น
fr.index.md
การจัดการเอเจนต์และโครงสร้างงาน
- ทำเอเจนต์ให้เชี่ยวชาญเฉพาะด้าน: แยกบทบาทเป็น design (architect), code exploration (codeseeker), coder เป็นต้น และให้ไฟล์กฎ
.md ที่เหมาะกับแต่ละบทบาท
- แนวทาง vertical slice: แบ่งงานเป็นฟีเจอร์ย่อยที่ทำจบได้ภายในไม่เกิน 100,000 โทเค็น
- หากเกิน 100,000 โทเค็น โอกาสที่เอเจนต์จะทำงานผิดพลาดจะเพิ่มสูงมาก
- บังคับให้บันทึกงานเป็นเอกสาร: กำหนดให้อัปเดต
docs/TASKS.md, docs/WORKLOG.md, docs/DECISIONS.md เสมอ เพื่อรักษาความต่อเนื่องของงาน
การใช้ Plan Mode และ Ask Mode
- Plan Mode: ตรวจดูทั้งโปรเจกต์ วางแผนตามคำขอ แล้วค่อยดำเนินการทีละขั้น
- Ask Mode: ใช้สำหรับค้นถามโค้ดเบส สำรวจไอเดีย หรือเทียบทางเลือก และมีประโยชน์ในฐานะเครื่องมือแทน Google/StackOverflow
แนวทางเขียน unit test ก่อน
- การพัฒนาแบบอิงการทดสอบ: เขียน unit test ก่อนสร้างฟังก์ชัน แล้วให้ AI สร้างโค้ดซ้ำจนกว่าจะผ่านการทดสอบ
- จะเพิ่มโอกาสได้โค้ดที่ถูกต้องตามหน้าที่อย่างมาก และหลังจากนั้นค่อยปรับแต่งหรือจัดระเบียบเพิ่มเติม
มุมมองเชิงสงสัยและการตระหนักถึงข้อจำกัด
ข้อจำกัดเชิงปฏิบัติของเอเจนต์
- การปล่อยทำงานโดยไม่มีการกำกับเป็นเรื่องเสี่ยงมาก: ในระดับเทคโนโลยีตอนนี้ การโยนงานให้แล้วปล่อยทำอัตโนมัติอยู่เบื้องหลังมีโอกาสล้มเหลวสูง
- มีโอกาสแต่งข้อมูลหรือมั่วคำตอบ: โมเดลมีแนวโน้มสร้าง hallucination มากกว่าจะสำเร็จจริง และในกรณีแย่ที่สุดอาจทำลายโค้ดเดิมได้
- ความซ้ำซ้อนของ Planning Mode: แค่ขอให้โมเดลพื้นฐานวางแผนละเอียดก็อาจเพียงพอแล้ว โดย Planning Mode ไม่ได้เพิ่มความสามารถใหม่อย่างมีนัยสำคัญ
ข้อจำกัดเชิงธรรมชาติของ LLM
- เป็นการทำนาย ไม่ใช่การให้เหตุผล: โมเดลทำงานโดยทำนายคำถัดไปโดยไม่ตรวจสอบผลลัพธ์ จึงยังเชื่อถือไม่ได้จนกว่าจะมี grounding, memory และ feedback ที่ดีขึ้น
- ฐานความรู้ที่ไร้ความฉลาด: LLM คือฐานความรู้ขั้นสูงที่ไม่มีความฉลาดจริง ๆ นักพัฒนาจึงต้องใส่ความฉลาดเอง (BYOI: Bring Your Own Intelligence) และให้บริบทด้วยตัวเอง
- หน่วยความจำไม่พอ: โมเดลไม่มีหน่วยความจำแท้จริง และพึ่งพาเพียง context กับ context cache ดังนั้นเมื่อเริ่มแชตใหม่ บริบทก็จะถูกรีเซ็ตทุกครั้ง
อคติด้านภาษาและข้อมูล
- Golang เสียเปรียบในเชิงเปรียบเทียบ: Golang มีโค้ดสาธารณะให้นำไปเรียนรู้น้อยกว่า Python หรือ JavaScript ทำให้โมเดลมีแพตเทิร์นและธรรมเนียมปฏิบัติให้เรียนรู้น้อยกว่า
- นี่เป็นปัจจัยเชิงโครงสร้างที่ทำให้การแก้ไขหรือแปลงโค้ดให้สม่ำเสมอทำได้ยากขึ้น
คู่มือเชิงปฏิบัติเพื่อใช้งานให้สำเร็จ
การพรอมป์ตและการให้บริบท
- สั่งให้ชัดและละเอียด: ใช้ไวยากรณ์และเครื่องหมายวรรคตอนให้ถูกต้อง และใช้คำสั่งที่ชัดเจนแทนถ้อยคำกำกวม
- อ้างอิงทุกไฟล์ที่เกี่ยวข้องอย่างชัดเจน: หากไม่ระบุไฟล์ทั้งหมดที่เอเจนต์ต้องใช้ โอกาสเกิด spaghetti code จะสูงขึ้น
- ตั้งค่าไฟล์กฎ: กำหนดกฎทั้งระดับเวิร์กสเปซและระดับโปรเจกต์เพื่อช่วยให้สร้างโค้ดได้สม่ำเสมอ
- ใช้ @Docs: ใช้ความสามารถอ้างอิงเอกสารเพื่อป้อนความรู้สำคัญที่เอเจนต์ต้องใช้ (แต่บางเวอร์ชันยังทำงานไม่เสถียร)
ขอบเขตงานและการตรวจสอบ
- แบ่งเป็นหน่วยเล็ก: แยกงานเป็นหน่วยเล็กที่สุดที่ทำได้ในครั้งเดียว แล้วตรวจสอบแต่ละขั้นก่อนค่อยไปขั้นถัดไป
- ทบทวนแบบเรียลไทม์: ตรวจโค้ดที่สร้างขึ้นทั้งหมดแบบทันที และขอให้แก้ไขทันทีเพื่อป้องกัน spaghetti code
- สำรองข้อมูลและใช้ version control: สร้างแบ็กอัปทุกขั้น และใช้ระบบควบคุมเวอร์ชันอย่าง GitHub
- รันทดสอบ: ใช้
pytest --testmon -q เพื่อรันทดสอบเฉพาะส่วนที่ได้รับผลกระทบแบบเพิ่มทีละส่วน และรันทดสอบทั้งหมดก่อนจบงาน
การทำโมดูลและโครงสร้างโค้ด
- แยกไฟล์ 6000 บรรทัด: ไฟล์เดียว 6000 บรรทัดไม่เป็นโมดูลและเสียเปรียบในการให้บริบท จึงควรแยกเป็น 12 ไฟล์ขนาดราว 500 บรรทัดจะมีประสิทธิภาพกว่า
- เน้น vertical slice: พัฒนาเป็นหน่วยฟังก์ชันเล็ก ๆ ที่รันใช้งานได้ครบตั้งแต่ต้นทางถึงปลายทาง
การเลือกโมเดลและการคุมต้นทุน
- พิจารณา Claude Sonnet 4.5 ก่อน: มีความสม่ำเสมอและความแม่นยำสูงกว่า GPT หรือ Gemini จึงอาจคุ้มค่ากับต้นทุนที่เพิ่มขึ้น
- ระวังการใช้โทเค็น: การวางแผนขนาดใหญ่ใช้โทเค็นมาก ดังนั้นการแบ่งทำเป็นขั้นเล็ก ๆ ตอนลงมือจริงจะคุ้มค่ากว่า
กรณีใช้งานเฉพาะทาง
การสร้างสคริปต์ใช้ครั้งเดียว
- สคริปต์วิเคราะห์: หากต้องเขียนสคริปต์วิเคราะห์ข้อมูลแบบใช้ครั้งเดียวหลายร้อยตัวต่อวัน ต่อให้แม่นยำเพียง 50% ก็ยังสร้างและรันได้เร็วกว่าเขียนเองถึง 1000 เท่า
- ตรวจผลลัพธ์ได้เอง: เพราะสามารถตรวจสอบผลลัพธ์ได้โดยตรง จึงยังใช้งานได้จริงแม้ความแม่นยำจะไม่สูง
การสร้างแอปตั้งแต่ต้น
- โครงสร้างหลายเอเจนต์: เมื่อสร้างแอปขนาดใหญ่ตั้งแต่ศูนย์ เอเจนต์ผู้กำกับสามารถตรวจงานของเอเจนต์อื่นเพื่อรักษาความสม่ำเสมอ
- มีประโยชน์ต่อความสอดคล้องของชื่อ import, ชื่อตัวแปร และการป้องกันโค้ดซ้ำ
- ประสิทธิภาพเทียบต้นทุน: ถึงอย่างนั้นก็ยังต้องมีการแก้ไขและรีแฟกเตอร์ที่ซับซ้อนอยู่มาก ทำให้แนวทางแบบค่อยเป็นค่อยไปยังถูกกว่าในระยะยาว
สรุปความเห็นจากชุมชน
ประสบการณ์เชิงบวก (เพิ่มผลิตภาพ 3–5 เท่า)
- เว็บไซต์ Next.js: สร้างเว็บไซต์ที่ใช้งานได้จริงและพร้อมดีพลอยตั้งแต่ศูนย์ได้ภายในไม่กี่นาที
- การทำฟีเจอร์ซับซ้อน: เพิ่มฟีเจอร์ threads ให้แอปแชตได้ใน 3–4 นาที (งานที่ปกติคาดว่าใช้ 3 วัน)
- เมื่อใช้แนวทางอย่างเป็นระบบ: หากรวมกฎที่ชัดเจน บริบทที่เพียงพอ และการตรวจสอบทีละขั้น ก็มีโอกาสสำเร็จอย่างสม่ำเสมอ
ประสบการณ์เชิงลบ (ตอนนี้ยังไม่พร้อมใช้จริง)
- ผลิต spaghetti code จำนวนมาก: เมื่อให้เป้าหมายกว้าง ๆ มักเกิดปัญหาอย่างลืมอัปเดตเอกสาร หรือไม่ลบไฟล์ที่ค้างอยู่
- ข้อผิดพลาดเชิงความหมาย: โค้ดอาจทำงานได้ในทางเทคนิค แต่ถูกวางไว้ผิดที่ หรือถึงขั้นเขียนฟังก์ชันเดิมขึ้นใหม่ซ้ำซ้อน จนเกิดปัญหาเชิงโครงสร้าง
- การติดตามเกิน 5 นาทีมักล้มเหลว: การปล่อยให้รันติดตามงานนานเกิน 5 นาที ส่วนใหญ่จะได้ผลลัพธ์ที่แทบใช้ประโยชน์ไม่ได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
CLAUDE.mdหรือcursorrulesมากแค่ไหนก็แทบไม่ช่วย สุดท้าย LLM ต้องทำตามคำสั่งให้ได้ แต่ที่เกิดขึ้นจริงกลับเหมือนสุ่ม มันแทบไม่ยอมทำตามแม้แต่กฎง่าย ๆ มาก ๆ เลยทำให้ฉันรู้สึกว่าคนที่โพสต์ในฟอรัม Cursor ดูเหมือนมือสมัครเล่นกันหมด และที่สำคัญ งานเขียนโค้ดใหม่ ๆ นั้น LLM ทำได้แย่มาก มันชอบตั้งสมมติฐานว่ามีไลบรารีที่ไม่มีอยู่จริง แล้วก็ผลิตตัวอักษรไร้ประโยชน์ออกมา ฉันใช้มันแทบจะเหมือน speech-to-text เท่านั้น แต่ LLM กลับจับ edge case, best practice ที่ฉันไม่รู้ หรือเรื่อง syntax ได้ดีกว่าฉันCLAUDE.mdแล้วจะได้ผล หัวใจสำคัญคือการชี้นำกระบวนการอย่างละเอียด วิธีทำงานของฉันแบ่งเป็น 1) คู่มือดีบักรายโปรเจกต์ 2) ทำ acceptance criteria ให้ชัด 3) รันเทสต์บ่อย ๆ และให้มันบันทึกการเปลี่ยนแปลงเล็ก ๆ เป็นไฟล์ทีละหน่วย แบบนี้ฉันสามารถปล่อยให้ Claude ทำงานอัตโนมัติหลายชั่วโมงได้แทบไม่ต้องเฝ้า (แค่คอยพิมพ์ “continue” หรือใช้/compactเป็นครั้งคราว) มันไม่ได้ให้โค้ดสมบูรณ์แบบทุกครั้ง แต่ฉันเองก็ไม่ได้เหมือนกัน ถึงอย่างนั้นโดยรวมมันนำไปสู่การเปลี่ยนแปลงเชิงบวก และลดแรงที่ฉันต้องใช้ลงมาก ฉันยังไม่แนะนำให้ใช้ bootstrap ในสถานะที่ออกแบบไม่ครบถ้วน แต่บางครั้งมันก็ทำได้อยู่ดี (แค่ต้อง review ล่วงหน้า) ทุกวันนี้ฉันถึงขั้นคิดจะปล่อยให้ Claude ทำงานแก้ปัญหาอัตโนมัติแบบไม่หยุดเป็นเวลาหลายวันred-test-writer,minimal-green-implementer,refactorerฯลฯ ตอนนี้แค่พิมพ์กับ Claude Code ว่า “ช่วยสร้างฟีเจอร์ X ด้วยกระบวนการ TDD นี้” ผ่านไป 30 นาที ก็ได้โค้ดที่ดีกว่ามาก มี test coverage 90% และอยู่ในสภาพพร้อมรับเข้าได้ทันที แม้จะอิงจากประสบการณ์หลายปีด้าน XP, pair programming, TDD แต่ตลอดเวลากว่าหนึ่งปีที่ผ่านมา โค้ดโปรดักชันของเรา 95% ถูกเขียนโดย AI (รวมถึงฟีเจอร์ซับซ้อนที่ไม่ใช่งานง่าย ๆ ด้วย) ไม่มีเคล็ดลับลับอะไรเป็นพิเศษ มันแค่ใช้ได้ผลดีมากสำหรับเราclaude code,codex,copilotฯลฯ), กรณีที่ล้มเหลว/สำเร็จ รวมถึงระดับความชำนาญในการใช้ LLM ของผู้ใช้ด้วย อีกทั้งเงื่อนไขยังต่างกันได้อีก เช่น วิศวกรทำ codebase เดียวมา 10 ปี หรือสลับหลายโปรเจกต์, เป็นงานพัฒนาใหม่ (Greenfield) หรือ maintenance, เป็นงานวิจัยนวัตกรรมหรือ CRUD เป็นต้น