SSD Nodes Learn Hosting plans →
คู่มือ Matt Connorโดย Matt Connor

วิธีแก้ปัญหา Claude Code ทำงานช้าและค่าใช้จ่ายสูงเกินจริง

เซสชัน Claude Code ที่ยาวนานมักมีค่าใช้จ่ายสูงเนื่องจากการส่งบริบทซ้ำซ้อน เรียนรู้วิธีใช้คำสั่ง /context เพื่อตรวจสอบการใช้โทเค็น พร้อมเทคนิคการจัดการหน่วยความจำเพื่อลดต้นทุน

วิธีป้องกันไม่ให้เซสชัน Claude Code ที่ยาวนานทำงานช้าและมีค่าใช้จ่ายสูง

เซสชัน Claude Code ที่ยาวนานจะทำงานช้าและมีค่าใช้จ่ายสูงขึ้น เนื่องจากทุกรอบการสนทนาจะส่งบริบททั้งหมดกลับไปใหม่ และบริบทนั้นมีแต่จะเพิ่มขึ้นเรื่อยๆ วิธีแก้ไขคือการจัดการอย่างเป็นระเบียบตามลำดับ ให้รัน /context เพื่อดูว่าสิ่งใดที่กำลังทำให้หน้าต่างบริบทเต็ม จากนั้นให้ตัดรายการที่คุณต้องจ่ายเงินในทุกคำขอออก แล้วใช้ /clear ระหว่างงานที่ไม่เกี่ยวข้องกัน และใช้ /compact พร้อมคำสั่งภายในงานยาวๆ งานหนึ่ง ควรทำงานอย่างต่อเนื่องไม่ขาดช่วง เพราะการที่ prompt cache เย็นลงจะเปลี่ยนการอ่านที่มีราคาถูกให้กลายเป็นการเขียนใหม่ทั้งหมดของสิ่งที่คุณเคยพูดไป

สาเหตุที่มิเตอร์ทำงานตลอดเวลาสามารถดูได้ที่ มิเตอร์โทเค็นเบื้องหลังเซสชันของเอเจนต์

อ่าน /context ก่อนที่คุณจะเปลี่ยนแปลงสิ่งใด

อย่าคาดเดาสิ่งที่อยู่ในหน้าต่างการทำงาน Claude Code จะแจ้งให้คุณทราบเอง

/context [all] จะแสดงการใช้งานบริบทปัจจุบันเป็นตารางสี พร้อมคำแนะนำในการปรับแต่งสำหรับเครื่องมือที่ใช้บริบทสูงและปัญหาหน่วยความจำเกิน ส่วน all จะขยายรายละเอียดแยกตามรายการในโหมดเต็มหน้าจอ ให้อ่านผลลัพธ์โดยแบ่งเป็น 5 ส่วนดังนี้:

  • System prompt: คำสั่งควบคุมการทำงานของ Claude Code ซึ่งจะคงที่ตลอดทั้งเซสชัน
  • Tool definitions: โครงสร้างของทุกเครื่องมือที่เอเจนต์เรียกใช้ได้ รวมถึงทุก MCP (Model Context Protocol) server ที่เชื่อมต่ออยู่
  • Memory files: CLAUDE.md และหน่วยความจำอัตโนมัติ ซึ่งจะถูกโหลดเมื่อเริ่มเซสชัน
  • Files and tool results: ไฟล์ทุกไฟล์ที่อ่าน และทุกสิ่งที่คำสั่งของคุณแสดงผลกลับมา
  • Message history: ลำดับการสนทนาระหว่างคุณกับเอเจนต์

สามส่วนแรกถือเป็นค่าใช้จ่ายคงที่ ซึ่งต้องจ่ายในทุกคำขอตลอดอายุของเซสชัน ส่วนสองส่วนหลังจะเพิ่มขึ้นเรื่อยๆ ให้ลดค่าใช้จ่ายคงที่ตั้งแต่เริ่มต้น และจัดการส่วนที่เพิ่มขึ้นอย่างต่อเนื่อง

มีข้อความสองชุดที่แจ้งให้คุณทราบว่าหน้าต่างการทำงานเต็มแล้ว:

Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.
Context is 94k tokens past the 200k-token compaction window — run /compact to reduce usage.

ชุดแรกคือขีดจำกัดสูงสุด ซึ่งคำขอจะถูกปฏิเสธ โดยข้อผิดพลาดของ API (application programming interface) ที่ตรงกันจะแสดงเป็น Prompt is too long ส่วนชุดที่สองคือหน้าต่างการบีบอัดข้อมูล ซึ่งอาจมีขนาดเล็กกว่าหน้าต่างบริบทจริงของโมเดลในรุ่น 1 ล้านโทเค็น คำขอยังคงสำเร็จได้หากเกินจุดนี้ ดังนั้นจึงเป็นเพียงคำเตือนมากกว่าการปฏิเสธ

