เจาะลึก Claude Code: สถาปัตยกรรม การกำกับดูแล และแนวทางปฏิบัติทางวิศวกรรม

@HiTw93
จีน4 เดือนที่ผ่านมา · 12 มี.ค. 2569
2.9M
8.6K
2.0K
191
17.2K

TL;DR

คู่มือฉบับสมบูรณ์สำหรับการเพิ่มประสิทธิภาพ Claude Code ครอบคลุมสถาปัตยกรรม 6 ชั้น การทำ Context Engineering และการใช้ Skills, Hooks และ Subagents อย่างมีกลยุทธ์เพื่อสร้างเวิร์กโฟลว์ AI ที่เสถียร

0. สรุปสั้นๆ (TL;DR)

บทความนี้เกิดจากประสบการณ์การใช้งาน Claude Code อย่างจริงจังเป็นเวลาหกเดือน และบทเรียนจากการใช้จ่ายเดือนละ $40 สำหรับสองบัญชี หวังว่าจะเป็นข้อมูลที่มีประโยชน์สำหรับทุกคนนะครับ

ตอนแรกๆ ผมก็ใช้มันแค่เป็น ChatBot แต่ไม่นานก็รู้สึกว่ามันเริ่มผิดปกติ: บริบทรก, เครื่องมือเยอะขึ้นแต่ประสิทธิภาพดันลดลง, กฎต่างๆ ก็ถูกเมินเฉยทั้งที่เขียนยาวขึ้น หลังจากศึกษา Claude Code จริงๆ จังๆ ก็พบว่ามันไม่ใช่ปัญหาที่ Prompts แต่เป็นปัญหาที่การออกแบบระบบ (System Design)

ผมอยากพูดถึง: Claude Code ทำงานเบื้องลึกยังไง, ทำไมบริบทถึงรกและจะจัดการมันยังไง, ออกแบบ Skills กับ Hooks ยังไง, การใช้ Subagents ที่ถูกต้อง, ผลกระทบทางสถาปัตยกรรมของ Prompt Caching, และวิธีเขียน CLAUDE.md ที่มีประโยชน์จริงๆ

วิธีทำความเข้าใจที่ตรงไปตรงมาที่สุดคือการแยก Claude Code ออกเป็นหกชั้น:

Tw93 - inline image

การเสริมแค่ชั้นใดชั้นหนึ่งจะทำให้เกิดความไม่สมดุล ถ้า CLAUDE.md ยาวเกินไป ก็จะไปรกบริบท; เครื่องมือมากเกินไปก็ทำให้สับสน; Subagents เยอะเกินไปก็เกิดสถานะคลาดเคลื่อน (State Drift); ข้ามขั้นตอนตรวจสอบก็จะหาจุดที่ผิดพลาดไม่เจอ

1. การทำงานเบื้องลึกของ Claude Code

Tw93 - inline image

หัวใจของ Claude Code ไม่ใช่แค่ "การตอบคำถาม" แต่เป็นลูปการทำงานแบบ Agentic Loop ที่วนซ้ำ:

text
1รวบรวมบริบท → ลงมือทำ → ตรวจสอบผลลัพธ์ → [เสร็จสิ้น หรือ วนซ้ำ]
2 ↑ ↓
3 CLAUDE.md Hooks / Permissions / Sandbox
4 Skills Tools / MCP
5 Memory

ผมพบว่าคอขวด (Bottlenecks) มักไม่ใช่เพราะโมเดลไม่ฉลาดพอ แต่เป็นเพราะเราให้บริบทที่ผิด หรือไม่มีทางรู้ว่างานที่ออกมาถูกต้องหรือไม่ หรือไม่มีทางย้อนกลับ

ห้าชั้นที่ต้องโฟกัส:

Tw93 - inline image

