ในการสนทนาล่าสุดของฉันกับผู้ใช้ Claude Code มีประเด็นหนึ่งที่ถูกพูดถึงซ้ำๆ นั่นคือ หน้าต่างบริบทขนาด 1M token เป็นดาบสองคม
มันช่วยให้ Claude Code ทำงานอัตโนมัติได้นานขึ้นและจัดการงานต่างๆ ได้อย่างน่าเชื่อถือมากขึ้น แต่ในขณะเดียวกันก็เปิดโอกาสให้เกิดมลพิษทางบริบท หากคุณไม่ระมัดระวังในการจัดการเซสชันของคุณ
การจัดการเซสชันมีความสำคัญมากกว่าที่เคย และดูเหมือนว่าจะมีคำถามมากมายเกี่ยวกับเรื่องนี้ คุณควรเปิดเซสชันเดียวในเทอร์มินัล หรือสองเซสชัน? เริ่มต้นใหม่ทุกครั้งที่มีพร้อมต์? เมื่อไหร่ที่คุณควรใช้ compact, rewind หรือ subagents? อะไรทำให้ compact ที่ไม่ดี?
มีรายละเอียดที่น่าประหลาดใจมากมายที่สามารถส่งผลต่อประสบการณ์ของคุณกับ Claude Code ได้จริง และเกือบทั้งหมดมาจากการจัดการหน้าต่างบริบทของคุณ
ความรู้เบื้องต้นเกี่ยวกับบริบท การบีบอัด และการเสื่อมของบริบท

หน้าต่างบริบทคือทุกสิ่งที่โมเดลสามารถ "มองเห็น" ได้ในครั้งเดียวเมื่อสร้างการตอบสนองครั้งถัดไป ซึ่งรวมถึงพร้อมต์ระบบ การสนทนาที่ผ่านมา การเรียกใช้เครื่องมือทุกครั้งและผลลัพธ์ของมัน และทุกไฟล์ที่ถูกอ่าน Claude Code มีหน้าต่างบริบทขนาดหนึ่งล้านโทเค็น
น่าเสียดายที่การใช้บริบทมีต้นทุนเล็กน้อย ซึ่งมักเรียกว่าการเสื่อมของบริบท การเสื่อมของบริบทคือข้อสังเกตที่ว่าประสิทธิภาพของโมเดลลดลงเมื่อบริบทมีขนาดใหญ่ขึ้น เนื่องจากความสนใจถูกกระจายไปยังโทเค็นมากขึ้น และเนื้อหาที่เก่าและไม่เกี่ยวข้องเริ่มรบกวนงานปัจจุบัน สำหรับโมเดลบริบท 1MM ของเรา เราจะเห็นการเสื่อมของบริบทในระดับหนึ่งเกิดขึ้นประมาณ ~300-400k โทเค็น แต่ทั้งนี้ขึ้นอยู่กับงานเป็นอย่างสูง ไม่ใช่กฎตายตัว
หน้าต่างบริบทเป็นขีดจำกัดที่ตายตัว ดังนั้นเมื่อคุณใกล้จะถึงจุดสิ้นสุดของหน้าต่างบริบท คุณจะต้องสรุปงานที่คุณทำอยู่เป็นคำอธิบายที่สั้นลงและทำงานต่อในหน้าต่างบริบทใหม่ เราเรียกสิ่งนี้ว่าการบีบอัด คุณยังสามารถเริ่มการบีบอัดได้ด้วยตัวเอง

ทุกเทิร์นคือจุดแยกสาขา
สมมติว่าคุณเพิ่งขอให้ Claude ทำบางอย่างและมันเสร็จเรียบร้อย ตอนนี้คุณมีข้อมูลบางอย่างในบริบทของคุณ (การเรียกใช้เครื่องมือ ผลลัพธ์ของเครื่องมือ คำแนะนำของคุณ) และคุณมีตัวเลือกมากมายที่น่าประหลาดใจสำหรับสิ่งที่ต้องทำต่อไป:
- ดำเนินการต่อ — ส่งข้อความอื่นในเซสชันเดียวกัน
- /rewind (esc esc) — ย้อนกลับไปยังข้อความก่อนหน้าและลองอีกครั้งจากจุดนั้น
- /clear — เริ่มเซสชันใหม่ โดยปกติจะมีบทสรุปที่คุณกลั่นจากสิ่งที่คุณเพิ่งเรียนรู้
- บีบอัด — สรุปเซสชันจนถึงตอนนี้และทำงานต่อจากบทสรุปนั้น
- ตัวแทนย่อย — มอบหมายงานส่วนถัดไปให้กับเอเจนต์ที่มีบริบทสะอาดของตัวเอง และดึงเฉพาะผลลัพธ์กลับมา
แม้ว่าสิ่งที่เป็นธรรมชาติที่สุดคือการดำเนินการต่อ แต่สี่ตัวเลือกอื่นๆ มีไว้เพื่อช่วยจัดการบริบทของคุณ