ในแผนการใช้งานแบบชำระเงิน /usage จะเพิ่มส่วนที่เหลือ โดยจะระบุพฤติกรรม เช่น การใช้บริบทที่ยาวเกินไปหรือการที่ cache ไม่พบข้อมูล และระบุการใช้งานล่าสุดให้กับทักษะย่อย, ซับเอเจนต์ และ MCP server แต่ละตัว หากระบบแจ้งว่าโควตาถูกใช้ไปหมดแล้ว หน้าต่างขีดจำกัดที่คุณกำลังรออยู่ จะเป็นตัวตัดสินว่าการตัดทอนบริบทจะช่วยคุณได้ในขณะนี้ หรือคุณจำเป็นต้องใช้วิธีอื่นในการทำงานต่อ

CLAUDE.md เป็นภาระภาษีถาวร ดังนั้นควรทำให้กระชับ

CLAUDE.md ของคุณจะถูกโหลดเข้าสู่บริบทเมื่อเริ่มเซสชันและจะคงอยู่ที่นั่น หากมันเก็บขั้นตอนการปรับใช้ (deployment) โดยละเอียด โทเค็นเหล่านั้นจะถูกใช้ไปในขณะที่คุณแก้ไขคำผิดในไฟล์ทดสอบ คำแนะนำของ Anthropic คือให้ใส่เฉพาะสิ่งที่จำเป็นและรักษาความยาวไฟล์ไว้ไม่เกิน 200 บรรทัด

ให้ย้ายขั้นตอนการทำงานไปไว้ในทักษะ (skills) ทักษะจะถูกโหลดก็ต่อเมื่อมีการเรียกใช้ ดังนั้นขั้นตอนการทำงานที่คุณรันสัปดาห์ละสองครั้งจะไม่สิ้นเปลืองทรัพยากรในวันอื่นๆ ทักษะจะมีงบประมาณของตัวเองหลังจากการบีบอัด (compaction): เนื้อหาจะถูกฉีดกลับเข้าไปใหม่ โดยจำกัดไว้ที่ 5,000 โทเค็นต่อทักษะ และรวมกันไม่เกิน 25,000 โทเค็น โดยจะลบส่วนที่เก่าที่สุดออกก่อน การตัดทอน (truncation) จะรักษาเนื้อหาช่วงต้นของไฟล์ไว้ ดังนั้นให้ใส่คำสั่งที่สำคัญที่สุดไว้ใกล้ส่วนบนของ SKILL.md

สิ่งที่เหลืออยู่หลังจากการบีบอัดจะเป็นตัวกำหนดว่าคำสั่งนั้นควรอยู่ที่ใด

  • System prompt และรูปแบบการแสดงผลจะไม่เปลี่ยนแปลง เนื่องจากไม่ได้เป็นส่วนหนึ่งของประวัติการสนทนา
  • CLAUDE.md ที่ระดับรากของโปรเจกต์ (project-root), กฎที่ไม่ได้กำหนดขอบเขต (unscoped rules) และหน่วยความจำอัตโนมัติ (auto memory) จะถูกฉีดกลับมาจากดิสก์
  • กฎที่มี frontmatter แบบ paths: จะสูญหายไปจนกว่าจะมีการอ่านไฟล์ที่ตรงกันอีกครั้ง
  • CLAUDE.md ที่ซ้อนอยู่ในไดเรกทอรีย่อยจะสูญหายไปจนกว่าจะมีการอ่านไฟล์ในไดเรกทอรีย่อยนั้นอีกครั้ง
  • Hooks จะยังคงทำงานต่อไป เพราะ hook ทำงานในฐานะโค้ด มีเพียงบริบทที่ hook เพิ่มเข้ามาก่อนหน้านี้เท่านั้นที่จะถูกสรุปพร้อมกับส่วนที่เหลือของการสนทนา

ดังนั้น กฎที่คุณต้องพึ่งพาควรอยู่ใน CLAUDE.md ที่ระดับรากของโปรเจกต์: Claude Code จะล้างผลลัพธ์ของเครื่องมือ (tool outputs) ที่เก่ากว่าออกก่อนแล้วจึงสรุปผล ดังนั้นคำสั่งจากช่วงต้นของการสนทนาอาจสูญหายไป ให้แก้ไขหน่วยความจำด้วย /memory Claude Code จะเก็บสำเนาที่โหลดไว้เมื่อเริ่มเซสชัน ดังนั้นการตัดทอนระหว่างเซสชันจะคง prompt cache ไว้และจะไม่มีผลจนกว่าจะถึง /clear, /compact หรือการรีสตาร์ทครั้งถัดไป การสูญเสียบริบทเป็นเพียงเหตุผลหนึ่งที่ทำให้กฎไม่ถูกปฏิบัติตาม ดังนั้นเมื่อกฎยังคงอยู่ในหน้าต่างบริบทอย่างชัดเจนแต่กลับถูกเพิกเฉย ให้ตรวจสอบสาเหตุอื่นๆ ก่อนที่คุณจะเขียนกฎนั้นใหม่

