จากกรณีศึกษาการเขียนโปรแกรมอัตโนมัติด้วย Claude Code จริง มาบอกเล่าเคล็ดลับการใช้คำสั่ง

บทความนี้จะมาแบ่งปันกรณีศึกษาการใช้งาน Claude Code จริงผ่านตัวอย่างจริง ก่อนจะแบ่งปัน มาทำแบบสำรวจเล็กน้อยกันก่อน
ความต้องการเดิม: มีผู้ใช้ที่จ่ายเงินซึ่งเคารพนับถือท่านหนึ่ง ต้องการให้ฉันเพิ่มเวลาที่บทความถูกแก้ไขลงในบทความ
เมื่อมองแวบแรก ความต้องการนี้ดูเหมือนจะทำได้ค่อนข้างยาก เพราะบทความบนเว็บไซต์ของฉันไม่ได้เก็บไว้ในฐานข้อมูล แต่สร้างขึ้นโดยใช้ SSG ของ next.js มันไม่มีเวลาอัปเดตเลย
เคล็ดลับหนึ่งที่นี่คือ: เมื่อแก้ปัญหา เราไม่ควรป้อนความต้องการเดิมให้กับ Claude Code โดยตรง ด้วยเหตุผลดังนี้
1. ความต้องการเดิมค่อนข้างคลุมเครือ มันอาจเข้าใจผิดได้ และหากเข้าใจผิด แม้สุดท้ายจะเพิ่มเวลาให้ แต่เวลานั้นอาจไม่น่าเชื่อถือ
2. การใช้ Token ของ Claude Code แพงมากจริงๆ ดังนั้นความต้องการที่คลุมเครืออาจทำให้ใช้ Token จำนวนมากโดยเปล่าประโยชน์
ดังนั้น เราต้องแยกความต้องการเดิมออกเป็นส่วนๆ ก่อน ฉันได้ปรึกษาใน deepseek ก่อน deepseek ให้สองวิธีมา
1. เวลาในการสร้างไฟล์ ทุกครั้งที่ build เราต้องได้เวลาที่ไฟล์ถูกสร้าง แต่กลยุทธ์การแพ็กเกจของ turbopack ค่อนข้างต่างออกไป ทุกครั้งที่สร้าง ค่า hash ของไฟล์จะเปลี่ยน เวลา build นี้จึงอาจไม่น่าเชื่อถือ
2. เวลาที่ commit ใน git ฉันคิดว่านี่น่าจะน่าเชื่อถือกว่า
เมื่อมีแนวทางการแก้ไขคร่าวๆ แล้ว ฉันก็มีคำสั่งง่ายๆ นี้: คอมไพล์เวลาที่ commit ใน git ไว้ที่หัวของบทความ .mdx ทุกบทความ
Claude Code ค่อนข้างน่าเชื่อถือ หากคำสั่งมีความแม่นยำพอ โดยรวมก็ไม่มีปัญหาอะไร มันก็เริ่มทำงานทันที
หลังจากใช้เครดิตไป 7 ดอลลาร์ ใช้เวลาประมาณ 20 นาที ในที่สุดก็ทำงานสำเร็จ
ถ้าไม่มีอะไรผิดพลาด ก็มักจะมีเรื่องผิดพลาดเกิดขึ้น มันข้ามการเปลี่ยนแปลงไฟล์ไป 171 ไฟล์
จุดที่ยุ่งยากอยู่ตรงนี้ ที่จริงแล้วไฟล์ที่ถูกข้ามไปนี้ เพียงแค่ส่งพารามิเตอร์เพิ่มเติม pass เข้าไปเท่านั้น ส่วนอื่นเหมือนกันหมด
<PostLayout pass>...แต่มันไม่ยืดหยุ่น กลับนิยามพารามิเตอร์เพิ่มเติมที่ส่งเข้ามานี้ว่าเป็นคอมโพเนนต์ที่กำหนดเองที่ต่างกันโดยสิ้นเชิง แล้วก็ข้ามไปไม่จัดการ ~ ~
import Layout from 'components/post-layout';
import { getGitFileInfo } from '@/utils/git-info';
export default function Article({ children }: any) {
const gitInfo = getGitFileInfo('src/app/你的路径/page.mdx');
return (
{children}
);
}แต่ความเป็นจริงแล้ว ผลลัพธ์ที่ฉันต้องการเป็นแบบนี้ ผลลัพธ์ที่รันออกมาก็เหมือนกันทุกประการ
import MdxLayout from 'components/mdx-layout';
export default function Article({ children }: any) {
return (
{children}
);
}แล้วตอนนี้ ฉันก็เจอปัญหากับคำสั่ง
ฉันป้อนคำสั่งอีกครั้ง: ใช้วิธีเดียวกับด้านบนเพื่อปรับโครงสร้างไฟล์ 171 ไฟล์ที่ถูกข้ามไปใหม่
การแสดงออกของฉันนี้ เมื่อคิดดีๆ มันมีความกำกวมเล็กน้อย เพราะ Claude Code ได้ให้แนวทางที่แนะนำมาแล้ว แต่ฉันไม่เห็นด้วยกับแนวทางนั้น ความตั้งใจเดิมของฉันคือ ให้ใช้แนวทางเดียวกับไฟล์หลายร้อยไฟล์ที่ถูกแก้ไขแล้ว ไปแก้ไขไฟล์ที่ถูกข้ามไป แต่ในกระบวนการทำงาน มันกลับเข้าใจว่าเป็น: แนวทางที่มันแนะนำให้ด้านบน
ความกำกวมเล็กน้อยนี้ ทำให้มันทำงานตามแนวทางที่ฉันไม่ต้องการไป 20 นาที ระหว่างทางยังเกิดข้อผิดพลาดและพยายามแก้ไขตัวเอง 2 ครั้ง กลืน Token ของฉันไปอย่างรวดเร็ว ความกำกวมสองแบบเริ่มขัดแย้งกันจนเกิดข้อผิดพลาด
สุดท้ายฉันก็ต้องยกเลิกการทำงานนี้ และระบุความหมายของฉันให้ชัดเจนใหม่
สรุป
1. ในคำสั่ง ควรมีแนวทางการแก้ปัญหาที่แม่นยำและค่อนข้างคงที่ ยิ่งให้ AI คิดน้อยเท่าไหร่ยิ่งดี จะช่วยลดอัตราการหลอน (hallucination)
2. คำสั่งที่แสดงความต้องการต้องไม่มีความกำกวม ความกำกวมมักนำไปสู่ข้อผิดพลาด แม้ Claude Code จะสามารถแก้ไขได้ในที่สุด แต่นี่จะทำให้ใช้ Token จำนวนมาก และเนื่องจาก LLM ผลิตผลลัพธ์จากกลไกการคาดการณ์ การตีความผิดหรือความกำกวมในตอนต้น จะทำให้ทุกขั้นตอนหลังจากนั้นเดินไปในทิศทางที่ผิดยิ่งขึ้นเรื่อยๆ และมันยังพยายามสร้างเหตุผลให้สอดคล้องกันเอง สร้างสิ่งที่ไม่เคยมีอยู่ ยิ่งเขียนปัญหาก็ยิ่งใหญ่ขึ้น และเพิ่มความยากในการตรวจสอบของผู้พัฒนา หากคุณถูกหลอนของมันหลอกลวงไป ก็จะส่งผลร้ายแรง
3. ข้อจำกัดของภาษาธรรมชาติไม่แม่นยำเท่ารหัส ในคำสั่ง การมีชื่อไฟล์ ตัวแปรโค้ด คำศัพท์เฉพาะของโค้ด ศัพท์เทคนิค ฯลฯ จะช่วยลดการหลอนของ Claude Code ได้อย่างมาก





