ET คู่มือการใช้งาน Effective Token V1.0
Tencent · การกำกับดูแลต้นทุน Token สำหรับ AI Coding
🇬🇧 English 🇹🇭 ไทย

คู่มือการใช้งาน Effective Token · V1.0

ใช้ทุก Token ให้เกิดคุณค่า — ระบุแหล่งที่มาและกำกับดูแลตั้งแต่การวัดผลและนิสัยการใช้งาน ไปจนถึง routing & context

คำนำ

เมื่อการเขียนโค้ดโดยใช้ AI กลายเป็นเรื่องปกติ Token ก็กลายเป็นต้นทุนคอมพิวต์ที่ชัดเจน ไม่ใช่เสียงรบกวนพื้นหลังที่มองข้ามไปได้

ปัญหาที่แท้จริงของหลายทีมไม่ใช่การไม่รู้ว่าควรลดการใช้งาน แต่เป็นดังนี้:

  • บิลยังคงเพิ่มขึ้นเรื่อยๆ แต่ไม่มีใครระบุได้ว่าค่าใช้จ่ายมาจากประเภทงาน Skill บุคคล หรือ workflow ใด
  • ปรับแต่ง Prompt ไปมากมาย แต่สุดท้ายบิลแทบไม่เปลี่ยนแปลง
  • นำเครื่องมือใหม่ที่ "ควรจะช่วยประหยัดได้มาก" มาใช้ แต่ต้นทุนรวมกลับเพิ่มขึ้น

มีสาเหตุรากฐานเดียวเท่านั้น: หากไม่มีการวัดผล ก็ไม่มีการปรับปรุงให้ดีขึ้น

ในทางวิศวกรรมศาสตร์ สิ่งนี้ไม่ต่างจากการกำหนด monitoring, alerting และ SLI/SLO ตั้งแต่วันแรก

นั่นคือเหตุผลที่การวัดผลเป็นบทที่ 1 — การปรับปรุงทั้งหมดในบทต่อๆ ไปต้องสร้างขึ้นบน baseline การวัดผลที่กำหนดไว้ในบทนี้



อภิธานศัพท์

คู่มือนี้ตั้งสมมติฐานว่าผู้อ่านคุ้นเคยกับเครื่องมือเขียนโค้ดด้วย AI ทั่วไป เช่น Claude Code, CodeBuddy, Cursor และ Copilot คำศัพท์ต่อไปนี้ปรากฏซ้ำตลอดทั้งคู่มือ และถูกนิยามไว้ที่นี่เพื่อป้องกันความคลุมเครือ

คำศัพท์ ชื่อเรียกอื่น / ความหมาย คำอธิบายโดยย่อ
Token Token หน่วยที่คิดเงินได้เล็กที่สุดของข้อความที่ LLM ประมวลผล ประมาณการคร่าวๆ: อักษรจีน 1 ตัว ≈ 1–2 tokens; คำภาษาอังกฤษ 1 คำ ≈ 1.3 tokens
Input / Output ข้อมูลนำเข้า / ผลลัพธ์ เนื้อหาทั้งหมดที่ส่งไปยังโมเดลในหนึ่งคำขอ / เนื้อหาทั้งหมดที่โมเดลส่งกลับมา ซึ่งคิดเงินแยกกันในอัตราที่ต่างกัน
Context Context window (หน้าต่าง Context) ทุกสิ่งที่ส่งไปยังโมเดลจริงๆ ในหนึ่งคำขอ: System Prompt + ประวัติ + คำขอของผู้ใช้ + นิยามของเครื่องมือ + ผลการค้นคืน และอื่นๆ
System Prompt System instructions (คำสั่งระดับระบบ) คำสั่งคงที่ที่วางไว้ต้นสุดของ Context ในทุกๆ รอบ มักประกอบด้วยบทบาท กฎ และคำอธิบายเครื่องมือ
Session Continuous conversation (บทสนทนาต่อเนื่อง) ทุกรอบนับจากเริ่มบทสนทนาจนกระทั่ง /clear หรือปิด session จะใช้ Context ประวัติร่วมกัน
Prompt Cache Prefix cache (แคชส่วนนำ) แคชการคำนวณของส่วนนำ (prefix) ของคำขอเพื่อนำกลับมาใช้ซ้ำ หาก cache hit จะคิดเงินเป็น Cache read (ประมาณหนึ่งในสิบของ Input ในกรณีของ Anthropic); หาก cache miss หรือเป็นการเขียนครั้งแรกจะคิดเงินเป็น Cache write
TTL Time to live (อายุที่ยังใช้ได้) ระยะเวลาที่รายการแคชยังคงใช้ได้ เช่น ค่าเริ่มต้นของ Anthropic คือ 5 นาที และ optionally รองรับ 1 ชั่วโมง; ผู้ให้บริการรายอื่นใช้กลไกที่แตกต่างกัน
Thinking / Reasoning Reasoning tokens (Token สำหรับการคิด) การให้เหตุผลขั้นกลางของโมเดลก่อนให้คำตอบสุดท้าย ซึ่งก็ใช้ Token เช่นกันและถูกนับเป็น output โดย Anthropic
Skill Skill คำสั่ง workflow ที่นำกลับมาใช้ซ้ำได้ ประกอบด้วย Description + Instructions + Examples เช่น code-review หรือ commit-message
Rules Rules (กฎ) ข้อจำกัดด้านพฤติกรรมระดับ global หรือระดับโปรเจกต์ เช่น จรรยาบรรณการเขียนโค้ดและประสิทธิภาพการใช้ Token ซึ่งมักถูกส่งไปพร้อมกับ System Prompt ในทุกๆ รอบ
Agent Agent หน่วยปฏิบัติงานที่สามารถเรียกใช้เครื่องมือได้ด้วยตนเอง สามารถมีโมเดล Skill และชุดเครื่องมือของตนเองได้
Subagent Subagent (Agent ย่อย) Agent อิสระที่ได้รับมอบหมายงานจาก Agent หลัก มี Context แบบแยกส่วนและใช้ครั้งเดียว และส่งกลับเฉพาะบทสรุปให้ Agent หลัก
Command Command (คำสั่ง) งานที่ใช้เทมเพลตคงที่ เรียกใช้ด้วย /xxx เช่น /commit, /clear, /compact หรือ /cost
MCP Model Context Protocol โปรโตคอลมาตรฐานที่เชื่อมต่อเครื่องมือ AI เข้ากับระบบภายนอก เช่น ฐานข้อมูล API และระบบไฟล์
Tool Definition Tool schema (สคีมาของเครื่องมือ) สคีมาที่อธิบายความสามารถ พารามิเตอร์ และค่าที่ส่งกลับของเครื่องมือ ซึ่งถูกส่งไปพร้อมกับ Context ในทุกๆ รอบ
RAG Retrieval-Augmented Generation (การสร้างข้อความโดยเสริมการค้นคืน) ค้นคืนความรู้ภายนอกก่อน แล้วจึงแทรกเนื้อหาที่ค้นคืนได้เข้าไปใน Context
Learnings Captured knowledge (ความรู้ที่บันทึกไว้) บทเรียนและแนวปฏิบัติที่ดีที่สุดที่ทีมสั่งสมมา ซึ่งมักถูกแทรกเข้าไปใน Context ก็ต่อเมื่อมีการเรียกคืน (recall) เท่านั้น
SLI / SLO Service Level Indicator / Service Level Objective เมตริกที่สังเกตได้ซึ่งใช้สำหรับการวัดผลและการกำกับดูแล (SLIs) และค่าเป้าหมายของเมตริกเหล่านั้น (SLOs)

ข้อมูลอ้างอิงคำสั่งแบบย่อ: /cost (ดูการใช้งานของรอบปัจจุบัน), /compact (บีบอัดประวัติ), /clear (ล้าง session ปัจจุบัน)


บทที่ 1: วัดผลก่อน — หากไม่มีการวัดผล ก็ไม่มีการปรับปรุงให้ดีขึ้น

ทำให้เป็นตัวเลขก่อน หากวัดผลไม่ได้ ก็อย่าเพิ่งทำ

1.1 หากคุณไม่รู้ว่าอะไรแพง คุณก็ไม่รู้ว่าจะประหยัดอะไร

ปัญหาในโลกความเป็นจริง

เครื่องมือเขียนโค้ดด้วย AI มักให้เพียงตัวเลขบิลแบบรวม:

  • Token รวมของเดือน
  • ต้นทุนรวมของเดือน
  • ยอดรวมแยกตามโมเดล

แต่ไม่ได้บอกคุณว่า:

  • Token ใดถูกใช้ไปกับ Input
  • Token ใดถูกใช้ไปกับ Output
  • ส่วนใดมาจาก Prompt Cache hits
  • ส่วนใดมาจาก Cache writes
  • ส่วนใดมาจาก Thinking / Reasoning
  • ส่วนใดมาจาก การไป-กลับของเครื่องมือ (tool round-trips)
  • ส่วนใดมาจาก การลองใหม่ (retries)

ผลลัพธ์คือ สัญชาตญาณมักผิดพลาด

1.2 โปรไฟล์ Token ของหนึ่งคำขอ

หากต้องการเข้าใจว่าเงินถูกใช้ไปที่ใด คุณต้องเข้าใจองค์ประกอบ Token ของหนึ่งคำขอเสียก่อน

ฟิลด์ ความหมาย ลักษณะของต้นทุน
Input Input tokens: System Prompt + ประวัติ + Context + คำขอของผู้ใช้ รวมถึงส่วนที่ได้จากแคช ต้นทุนพื้นฐาน ได้รับผลกระทบอย่างมากจากความเสถียรของ prefix
Output Token ทั้งหมดที่โมเดลสร้างขึ้น โดยปกติแพงกว่า Input และปล่อยให้บานปลายได้ง่าย
Cache read Input tokens ที่ได้จาก Prompt Cache ประมาณหนึ่งในสิบของราคา Input; ไม่สามารถใช้ได้หลังจากแคชหมดอายุ
Cache write Token ที่ถูกเขียนลงแคชเป็นครั้งแรก ต้นทุนเริ่มต้นที่ถูกเฉลี่ยกันในการนำกลับมาใช้ซ้ำครั้งหลังๆ; การหมดอายุของแคชยังคงมีความสำคัญ
Thinking Token ที่ใช้ไประหว่างการให้เหตุผล เช่น thinking budget ของ Claude มีมูลค่าสูง แต่ก็มีต้นทุนสูงเช่นกัน

วิธีรับข้อมูลนี้

  • CodeBuddy / WorkBuddy / Codex / Claude Code
    • ใช้คำสั่ง /cost
    • เปิดใช้งาน telemetry เพื่อให้ได้รายละเอียดแยกต่อคำขอ

ตัวอย่างที่ไม่ถูกต้อง

The developer looks only at total cost, not its composition:

- Output has a high share, so they assume the model is too verbose;
- In reality, the Prompt does not constrain the output format, so the model responds freely;
- The optimization effort targets the wrong problem.