การล้างข้อมูลระหว่างงาน และการบีบอัดข้อมูลภายในงานเดียว

คำสั่งสองตัวนี้ดูเหมือนจะใช้แทนกันได้ แต่มีต้นทุนที่แตกต่างกันมาก

/clear [name] เป็นการเริ่มบทสนทนาใหม่โดยไม่มีบริบทเดิมเหลืออยู่ คำสั่งนี้ไม่ส่งคำขอใดๆ จึงไม่มีค่าใช้จ่าย คุณสามารถระบุชื่อเพื่อตั้งป้ายกำกับบทสนทนาก่อนหน้าในตัวเลือก /resume ได้ ส่วน /reset และ /new เป็นคำสั่งนามแฝง ให้ใช้คำสั่งนี้ทันทีที่เปลี่ยนไปทำงานที่ไม่เกี่ยวข้องกัน เพราะหากไม่ทำเช่นนั้น งานเก่าจะถูกส่งซ้ำและถูกเรียกเก็บเงินใหม่ในทุกข้อความของงานใหม่

/compact [instructions] เป็นการเพิ่มพื้นที่ว่างในบริบทโดยยังคงอยู่ในบทสนทนาเดิม โดยระบบจะสรุปประวัติที่ผ่านมาและแทนที่ด้วยบทสรุปนั้น ให้ใช้คำสั่งนี้ภายในงานยาวๆ ที่คุณยังต้องการความต่อเนื่องของข้อมูล

ต้องระบุคำสั่งให้ /compact เสมอ การใช้ /compact เปล่าๆ จะเป็นการสรุปโดยใช้ prompt เริ่มต้น ซึ่งไม่ทราบว่าส่วนใดของงานที่คุณยังจำเป็นต้องใช้ แต่การระบุคำสั่งจะช่วยรักษาข้อมูลส่วนนั้นไว้:

/compact focus on the auth bug fix
/compact keep only the plan and the diff

หากคุณต้องบีบอัดข้อมูลด้วยเหตุผลเดิมซ้ำๆ ให้ใส่คำสั่งถาวรไว้ใน CLAUDE.md ของโปรเจกต์ภายใต้หัวข้อ # Compact instructions ในเซสชันใหม่ /compact จะแสดง Not enough messages to compact. ซึ่งหมายความว่าบทสนทนามีจำนวนรอบน้อยเกินกว่าจะสรุปได้ เหตุการณ์นี้อาจเกิดขึ้นได้แม้จะมีบริบทเต็ม เนื่องจากข้อมูลที่คัดลอกมาขนาดใหญ่เพียงรายการเดียวก็อาจเติมเต็มพื้นที่จนเต็มได้

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

ยังมีคำสั่งที่ประหยัดกว่าอีกสองคำสั่ง /rewind ใช้ย้อนกลับโค้ดและบทสนทนาไปยังจุดตรวจสอบ (checkpoint) สำหรับเส้นทางที่คุณต้องการละทิ้งทั้งหมด วิธีนี้ดีกว่าการบีบอัดเพราะเป็นการตัดประวัติกลับไปยัง prefix ที่ถูก cache ไว้แล้ว ส่วน /recap จะเพิ่มบทสรุปเป็นผลลัพธ์ของคำสั่งแทนการแทนที่ประวัติเดิม ทำให้ prefix ที่ถูก cache ไว้ยังคงอยู่ครบถ้วน

การบีบอัดอัตโนมัติที่ทำงานซ้ำๆ จะแสดงข้อความนี้:

Autocompact is thrashing: the context refilled to the limit...

การบีบอัดสำเร็จ แต่ผลลัพธ์จากไฟล์หรือเครื่องมือเติมเต็มหน้าต่างบริบทหลายครั้งติดต่อกัน Claude Code จึงหยุดพยายาม ให้แก้ไขโดยการอ่านไฟล์ขนาดใหญ่เป็นช่วงบรรทัด, รัน /compact โดยเน้นไปที่ส่วนที่ไม่รวมผลลัพธ์ขนาดใหญ่, ย้ายงานนั้นไปให้ subagent จัดการ หรือใช้ /clear หากบทสนทนาก่อนหน้าเสร็จสิ้นแล้ว

เซิร์ฟเวอร์ MCP มีค่าใช้จ่ายคงที่

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