การมองที่ชั้นเหล่านี้ทำให้การแก้ไขปัญหาง่ายขึ้น ผลลัพธ์ไม่เสถียร? ให้ตรวจสอบลำดับการโหลดบริบท ระบบอัตโนมัติหลุดมือ? ให้ตรวจสอบชั้นควบคุม (Control Layer) คุณภาพลดลงเรื่อยๆ ในเซสชั่นยาว? แสดงว่าผลลัพธ์ระหว่างทางไปปนเปื้อนบริบทแล้ว การเริ่มเซสชั่นใหม่ดีกว่าการไปแก้ Prompts

2. ขอบเขตแนวคิด: MCP / Plugin / Tools / Skills / Hooks / Subagents

Tw93 - inline image

กฎง่ายๆ: ใช้ Tools/MCP สำหรับการกระทำใหม่ๆ, ใช้ Skills สำหรับเวิร์กโฟลว์, ใช้ Subagents สำหรับสภาพแวดล้อมที่แยกเป็นอิสระ, ใช้ Hooks สำหรับข้อจำกัด/การตรวจสอบที่จำเป็น, และใช้ Plugins สำหรับการกระจายข้ามโปรเจกต์

3. Context Engineering: ข้อจำกัดของระบบที่สำคัญที่สุด

หลายคนมองว่าบริบทเป็นแค่ "ปัญหาเรื่องความจุ" แต่จริงๆ แล้วคอขวดที่แท้จริงคือสัญญาณรบกวน (Noise) ข้อมูลที่มีประโยชน์ถูกฝังอยู่ในเนื้อหาที่ไม่เกี่ยวข้อง

องค์ประกอบต้นทุนบริบทที่แท้จริง

Tw93 - inline image

บริบท 200K ของ Claude Code นั้นใช้ได้ไม่เต็มทั้งหมดนะครับ:

text
1บริบททั้งหมด 200K
2├── ค่าใช้จ่ายคงที่ (~15-20K)
3│ ├── คำสั่งระบบ: ~2K
4│ ├── คำอธิบาย Skill: ~1-5K
5│ ├── คำจำกัดความของเครื่องมือ MCP Server: ~10-20K ← ตัวการที่ซ่อนเร้นมากที่สุด
6│ └── สถานะ LSP: ~2-5K
7
8├── กึ่งคงที่ (~5-10K)
9│ ├── CLAUDE.md: ~2-5K
10│ └── Memory: ~1-2K
11
12└── ส่วนที่ใช้ได้แบบไดนามิก (~160-180K)
13 ├── ประวัติการแชท
14 ├── เนื้อหาไฟล์
15 └── ผลลัพธ์จากเครื่องมือ
Tw93 - inline image

MCP Server ทั่วไป (อย่าง GitHub) จะมีคำจำกัดความของเครื่องมือ 20-30 อัน แต่ละอันประมาณ 200 โทเค็น รวมแล้ว 4,000-6,000 โทเค็น การเชื่อมต่อ 5 เซิร์ฟเวอร์จะกินพื้นที่ถึง 25,000 โทเค็น (12.5%) ซึ่งเป็นเรื่องสำคัญมากเวลาที่ต้องอ่านโค้ดปริมาณมาก

การแบ่งชั้นบริบทที่แนะนำ

text
1ติดถาวร → CLAUDE.md: สัญญาโครงการ / คำสั่ง build / ข้อห้ามต่างๆ
2ตามเส้นทาง → rules: กฎเฉพาะภาษา / ไดเรกทอรี / ประเภทไฟล์
3เรียกใช้เมื่อต้องการ → Skills: เวิร์กโฟลว์ / ความรู้เฉพาะด้าน
4แยกออกไป → Subagents: การสำรวจขนาดใหญ่ / การวิจัยแบบขนาน
5อยู่นอกบริบท → Hooks: สคริปต์ที่ตายตัว / การตรวจสอบ / การบล็อก

อย่าโหลดสิ่งที่คุณใช้แค่บางโอกาสเข้ามา