ตัวอย่างที่ถูกต้อง

After every critical task, the developer routinely checks `/cost`:

- They notice that the proportion of cache-read tokens remains below 20% for a certain task type;
- They check whether the prefix changes frequently or a Skill is reloaded every time;
- After adjustment, the Cache hit rate remains above 70%;
- Input cost for the same task falls to one-third of its previous level.

1.3 เมตริกสำคัญและค่าเป้าหมาย

จากทั้งห้าฟิลด์ข้างต้น เรากำหนดชุดของ SLI ที่ทีมต้องติดตามอย่างต่อเนื่อง

1. Cache Hit Rate

นิยาม: Cache read tokens / Input tokens (Input หมายถึง input ทั้งหมด รวมถึงส่วนที่ cache hit; ดูตารางห้าฟิลด์ในหัวข้อ 1.2)

ช่วง การประเมิน การดำเนินการที่แนะนำ
> 70% สุขภาพดี รักษาสถานะปัจจุบันไว้และทบทวนเป็นระยะ
40%–70% เตือน ตรวจสอบความเสถียรของ prefix และความถี่ในการเปลี่ยนแปลง Skill/Rules
< 40% วิกฤต หยุดเพิ่ม Skill ใหม่ชั่วคราว และให้ความสำคัญกับการปรับโครงสร้าง Context ก่อน

หมายเหตุ: นี่เป็นช่วงอ้างอิง แต่ละทีมควรปรับเทียบให้เข้ากับ baseline การดำเนินงานจริงของตน

เหตุใดจึงเข้มงวดเช่นนี้?

Prompt Cache คือ "อาหารกลางวันฟรี" ที่คุ้มค่าที่สุดในปัจจุบัน อัตรา cache hit ต่ำกว่า 40% มักหมายความว่า:

  • prefix เปลี่ยนแปลงบ่อย
  • การจัดการ session ไร้ระเบียบ
  • Skills / Rules ได้รับการออกแบบมาไม่ดี

2. Output / Input Ratio

นิยาม: Output tokens / Input tokens

  • สูงเกินไป (> 3)
    • โมเดลกำลัง "คุยเล่น" มากกว่าการสร้างผลงานที่ถูกขอ
    • สาเหตุที่พบบ่อย: ไม่มีการจำกัดรูปแบบ output, ไม่มี prefill, และการตอบกลับที่ไม่ถูกควบคุม
  • ต่ำเกินไป (< 0.3)
    • โมเดลอาจระมัดระวังมากเกินไป หรือมีการลองใหม่และความล้มเหลวด้านรูปแบบบ่อยครั้ง
  • ช่วงที่สมเหตุสมผล
    • งานเขียนโค้ดมักอยู่ในช่วง 0.5–1.5
    • งานที่เป็นการให้เหตุผลหรือการวางแผนล้วนๆ อาจใช้ช่วงที่กว้างกว่า

3. Average Tokens per Task

  • นิยาม: Token รวมที่งานหนึ่งๆ ใช้ไป เช่น การแก้บั๊กหนึ่งครั้ง หรือการ implement ฟีเจอร์หนึ่งอย่าง
  • การใช้งาน:
    • ระบุค่าผิดปกติ (outliers) ที่เบี่ยงเบนไปจากค่าเฉลี่ยอย่างมีนัยสำคัญ
    • จัดเตรียมเมตริก baseline สำหรับ SLOs

ตัวอย่างที่ไม่ถูกต้อง

The team looks only at total monthly cost and does not track the metrics above:

- Cache hit rate remains around 30%;
- The Output/Input ratio reaches 5;
- Nobody notices because total cost is still within budget;
- By the time the budget becomes tight, substantial structural waste has accumulated.

ตัวอย่างที่ถูกต้อง

The team reviews three metrics in every weekly meeting:

- Cache hit rate: 78%
- Output/Input ratio: 1.2
- Average tokens per task: p50 = 45K, p95 = 180K

Outliers, such as a Skill that suddenly raises p95, receive focused remediation.
Within six months, token cost falls by 55% for the same workload.

1.4 การระบุแหล่งที่มาของค่าใช้จ่ายระดับทีม

ยอดรวมแบบเหมารวมนั้นไม่เพียงพออย่างยิ่ง ต้นทุนต้องถูกระบุแหล่งที่มาหลายมิติ

ข้อแนะนำในการนำไปปฏิบัติ

  • สร้าง team token dashboard ทุกสัปดาห์
    • ต้องครอบคลุมอย่างน้อยทั้งสี่มิติข้างต้น
    • ทำเครื่องหมายการเปลี่ยนแปลงเทียบกับงวดก่อนและความผันผวนที่ผิดปกติ
  • ใช้ dashboard เป็น:
    • วาระประจำในการประชุมรายสัปดาห์
    • ข้อมูลนำเข้าที่สำคัญสำหรับการทบทวน Skill / Prompt

บทที่ 2: เงินในบิลไปอยู่ที่ใด

Token ไม่ได้หายไปไหน มันไหลผ่านห่วงโซ่ต้นทุนที่ตายตัว — จากคำขอของคุณ ไปยัง System Prompt ไปยังประวัติการสนทนา ไปยังการไป-กลับของเครื่องมือ และสุดท้ายไปยัง output ของโมเดล

2.1 คำขอของคุณมักเป็นส่วนที่ถูกที่สุด

การกระจายตัวของ Token ทั่วไป

ส่วนประกอบ ปริมาณ Token โดยทั่วไป บทบาทด้านต้นทุน
System Prompt 3K–10K ต้นทุนคงที่ที่จ่ายในทุกๆ รอบ
Skill / Instructions 5K–30K เพิ่มขึ้นเมื่อมีการโหลด Skill
Tool Definitions 5K–20K เพิ่มขึ้นตามจำนวน MCP server และเครื่องมือ
Session history 10K–200K+ เติบโตเชิงเส้นตามจำนวนรอบ
เนื้อหาที่ค้นคืนได้ (RAG / search) 5K–50K ขึ้นอยู่กับกลยุทธ์การค้นคืน
ไฟล์โค้ด / Patch 5K–100K ขึ้นอยู่กับระดับความละเอียดของการอ่าน
คำค้นของผู้ใช้ 50–500 สัดส่วนที่เล็กมาก

สูตรหลัก:

ต้นทุนรวม ≈ prefix คงที่ + ประวัติ session + การค้นคืนขณะรัน + การไป-กลับของเครื่องมือ + output ของโมเดล

ตัวอย่างที่ไม่ถูกต้อง

A one-line request: "Build a login feature." "Fix bug."

Result:

- The model misunderstands and enters multiple rounds of clarification;
- The number of tool calls doubles;
- Output grows and retries increase;
- Total cost rises instead.

**Root cause**: saving money in the wrong place.

ตัวอย่างที่ถูกต้อง

"Please fix this bug. The reproduction steps are..."

- Compress 20K of Skill instructions to 8K by removing filler and merging duplicate rules;
- Limit the number of lines returned by tools (`head -n 100`);
- Reference the exact file with `@path/to/file` instead of making the model search blindly.

กฎง่ายๆ: แทนที่จะย่นคำขอของผู้ใช้ให้สั้นลง ให้ลด System / Skill / Tool / History แทน

2.2 "มันจำได้" เป็นภาพลวงตา

LLM ไม่มีความจำ

เมื่อดูเหมือนว่าโมเดลจำได้ สิ่งที่เกิดขึ้นจริงคือ เนื้อหาก่อนหน้าทั้งหมดถูกส่งไปอีกครั้ง

ผลกระทบสำคัญสามประการ

  1. Context ยาวเท่าใด ต้นทุนก็สูงเท่านั้น
    • ต้นทุนของรอบที่ 10 ไม่ใช่สิบเท่าของต้นทุนรอบที่ 1 อย่างง่ายๆ
    • ทุกๆ รอบต้องจ่ายค่าเนื้อหาของทุกรอบก่อนหน้าอีกครั้ง
  2. เครื่องมือมากเท่าใด ภาระก็หนักเท่านั้น
    • ทุกเครื่องมือมาพร้อม "คู่มือ": สคีมาและคำอธิบายของมัน
    • คู่มือเหล่านี้ถูก โหลดกลับเข้าไปใน Context ใหม่ในทุกๆ รอบ
  3. การเรียกเครื่องมือสร้างวงจรต้นทุน
User request
   ↓
Model decision
   ↓
Tool call
   ↓
Tool result (large!)
   ↓
Model processing
   ↓
Next tool call...

2.3 ต้นทุนห้าประเภท

นอกจาก Input และ Output แล้ว ยังมีต้นทุนอีกสามประเภทที่มักถูกประเมินต่ำเกินไป

ประเภทต้นทุน เกิดขึ้นเมื่อใด ระดับความง่ายในการมองข้าม ผลกระทบ
ต้นทุน Input System Prompt, ประวัติ, ไฟล์ ต่ำ ⭐⭐
ต้นทุน Output เนื้อหาที่โมเดลสร้างขึ้น ต่ำ ⭐⭐⭐
ต้นทุน Thinking การให้เหตุผล / thinking budget สูง ⭐⭐⭐⭐
ต้นทุนการไป-กลับของเครื่องมือ การเรียกเครื่องมือ + ผลลัพธ์ที่ส่งกลับมา สูงมาก ⭐⭐⭐⭐⭐
ต้นทุนการลองใหม่ (Retry) ข้อผิดพลาดด้านรูปแบบ, คำสั่งที่ไม่ชัดเจน, ความล้มเหลวของเครื่องมือ สูงมาก ⭐⭐⭐⭐⭐

การไป-กลับของเครื่องมือ: จุดรั่วไหลของต้นทุนที่ถูกประเมินต่ำที่สุด

ต้นทุนการไป-กลับของเครื่องมือ = นิยามของเครื่องมือ + เนื้อหาที่ส่งกลับ + การประกอบ Context ใหม่ + การให้เหตุผลเพิ่มเติมของโมเดล

การเรียก grep ทั่วไปหนึ่งครั้ง:

  • นิยามของเครื่องมือ: ~300 tokens
  • ผลลัพธ์ที่ส่งกลับ: ~2,000 tokens
  • การประกอบ Context ใหม่: ~500 tokens
  • การประมวลผลของโมเดล: ~1,000 tokens

การเรียกเครื่องมือเพียงครั้งเดียวสามารถเกิน 3,500 tokens ได้อย่างง่ายดาย

หากโมเดลลังเลและเรียกเครื่องมือติดต่อกันห้าครั้ง ต้นทุนก็อาจบานปลายออกไปอย่างรวดเร็ว

การลองใหม่: ต้นทุนแฝงที่ทบต้น

การลองใหม่มีต้นทุนมากกว่าหนึ่ง output เพิ่มเติม มัน:

  • ส่ง Context ทั้งหมดกลับไปใหม่
  • โหลดนิยามของเครื่องมือทุกตัวใหม่
  • ทำการให้เหตุผลซ้ำ

