การใช้งาน Claude Code: การจัดการเซสชันและ Context ขนาด 1M

@trq212
อังกฤษ3 เดือนที่ผ่านมา · 15 เม.ย. 2569
2.4M
8.5K
1.0K
288
16.0K

TL;DR

คู่มือนี้อธิบายวิธีเพิ่มประสิทธิภาพการทำงานของ Claude Code โดยการจัดการ Context window ขนาดใหญ่ผ่านเทคนิคต่างๆ เช่น การย้อนกลับ (Rewinding) การบีบอัดข้อมูล และการใช้ Subagents

ในการสนทนาล่าสุดของฉันกับผู้ใช้ Claude Code มีประเด็นหนึ่งที่ถูกพูดถึงซ้ำๆ นั่นคือ หน้าต่างบริบทขนาด 1M token เป็นดาบสองคม

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

การจัดการเซสชันมีความสำคัญมากกว่าที่เคย และดูเหมือนว่าจะมีคำถามมากมายเกี่ยวกับเรื่องนี้ คุณควรเปิดเซสชันเดียวในเทอร์มินัล หรือสองเซสชัน? เริ่มต้นใหม่ทุกครั้งที่มีพร้อมต์? เมื่อไหร่ที่คุณควรใช้ compact, rewind หรือ subagents? อะไรทำให้ compact ที่ไม่ดี?

มีรายละเอียดที่น่าประหลาดใจมากมายที่สามารถส่งผลต่อประสบการณ์ของคุณกับ Claude Code ได้จริง และเกือบทั้งหมดมาจากการจัดการหน้าต่างบริบทของคุณ

ความรู้เบื้องต้นเกี่ยวกับบริบท การบีบอัด และการเสื่อมของบริบท

Thariq - inline image

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

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

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

Thariq - inline image

ทุกเทิร์นคือจุดแยกสาขา

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

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

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

Thariq - inline image

เมื่อใดควรเริ่มเซสชันใหม่

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

กฎทั่วไปของเราคือ เมื่อคุณเริ่มงานใหม่ คุณควรเริ่มเซสชันใหม่ด้วย

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

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

การย้อนกลับแทนการแก้ไข

Thariq - inline image

ถ้าฉันต้องเลือกนิสัยอย่างหนึ่งที่บ่งบอกถึงการจัดการบริบทที่ดี นั่นก็คือการย้อนกลับ

ใน Claude Code การกด Esc สองครั้ง (หรือเรียกใช้ /rewind) ช่วยให้คุณสามารถย้อนกลับไปยังข้อความก่อนหน้าใดๆ และป้อนพร้อมต์ใหม่จากจุดนั้น ข้อความหลังจากจุดนั้นจะถูกทิ้งจากบริบท

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

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

Thariq - inline image

การบีบอัดเทียบกับเซสชันใหม่

เมื่อเซสชันยาวขึ้น คุณมีสองวิธีในการลดน้ำหนัก: /compact หรือ /clear (และเริ่มใหม่) ทั้งสองวิธีให้ความรู้สึกคล้ายกันแต่ทำงานแตกต่างกันมาก

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

Thariq - inline image

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

อะไรทำให้เกิด Compact ที่ไม่ดี?

Thariq - inline image

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

ตัวอย่างเช่น autocompact ทำงานหลังจากเซสชันการดีบักที่ยาวนานและสรุปการตรวจสอบ และข้อความถัดไปของคุณคือ "ตอนนี้แก้ไขคำเตือนอื่นที่เราเห็นใน bar.ts"

แต่เนื่องจากเซสชันมุ่งเน้นไปที่การดีบัก คำเตือนอื่นอาจถูกทิ้งจากบทสรุป

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

ตัวแทนย่อยและหน้าต่างบริบทใหม่

Thariq - inline image

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

เมื่อ Claude สร้างตัวแทนย่อยผ่านเครื่องมือ Agent ตัวแทนย่อยนั้นจะได้รับหน้าต่างบริบทใหม่ของตัวเอง มันสามารถทำงานได้มากเท่าที่ต้องการ จากนั้นสังเคราะห์ผลลัพธ์เพื่อให้เฉพาะรายงานสุดท้ายกลับมาที่ตัวแทนหลัก

การทดสอบทางความคิดที่เราใช้: ฉันจะต้องใช้ผลลัพธ์ของเครื่องมือนี้อีกครั้ง หรือแค่ข้อสรุป?

แม้ว่า Claude Code จะเรียกใช้ตัวแทนย่อยโดยอัตโนมัติ คุณอาจต้องการบอกให้มันทำเช่นนี้อย่างชัดเจน ตัวอย่างเช่น คุณอาจต้องการบอกให้มัน:

  • "สร้างตัวแทนย่อยเพื่อตรวจสอบผลลัพธ์ของงานนี้ตามไฟล์ spec ต่อไปนี้"
  • "แยกตัวแทนย่อยเพื่ออ่านโค้ดเบสอื่นนี้และสรุปว่ามัน implement โฟลว์ auth อย่างไร จากนั้น implement ด้วยตัวเองในลักษณะเดียวกัน"
  • "แยกตัวแทนย่อยเพื่อเขียนเอกสารเกี่ยวกับฟีเจอร์นี้ตามการเปลี่ยนแปลง git ของฉัน"

สรุป

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

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

Thariq - inline image
Save to YouMind

Use YouMind to read viral articles deeply

Save the source, ask focused questions, summarize the argument, and turn a viral article into reusable notes in one AI workspace.

Explore YouMind

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

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

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