Claude Code ช่วยลดภาระส่วนนี้ลง โดยค่าเริ่มต้นนิยามของเครื่องมือ MCP จะถูกเลื่อนการโหลดออกไป ดังนั้นจะมีเพียงชื่อเครื่องมือเท่านั้นที่เข้าสู่บริบทจนกว่า Claude จะเรียกใช้เครื่องมือนั้นจริงๆ ให้รัน /context เพื่อดูว่าเซิร์ฟเวอร์ของคุณมีค่าใช้จ่ายจริงเท่าใด และรัน /mcp disable <name> เพื่อยกเลิกการเชื่อมต่อเซิร์ฟเวอร์ที่คุณไม่ได้ใช้งานในวันนี้ หากคุณรัน เซิร์ฟเวอร์ MCP ของคุณเองบน VPS หลักการคำนวณเดียวกันนี้จะเป็นตัวกำหนดว่าเซิร์ฟเวอร์หนึ่งเครื่องควรเปิดเผยเครื่องมือจำนวนเท่าใด

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

กรองผลลัพธ์จากเครื่องมือที่มีรายละเอียดมากเกินไปก่อนนำเข้าสู่บริบท

ผลลัพธ์จากเครื่องมือจะกลายเป็นข้อมูลนำเข้า และข้อมูลนำเข้านั้นจะถูกส่งซ้ำในทุกรอบการสนทนาถัดไป การรันการทดสอบที่แสดงผลลัพธ์ออกมาถึง 20,000 tokens ไม่ใช่ค่าใช้จ่ายที่เกิดขึ้นเพียงครั้งเดียว แต่คุณต้องจ่ายค่าประมวลผลซ้ำในทุกรอบจนกว่าข้อมูลนั้นจะหลุดออกจากหน้าต่างบริบท

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

npm test 2>&1 | grep -E "FAIL|Error:" | head -40

ตัว hook เองจะไม่ถูกนำเข้าสู่บริบทเนื่องจากทำงานในรูปแบบของโค้ด ให้ใช้วิธีนี้กับเครื่องมือใดก็ตามที่ให้ผลลัพธ์ยาวเกินกว่าหนึ่งหน้าจอ ตรรกะเดียวกันนี้ยังใช้กับการอ่านไฟล์ขนาด 3,000 บรรทัดได้เช่นกัน โดยให้ระบุช่วงบรรทัดที่คุณต้องการแทน เพราะหากส่งไฟล์ไปทั้งไฟล์ ข้อมูลทั้งหมดจะค้างอยู่ในหน้าต่างบริบททันทีที่ส่งไปถึง

กำหนดขอบเขตสิ่งที่ Agent อ่านและมอบหมายงานที่สร้างภาระข้อมูล

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

ให้มอบหมายงานที่มีรายละเอียดสูงแก่ subagent การรันการทดสอบและการประมวลผล log ล้วนใช้ context จริง subagent จะเก็บผลลัพธ์เหล่านั้นไว้ในหน้าต่างของตัวเองและส่งกลับมาเพียงบทสรุป ข้อแลกเปลี่ยนคือ subagent จะสร้าง cache ของตัวเองซึ่งจะไม่มีการดึงข้อมูลจาก cache ในการเรียกครั้งแรก และใช้ระยะเวลาคงอยู่ของ cache เพียง 5 นาทีแม้จะอยู่ในการสมัครสมาชิกแบบเสียค่าบริการ การมอบหมายงานช่วยปกป้อง context หลักของคุณได้อย่างน่าเชื่อถือ แต่วิธีนี้ไม่ได้ช่วยลดจำนวน token รวมเสมอไป

นาฬิกาของแคช: ทำงานเป็นช่วงเวลา