แนวปฏิบัติที่ดีที่สุดสำหรับบริบท

  • ทำให้ CLAUDE.md สั้น, คม, และปฏิบัติการได้จริง CLAUDE.md ของ Anthropic มีขนาดประมาณ 2.5K โทเค็นเท่านั้น
  • ย้ายเอกสารอ้างอิงขนาดใหญ่ไปไว้ในไฟล์สนับสนุนของ Skills
  • ใช้ .claude/rules/ สำหรับกฎเกี่ยวกับเส้นทางหรือภาษา
  • ใช้คำสั่ง /context เพื่อตรวจสอบการใช้งาน
Tw93 - inline image
  • ใช้ /clear สำหรับการสลับงาน และ /compact สำหรับการเริ่มเฟสใหม่
  • เขียน Compact Instructions ใน CLAUDE.md เพื่อควบคุมสิ่งที่จะถูกเก็บรักษาไว้

สัญญาณรบกวนจากผลลัพธ์ของเครื่องมือ: ตัวการเงียบอีกตัว

ผลลัพธ์แบบไดนามิกจากเครื่องมือ (เช่น cargo test หรือ git log) สามารถเติมเต็มบริบทได้อย่างง่ายดาย Claude ไม่จำเป็นต้องเห็นทุกอย่าง

RTK (Rust Token Killer) เป็นแนวทางที่ดี: มันจะกรองผลลัพธ์จากคำสั่งก่อนที่จะส่งถึง Claude เช่น มันสามารถย่อผลลัพธ์ทดสอบหลายพันบรรทัดให้เป็นข้อความสำเร็จเพียงบรรทัดเดียว

กับดักของการบีบอัด

การบีบอัดแบบดีฟอลต์อาจลบการตัดสินใจทางสถาปัตยกรรมและข้อจำกัดต่างๆ ทิ้งไป

Tw93 - inline image

วิธีแก้: ระบุ Compact Instructions ใน CLAUDE.md เพื่อจัดลำดับความสำคัญของการตัดสินใจทางสถาปัตยกรรม, ไฟล์ที่ถูกแก้ไข, สถานะการตรวจสอบ, และสิ่งที่ต้องทำ (TODOs)

อีกวิธี proactive: ให้ Claude เขียนไฟล์ HANDOFF.md ก่อนเริ่มเซสชั่นใหม่เพื่ออธิบายความคืบหน้าและจุดที่เป็น Dead End

คุณค่าทางวิศวกรรมของ Plan Mode

Tw93 - inline image

Plan Mode แยกการสำรวจ (Exploration) ออกจากการลงมือทำ (Execution)

Tw93 - inline image

สำหรับการรีแฟคเตอร์ที่ซับซ้อน วิธีนี้ดีกว่าการรีบไปเขียนโค้ดเลย เคล็ดลับขั้นสูง: ใช้ Claude ตัวหนึ่งเขียนแผน และอีกตัวเป็น "วิศวกรอาวุโส" เพื่อตรวจสอบแผนนั้น

4. การออกแบบ Skills: เวิร์กโฟลว์ที่โหลดเมื่อต้องการ

Skills คือความรู้และเวิร์กโฟลว์ที่ถูกเรียกใช้เมื่อจำเป็น (On-demand)

อะไรที่ทำให้ Skill ดี

  • คำอธิบาย (Description) ควรบอกว่า "เมื่อไหร่ควรใช้ฉัน" ไม่ใช่ "ฉันทำอะไร"
  • มีขั้นตอนที่สมบูรณ์, Input, Output, และเงื่อนไขการหยุด
  • เก็บเนื้อหาหลักไว้เพื่อการนำทางและข้อจำกัดหลัก; ย้ายรายละเอียดไปไว้ในไฟล์สนับสนุน
  • ตั้งค่า disable-model-invocation: true สำหรับ Skills ที่มีผลข้างเคียง

Progressive Disclosure

Claude Code เน้น "การเปิดเผยแบบค่อยเป็นค่อยไป" (Progressive Disclosure): ให้ดัชนีและการนำทางก่อน จากนั้นค่อยดึงรายละเอียดเมื่อจำเป็น