การลองใหม่หนึ่งครั้ง ≈ ต้นทุนของหนึ่งคำขอที่สมบูรณ์

2.4 Prompt Cache: รากฐานของการปรับปรุง

Prompt Cache แคชการคำนวณของ prefix ไม่ใช่คำตอบ

ข้อเท็จจริงสำคัญสามประการ

  1. สิ่งที่ถูกแคชคือ prefix
    • มีเพียง prefix ที่เหมือนกันทุกประการเท่านั้นจึงจะเกิด cache hit
    • การเปลี่ยนแปลงแม้เพียงหนึ่งตัวอักษรอาจทำให้แคชใช้ไม่ได้
  2. TTL มักอยู่ที่ 5 นาที
    • การนำกลับมาใช้ซ้ำภายใน 5 นาที: Cache read ประมาณหนึ่งในสิบของราคา ขึ้นอยู่กับโมเดล
    • หลังจาก 5 นาที: เป็น Cache write ราคาเต็มอีกครั้ง
    • Note: Cache expiration differs by model. Anthropic supports 5m and 1h options; OpenAI, DeepSeek, and GLM use different cache mechanisms.
  3. แคชไม่ได้ถูกแชร์ข้ามโมเดล
    • แคชของ DeepSeek / GLM / GPT / Opus / Sonnet ใช้ร่วมกันไม่ได้
    • การผสมโมเดลภายใน workflow เดียวหมายถึงการสละการนำแคชกลับมาใช้ซ้ำ

ผลกระทบสามประการต่อการปรับปรุงแคช

  • การนำกลับมาใช้ซ้ำคือสิ่งที่ประหยัดเงิน: prefix เดียวกันจะถูกกว่าก็ต่อเมื่อมีการใช้ตั้งแต่ครั้งที่สองเป็นต้นไป
  • รักษา prefix ให้เสถียร: ไฟล์ Rules / CLAUDE.md ที่เปลี่ยนแปลงบ่อยคือตัวทำลายแคช
  • การปรับปรุงแคช = การกำกับดูแล Context: ทำให้ prefix เสถียร ลดสัญญาณรบกวน และแยก session

2.5 การเสื่อมถอยของคุณภาพใน Context ยาว — ไม่เพียงแพงขึ้น แต่ยังมีประสิทธิภาพน้อยลง

Context ที่ยาวเกินไปทำให้เกิดบทลงโทษสามประการ:

1. ปรากฏการณ์ Needle-in-a-Haystack

โมเดลประสบความยากลำบากในการค้นหาข้อมูลสำคัญท่ามกลางเนื้อหาที่ไม่เกี่ยวข้องจำนวนมาก

2. การปนเปื้อนของ Context (Context Poisoning)

เมื่อข้อมูลที่ไม่ถูกต้องเข้าไปอยู่ใน Context แล้ว โมเดลอาจอ้างอิงมันซ้ำๆ ซึ่งปนเปื้อน output ในลำดับต่อไป

3. Lost in the Middle

โมเดลให้ความสนใจกับส่วนกลางของ Context น้อยกว่าอย่างมีนัยสำคัญ และมีแนวโน้มที่จะจดจ่อกับส่วนต้นและส่วนท้าย

แผนภาพการตัดสินใจ: ดำเนินการต่อ vs. /compact vs. เริ่มใหม่

Has the current session exceeded 20 turns?
├─ No  → Is Context usage above 50%?
│        ├─ No  → Continue
│        └─ Yes → Run /compact
└─ Yes → Can you still locate the critical information clearly?
         ├─ Yes → Run /compact
         └─ No  → Start a new session

2.6 โมเดลการกำกับดูแลต้นทุนห้าชั้น

ชั้น หัวข้อ วัตถุประสงค์หลัก บทที่เกี่ยวข้อง
ชั้นที่ 1 นิสัยการใช้งาน ลด Context ที่ไร้ความหมาย บทที่ 3
ชั้นที่ 2 การจัดเส้นทางโมเดล (Model routing) สงวนโมเดลราคาแพงไว้สำหรับการให้เหตุผลที่มีมูลค่าสูง บทที่ 4
ชั้นที่ 3 การออกแบบ Context (Context engineering) ทำให้ prefix เสถียรและลดการส่งซ้ำ บทที่ 5
ชั้นที่ 4 สถาปัตยกรรม Agent การแยก Context + การทำงานแบบขนาน บทที่ 6
ชั้นที่ 5 การนำกลับมาใช้ซ้ำระดับองค์กร บันทึกครั้งเดียว ใช้ซ้ำได้หลายครั้ง บทที่ 7

บทที่ 3: นิสัยการใช้งาน — การปรับปรุงที่ถูกที่สุดและถูกประเมินต่ำที่สุด

3.1 การแยก Session

[บังคับ] แต่ละ session ต้องรับใช้วัตถุประสงค์ที่ชัดเจนหนึ่งอย่าง อย่าผสมงานที่แตกต่างกันโดยพื้นฐานไว้ใน session เดียวกัน

ความยาวของ session เติบโตไปตามประวัติการสนทนา ดังนั้นทุกคำขอในลำดับถัดไปจึงแพงขึ้น ให้สร้าง session แยกต่างหากสำหรับงานแต่ละประเภท

ตัวอย่างที่ถูกต้อง 1 — เปิดหลาย CodeBuddy session

# Session 1: Fix a nil-pointer dereference in the order module
# Session 2: Refactor the authentication logic in the user service
# Session 3: Add unit tests for the auth module

ตัวอย่างที่ถูกต้อง 2 — รัน /clear หลังจากทำงานเสร็จ

User: Fix bug: http://github.com/project/issues/xxx
AI:   [Bug fix completed]
User: /clear
User: Create an implementation plan for the new requirement at http://github.com/project/issues/xxx

ตัวอย่างที่ไม่ถูกต้อง

# In the same session:
# Fix a nil-pointer dereference in the order module → review an auth-module PR → write a technical
# plan for a new requirement → add unit tests
# Task types are mixed and the history context keeps growing

3.2 บีบอัดประวัติที่ยาว

[บังคับ] เมื่อ session เกิน 20 รอบ หรือเมื่อ Context ประวัติเติบโตขึ้นอย่างมีนัยสำคัญและการใช้งาน Context เกิน 50% ให้รัน /compact หรือสร้าง session ใหม่

โมเดลไม่ต้องการกระบวนการลองผิดลองถูกที่สมบูรณ์ สิ่งที่มันต้องการจริงๆ มีเพียงวัตถุประสงค์ปัจจุบัน งานที่ทำเสร็จแล้ว เส้นทางที่ตัดออกไปแล้ว อุปสรรคในปัจจุบัน และขั้นตอนถัดไป

ตัวอย่างที่ถูกต้อง

AI:   [Completes one phase]
User: /compact
User: Continue with the second phase

ตัวอย่างที่ไม่ถูกต้อง

# Dozens of failed attempts remain in the history during debugging
# After the bug is fixed, unrelated work continues in the same session
# Every subsequent request carries the irrelevant debugging history

3.3 นำข้อมูลออกไปเก็บภายนอก

[แนะนำ] เก็บข้อมูลที่มีอายุยาวนานไว้ในระบบไฟล์ แทนที่จะพึ่งพาความจำของ session

จัดเก็บข้อมูลที่มีอายุยาวนานในตำแหน่งที่เหมาะสม:

  • เอกสารของโปรเจกต์ เช่น README และ CONTRIBUTING
  • ไฟล์ Memory เช่น CODEBUDDY.md / CLAUDE.md
  • ไฟล์สรุป / บันทึกการตัดสินใจ
  • รายการงาน / Issues

session ควรพกพาเฉพาะสถานะการทำงานปัจจุบัน ไม่ใช่ประวัติทั้งหมดของโปรเจกต์

ตัวอย่างที่ถูกต้อง

# Record the database selection decision in docs/decisions/001-database-selection.md
# Record the team's API naming conventions in CODEBUDDY.md / CLAUDE.md
# Discuss only the interface currently being changed in the session

ตัวอย่างที่ไม่ถูกต้อง

# Discuss database selection, API conventions, and exception-handling strategy
# in detail within the session
# Depend on the Agent to reference these discussions automatically later
# The session keeps growing, and other team members cannot easily find the decisions

3.4 การจัดการ Skill

[บังคับ] ยึดหลักการ "จำกัด Skill ที่โหลดตลอดเวลาให้น้อยที่สุด; โหลด Skill ที่ใช้ไม่บ่อยในระดับโปรเจกต์" อย่าติดตั้ง Skill จำนวนมากไว้ที่ระดับผู้ใช้โดยไม่เลือก

ทุก Skill ประกอบด้วย Description, Instructions, Examples และตรรกะการ trigger หากข้อมูลนี้ยังคงประจำอยู่ใน Context มันจะส่งผลต่อการใช้ Token ในทุกคำขอ

ตัวอย่างที่ถูกต้อง

# User-level resident Skills: frequently used general-purpose Skills such as
# commit, code-review, and unit-test
# Project-level Skills: framework-specific workflows such as gRPC code generation,
# or tool-specific workflows such as database migration scripts
# Periodic cleanup: remove Skills that have not been used for more than two weeks

ตัวอย่างที่ไม่ถูกต้อง

# Install 30+ user-level Skills at once, covering Python, Go, Rust, frontend,
# operations, and other technology stacks
# Only commit, code-review, and unit-test are used in day-to-day work
# Definitions for all other Skills remain in the context and continuously consume tokens

3.5 การจัดการ MCP

[บังคับ] จำกัดชุดเครื่องมือ MCP ให้เหลือเท่าที่จำเป็นที่สุด การเพิ่ม MCP server ทุกตัวหมายถึงการเพิ่ม Tool Definition อีกชุดและเพิ่มภาระในการเลือกเครื่องมือ

เครื่องมือที่มากเกินไปไม่ได้เพิ่มเพียงปริมาณข้อความนิยามเท่านั้น แต่ยัง:

  • ขยายพื้นที่การเลือกและเพิ่ม latency ในการตัดสินใจ
  • เพิ่มความน่าจะเป็นของการเรียกเครื่องมือผิด
  • เพิ่ม payload นิยามที่ทุกคำขอต้องแบกรับ

ตัวอย่างที่ถูกต้อง

# User-level resident tool: Headroom context compression
# Project level: no more than five MCP servers for the current project's core business
# Disable or remove: infrequently used MCP servers unrelated to the current project

ตัวอย่างที่ไม่ถูกต้อง

# Install GitHub, Notion, TAPD, Gongfeng, Browser, Kubernetes, Docker, and multiple
# internal-system MCP servers at the user level
# The nominal feature set is comprehensive, but only Filesystem and Git are used frequently

3.6 การเลือกใช้ระหว่าง CLI กับ MCP

[บังคับ] ใช้ MCP เป็นค่าเริ่มต้น ให้กลับไปใช้ CLI ก็ต่อเมื่อ CLI นั้นปรากฏอย่างแพร่หลายในข้อมูลฝึกอบรมของ AI ดังเช่นกรณีของเครื่องมือหลักๆ เช่น git, gh, kubectl, docker, npm และ pip