Prompt caching คือสิ่งที่ทำให้การส่งข้อมูลซ้ำมีราคาที่จับต้องได้ การเขียน prefix มีค่าใช้จ่าย 1.25 เท่าของอัตรา input พื้นฐาน หรือ 2 เท่าหากเลือกอายุการใช้งานหนึ่งชั่วโมง การอ่านข้อมูลกลับมีค่าใช้จ่าย 0.1 เท่าบน Haiku 5.5, 0.05 เท่าบน Opus 5.5 และ Sonnet 5.5 (0.20 ดอลลาร์ และ 0.10 ดอลลาร์ ต่อล้านโทเค็น) และ 0.025 เท่าบน Fable 5.1 (0.25 ดอลลาร์ ต่อล้านโทเค็น) การใช้งานแต่ละครั้งจะเป็นการรีเฟรชรายการโดยไม่มีค่าใช้จ่ายเพิ่มเติม ดังนั้นนาฬิกาจะเริ่มนับใหม่จากการใช้งานครั้งล่าสุด ตัวคูณเหล่านี้บอกถึงรูปแบบของค่าใช้จ่ายแต่ไม่ใช่จำนวนเงินที่แน่นอน ดังนั้นควรนำไปคำนวณคู่กับ ราคาจริงของหนึ่งล้านโทเค็น เพื่อแปลงขนาด context window ทั้งหมดให้เป็นตัวเลขดอลลาร์

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

  • หากใช้การสมัครสมาชิก Claude ตัว Claude Code จะขออายุการใช้งานหนึ่งชั่วโมงโดยอัตโนมัติ
  • เมื่อคุณใช้งานเกินขีดจำกัดของแผนและเริ่มใช้ usage credits คุณจะถูกเรียกเก็บเงินตามการใช้งานนั้น ทำให้อายุการใช้งานลดลงเหลือห้านาที
  • หากใช้ API key หรือผู้ให้บริการคลาวด์ อายุการใช้งานจะอยู่ที่ห้านาที การตั้งค่า promptCacheTtl เป็น 1h หรือ ENABLE_PROMPT_CACHING_1H=1 จะเป็นการเลือกใช้อายุการใช้งานหนึ่งชั่วโมง และ FORCE_PROMPT_CACHING_5M=1 จะบังคับให้ลดกลับมาเป็นค่าเริ่มต้น

คำแนะนำเรื่องจังหวะการทำงานเหมือนกันในทุกกรณี: ให้ทำงานเป็นช่วงเวลาต่อเนื่องกัน เพราะการทิ้งช่วงว่างไว้นานเกินอายุการใช้งานจะทำให้การโต้ตอบครั้งถัดไปของคุณต้องเขียน prefix ที่สะสมมาทั้งหมดใหม่ การใช้ Claude Code session ที่แยกออกมาใน tmux จะไม่มีค่าใช้จ่ายในขณะที่ไม่ได้ใช้งาน แต่เวลาที่ปล่อยทิ้งไว้นานเกินไปจะทำให้สูญเสียแคชที่อุ่นอยู่ไป

การกระทำบางอย่างจะทำให้แคชถูกลบทิ้งในขณะที่คุณยังทำงานอยู่ เช่น การสลับโมเดล, การเปลี่ยนระดับความพยายาม (effort level) ในโมเดลรุ่นเก่า, การเปิดโหมด fast, การเชื่อมต่อหรือตัดการเชื่อมต่อ MCP server, การปฏิเสธเครื่องมือทั้งหมดเมื่อมีการโหลดนิยามเครื่องมือไว้ล่วงหน้า, การเปิดหรือปิดปลั๊กอินที่เพิ่มเครื่องมือ, การบีบอัดข้อมูล, การลบรูปภาพเก่าออกเมื่อบทสนทนามีจำนวนมากเกินไป และการอัปเกรด Claude Code บน Opus 5.5, Sonnet 5.5, Haiku 5.5 และ Fable 5.1 ที่ใช้ API key หรือการสมัครสมาชิก การเปลี่ยนระดับความพยายามในปัจจุบันจะยังคงรักษาแคชไว้ /model มักเป็นสิ่งที่ทำให้ประหลาดใจ เพราะแต่ละโมเดลมีแคชของตัวเอง ดังนั้นคำขอถัดไปจะอ่านประวัติทั้งหมดใหม่โดยไม่มี cache hit แม้ว่าเนื้อหาจะเหมือนกันก็ตาม การอ่านใหม่นั้นจะถูกเรียกเก็บเงินตามอัตราของโมเดลปลายทางเสมือนเป็นการเขียนแคชใหม่ ดังนั้นการสลับไปใช้ Fable กลางคันจะคิดค่าใช้จ่ายประวัติทั้งหมดที่คุณสะสมมาตาม อัตราการเขียนแคชที่ประกาศไว้ของ Fable: 12.50 ดอลลาร์ต่อล้านโทเค็นสำหรับอายุการใช้งานห้านาที หรือ 20 ดอลลาร์สำหรับหนึ่งชั่วโมง ซึ่งเป็นอัตราเดียวกันทั้งบน Fable 5 และ Fable 5.1

การแก้ไขไฟล์, การแก้ไข CLAUDE.md, การเรียกใช้ทักษะและคำสั่ง, การรัน /recap, การย้อนกลับ (rewind) และการสร้าง subagent ทั้งหมดนี้จะยังคงรักษาแคชไว้ โดยขอบเขตของแคชจะจำกัดอยู่แค่หนึ่งเครื่องและหนึ่งไดเรกทอรี ดังนั้นสอง session ในไดเรกทอรีที่ต่างกันจะไม่สามารถใช้แคชร่วมกันได้ ขอบเขตนี้อิงตาม CLI ไม่ใช่บัญชีของคุณ ดังนั้นข้อมูลจึงไม่ถูกส่งต่อไปยังแอป Claude บนเดสก์ท็อป ซึ่งบน Linux ถือเป็น การติดตั้งรุ่นเบต้าแยกต่างหากที่ทำงานควบคู่กับ CLI