Skill สามประเภทหลัก

  1. Checklist (Quality Gate): เช่น release-check
  2. Workflow (Standardized Ops): เช่น config-migration ที่มี Rollback
  3. Domain Expert (Decision Framework): เช่น runtime-diagnosis

ทำให้ Descriptor สั้นเพื่อประหยัดพื้นที่บริบท

5. การออกแบบ Tools: ช่วยให้ Claude เลือกได้อย่างถูกต้อง

Tools สำหรับ Agent ควรเน้นที่ความง่ายในการใช้งานที่ถูกต้อง มากกว่าความครบถ้วนของฟีเจอร์

Tools ที่ดีกับ Tools ที่แย่

Tw93 - inline image

หลักการออกแบบ: ใช้คำนำหน้า (Prefix) เช่น github_pr_*, รองรับรูปแบบที่กระชับ, ให้ข้อความแสดงข้อผิดพลาดที่มีประโยชน์, และหลีกเลี่ยงการเปิดเผยเครื่องมือที่ย่อยเป็นชิ้นเล็กชิ้นน้อยมากเกินไป

วิวัฒนาการของ Tools ภายใน

Tw93 - inline image

วิวัฒนาการของเครื่องมือ AskUserQuestion แสดงให้เห็นว่าเครื่องมือเฉพาะกิจ (Dedicated Tool) มีเสถียรภาพมากกว่าการจัดรูปแบบ Markdown หรือพารามิเตอร์ Exit

Tw93 - inline image
Tw93 - inline image

เมื่อโมเดลแข็งแกร่งขึ้น Todo Tools ก็กลายเป็น "เครื่องพันธนาการ" (Shackle) ส่วน Search Tools ก็วิวัฒนาการจาก RAG ไปเป็น Grep เพื่อความยืดหยุ่นที่ดีกว่าและ "การเปิดเผยแบบค่อยเป็นค่อยไป"

6. Hooks: Logic บังคับก่อน/หลังการดำเนินการ

Hooks เป็นการนำการควบคุมแบบตายตัว (Deterministic Control) กลับมาสู่กระบวนการต่างๆ เช่น การจัดรูปแบบ, การป้องกันไฟล์, และการแจ้งเตือน

Tw93 - inline image

สิ่งที่เหมาะกับ Hooks

การบล็อกไฟล์ที่ได้รับการป้องกัน, การจัดรูปแบบอัตโนมัติหลังจากแก้ไข, การฉีดบริบทแบบไดนามิก (ชื่อ Git Branch), และการแจ้งเตือน

การตรวจจับข้อผิดพลาดตั้งแต่เนิ่นๆ

Tw93 - inline image

7. Subagents: อินสแตนซ์ Claude อิสระ

Subagents มีหน้าที่ในการแยกเป็นสัดส่วน (Isolation) งานต่างๆ เช่น การสแกน Repos หรือการรัน Tests จะสร้างผลลัพธ์จำนวนมากที่ไม่ควรมาเกะกะเธรดหลัก

ข้อจำกัดที่ชัดเจน

จำกัด Tools, เลือกโมเดลให้เหมาะสม (Haiku สำหรับการสำรวจ, Opus สำหรับการตรวจสอบ), และตั้งค่า maxTurns

8. Prompt Caching: แกนหลักของสถาปัตยกรรม Claude Code

Claude Code ถูกสร้างขึ้นมาโดยมี Prompt Caching เป็นแกนหลัก อัตราการ Cache Hit ที่สูงจะช่วยประหยัดเงินและเพิ่ม Rate Limits

โครงสร้าง Prompt สำหรับการแคช

Tw93 - inline image

ลำดับมีความสำคัญสำหรับการจับคู่คำนำหน้า (Prefix Matching): System Prompt → Tool Definitions → Chat History → User Input

อย่าสลับโมเดลระหว่างเซสชั่น

การสลับโมเดลจะทำให้ Cache แตก ให้ใช้ Subagents สำหรับการส่งต่องาน (Handoffs) แทน