เมื่อใดควรเริ่มเซสชันใหม่
หน้าต่างบริบท 1M ใหม่หมายความว่าตอนนี้คุณสามารถทำงานที่ยาวนานขึ้นได้อย่างน่าเชื่อถือมากขึ้น เช่น ให้มันสร้างแอปแบบ full-stack ตั้งแต่เริ่มต้น แต่เพียงเพราะโมเดลของคุณยังใช้บริบทไม่หมด ก็ไม่ได้หมายความว่าคุณไม่ควรเริ่มเซสชันใหม่
กฎทั่วไปของเราคือ เมื่อคุณเริ่มงานใหม่ คุณควรเริ่มเซสชันใหม่ด้วย
พื้นที่สีเทาคือเมื่อคุณอาจต้องการทำงานที่เกี่ยวข้องซึ่งบริบทบางส่วนยังคงจำเป็น แต่ไม่ใช่ทั้งหมด
ตัวอย่างเช่น การเขียนเอกสารสำหรับฟีเจอร์ที่คุณเพิ่ง implement แม้ว่าคุณจะเริ่มเซสชันใหม่ได้ แต่ Claude จะต้องอ่านไฟล์ที่คุณเพิ่ง implement ซ้ำ ซึ่งจะช้าและมีค่าใช้จ่ายสูงกว่า เนื่องจากการเขียนเอกสารอาจไม่ใช่งานที่ต้องใช้ความชาญฉลาดสูง บริบทที่เพิ่มขึ้นจึงอาจคุ้มค่ากับประสิทธิภาพที่เพิ่มขึ้นจากการไม่ต้องอ่านไฟล์ที่เกี่ยวข้องซ้ำอีกครั้ง
การย้อนกลับแทนการแก้ไข

ถ้าฉันต้องเลือกนิสัยอย่างหนึ่งที่บ่งบอกถึงการจัดการบริบทที่ดี นั่นก็คือการย้อนกลับ
ใน Claude Code การกด Esc สองครั้ง (หรือเรียกใช้ /rewind) ช่วยให้คุณสามารถย้อนกลับไปยังข้อความก่อนหน้าใดๆ และป้อนพร้อมต์ใหม่จากจุดนั้น ข้อความหลังจากจุดนั้นจะถูกทิ้งจากบริบท
การย้อนกลับมักเป็นแนวทางที่ดีกว่าสำหรับการแก้ไข ตัวอย่างเช่น Claude อ่านห้าไฟล์ ลองใช้แนวทางหนึ่ง และมันใช้ไม่ได้ สัญชาตญาณของคุณอาจจะพิมพ์ว่า "นั่นใช้ไม่ได้ ลอง X แทน" แต่การเคลื่อนไหวที่ดีกว่าคือการย้อนกลับไปยังจุดหลังจากอ่านไฟล์แล้ว และป้อนพร้อมต์ใหม่ด้วยสิ่งที่คุณเรียนรู้ "อย่าใช้แนวทาง A โมดูล foo ไม่เปิดเผยสิ่งนั้น — ไปที่ B โดยตรง"
คุณยังสามารถใช้ "สรุปจากตรงนี้" เพื่อให้ Claude สรุปสิ่งที่เรียนรู้และสร้างข้อความส่งต่อ คล้ายกับข้อความถึง Claude เวอร์ชันก่อนหน้าจากตัวตนในอนาคตที่ลองบางอย่างแล้วมันใช้ไม่ได้

การบีบอัดเทียบกับเซสชันใหม่
เมื่อเซสชันยาวขึ้น คุณมีสองวิธีในการลดน้ำหนัก: /compact หรือ /clear (และเริ่มใหม่) ทั้งสองวิธีให้ความรู้สึกคล้ายกันแต่ทำงานแตกต่างกันมาก
Compact ขอให้โมเดลสรุปการสนทนาจนถึงตอนนี้ จากนั้นแทนที่ประวัติด้วยบทสรุปนั้น มันมีการสูญเสียข้อมูล คุณกำลังไว้วางใจให้ Claude ตัดสินใจว่าอะไรสำคัญ แต่คุณไม่ต้องเขียนอะไรด้วยตัวเอง และ Claude อาจจะละเอียดถี่ถ้วนมากขึ้นในการรวมการเรียนรู้หรือไฟล์สำคัญ คุณยังสามารถชี้นำมันได้โดยการส่งคำแนะนำ (/compact focus on the auth refactor, drop the test debugging)