หากต้องการดูว่าการแคชทำงานหรือไม่ ให้ตรวจสอบ current_usage โดย cache_creation_input_tokens ถูกเขียนขึ้นด้วยอัตราการเขียนแคช และ cache_read_input_tokens ถูกให้บริการด้วยอัตราการอ่านแคชของโมเดล ซึ่งอยู่ที่ระหว่าง 2.5% ถึง 10% ของอัตรา input มาตรฐาน ขึ้นอยู่กับโมเดล อัตราส่วนการอ่านต่อการสร้างที่สูงถือเป็นสัญญาณที่ดี หากอัตราการสร้างยังคงสูงอยู่ในการโต้ตอบแต่ละครั้ง แสดงว่ามีบางอย่างใน prefix ของคุณเปลี่ยนแปลงอยู่ตลอดเวลา

การเพิ่ม context window ช่วยแก้ปัญหานี้ได้หรือไม่

ช่วยได้เพียงบางส่วน โมเดลปัจจุบันทุกตัว (Fable 5.1, Opus 5.5, Sonnet 5.5 และ Haiku 5.5) รองรับ context window ขนาด 1 ล้าน token และการบีบอัดข้อมูล (compaction) ก็ทำงานในลักษณะเดียวกันแม้จะใช้ขีดจำกัดที่สูงขึ้น ในแง่ของต้นทุนนั้นไม่มีการเปลี่ยนแปลง เนื่องจาก prompt ทั้งหมดจะถูกส่งใหม่และถูกเรียกเก็บเงินในทุกรอบการสนทนา context window ที่ใหญ่ขึ้นเป็นเพียงตัวกำหนดว่าคุณจะถูกบังคับให้จัดการข้อมูลเมื่อใด แต่การจัดการข้อมูลอย่างเป็นระบบ (hygiene) คือตัวกำหนดค่าใช้จ่าย หากปัญหาคือค่าใช้จ่ายไม่ใช่ขีดจำกัดของจำนวน token แผนการใช้งาน Claude แบบใดที่เหมาะกับวิธีการทำงานของคุณ จะเป็นตัวตัดสินว่าคุณกำลังจ่ายเงินตามการใช้งานจริงหรือใช้โควตาตามแผนที่สมัครไว้

การแก้ไขบริบทและการบีบอัดข้อมูลใน API เป็นคนละเรื่องกัน

หากคุณกำลัง สร้าง agent ของคุณเองบน Messages API จะไม่มีคำสั่ง slash ให้ใช้ และคุณต้องดำเนินการส่วนนี้ด้วยตนเอง ควรจัดสรรงบประมาณสำหรับงานนี้ตั้งแต่ต้น เพราะ สิทธิ์การใช้งานฟรีของ API ไม่ครอบคลุมค่า token ผู้ใช้ใหม่จะได้รับเครดิตฟรีจำนวนเล็กน้อยเพื่อทดสอบ API และสิทธิ์การใช้งานถาวรที่ Anthropic ระบุไว้ (50 ชั่วโมงฟรีต่อวันต่อองค์กรตามหน้าราคา และ 1,550 ชั่วโมงต่อเดือนในเอกสาร) จะครอบคลุมเฉพาะเวลาของ container ที่ใช้รันโค้ด ซึ่งเรียกเก็บเงินแยกต่างหากจาก token ทุกรอบการสนทนาจะส่งประวัติที่ไม่ได้ตัดทอนและเรียกเก็บเงินทั้งหมด: ในอัตราการอ่าน cache เมื่อ prefix ถูก cache ไว้ และในอัตรา input เต็มจำนวนหรือค่าธรรมเนียมการเขียน cache เมื่อไม่ได้ถูก cache ไว้ ผู้ให้บริการที่คุณเลือกจะเป็นตัวกำหนดการคำนวณนี้ก่อนที่จะมีการตัดทอนใดๆ ดังนั้นหากยังตัดสินใจไม่ได้ ให้ คำนวณต้นทุนของภาระงานเดียวกันบนทั้งสอง API แทนการเปรียบเทียบอัตราต่อ token ที่แสดงไว้ ฟีเจอร์ฝั่งเซิร์ฟเวอร์สองตัวทำหน้าที่นี้ได้ แต่ไม่ใช่ฟีเจอร์เดียวกัน