การแลกเปลี่ยนที่เป็นศูนย์กลางคือ: CLI หลีกเลี่ยงต้นทุนในการโหลด Tool Definition ซึ่งลด Token ต่อรอบ อย่างไรก็ตาม เมื่อ AI ขาดความรู้พื้นฐานที่เชื่อถือได้เกี่ยวกับ CLI นั้น มันอาจสะกด flag ผิด ใช้ subcommand ผิด หรือคิดค้นอาร์กิวเมนต์ขึ้นมาเองได้ง่าย ซึ่งจะกระตุ้นให้เกิดการลองใหม่ ดังที่อธิบายไว้ในบทที่ 2 การลองใหม่หนึ่งครั้งมีต้นทุนประมาณหนึ่งคำขอที่สมบูรณ์ (⭐⭐⭐⭐⭐) ซึ่งมักมากกว่า Tool Definition ที่ประหยัดไปมาก MCP ใช้ Token นิยามจำนวนเล็กน้อยในแต่ละรอบเพื่อแลกกับสคีมาพารามิเตอร์ที่เป็นมาตรฐาน คำอธิบายที่ชัดเจนกว่า และการเรียกผิดและการลองใหม่ที่น้อยลง

แนวทางการเลือก

สถานการณ์ เลือกใช้ เหตุผล
CLI หลักที่ปรากฏอย่างแพร่หลายในข้อมูลฝึกอบรมของ AI เช่น git / gh / kubectl / docker / npm / pip CLI ภาระในการโหลดต่ำและความน่าจะเป็นในการเรียกถูกต้องสูง
CLI เฉพาะทาง / เป็นกรรมสิทธิ์ / ภายใน เช่น สคริปต์ปฏิบัติการของทีมหรือคำสั่งธุรกิจส่วนตัว MCP สคีมาที่เป็นมาตรฐานช่วยลดภาพหลอนและหลีกเลี่ยงการลองใหม่ที่เกิดจากการเรียกผิด
ต้องการผลลัพธ์ที่มีโครงสร้างและอ่านได้ด้วยเครื่องสำหรับห่วงโซ่การตัดสินใจในลำดับถัดไป MCP หลีกเลี่ยงต้นทุนแบบทบต้นจากการแยกวิเคราะห์ output การทำความสะอาด และการลองใหม่
ต้องการขอบเขตสิทธิ์และการยืนยันตัวตนแบบรวมศูนย์ MCP ตอบสนองข้อกำหนดด้านความปลอดภัยและการตรวจสอบ

วิธีประเมินว่า AI รู้จัก CLI หรือไม่

"เป็นเครื่องมือหลักและ AI คุ้นเคย" ไม่ใช่มาตรฐานที่แน่นอน แต่เกณฑ์ด้านล่างสามารถช่วยได้ หากไม่แน่ใจ ให้ใช้ MCP เป็นค่าเริ่มต้น ต้นทุนของความผิดพลาดไม่สมมาตร: การปฏิบัติต่อ CLI ที่ไม่เป็นที่รู้จักเสมือนเป็นเครื่องมือหลักอาจกระตุ้นการลองใหม่ที่มีต้นทุน ⭐⭐⭐⭐⭐ ในขณะที่การปฏิบัติต่อ CLI หลักเสมือนว่าไม่เป็นที่รู้จักแล้วใช้ MCP จะเพิ่มเพียง Tool Definition ไม่กี่กิโลไบต์

เกณฑ์ ช่วงที่ปลอดภัยสำหรับ CLI ช่วงที่ปลอดภัยสำหรับ MCP
การทดสอบโดยตรง: ให้ AI ทำงานทั่วไปด้วย CLI นั้น เขียนคำสั่ง และอธิบายแต่ละอาร์กิวเมนต์ คำสั่งถูกต้อง และคำอธิบายอาร์กิวเมนต์มีความมั่นใจและสอดคล้องกัน AI สะกด flag ผิด คิดค้น subcommand ขึ้นมาเอง หรือดูไม่แน่ใจ
GitHub Stars > 10K < 1K
สิ่งพิมพ์เฉพาะทาง เช่น หนังสือจาก O'Reilly หรือ Manning มี ไม่มี
จำนวนคำถามบน Stack Overflow > 5,000 < 100
การเปิดตัวครั้งแรกของเครื่องมือเกิดขึ้นก่อน training cutoff ของโมเดลมากกว่าหนึ่งปีหรือไม่ ใช่ ไม่ใช่ หรือใกล้เคียงกับ cutoff
ยอดดาวน์โหลดต่อสัปดาห์จาก package manager > 1 ล้าน < 10,000

ตัวชี้วัดสนับสนุน เช่น Stars และยอดดาวน์โหลดเป็นเพียงข้อมูลอ้างอิง และไม่ควรนำมากำหนดการเลือกเพียงลำพัง การทดสอบโดยตรงมีลำดับความสำคัญสูงสุด และใช้เพียงข้อความเดียว

ตัวอย่างที่ถูกต้อง — CLI ชนะ

# Inspect Git changes; the AI is highly familiar with git
git diff --stat
git log --oneline -10

# Create a PR; gh is extensively represented in training data
gh pr create --title "feat: add batch query for UserService" --body "..."

ตัวอย่างที่ถูกต้อง — MCP ชนะ

# The AI has no prior knowledge of a proprietary internal release-system CLI
# and can easily misspell a flag and trigger a retry
# Wrap it as an MCP Tool with a standardized schema describing its parameters and behavior

# The AI must make a structured decision based on the previous result
# Example: query inventory → decide whether to scale based on the structured result
# → call the scaling API
# MCP's structured return value avoids cascading retries caused by CLI-output parsing failures

ตัวอย่างที่ไม่ถูกต้อง

# Mature CLIs such as gh and kubectl are already highly familiar to the AI,
# yet GitHub and Kubernetes MCP servers are installed as well
# The context gains several kilobytes of Tool Definitions without improving call accuracy

# A proprietary internal CLI is called directly without an MCP wrapper
# Every call becomes a gambling loop: guess arguments → receive an error
# → interpret the error → guess again; retry cost becomes uncontrolled

3.7 อ้างอิงไฟล์ด้วยพาธแบบเต็ม (@path)

[บังคับ] เมื่ออ้างอิงไฟล์ ให้ใช้ @ ตามด้วยพาธแบบเต็มหรือแบบสัมพัทธ์ อย่าให้เพียงชื่อไฟล์แล้วปล่อยให้ Agent ไปค้นหาเอง

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

ตัวอย่างที่ถูกต้อง

Review the transaction-handling logic in CreateOrder at @src/order/service.go
Modify the token-validation logic in @internal/auth/middleware.go

ตัวอย่างที่ไม่ถูกต้อง

Review the transaction-handling logic in service.go
Modify the token-validation logic in middleware.go
# The Agent must traverse the project tree, find files with the same name,
# confirm the intended target, and then read it

3.8 ระบุความต้องการทั้งหมดให้ครบถ้วน

[บังคับ] ระบุวัตถุประสงค์ของงาน บริบท และเกณฑ์การยอมรับให้ครบถ้วนในข้อความเดียว หลีกเลี่ยงการขอทีละเล็กทีละน้อยแบบไป-กลับ

ทุกการโต้ตอบใช้ Token ไปกับการประกอบ Context ใหม่ การโหลดประวัติซ้ำ และการยืนยันสถานะใหม่ การขอที่ครบถ้วนในข้อความเดียวมีประสิทธิภาพสูงกว่าการยืนยันแบบเพิ่มทีละส่วนหลายรอบอย่างมีนัยสำคัญ

ตัวอย่างที่ถูกต้อง

Review the CreateOrder function in @src/order/service.go, identify potential defects,
fix them, and write unit tests for the corrected function.

ตัวอย่างที่ไม่ถูกต้อง

User: Take a look at the CreateOrder function
AI:   What aspects should I check?
User: See whether it has any bugs
AI:   Inventory deduction is not protected by a transaction. Should I fix it?
User: Fix it
AI:   The fix is complete. Should I add tests?
User: Yes, add them

3.9 เลือกใช้เครื่องมือมากกว่าการให้เหตุผลของ LLM

[บังคับ] เลือกวิธีการดำเนินการตามลำดับนี้: ใช้เครื่องมือเฉพาะทางที่มีอยู่แล้ว > เขียนสคริปต์ > พึ่งพาการให้เหตุผลของ LLM

คุณค่าหลักของ LLM คือการจัดการกับความไม่แน่นอน — งานที่ต้องการความเข้าใจบริบท การให้เหตุผล การตัดสินใจ และการแลกเปลี่ยน สำหรับการดำเนินการเชิงกลที่มี workflow แบบกำหนดได้และมีกฎที่ชัดเจน ให้เลือกเครื่องมือเฉพาะทางหรือสคริปต์

ตัวอย่างที่ถูกต้อง

# Existing specialized tool: code linting
golangci-lint run ./...

# Existing specialized tool: code formatting
gofmt -w ./src

# Existing specialized tool: database migration
alembic upgrade head

ตัวอย่างที่ไม่ถูกต้อง

User: Check whether this Go code has formatting problems
AI:   Reads every file → analyzes indentation, naming, and import order line by line
      → outputs modification suggestions
# golangci-lint can do this with one command; Agent reasoning is both inefficient
# and vulnerable to misjudgment

User: I need the number of paid machines over the past 30 days, every day
AI:   Re-reads the table schema and sample data every day → estimates the count
# Instead, have the AI generate a fixed script and execute it to obtain the result

3.10 โหลดเครื่องมือแบบ Lazy-Load

[แนะนำ] กำหนดค่าเครื่องมือที่ไม่ได้ใช้บ่อยให้โหลดแบบรอได้ (deferred) ด้วย Defer เพื่อไม่ให้นิยามของมันประจำอยู่ใน Context

ตามค่าเริ่มต้น นิยามของเครื่องมือที่ลงทะเบียนไว้ทั้งหมดจะถูกแทรกเข้าไปใน Context ของทุกคำขอ เครื่องมือยิ่งมาก ต้นทุน Token ที่ประจำอยู่ก็ยิ่งมาก CodeBuddy รองรับตัวปรับแต่ง (modifier) Defer(...) สำหรับทำเครื่องหมายเครื่องมือที่ไม่จำเป็นให้โหลดแบบ lazy นิยามของมันจะไม่ปรากฏในรายการเครื่องมือของโมเดล และจะถูกโหลดและเรียกใช้ก็ต่อเมื่อโมเดลค้นพบมันด้วยตนเองผ่าน ToolSearch

ตัวอย่างที่ถูกต้อง — Agent

# .codebuddy/agents/code-reviewer.md
---
name: code-reviewer
description: Code review agent
tools:
  - Read
  - Grep
  - Bash
  - Defer(Glob)          # Lazy-loaded: discovered through ToolSearch only when file search is needed
  - Defer(WebFetch)      # Lazy-loaded: triggered only when online documentation is needed