การทำงานของ Compaction

Tw93 - inline image

Compaction จะใช้ Fork เพื่อสรุปประวัติ โดยมีต้นทุนเพียง 1/10 เนื่องจาก Cache Hit

9. Verification Loops: ไม่มี Verifier = ไม่มี Engineering Agent

"Claude บอกว่าเสร็จแล้ว" นั้นไร้ค่าหากไม่มีการตรวจสอบ ให้กำหนด Verification อย่างชัดเจนใน Prompt, Skill, และ CLAUDE.md

10. คำสั่งที่ใช้ความถี่สูง

คำสั่งเช่น /context, /clear, /compact, และ /memory ช่วยจัดการบริบทอย่างกระตือรือร้น

ธรรมาภิบาลและการขนาน (Parallelism)

Tw93 - inline image

คำสั่งซ่อนเร้นที่มีประโยชน์: /simplify (ตรวจสอบโค้ด), /rewind (สร้าง Checkpoint), /btw (คำถามข้างเคียง), /insight (วิเคราะห์เซสชั่นเพื่ออัปเดต CLAUDE.md)

11. วิธีเขียน CLAUDE.md ที่ดี

มันคือสัญญา (Contract) ไม่ใช่ฐานความรู้ (Knowledge Base)

Tw93 - inline image

รวมถึงคำสั่ง build/test, ขอบเขตทางสถาปัตยกรรม, หลักเกณฑ์การเขียนโค้ด, รั้วความปลอดภัย (Safety Rails), และ Compact Instructions ให้ Claude อัปเดต CLAUDE.md หลังจากที่มันแก้ไขข้อผิดพลาดของตัวเอง

12. ประสบการณ์ล่าสุด

บทเรียนจากการสร้าง Kaku (Rust + Lua): ความโปร่งใสของสภาพแวดล้อม (Environment Transparency) เป็นสิ่งสำคัญ (ใช้คำสั่ง 'doctor'), และ Hooks นั้นยอดเยี่ยมสำหรับโปรเจกต์ที่ใช้หลายภาษา

13. Anti-patterns (รูปแบบที่ไม่ควรทำ)

Tw93 - inline image

14. Health Check (การตรวจสอบสุขภาพ)

ใช้ npx skills add tw93/claude-health เพื่อตรวจสอบการตั้งค่าของคุณ

15. สรุป (Conclusion)

Tw93 - inline image

จุดสนใจได้เปลี่ยนจาก "วิธีใช้ฟีเจอร์" ไปเป็น "วิธีปล่อยให้ Agent ทำงานภายใต้ข้อจำกัด" หากคุณไม่สามารถกำหนดได้ว่างาน "เสร็จ" เมื่อไหร่ แสดงว่างานนั้นยังไม่พร้อมที่จะมอบหมายให้ Agent

บันทึกในคลิกเดียว

อ่านบทความไวรัลเชิงลึกด้วย AI ใน YouMind

บันทึกแหล่งที่มา ถามคำถามที่ตรงประเด็น สรุปข้อโต้แย้ง และเปลี่ยนบทความไวรัลให้เป็นโน้ตที่นำกลับมาใช้ได้ใน AI เวิร์กสเปซเดียว

สำรวจ YouMind
สำหรับครีเอเตอร์

เปลี่ยน Markdown ของคุณให้เป็นบทความ 𝕏 ที่สะอาดตา

เวลาคุณเผยแพร่งานเขียนยาวของตัวเอง การจัดรูปแบบรูปภาพ ตาราง และบล็อกโค้ดให้เข้ากับ 𝕏 นั้นน่าปวดหัว YouMind เปลี่ยนร่าง Markdown ทั้งฉบับให้เป็นบทความ 𝕏 ที่สะอาดตาและพร้อมโพสต์ทันที

ลอง Markdown เป็น 𝕏

แพตเทิร์นให้ถอดรหัสเพิ่มเติม

บทความไวรัลล่าสุด

สำรวจบทความไวรัลเพิ่มเติม