การแก้ไขบริบท (Context editing) จะล้างเนื้อหาเฉพาะเจาะจงออกจากประวัติบทสนทนาเมื่อข้อมูลเริ่มยาวขึ้น โดยแทนที่ผลลัพธ์ที่ถูกล้างด้วยข้อความตัวแทนเพื่อให้ Claude ทราบว่ามีบางอย่างถูกลบออกไป ฟีเจอร์นี้ยังเป็นรุ่นเบต้า: ให้ส่ง anthropic-beta: context-management-2025-06-27 และกำหนดค่ากลยุทธ์ภายใต้ context_management.edits โดย clear_tool_uses_20250919 จะล้างผลลัพธ์จากเครื่องมือ และ clear_thinking_20251015 จะจัดการบล็อกการคิด (thinking blocks) ค่าเริ่มต้นของ trigger คือ 100,000 input tokens, keep คือการใช้เครื่องมือ 3 ครั้งล่าสุด และ clear_tool_inputs คือ false ดังนั้นข้อมูลนำเข้าจะยังคงอยู่และลบเฉพาะผลลัพธ์เท่านั้น

การบีบอัดข้อมูล (Compaction) จะสร้างบทสรุปและแทนที่ประวัติบทสนทนาทั้งหมดด้วยบทสรุปนั้น ฟีเจอร์นี้มีรุ่นเบต้าสองแบบ การบีบอัดตามเกณฑ์ (Threshold compaction) จะทำงานภายในคำขอปกติของคุณ: ให้ส่ง anthropic-beta: compact-2026-01-12 และใช้ประเภทการแก้ไข compact_20260112 ค่าเริ่มต้นของตัวกระตุ้นคือ {"type": "input_tokens", "value": 150000} และค่าต้องไม่ต่ำกว่า 50,000 ส่วนการบีบอัดตามความต้องการ (On-demand compaction) จะให้โค้ดของคุณตัดสินใจว่าจะบีบอัดเมื่อใด: ให้ส่ง anthropic-beta: compact-2026-09-04 พร้อมกับ "compaction": {"type": "summarize"} ในระดับบนสุด และการตอบกลับจะเป็นบล็อกบทสรุปเพียงอย่างเดียว ภาพรวมการบีบอัดของ Anthropic ระบุให้ใช้การบีบอัดตามความต้องการทุกที่ที่สามารถทำได้

การบีบอัดตามเกณฑ์มีกฎการส่งต่อหนึ่งข้อที่อาจทำให้ agent ทำงานผิดพลาดโดยไม่รู้ตัว การตอบกลับจะเริ่มต้นด้วยบล็อกเนื้อหา compaction ที่บรรจุบทสรุป ตามด้วยบล็อกข้อความปกติ คุณต้องส่งบล็อกนั้นกลับไปในคำขอภายหลัง และ API จะลบทุกบล็อกเนื้อหาก่อนหน้านั้นออก ในทางปฏิบัติ: ให้แนบเนื้อหาทั้งหมดของ response.content ไม่ใช่แค่ส่วนที่เป็นข้อความ ส่วนการบีบอัดตามความต้องการจะทำงานในทางกลับกัน: คุณต้องลบข้อความที่ถูกสรุปด้วยตนเอง, นำบล็อกที่ได้รับกลับมาวางไว้ที่ส่วนแรกใน messages และส่งกลับไปตามที่ได้รับมาทุกประการ รวมถึงลายเซ็นด้วย

เอกสารของ Anthropic เรียกการบีบอัดฝั่งเซิร์ฟเวอร์ว่าเป็นกลยุทธ์หลักสำหรับการจัดการบริบทในบทสนทนาที่ยาวนาน และการแก้ไขบริบทเป็นตัวเลือกสำหรับการควบคุมสิ่งที่ถูกล้างอย่างละเอียด โปรดตรวจสอบการรองรับของโมเดลก่อน โมเดลปัจจุบันทุกตัวรองรับการบีบอัดทั้งสองประเภท รวมถึง Haiku 5.5 ด้วย ส่วน claude-haiku-4-5 รุ่นเก่าจะไม่รองรับ และหน้าการบีบอัดแต่ละหน้าจะมีรายการรุ่นที่รองรับระบุไว้ ไม่มีฟีเจอร์เบต้าเหล่านี้ที่ขับเคลื่อน /compact ของ Claude Code เอง ซึ่งเอกสารระบุว่าเป็นคำขอสรุปข้อมูลแยกต่างหากที่ไคลเอนต์ส่งไปพร้อมกับประวัติของคุณ

FAQ

ทำไมเซสชัน Claude Code ของฉันถึงทำงานช้าลงและมีค่าใช้จ่ายสูงขึ้นเมื่อใช้งานไปนานๆ?