---

ตัวอย่างที่ถูกต้อง — CodeBuddy

# Specify lazy-loaded tools when starting the CLI
codebuddy --tools "Read,Edit,Bash,Defer(Glob),Defer(Grep),Defer(WebFetch)"

ตัวอย่างที่ถูกต้อง — MCP

{
  "mcpServers": {
    "mcp-server-tapd": {
      "command": "uvx",
      "args": ["mcp-server-tapd"],
      "defer_loading": true
    }
  }
}

ตัวอย่างที่ไม่ถูกต้อง

---
name: research-agent
description: Conduct research through multiple web search engines
# Omitting a tools declaration enables many built-in CodeBuddy tools by default
---
XXX content

บทที่ 4: Model Routing — อย่าใช้โมเดลราคาแพงกับงานราคาถูก

4.1 จับคู่กับงานก่อน อย่าเพียงเลือกโมเดลที่ถูกที่สุด

Model routing ไม่ได้หมายถึง "ใช้โมเดลที่ถูกที่สุดเสมอ" แต่หมายถึงการจัดประเภทงานให้ถูกต้องเสียก่อน:

  • งานที่ซับซ้อน → โมเดลที่ทรงพลัง
  • งานที่เรียบง่าย → โมเดลราคาประหยัด
  • งานที่ทำซ้ำ → โมเดลที่มีความเสถียร

การออกแบบสถาปัตยกรรมต้องอาศัยการให้เหตุผลหลายขั้นตอน ดังนั้นจงใช้โมเดลราคาแพงเมื่อจำเป็น โมเดลราคาประหยัดก็เพียงพอโดยสมบูรณ์สำหรับการเขียน unit test การเพิ่มคอมเมนต์ หรือการสร้าง commit message ส่วนการจัดหมวดหมู่และการสรุปขนาดใหญ่เหมาะกับโมเดลต้นทุนต่ำหรือการประมวลผลแบบ batch แบบออฟไลน์มากกว่า

4.2 การจับคู่งานกับโมเดล

[บังคับ] เลือกระดับโมเดลที่เหมาะสมตามความซับซ้อนของงาน อย่าใช้โมเดลที่ทรงพลังที่สุดเป็นค่าเริ่มต้นสำหรับทุกงาน

ประเภทงาน ระดับโมเดลที่แนะนำ เหตุผล
การจัดหมวดหมู่ / การสรุปจำนวนมาก โมเดลต้นทุนต่ำหรือการประมวลผลแบบ batch ปริมาณสูงและมีความอ่อนไหวต่อต้นทุนสูง
การเขียน unit test โมเดลน้ำหนักเบา รูปแบบเสถียร เป็นเทมเพลตสูง และตรวจสอบได้ทันที
การสร้าง commit message โมเดลน้ำหนักเบา สรุป diff ให้ output สั้น และมีความเสี่ยงต่ำ
การจัดรูปแบบโค้ด / การเพิ่มคอมเมนต์ โมเดลน้ำหนักเบา มีกฎที่ชัดเจนและเป็นการแปลงรูปแบบเชิงกล
การเปลี่ยนชื่อตัวแปร / การ refactor อย่างง่าย โมเดลน้ำหนักเบา เป็นการจับคู่รูปแบบเป็นหลักและมีความกำหนดได้สูง
การสร้างเอกสาร API โมเดลน้ำหนักเบา ดึงนิยามของอินเทอร์เฟซจากโค้ดมาเป็น output แบบเทมเพลต
การทบทวนโค้ด (Code Review) โมเดลระดับกลางถึงสูง ต้องเข้าใจความตั้งใจของโค้ดและระบุปัญหาที่ลึกขึ้น เช่น ความปลอดภัยของ concurrency และขอบเขตของ transaction
การออกแบบสถาปัตยกรรม โมเดลประสิทธิภาพสูง ต้องเปรียบเทียบทางเลือก พิจารณาความสามารถในการขยายและกรณีขอบ และทำการให้เหตุผลหลายขั้นตอน
การวิเคราะห์ข้อบกพร่องที่ซับซ้อน โมเดลประสิทธิภาพสูง ต้องการหลายสมมติฐาน: สรุปสาเหตุรากฐาน → ตรวจสอบเส้นทาง → กำจัดสิ่งรบกวน → ออกแบบวิธีแก้
การทบทวนการออกแบบเชิงเทคนิค โมเดลประสิทธิภาพสูง ต้องประเมินความเป็นไปได้ ระบุความเสี่ยงที่อาจเกิดขึ้น และเสนอทางเลือก
การ refactor ข้ามโมดูล โมเดลประสิทธิภาพสูง ต้องการมุมมองระดับโลกของการพึ่งพากันข้าม service และโมดูล
การวิเคราะห์การปรับปรุงประสิทธิภาพ โมเดลประสิทธิภาพสูง ต้องระบุคอขวด สรุปสาเหตุ และประเมินประโยชน์ของกลยุทธ์การปรับปรุงที่ต่างกัน

กฎการตัดสินใจ: หากความถูกต้องสามารถตรวจสอบได้ทันทีหลังจากงานถูกสร้างขึ้น ให้ใช้โมเดลน้ำหนักเบา หากผลลัพธ์ต้องการการวิเคราะห์และการแลกเปลี่ยนซ้ำๆ ให้ใช้โมเดลประสิทธิภาพสูง

4.3 ผูกโมเดลเข้ากับ Skills / Agents / Commands

Model routing ไม่ควรมีอยู่เพียงเป็นกฎในหัวของการสนทนาหลัก แต่ควรถูกนำไปใช้ในหน่วยปฏิบัติการ

ผูกโมเดลเข้ากับ Skills: ผูกโมเดลราคาประหยัดเข้ากับ Skill อย่างชัดเจน สำหรับการเขียน unit test การสร้าง commit การแก้รูปแบบ และการสร้างโค้ดแบบ boilerplate

ใน CodeBuddy เป็นต้น frontmatter ของไฟล์ SKILL.md สามารถประกาศโมเดลและกลยุทธ์ Context ได้โดยตรง:

---
name: XXX
description: XXXX
context: fork
model: deepseek-v4-pro
---

ฟิลด์ model ระบุโมเดลที่ Skill ใช้ context: fork รัน workflow ที่ตายตัวนี้ใน Context การปฏิบัติงานแบบแยกส่วน ซึ่งเหมาะสมกับ Skill ที่มีขอบเขตชัดเจนและสามารถทำงานให้สำเร็จได้ด้วยตนเอง สิ่งนี้ทำให้ Skill ที่มีความซับซ้อนต่ำใช้โมเดลราคาประหยัดโดยอัตโนมัติโดยไม่ต้องแบกประวัติทั้งหมดของ session หลัก

ผูกโมเดลเข้ากับ Agents: Agent ก็รองรับการผูกโมเดลผ่านพารามิเตอร์ model เช่นกัน ให้กำหนดโมเดลในนิยามของ Agent เพื่อให้ทุกคนในทีมใช้ระดับที่กำหนดไว้เป็นค่าเริ่มต้น แทนที่จะต้องจำว่าต้องสลับเอง

Planner  → Mid-to-high tier
Coder    → Mid tier
UnitTest → Inexpensive
Reviewer → Powerful

หมายเหตุ: ใน CodeBuddy คีย์เวิร์ด lite หมายถึงโมเดลราคาประหยัดหรือน้ำหนักเบา โดยจะเลือกโมเดลคู่ที่ต้นทุนต่ำกว่าของโมเดลที่ผู้ใช้เลือกโดยอัตโนมัติ เช่น หากผู้ใช้เลือก deepseek-v4-pro โมเดล lite จะเป็น deepseek-v4-flash ผู้ใช้ยังสามารถตั้งค่าตัวแปรสภาพแวดล้อม CODEBUDDY_SMALL_FAST_MODEL="hy3-ioa" เพื่อระบุโมเดลที่เจาะจงซึ่ง lite แทนได้

frontmatter ต่อไปนี้นิยาม Agent ที่ใช้โมเดลน้ำหนักเบา:

---
name: AgentName
description: XXXX
model: lite
tools: Read, Grep, Glob, Bash
---

ผูกโมเดลเข้ากับ Commands: Command หลายตัว เช่น /commit และ /check-ci-status เป็นไปตามเทมเพลตที่ตายตัว และเหมาะสมอย่างยิ่งกับการใช้โมเดลราคาประหยัดที่ตั้งไว้ล่วงหน้า

เมื่อการออกแบบนี้ถูกเข้ารหัสไว้ การกำกับดูแลต้นทุนจะเปลี่ยนจาก "ต้องจำว่าต้องสลับโมเดล" ไปเป็น "ระบบมีความคุ้มทุนเป็นค่าเริ่มต้น" ต่อไปนี้คือตัวอย่างของ Command frontmatter:

---
description: "XXX"
argument-hint: "[message]"
allowed-tools: Bash(git:*)
model: lite
---

บทที่ 5: การกำกับดูแล Context และ Output — ทำให้ทุกชั้นมีประสิทธิภาพมากขึ้น

5.1 CLAUDE.md ของ Karpathy: การตัดแต่งอัตโนมัติและจุดยึดเหนี่ยวต้านภาพหลอน

[แนะนำ] หากทีมยังไม่มีข้อตกลงทางเลือกอื่น พิจารณานำ Andrej Karpathy's CLAUDE.md มาใช้ตามความเหมาะสมกับโปรเจกต์

ตำแหน่ง: เทมเพลต CLAUDE.md คุณภาพสูงที่พัฒนาโดยชุมชน ผ่านชุดกฎที่กำหนดไว้ล่วงหน้า มันกำหนดให้โมเดลตัดแต่ง Context ลดคำฟุ่มเฟือย ระงับภาพหลอน และบังคับใช้ข้อตกลงทางวิศวกรรม

CLAUDE.md ของ Andrej Karpathy มุ่งแก้ปัญหาว่าโมเดลควรคิดอย่างไร มันฝังโปรโตคอลการให้เหตุผลที่มีประสิทธิภาพไว้ที่ชั้น System Prompt เพื่อลดการสร้าง Token ที่ไม่จำเป็นตั้งแต่ต้นทาง

5.1.1 คุณค่าหลัก: เหตุใดจึงควรใช้ CLAUDE.md ของ Karpathy?