ด้วย /clear *คุณ* เป็นคนเขียนสิ่งที่สำคัญ ("เรากำลัง refactor auth middleware ข้อจำกัดคือ X ไฟล์ที่สำคัญคือ A และ B เราได้ตัดแนวทาง Y ออกไปแล้ว") และเริ่มต้นใหม่ มันเป็นงานที่มากขึ้น แต่บริบทที่ได้คือสิ่งที่คุณตัดสินใจว่าเกี่ยวข้อง
อะไรทำให้เกิด Compact ที่ไม่ดี?

หากคุณเรียกใช้เซสชันที่ยาวนานเป็นจำนวนมาก คุณอาจสังเกตเห็นบางครั้งที่การบีบอัดอาจแย่เป็นพิเศษ ในกรณีนี้ เรามักพบว่า compact ที่ไม่ดีสามารถเกิดขึ้นได้เมื่อโมเดลไม่สามารถคาดเดาทิศทางที่งานของคุณกำลังจะไป
ตัวอย่างเช่น autocompact ทำงานหลังจากเซสชันการดีบักที่ยาวนานและสรุปการตรวจสอบ และข้อความถัดไปของคุณคือ "ตอนนี้แก้ไขคำเตือนอื่นที่เราเห็นใน bar.ts"
แต่เนื่องจากเซสชันมุ่งเน้นไปที่การดีบัก คำเตือนอื่นอาจถูกทิ้งจากบทสรุป
นี่เป็นเรื่องยากเป็นพิเศษ เพราะเนื่องจากการเสื่อมของบริบท โมเดลจึงอยู่ในจุดที่ฉลาดน้อยที่สุดเมื่อทำการบีบอัด ด้วยบริบทหนึ่งล้าน คุณมีเวลามากขึ้นที่จะ /compact เชิงรุกพร้อมคำอธิบายสิ่งที่คุณต้องการทำ
ตัวแทนย่อยและหน้าต่างบริบทใหม่

ตัวแทนย่อยเป็นรูปแบบหนึ่งของการจัดการบริบท มีประโยชน์เมื่อคุณรู้ล่วงหน้าว่างานส่วนหนึ่งจะสร้างผลลัพธ์ระหว่างกลางจำนวนมากที่คุณจะไม่ต้องการอีก
เมื่อ Claude สร้างตัวแทนย่อยผ่านเครื่องมือ Agent ตัวแทนย่อยนั้นจะได้รับหน้าต่างบริบทใหม่ของตัวเอง มันสามารถทำงานได้มากเท่าที่ต้องการ จากนั้นสังเคราะห์ผลลัพธ์เพื่อให้เฉพาะรายงานสุดท้ายกลับมาที่ตัวแทนหลัก
การทดสอบทางความคิดที่เราใช้: ฉันจะต้องใช้ผลลัพธ์ของเครื่องมือนี้อีกครั้ง หรือแค่ข้อสรุป?
แม้ว่า Claude Code จะเรียกใช้ตัวแทนย่อยโดยอัตโนมัติ คุณอาจต้องการบอกให้มันทำเช่นนี้อย่างชัดเจน ตัวอย่างเช่น คุณอาจต้องการบอกให้มัน:
- "สร้างตัวแทนย่อยเพื่อตรวจสอบผลลัพธ์ของงานนี้ตามไฟล์ spec ต่อไปนี้"
- "แยกตัวแทนย่อยเพื่ออ่านโค้ดเบสอื่นนี้และสรุปว่ามัน implement โฟลว์ auth อย่างไร จากนั้น implement ด้วยตัวเองในลักษณะเดียวกัน"
- "แยกตัวแทนย่อยเพื่อเขียนเอกสารเกี่ยวกับฟีเจอร์นี้ตามการเปลี่ยนแปลง git ของฉัน"
สรุป
โดยสรุป เมื่อ Claude จบเทิร์นและคุณกำลังจะส่งข้อความใหม่ คุณมีจุดตัดสินใจ
เมื่อเวลาผ่านไป เราคาดว่า Claude จะช่วยคุณจัดการสิ่งนี้ด้วยตัวเอง แต่สำหรับตอนนี้ นี่เป็นหนึ่งในวิธีที่คุณสามารถชี้นำผลลัพธ์ของ Claude