เนื่องจากบทสนทนาทั้งหมดจะถูกส่งซ้ำในทุกรอบการโต้ตอบ คำถามเพียงบรรทัดเดียวในเซสชันที่เปิดทิ้งไว้ทั้งวันจึงต้องแบกรับประวัติการสนทนาของทั้งวันไปด้วย Prompt caching ช่วยให้ค่าใช้จ่ายส่วนนี้ถูกลงตราบเท่าที่ cache ยังคงทำงานอยู่: การอ่านข้อมูลมีค่าใช้จ่าย 0.1 เท่าของอัตรา input พื้นฐานสำหรับ Haiku 5.5, 0.05 เท่าสำหรับ Opus 5.5 และ Sonnet 5.5 และ 0.025 เท่าสำหรับ Fable 5.1 เมื่อใดที่การโต้ตอบพลาดจาก cache ส่วนนำของข้อความเดิมจะถูกเขียนใหม่ที่อัตรา 1.25 เท่า หรือ 2 เท่าหากมีอายุการใช้งานหนึ่งชั่วโมง ให้รัน /context เพื่อดูว่าสิ่งใดกำลังเติมเต็มหน้าต่างบริบท และอ่าน สิ่งที่ Claude Code เรียกเก็บเงินคุณ เพื่อทำความเข้าใจกลไกการทำงาน

/clear และ /compact ใน Claude Code แตกต่างกันอย่างไร?

/clear เป็นการเริ่มบทสนทนาใหม่โดยไม่มีบริบทเดิมเหลืออยู่ คำสั่งนี้ไม่ส่งคำขอใดๆ จึงไม่มีค่าใช้จ่าย และเป็นตัวเลือกที่เหมาะสมเมื่อต้องการเปลี่ยนไปทำงานที่ไม่เกี่ยวข้องกัน /compact เป็นการคงบทสนทนาเดิมไว้แต่แทนที่ประวัติด้วยบทสรุป จึงเป็นตัวเลือกที่เหมาะสมเมื่อทำงานชิ้นเดิมต่อเนื่องเป็นเวลานาน ควรระบุจุดเน้นให้ชัดเจน เช่น /compact keep only the plan and the diff เพราะคำสั่งดังกล่าวจะเป็นตัวกำหนดว่าข้อมูลใดจะถูกเก็บรักษาไว้

ฉันจะดูได้อย่างไรว่าสิ่งใดกำลังใช้หน้าต่างบริบทของ Claude Code อยู่?

ให้รัน /context หรือ /context all เพื่อดูรายละเอียดแยกตามรายการ คำสั่งนี้จะแสดง system prompt, นิยามของเครื่องมือ, MCP servers, ไฟล์หน่วยความจำ และประวัติการสนทนาในรูปแบบตารางสี พร้อมคำแนะนำสำหรับเครื่องมือที่ใช้บริบทสูงและปัญหาหน่วยความจำบวม สำหรับแผนแบบชำระเงิน /usage จะช่วยระบุการใช้งานล่าสุดแยกตามทักษะ, subagents และ MCP servers แต่ละรายการ

ฉันควรใช้หน้าต่างบริบทขนาด 1 ล้าน token แทนการทำ compaction หรือไม่?

หน้าต่างบริบทที่ใหญ่ขึ้นเป็นการชะลอปัญหามากกว่าการแก้ไข โมเดลปัจจุบันทุกตัว (Fable 5.1, Opus 5.5, Sonnet 5.5 และ Haiku 5.5) รองรับหน้าต่างบริบทขนาด 1 ล้าน token และการทำ compaction ก็ทำงานในลักษณะเดียวกัน ทุกรอบการโต้ตอบยังคงส่ง prompt ทั้งหมดซ้ำและถูกเรียกเก็บเงินตามจริง ดังนั้นบทสนทนาขนาด 400,000 token จึงมีค่าใช้จ่ายสูงไม่ว่าจะใส่ในหน้าต่างบริบทได้หรือไม่ก็ตาม

การแก้ไขบริบท (context editing) และการทำ compaction ใน Claude API แตกต่างกันอย่างไร?

การแก้ไขบริบทคือการลบเนื้อหาเก่าออกบางส่วน โดยส่วนใหญ่จะเป็นผลลัพธ์จากเครื่องมือ และทิ้งข้อความตัวแทนไว้ในตำแหน่งเดิมเพื่อให้ Claude ทราบว่าข้อมูลถูกลบออกไปแล้ว ส่วนการทำ compaction คือการสร้างบทสรุปและนำมาแทนที่ประวัติทั้งหมด เอกสารของ Anthropic ระบุว่า compaction เป็นกลยุทธ์หลักสำหรับบทสนทนาที่ยาวนาน และวางตำแหน่งให้การแก้ไขบริบทเป็นตัวเลือกสำหรับการจัดการที่ละเอียดกว่า ทั้งสองอย่างยังอยู่ในสถานะเบต้าและมี header เฉพาะของตนเอง ซึ่งแยกต่างหากจาก /compact ของ Claude Code