CLAUDE.md ทั่วไปมักมีเพียงการแนะนำโปรเจกต์ แต่เวอร์ชันของ Karpathy คือ "รัฐธรรมนูญแห่งเศรษฐศาสตร์ Token":

  1. บังคับให้ output กระชับ (Anti-Bloat)
    • ห้ามการทักทายที่ไร้ความหมาย การชื่นชมตนเอง และการยืนยันซ้ำซาก
    • กำหนดให้ใช้รายการและตารางแทนข้อความร้อยแก้วยาวๆ
    • กำหนดให้โมเดลถามตนเองก่อนตอบว่า: "ข้อมูลนี้จำเป็นต่อการทำงานให้สำเร็จหรือไม่?"
  2. คำสั่งสำหรับการตัดแต่ง Context
    • บอกโมเดลอย่างชัดเจนให้ละเว้นชิ้นส่วนไฟล์ที่ไม่เกี่ยวข้อง เช่น node_modules และสิ่งที่ได้จากการ build
    • สำหรับไฟล์ยาว ให้ใช้ grep / rg เพื่อระบุตำแหน่งเนื้อหาที่เกี่ยวข้องก่อน อย่าเพียงแต่ Read ทั้งไฟล์
  3. การยึดเหนี่ยวเพื่อต้านภาพหลอน (Anti-hallucination grounding)
    • กำหนดให้เรียกใช้เครื่องมือ เช่น Read / Search ทุกครั้งที่โมเดลไม่แน่ใจ ห้ามคิดค้นลายเซ็นฟังก์ชันหรือวิธีใช้ API จากความจำ
    • ภาพหลอนเป็นหนึ่งในสาเหตุที่ใหญ่ที่สุดของการลองใหม่ กฎของ Karpathy สามารถลดต้นทุนการลองใหม่ที่เกิดจากข้อมูลที่ถูกสร้างขึ้นอย่างมั่นใจได้อย่างมีนัยสำคัญ
  4. ทำให้ข้อตกลงทางวิศวกรรมเป็นรหัส
    • นำรูปแบบโค้ด ข้อตกลงการทำ commit และข้อกำหนดการทดสอบไว้ใน prefix เพื่อไม่ต้องอธิบายซ้ำๆ ซึ่งช่วยเพิ่ม Cache Hit Rate

5.1.2 การรับมาและการติดตั้ง

CLAUDE.md ของ Andrej Karpathy เป็นทรัพยากรแบบโอเพนซอร์สที่ยังคงพัฒนาต่อไปผ่านการสนับสนุนของชุมชน

แหล่งที่มา: https://github.com/multica-ai/andrej-karpathy-skills/blob/main/CLAUDE.md

การติดตั้ง:

  1. ระดับโปรเจกต์ (แนะนำ): คัดลอกเนื้อหาไปไว้ใน CLAUDE.md หรือ CODEBUDDY.md ที่รากของโปรเจกต์ หรือไว้ในไดเรกทอรี rules;
  2. ระดับ Global: รวมเนื้อหาเข้ากับไฟล์คอนฟิกส่วนกลาง เช่น ~/.claude/CLAUDE.md เพื่อให้มีผลกับทุกโปรเจกต์

หมายเหตุ: เนื่องจากไฟล์นี้เปลี่ยนพฤติกรรมเริ่มต้นของโมเดล ให้ตรวจสอบการอัปเดต เดือนละครั้ง

5.1.3 ตัวอย่างกฎทั่วไป — บางส่วน

ตัวอย่างต่อไปนี้แสดงให้เห็นว่ากฎสไตล์ Karpathy ใช้ข้อจำกัดเพื่อประหยัด Token อย่างไร:

---
# Global response strategy
- Minimalism: Unless an explanation is requested, output only code blocks. Do not
  include pleasantries such as "Okay" or "Let me help you."
- Determinism: If the Read tool returns empty or no results, stop and report an
  error immediately. Do not guess the file contents.
- Tools first: When a task concerns file content, code definitions, or Git status,
  call a tool. Never guess based on memory.

# Context management
- Search before reading: In an unfamiliar codebase, use Grep/Glob before deciding
  what to Read.
- Line limits: When reading a file, specify `offset` and `limit`; read no more than
  200 lines by default.
- Focus changes: After modifying code, show only the relevant diff. Do not repeat
  the entire file.

# Output format
- Present information with Markdown lists and tables.
- Include necessary comments in code snippets, but remove redundant sample output.
---

# Project-specific rules: insert the project's architecture, technology stack,
# and special conventions here

5.2 RTK — Rust Token Killer

[แนะนำ] ลดปริมาณ output ของเครื่องมือและการใช้ Token อย่างรวดเร็ว

ตำแหน่ง: สกัดกั้น output ของคำสั่ง shell และบีบอัดก่อนที่ Agent จะเห็น มันบีบอัดเฉพาะ output ของ CLI ไม่ใช่ Prompt หรือโค้ด

5.2.1 การติดตั้ง RTK

# 1. Install the internal fork; Rust must already be installed
git clone https://git.woa.com/godwinchen/rtk.git
cd rtk && cargo install --path .

rtk init --global --agent codebuddy   # Install the hook to intercept all commands transparently
rtk gain                              # Confirm that savings data is available

5.2.2 การใช้งาน RTK

ตัวอย่างคำขอ: Push การเปลี่ยนแปลงของโค้ด

Output ปกติ (~80 tokens):

Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 10 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 2.34 KiB | 2.34 MiB/s, done.
Total 8 (delta 5), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (5/5), completed with 3 local objects.
To github.com:org/repo.git
   abc1234..def5678  main -> main

Output ของ RTK (3 tokens):

ok main

ตัวอย่างคำขอ: ตรวจสอบว่าการทดสอบผ่านหรือไม่

Output ปกติ (~2,500 tokens):

PASS src/utils.test.ts
PASS src/config.test.ts
...
PASS src/chain.test.ts
FAIL src/order.test.ts > should handle empty cart
  AssertionError: expected 400 got 500
    at Object.<anonymous> (src/order.test.ts:42:17)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Promise (src/order.test.ts:38:3)
    at async Context.<anonymous> (src/order.test.ts:35:5)
FAIL src/auth.test.ts > expired token
  Error: timeout of 2000ms exceeded
    at Object.<anonymous> (src/auth.test.ts:18:12)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Promise (src/auth.test.ts:14:3)

Test Suites: 2 failed, 43 passed, 45 total
Tests:       2 failed, 178 passed, 180 total
Snapshots:   0 total, 0 failed
Time:        12.345 s
Ran all test suites.

Output ของ RTK (~30 tokens):

FAIL 2/45 tests
  src/order.test.ts > should handle empty cart → expected 400 got 500
  src/auth.test.ts > expired token → timeout

5.3 Caveman

Caveman เป็นปลั๊กอินบีบอัด output สำหรับ AI coding Agent กฎใน Prompt ทำให้โมเดลตอบกลับแบบ "มนุษย์ถ้ำอัจฉริยะ": ตัดคำฟุ่มเฟือยและมารยาททางสังคมออกไป ในขณะที่ยังคงรักษาข้อเท็จจริงทางเทคนิคไว้

5.3.1 การติดตั้ง Caveman

หากคุณใช้เครื่องมือเขียนโค้ดด้วย AI อื่นที่ไม่ใช่ Claude Code หรือ Codex ให้ติดตั้ง Caveman ด้วยคำสั่งต่อไปนี้:

# macOS · Linux · WSL · Git Bash
curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash

# Windows · PowerShell 5.1+
irm https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.ps1 | iex

CodeBuddy ยังไม่มีการสนับสนุนอย่างเป็นทางการ ดังนั้นให้ใช้ fork รันคำสั่งต่อไปนี้ใน CodeBuddy:

/plugin marketplace add https://github.com/studyzy/caveman

# Select the caveman plugin after running the command. The system returns:
#  ⎿ ✓ Added marketplace: caveman
#  ⎿ ✓ Installed caveman. Restart CodeBuddy Code to load new plugins.

5.3.2 การใช้งาน Caveman

หลังจากติดตั้ง Caveman ถูกต้องแล้ว CodeBuddy จะแสดงข้อความต่อไปนี้เมื่อเริ่มทำงาน:

Hook SessionStart
  CAVEMAN MODE ACTIVE — level: full
  Respond terse like smart caveman. All technical substance stay. Only fluff die.
……

Caveman มีสี่โหมดโดยมีการบีบอัดที่แรงขึ้นตามลำดับ:

  • /caveman lite: ตัดคำฟุ่มเฟือยออกไปในขณะที่ยังคงรักษา article และสไตล์ที่เป็นทางการ เหมาะกับ output ที่เป็นทางการ
  • /caveman (full, ค่าเริ่มต้น): ตัด article ออกและใช้ประโยคแบบ fragment เพื่อสมดุลระหว่างการบีบอัดกับความอ่านง่าย
  • /caveman ultra: การบีบอัดขั้นสุดด้วยห่วงโซ่เชิงเหตุปัจจัยแบบ A → B → C
  • /caveman wenyan: โหมดภาษาจีนโบราณ ซึ่งในทางทฤษฎีเป็นรูปแบบการเขียนที่ประหยัด Token ที่สุด

ตัวอย่างผลลัพธ์ในโหมด full:

คำถาม: เหตุใด React component จึง re-render ตลอดเวลา?

Output ปกติ (69 tokens):

The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle...

Output ของ Caveman (19 tokens):

New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo.

5.4 Ponytail

แก่นของ Ponytail ไม่ใช่ "วิธีเขียนโค้ด" แต่เป็นสิ่งที่ต้องพิจารณาก่อนเขียนโค้ด มันนิยามลำดับการตัดสินใจที่เข้มงวด:

Level 1: Does this really need to be built? (YAGNI)
Level 2: Does the codebase already contain it? Reuse it
Level 3: Can the standard library do it? Use it
Level 4: Does the browser / operating system provide it natively? Use it
Level 5: Is it available in an already-installed dependency? Use it
Level 6: Can it be done in one line? Write one line
Level 7: Only if none of the above works, write the minimum amount of new code

แต่ละระดับคือด่านตรวจ การไปถึงระดับ 7 หมายถึงการเริ่มเขียนโค้ดจริงๆ แต่ความต้องการส่วนมากจะถูกหยุดไว้ที่ระดับก่อนหน้า วิศวกรที่มีประสบการณ์จะไม่สร้างไฟล์ใหม่ทันที — พวกเขาจะ grep หาวิธีแก้ที่มีอยู่แล้วใน codebase ก่อน

5.4.1 การติดตั้ง Ponytail

รันคำสั่งต่อไปนี้ในบรรทัดคำสั่งของ CodeBuddy หรือ Claude Code:

/plugin marketplace add https://github.com/studyzy/ponytail

# After adding the marketplace, select the ponytail plugin.
# If you did not select it, run:
/plugin install ponytail@ponytail

5.4.2 การใช้งาน Ponytail

Ponytail เป็นเครื่องมือ prompt engineering โดยพื้นฐาน มันแทรก Prompt เข้าไปใน Context ปัจจุบันเพื่อเตือน LLM ไม่ให้เสีย Token ไปกับการสร้างโค้ดที่ซ้ำซ้อน

Ponytail ทำมากกว่าการสนับสนุนให้เขียนโค้ดให้น้อยลง มันยังมีชุดคำสั่งย่อยที่ใช้งานได้จริง:

คำสั่ง วัตถุประสงค์
/ponytail-review ทบทวนการเปลี่ยนแปลงปัจจุบันว่ามีการออกแบบที่ซับซ้อนเกินไปหรือไม่ และสร้างรายการโค้ดที่สามารถลบออกได้
/ponytail-audit สแกนทั้ง repository หาการออกแบบที่ซับซ้อนเกินไป — เสมือนเป็นการตรวจสุขภาพของ codebase
/ponytail-debt แสดงรายการหนี้ทางเทคนิคทั้งหมดที่ทำเครื่องหมายด้วยคอมเมนต์ ponytail: พร้อมแนวทางการแก้ไข
/ponytail-gain แสดงผลการประหยัดที่เป็นตัวเลขจาก Ponytail ทั้งด้านโค้ด ต้นทุน และเวลา
/ponytail-help แสดงข้อมูลอ้างอิงแบบย่อของคำสั่งทั้งหมดที่มี

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

5.5 การเปรียบเทียบเครื่องมือทั้งสี่

เครื่องมือ ตำแหน่ง สิ่งที่มันบีบอัด ชั้น ผลกระทบต่อต้นทุน
Karpathy's CLAUDE.md กฎด้านพฤติกรรมและจุดยึดเหนี่ยวต้านภาพหลอน แนวทางการให้เหตุผลของโมเดล แนวโน้มของ output และกลยุทธ์การค้นคืน System Prompt ซึ่งเป็นชั้นต้นน้ำ ลด Output และการลองใหม่; เพิ่ม Cache Hit Rate
RTK ตัวกรอง output ของ shell output ของ CLI เช่น git status, test, ls และ docker ชั้น Tool Output ลดต้นทุนการไป-กลับของเครื่องมือได้อย่างมาก
Caveman ตัวบีบอัดสไตล์การตอบกลับของ AI คำฟุ่มเฟือย คำสุภาพ และการอธิบายซ้ำใน output ของโมเดล ชั้น Output ลด Output และภาระของประวัติ
Ponytail เอนจินลดปริมาณโค้ด โค้ดที่ไม่ควรถูกสร้างขึ้น ทำหน้าที่เป็นผู้บังคับใช้ YAGNI ชั้น Logic / Generation ลด Output และต้นทุนการบำรุงรักษา

สรุปเครื่องมือละหนึ่งประโยค:

  • Karpathy's CLAUDE.md ทำให้ Agent คิดให้ชัดก่อนลงมือทำ
  • RTK บีบอัดสิ่งที่ Agent เห็น
  • Caveman บีบอัดสิ่งที่ Agent พูด
  • Ponytail บีบอัดโค้ดที่ Agent เขียน

เครื่องมือทั้งสี่ครอบคลุมมิติของการบีบอัดที่ต่างกัน และสามารถนำมารวมกันเป็น pipeline ที่สมบูรณ์ได้:

Agent calls a command
    ↓
RTK (first stage: compress CLI command output)
    ↓
LLM receives clean input
    ↓
Ponytail (controls what to write: do not write unnecessary code)
    +
Caveman (controls how to say it: remove unnecessary prose)
    ↓
Compressed output is returned to the user

บทที่ 6: การทำงานร่วมกันของ Multi-Agent — ขอบเขตที่ชัดเจนช่วยประหยัด Token

6.1 เหตุใด Agent เดี่ยวจึงแพงขึ้นเมื่อเวลาผ่านไป

สาเหตุหลัก: Transformer ไม่มีความจำ

สถาปัตยกรรม Transformer ที่ LLM ใช้งานไม่มีความจำข้ามรอบ ในทุกๆ รอบ จะต้องส่ง "System Prompt + ประวัติการสนทนา + input ปัจจุบัน" ที่สมบูรณ์ไปยังโมเดลอีกครั้ง ซึ่งหมายความว่า:

Turn 1: Context = System Prompt
Turn 2: Context = System Prompt + turn 1
Turn 3: Context = System Prompt + turn 1 + turn 2
...
Turn N: Context = System Prompt + all previous N-1 turns

การเพิ่มข้อมูลที่ไม่เกี่ยวข้องมากเกินไปยังลดคุณภาพของการตอบกลับด้วย งานวิจัยได้แสดงให้เห็นซ้ำๆ ผ่านปรากฏการณ์ "Lost in the Middle": โมเดลให้ความสนใจกับข้อมูลที่อยู่ตรงกลางของ Context น้อยที่สุด Context Engineering ที่ดีไม่ใช่การแทรกข้อมูลให้มากที่สุดเท่าที่จะทำได้ แต่คือการเลือกข้อมูลที่จำเป็นในขณะนี้อย่างระมัดระวัง

6.2 Subagents: รูปแบบการแยกงานที่มีต้นทุนต่ำที่สุด

เหตุใด Subagents จึงประหยัด Token?

กลไกหลัก: Subagent มี Context แบบแยกส่วนและใช้ครั้งเดียว การเติบโตแบบกำลังสองถูกจำกัดไว้ภายใน Subagent ในขณะที่ประวัติของ Agent หลักเติบโตเชิงเส้น

API ของ LLM เป็นแบบ stateless และทุกการเรียกเครื่องมือจะส่งประวัติที่สมบูรณ์กลับไปใหม่ ดังนั้นวิธีที่ประวัติสะสมจึงเป็นตัวกำหนดว่าการใช้ Token จะเติบโตแบบเชิงเส้นหรือแบบกำลังสอง

ตัวอย่างที่ไม่ถูกต้อง

อย่ามอบหมายงาน; ทำทุกอย่างในบทสนทนาของ Agent หลัก:

Main Agent: Poll N×K times → read entire large files → process intermediate artifacts
            Every message resends all preceding history
            ⇒ Main history is O(N×K), and every turn resends it in full
            ⇒ Total tokens ≈ O((N×K)²), quadratic growth

ตัวอย่างที่ถูกต้อง

มอบหมายงานหนักให้ Subagent:

Subagent: Poll N×K times → read entire large files → process intermediate artifacts
          This remains in the Subagent's one-time context and does not enter main history

Main Agent: Receive only a concise result for each task, with no intermediate artifacts
            ⇒ Main history is O(N), adding only one result per task
            ⇒ Total tokens ≈ O(N), linear growth

ความเสี่ยงที่ Subagents นำมา

การประหยัด Token หมายถึงการมอบงานหนักให้ Agent แบบ "กล่องดำ" Agent หลักมองไม่เห็นกระบวนการขั้นกลางของมัน ซึ่งขยายผลกระทบของความล้มเหลวหรือการรายงานที่เป็นเท็จ มีความเสี่ยงสี่ประเภทและการควบคุมที่สอดคล้องกัน:

  1. ความล้มเหลวแบบเงียบ (Silent failure): Subagent พบปัญหาด้านสภาพแวดล้อม เช่น โปรเซสไม่ยอมเริ่มทำงานหรือได้ artifact ที่ว่างเปล่า แต่ส่งกลับข้อความที่ดูเหมือนทำงานเสร็จปกติ Agent หลักยอมรับผลลัพธ์ที่ใช้ไม่ได้ซึ่งดูเหมือนสำเร็จอย่างผิดๆ
    • → รัน health gate สำหรับทุกงาน: Agent หลักตรวจสอบด้วยตนเองว่า artifact มีอยู่จริง ไม่ว่างเปล่า และมีเครื่องหมายการเสร็จสิ้นตามที่คาดหวัง อย่าเชื่อเพียงข้อความของ Subagent
  2. การกล่าวอ้างที่ไม่มีหลักฐานสนับสนุน: Subagent บอกว่า "เสร็จแล้ว" โดยไม่มีหลักฐานที่เป็นปรนัย ทำให้ไม่สามารถตรวจสอบผลลัพธ์ได้
    • → ทุกผลลัพธ์ต้องมีหลักฐานที่ตรวจสอบได้ เช่น ไฟล์ที่มีอยู่จริง, exit code, หรือบรรทัดสถานะ อย่าอ้างว่างานเสร็จจนกว่าหลักฐานจะปรากฏ
  3. การส่งงานแบบขนานโดยไม่มีการจัดการการเสร็จสิ้นแบบรวมศูนย์: การเปิดงานย่อยแบบ synchronous หลายงานพร้อมกันเป็นสิ่งที่ทำได้ แต่ผลลัพธ์อาจผิดเพี้ยนหรือสูญหายหากไม่ได้ตรวจสอบทีละงานและปิดงานร่วมกัน
    • → อนุญาตให้มอบหมายงานแบบขนานได้ สิ่งสำคัญคือ การจัดการการเสร็จสิ้นแบบรวมศูนย์ ให้ตรวจสอบแต่ละผลลัพธ์หลังส่งงาน แล้วจึงสร้างบทสรุปโดยรวม อย่ายอมรับการรายงานตนเองของ Subagent โดยไม่ตรวจสอบ
  4. การถอยกลับแบบสุ่มสี่สุ่มห้า (Blind fallback): การมอบหมายงานใหม่หรือการลองใหม่โดยอัตโนมัติหลังเกิดความล้มเหลว ทำให้สาเหตุรากฐานเดียวกันล้มเหลวซ้ำๆ และใช้ Token ต่อไปเรื่อยๆ
    • → เมื่อล้มเหลว ให้ตัดสินใจก่อน แทนที่จะถอยกลับโดยอัตโนมัติ หากความล้มเหลวเป็นแบบเป็นระบบ ให้หยุด workflow และป้องกันการลองใหม่เพิ่มเติม ใช้ fallback เฉพาะกับความล้มเหลวที่เกิดเป็นครั้งคราวและกู้คืนได้ และกำหนดขีดจำกัดแบบ hard limit ไว้ล่วงหน้า: ลองใหม่ได้ไม่เกินสองครั้ง, ระยะเวลา polling สูงสุด, และกฎให้ข้ามงานเมื่อถึงขีดจำกัด รักษาความพยายามที่ใช้ในการได้ผลลัพธ์ให้อยู่ในขอบเขต แทนที่จะพยายามชุบชีวิตงานขึ้นมาอย่างไม่สิ้นสุด

หลักการกำกับดูแล: ตัดสินใจก่อน แล้วจึงใช้ fallback และบังคับใช้ขีดจำกัดแบบ hard limit ไม่ว่าจะเลือกเส้นทางใด การสูญเสีย Token ก็ยังคงเป็นเชิงเส้นและอยู่ในขอบเขต


บทที่ 7: การทำงานร่วมกันของทีม — จากการประหยัดระดับบุคคลสู่การประหยัดระดับองค์กร

7.1 ขีดจำกัดสูงสุดของการปรับปรุงระดับบุคคล

เทคนิคการปรับปรุงการใช้ Token ที่บุคคลหนึ่งทำได้นั้นค่อนข้างสมบูรณ์แล้ว:

เทคนิค หลักการ การประหยัดต่อการใช้หนึ่งครั้ง
การอ่านไฟล์แบบแม่นยำโดยระบุช่วงบรรทัด หลีกเลี่ยงการเททั้งไฟล์ลงใน Context 500–2,000 tokens
มอบหมายการค้นหาขนาดใหญ่ให้ Subagent เก็บการประมวลผลไว้ใน Subagent และส่งกลับเฉพาะบทสรุป 3,000–10,000 tokens
ทำงานต่อเนื่องภายใน 5 นาที Prompt Cache hit ลดต้นทุน Input ลงเหลือหนึ่งในสิบ 80%–90% ของต้นทุน Input
กรอง output ของคำสั่งด้วย head / grep / jq จำกัดเนื้อหาที่ส่งกลับมาให้แคบลง 500–5,000 tokens

เทคนิคเหล่านี้ให้ผลตอบแทนเชิงเส้น แต่ละคนสำรวจ Prompt ที่ดีที่สุดด้วยตนเอง พบกับหลุมพรางเดียวกัน และสั่งสมความรู้เดียวกัน ในทีมสิบคน หลุมพรางเดียวกันอาจถูกพบถึงสิบครั้ง และแนวปฏิบัติที่ดีที่สุดเดียวกันอาจถูกค้นพบใหม่โดยอิสระถึงสิบครั้ง

สูตรการทวีคูณสำหรับการทำงานร่วมกันของทีม:

Team savings = one-time optimization investment × number of users × average daily usage frequency

หากการขัดเกลา Skill หนึ่งตัวใช้เวลาสองชั่วโมง และมีสิบคนใช้งานคนละสามครั้งต่อวัน การลงทุนสองชั่วโมงนั้นจะส่งมอบคุณค่าผ่านการใช้งาน 30 ครั้งในทุกๆ วัน

7.2 สร้างและแบ่งปันทรัพยากรของทีม

7.2.1 ทรัพยากรที่ใช้ร่วมกันหกประเภท

ประเภททรัพยากร นิยาม วงจรชีวิต ผลกระทบต่อ Token
Skills คำสั่ง workflow ที่นำกลับมาใช้ซ้ำได้ เช่น TDD, Code Review และ Deep Research ได้รับการบำรุงรักษาในระยะยาว โหลดประมาณ 500–3,000 tokens ทุกครั้งที่ถูก trigger
Rules ข้อจำกัดด้านพฤติกรรม เช่น จรรยาบรรณการเขียนโค้ดและประสิทธิภาพการใช้ Token เสถียรและเปลี่ยนแปลงไม่บ่อย ถูกส่งไปพร้อมกับ System Prompt ในทุกๆ รอบ
MCP โปรโตคอลสำหรับบริการเครื่องมือภายนอก เช่น การสอบถามฐานข้อมูล การเรียก API และการเข้าถึงระบบไฟล์ ถูกคอนฟิกตามโปรเจกต์ / workspace และค่อนข้างเสถียร สคีมาของเครื่องมือยังคงอยู่ใน System Prompt; ผลการเรียกถูกแทรกเข้าไปใน Context
Plugins ส่วนขยายความสามารถของ IDE / Agent runtime หรือโมดูลประมวลผลผลลัพธ์ ติดตั้ง / เปิดใช้งานตามต้องการและอัปเดตเป็นระยะ การประกาศปลั๊กอินมักประจำอยู่; ผลการปฏิบัติงานถูกแทรกตามต้องการ
Docs เอกสารอ้างอิง เช่น แผนภาพสถาปัตยกรรมและข้อกำหนด API อัปเดตตามความจำเป็น โหลดก็ต่อเมื่อมีการอ้างอิงถึง
Learnings บทเรียนและแนวปฏิบัติที่ดีที่สุดที่ถูกบันทึกไว้ สั่งสมอย่างต่อเนื่อง ถูกแทรกก็ต่อเมื่อการ recall พบสิ่งที่ตรงกัน

7.2.2 กลไกที่ทำให้ทรัพยากรที่ใช้ร่วมกันทำงานได้

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

  • การจัดเก็บแบบรวมศูนย์: จัดการทรัพยากรที่ใช้ร่วมกันใน repository เดียว
  • การควบคุมเวอร์ชัน: ทำให้ทุกการเปลี่ยนแปลงสามารถติดตามและทบทวนได้
  • การแจกจ่ายด้วยต้นทุนต่ำ: ให้สมาชิกทีมได้รับทรัพยากรล่าสุดโดยอัตโนมัติ
  • การเรียกคืนตามต้องการ: นำประสบการณ์ในอดีตขึ้นมาแสดงภายในงานที่เจาะจง
  • การบันทึกแบบเพิ่มทีละส่วน: ค้นพบและขัดเกลาบทเรียนจากงานประจำวัน แล้วเพิ่มเข้าไปในกลุ่มทรัพยากรที่ใช้ร่วมกันของทีม

7.2.3 แนะนำ TeamAI CLI สำหรับการจัดการและแจกจ่ายทรัพยากรของทีม

TeamAI CLI แสดงให้เห็นว่ากลไกทั้งห้านี้สามารถถูกนำไปปฏิบัติได้อย่างไร มันไม่เพียงซิงโครไนซ์และนำทรัพยากรของทีมกลับมาใช้ซ้ำ แต่ยังบันทึกความรู้ใหม่ที่เกิดจากงานวิศวกรรมประจำวันอย่างต่อเนื่อง

GitHub: https://github.com/Tencent/teamai-cli

การเปรียบเทียบแนวทางการจัดการและแจกจ่ายทรัพยากรของทีม:

การดำเนินการ TeamAI CLI ทางเลือกอื่น
ดึงทรัพยากรของทีม teamai pull Git submodule + การคัดลอกด้วยมือ
ส่งมอบ Skill ใหม่ teamai push เปิด PR กับ repository ของทีมโดยตรง
แบ่งปันบทเรียน teamai contribute --title "..." --file ./learning.md เขียนหน้า Wiki + แจ้งเตือนในกลุ่มแชท
ค้นหาความรู้ของทีม teamai recall "keyword" ค้นหาใน Confluence
สมัครรับข้อมูลข้ามทีม teamai source add <name> <repo-url> ทำ Fork + cherry-pick
7.2.3.1 กลไกการแจกจ่ายและการจัดเก็บ
Team member A contributes a Skill
       ↓ push (creates a PR, merged after review)
   Team Repo (Git repository)
       ↓ pull (triggered automatically at CodeBuddy SessionStart)
AI tools used by team members B/C/D... automatically receive the Skill

การออกแบบหลัก: Git คือฐานข้อมูล ทรัพยากรที่ใช้ร่วมกันทั้งหมดถูกจัดเก็บพร้อมประวัติเวอร์ชันใน Git repository เดียว push / pull ให้การไหลแบบสองทิศทาง และการทบทวน PR ให้การควบคุมคุณภาพ

7.2.3.2 โมเดลผลประโยชน์ด้าน Token
  • การนำ Skill กลับมาใช้ซ้ำ: หลีกเลี่ยงการลองผิดลองถูกกับ Prompt ซ้ำๆ โดยทุกคน Skill ที่พัฒนาจนสมบูรณ์แล้วช่วยประหยัดประมาณ 2,000 tokens ต่อการใช้หนึ่งครั้ง โดยตัดรอบของการทดลอง การปรับแต่ง และการรันใหม่ออกไป ในทีมสิบคนที่ใช้งานคนละสามครั้งต่อวัน นั่นคือ 60,000 tokens ต่อวัน
  • การแทรก Rules: ข้อจำกัดด้านพฤติกรรมที่เป็นหนึ่งเดียวลดรอบการทำงานซ้ำลงประมาณ 40% ทุกรอบการทำงานซ้ำจะส่ง Context ที่สมบูรณ์กลับไปใหม่ ประมาณ 8,000–20,000 tokens
  • การเรียกคืน Learnings: เรียกคืนประสบการณ์ก่อนหน้าโดยอัตโนมัติและหลีกเลี่ยงการดีบักซ้ำซ้อน การดีบักหนึ่งครั้งโดยทั่วไปใช้ 5–10 รอบ × 15,000 tokens ต่อรอบ = 75,000–150,000 tokens หากการ recall ทำให้ทีมสามารถข้ามมันไปได้ จำนวนทั้งหมดนี้คือสิ่งที่ประหยัดได้
7.2.3.3 การบันทึกประสบการณ์แบบเพิ่มทีละส่วน

การสรุปประสบการณ์ด้วยมือและการเขียนเอกสาร Wiki ต้องใช้แรงงานคนจำนวนมาก การควบคุมเวอร์ชันและรูปแบบก็ทำได้ยากเช่นกัน ดังนั้นบทเรียนจำนวนมากจึงไม่ได้เข้าไปอยู่ในเอกสารหรือ Wiki ตามธรรมชาติ และหายไปเฉยๆ หลังจากการแก้ปัญหา การซ่อม หรือการดีบัก

TeamAI มี hook contribute-check ที่ถูก trigger โดยอัตโนมัติ ซึ่งตรวจจับบทเรียนที่ควรค่าแก่การเก็บรักษาและแจ้งให้ผู้ใช้ส่งมอบมัน นอกจากนี้ยังสามารถสร้างบทเรียนจากประวัติ session ซึ่งลดความพยายามที่ต้องใช้ในการบันทึกความรู้ใหม่ สิ่งนี้ทำให้ฐานความรู้ของทีมไม่เพียงแจกจ่ายทรัพยากรที่มีอยู่ แต่ยังดูดซับความรู้ใหม่อย่างต่อเนื่อง


บทที่ 8: บทสรุป

8.1 หลักการ 5 ข้อ

  1. วัดผลก่อน แล้วจึงปรับปรุง
  2. อย่าแก้ปัญหาซ้ำในสิ่งที่สามารถบันทึกเป็นทรัพยากรได้
  3. prefix ที่เสถียรเป็นสิ่งจำเป็นต่อการแคชที่มีประสิทธิภาพ
  4. คุณภาพของ Context สำคัญกว่าปริมาณของ Context
  5. ความสอดคล้องของทีมสำคัญกว่าความสมบูรณ์แบบของบุคคล

8.2 สูตรหลักที่ปรับปรุงใหม่

Lower cost =
    less repeated context
  + more appropriate model routing
  + more precise code retrieval
  + clearer Agent responsibilities
  + measurable, continuous optimization
  + organization-wide asset reuse

8.3 ข้อแนะนำระยะยาวสามประการ

  • ทำให้การวัดผลเป็นส่วนหนึ่งของความเคยชินของทีม
  • ทำให้การบันทึกทรัพยากรเป็นการกระทำเริ่มต้น
  • ตั้งการตัดสินใจด้านการปรับปรุงบนข้อมูล ไม่ใช่สัญชาตญาณ

สัญญาอนุญาต

เอกสารนี้เผยแพร่ภายใต้ MIT License

💬 มีคำถาม? ช่วยสร้างสิ่งนี้ไปด้วยกัน

มุมสำหรับการมีส่วนร่วม: เปิด Issue เพื่อแจ้งข้อผิดพลาดหรือข้อเสนอแนะใดๆ หรือเปิด MR เพื่อแบ่งปันแนวปฏิบัติการปรับปรุงการใช้ Token ของคุณเอง