🎞️ Videos → Managing Context on Claude Code: These 5 mins will save you 5 hrs of waiting
Description
พบกับคุณต้น Peerasak นักพัฒนา iOS และ indie dev เจ้าของแอป Pygmy กับเซสชันที่จะช่วยให้คุณใช้งาน Claude Code และ LLM ได้อย่างมีประสิทธิภาพผ่านการจัดการ context window อย่างเป็นระบบ คุณต้นจะพาไปทำความเข้าใจกลไกการทำงานของ AI ที่ไม่มีความจำในตัว และความสำคัญของการควบคุมจำนวน token ไม่ให้ชน limit จนเกินความจำเป็น
Chapters
- แนะนำตัวและประสบการณ์ในฐานะ iOS Developer 0:00
- ทำไมเราต้องจัดการ Context และกลไกการนับ Token ของ LLM 1:08
- ภาพจำลองการสะสม Token ที่เพิ่มขึ้นเรื่อยๆ ในทุก Turn 2:15
- 4 กลยุทธ์หลักในการประหยัดและจัดการ Context 3:50
- ตรวจสอบการใช้งานด้วย /context และระวังภาระจาก MCP Tools 4:36
- เขียน CLAUDE.md ให้สั้นและกระชับเพื่อประหยัดพื้นที่ 5:35
- แบ่ง Task และใช้ Checklist เพื่อจัดการงานอย่างเป็นระบบ 6:37
- ลดภาระ Context หลักด้วยการใช้ Sub-agent ทำงานเฉพาะกิจ 7:29
- เคลียร์ Context ทุกครั้งที่จบงานด้วยคำสั่ง /clear 9:18
- ใช้ Skill แทน MCP เพื่อโหลดสคริปต์เฉพาะตอนที่จำเป็น 10:03
- บทสรุป: ทำงานให้คุ้มค่าที่สุดในแต่ละ Turn และการติดตามผลงาน 10:44
Transcript
คำบรรยายต่อไปนี้อาจไม่ถูกต้องทั้งหมด หากคุณพบข้อผิดพลาดใดๆ คุณสามารถคลิกเมาส์ขวาบนข้อความเพื่อรายงานได้ทันที หรือ แก้ไขบน GitHub
แนะนำตัวและประสบการณ์ในฐานะ iOS Developer0:00
โอเคครับ สวัสดีครับ และสารภาพเลยว่าสไลด์นี้ JB สปอยล์ไปหมดแล้ว
เมื่อกี้มีคนที่ถามไปก่อนหน้า และใน session ก่อนหน้านี้ เค้าตอบไปครบหมดแล้วครับ แต่ไม่เป็นไรครับ ถือว่าเดี๋ยวพูดเป็นภาษาไทยละกัน ผมชื่อต้น Peerasak นะครับ เป็น iOS dev ครับ
ที่เคยทำงานที่ R'ket แอปให้ข้อมูลหุ้นนะครับ และมี indie dev เป็นของตัวเองครับ ชื่อว่า Pygmy จดรายจ่ายแบบไม่จด มันคือ 'เหมียวจด' ที่ทำงาน offline บน iOS อย่างเดียวครับ ปัจจุบันขายเครื่องสีข้าวกล้องอยู่ที่จังหวัดสกลนครครับ เพราะว่าไม่ได้เขียนโปรแกรม
โอเค เห็นหลายคนชอบเปิดด้วย quote ผมก็จะเปิดด้วย quote นี้ที่ทุกคนน่าจะคุ้นตาครับ
อันนี้มักจะเห็นตอนประมาณบ่ายโมง บ่ายโมงครึ่งครับ
เริ่มงานมาปุ๊บเจอ อะไรอย่างนี้
ทำไมเราต้องจัดการ Context และกลไกการนับ Token ของ LLM1:08
โจทย์ของเราวันนี้คือเราจะ manage context ใช่ไหมครับ ถ้าเราไม่ manage สิ่งที่จะเจอบ่อยๆ คือการ reach limit โดยเฉพาะคนที่ใช้ package Pro ไม่ใช่ package Max
ก่อนจะเข้าใจเรื่องการ manage context เราต้องรู้ก่อนว่าในความเป็นจริงแล้ว Claude หรือ LLM แต่ละตัวทำงานกันยังไง ในความเป็นจริงมันไม่มีความจำครับ ทุกครั้งที่เราส่งข้อมูลเข้าไป ต้องส่งตั้งแต่แชทแรกจนถึงแชทล่าสุด ไฟล์ที่เคยอ่าน tool ที่เคยถูกเรียก ทุกอย่างยัดรวมเข้าไป และทุกอย่างนั้นถูกนับว่าเป็น token ครับ ใครจ่ายผ่าน API ก็โชคดีละกันครับ โดยที่ทั้งหมดที่ว่ามาเนี่ย จะถูกบีบเอาไว้ในกรอบของ context window ก็คือ 2 แสน token ถ้าเป็นตอนนี้ แต่อนาคตอาจจะขยับไปเป็น 1 ล้านครับ
น่าจะ burn หนักกว่าเดิมด้วย ยิ่งใหญ่ยิ่งช้าครับ และถ้าเมื่อไหร่ก็ตามที่มันใกล้จะชน 2 แสนเนี่ย มันจะทำการ auto compact สำหรับคนที่ใช้ Claude Code
ภาพจำลองการสะสม Token ที่เพิ่มขึ้นเรื่อยๆ ในทุก Turn2:15
มาดูที่รูปนี้กันครับ นี่คือรูปที่ผมแคปมาจาก do ment ของ Anthropic ไป search ดูได้ครับ มันจะมี doc เกี่ยวกับ context window อยู่ ภาพนี้น่าจะชัดเจนที่สุดครับ ทำให้เราเห็นว่าทุกครั้งที่เราแชทกับ AI ในแต่ละครั้งมันส่งอะไรไปบ้าง รอบแรกที่เราพิมพ์ไป จะเห็นว่ามันมีแค่คำถาม และจะมี system prompt หรือ tool ที่มัดขึ้นไปด้วย แล้วตอนที่มันตอบกลับมา ก็จะมีสิ่งที่มันตอบมา ถ้าเราจะถามต่อล่ะ เช่น บอกว่าอยากได้หน้า landing page
พอมันตอบกลับมา เราบอกว่าช่วยแก้ตรงนี้ให้หน่อย สิ่งที่มันทำคือ มันส่งทั้งยวงขึ้นไปอีกรอบ แล้วมันก็จะตอบกลับมาเป็น code ชุดใหม่ และทุกครั้งที่เราพิมพ์ มันคือการทบทบไปเรื่อยๆ นี่คือสิ่งที่อธิบายไปในสไลด์เมื่อกี้
อยากให้ทุกคนจดจำภาพนี้เอาไว้ เพราะนี่คือสิ่งที่จะ burn token ของเราครับ สมการมันก็จะประมาณนี้ครับ ล้อเล่นนะ
จริงๆ มันมีแชท มี tool มีไฟล์
หรืออะไรก็ตามที่เรา read ขึ้นมาครับ อันนี้เรียกว่า token usage ครับ ว่าเราใช้ไปเท่าไหร่
เมื่อ usage คูณกับจำนวน turn หรือจำนวนรอบที่เราส่งทบทบไปเรื่อยๆ
มันจะทำให้เราไปชน limit ได้เร็วมากขึ้น
4 กลยุทธ์หลักในการประหยัดและจัดการ Context3:50
ต่อมาคือเราจะทำยังไงครับ ซึ่งคำตอบคือ JB ตอบไปหมดแล้ว แต่เดี๋ยวผมจะเสริมให้ละกันครับ ว่ามีอะไรบ้าง อย่างเรื่องการเช็ค context ก่อน ว่าปัจจุบันเรา burn ไปเท่าไหร่ MCP ของเรากินพื้นที่มากขนาดไหน สองคือการแบ่ง task ครับ สามคือการใช้ sub-agent ผมเชื่อในการแบ่งงานออกไป เพื่อไม่ให้มีของบางอย่างที่ต้องถูกทบเข้าไปเรื่อยๆ ใน primary context หรือแชทหลักครับ เหมือนไปเปิดห้องแชทแยก ทำงานเสร็จแล้วตอบกลับมา ค่อยเอาตัวหลักคุยกันต่อครับ สุดท้ายคือ ผมจะเคลียร์ทุกครั้งที่จบ task ครับ หรือก็คือการ commit นั่นเอง
ตรวจสอบการใช้งานด้วย /context และระวังภาระจาก MCP Tools4:36
มาดูที่ข้อแรกก่อน คนที่ใช้ Claude Code เคยใช้ command นี้ไหมครับ /context
โล่งแบบนี้ไหมครับ หรือไปหนักที่ MCP tool
นี่คือคำสั่งแรกที่อยากแนะนำครับ บางครั้งเราใช้จนมันมือมาก เวลาติดตั้ง MCP มีของเยอะๆ เดี๋ยวเอาไว้คุม browser ด้วย
ส่งเมลหรือทำอะไรไม่รู้ลง MCP ไว้ก่อนเยอะๆ ดี ซึ่ง โปรดจงจำไว้ครับว่าทุกๆ ครั้งที่เราลงเนี่ย MCP server ยิ่งมี tool มากเท่าไหร่ มันก็จะทบๆ ไป และไอ้เนี่ยส่งทุกรอบ แปลว่าถ้าสมมติว่าไอ้ตัวเนี้ย มันกินไปสักประมาณ อย่างของผมเนี่ย ตอนนี้มันกินแค่ 0.6% ใช่ไหม แต่กับ tool บางตัวในงานของ iOS dev เนี่ย แค่ MCP server ตัวเดียว ไปแล้ว 20% ก็มี เพราะฉะนั้นแล้วระวังให้ดีครับ และก็ต่อมาคือ อะ ผมข้ามไปคือเรื่อง CLAUDE.md
เขียน CLAUDE.md ให้สั้นและกระชับเพื่อประหยัดพื้นที่5:35
มันก็จะหลายสายครับที่เขาบอกว่า CLAUDE.md เขียนให้เยอะ เขียนให้แบบมันแน่นๆ ไว้ก่อน มีอะไรข้อผิดพลาดอะไร ทำ retro ปุ๊บ เขียนยัดลงไปใน CLAUDE.md ใช่ไหมฮะ แต่ก็เหมือนเดิมครับ CLAUDE.md ก็เป็นอีกสิ่งหนึ่ง ที่ถูกส่งขึ้นไปทุกรอบเหมือนกัน ดังนั้นแล้วถ้าเป็นผม CLAUDE.md สั้นๆ กระชับ เอาแค่สิ่งที่ สมมติว่าเราทำโปรเจกต์สักอย่าง
มี command ที่สำคัญ หรือว่า project structure ที่สำคัญเนี่ย ยัดลงไป แต่อย่าให้มันเกิน 4-500 token ก็พอ ประมาณนั้นละกัน อันนี้ในมุมผม ก็คือให้มันเล็กมันสั้น และก็ในระหว่างทางถ้าเกิดเราคุยไปเนี่ย เราก็มาเช็คได้ อย่าง each file read คือ สมมติเราทำงานไปปุ๊บ แต่ละ task เราเห็นว่าเมสเสจมันเริ่มสีม่วงมันเริ่มเยอะ จะได้รู้ว่าโอเค เราอาจจะคุยเยอะ หรือว่ามีการอ่านไฟล์เข้าไปเยอะเหมือนกัน เพราะฉะนั้นแล้วข้อแรก เข้าใจก่อนว่า เรากำลังจะเริ่มเผา token ไปเท่าไหร่แล้ว ตั้งแต่เริ่ม
แบ่ง Task และใช้ Checklist เพื่อจัดการงานอย่างเป็นระบบ6:37
ต่อมา ก็อย่างที่หลายคนทำกัน หรือแม้แต่พวก Spec-kit หรือใดๆ ก็ตาม คือเขาจะมีการแบ่ง task ปกติคือหลายคนอาจจะบอก เฮ้ย vibe code ว่ะ ไม่ต้องมีอะไร ไปตามอารมณ์ แต่ในความเป็นจริงคือตอนนี้เราคือ PM นะครับ
เรามี plan มี spec เพราะฉะนั้นเราต้องแบ่ง task ขึ้นมา ซึ่ง task เนี่ย เราจะเอาไปวางไว้ที่ไหนก็ได้ครับ จะใช้ Jira จะไปต่อกับ Linear ซึ่งมันเป็น MCP tool
หรือ ง่ายๆ markdown file อย่างที่ผมทำ ผมชอบทำ ผมเขียนลงแบบ todo.md และก็ใช้เป็น checklist อย่างงี้ก็ได้ อันนี้ก็เป็นอีกวิธีหนึ่ง เพราะว่าอันนี้คือการเตรียมไว้ก่อน ว่าทุกครั้งที่เราทำ 1 task เสร็จปุ๊บ เราเช็คว่ามัน clear แล้ว และก็ commit code และก็ clear จบ ประมาณนี้
ลดภาระ Context หลักด้วยการใช้ Sub-agent ทำงานเฉพาะกิจ7:29
ต่อมา อันนี้ผมได้มาจากการฟัง
สัมภาษณ์ของทีม Anthropic หลายครั้งละ ก็คือใช้ sub-agent ก็คือทุกครั้ง อย่างที่บอกครับ ทุกครั้งที่เราคุย มันคือ primary context เนาะ แชทที่เราคุยอยู่นี่มันก็จะเรียงไปเรื่อยๆ แต่ว่าเมื่อไหร่ก็ตามที่เรามีการเรียกใช้ sub-agent มันจะทำการสร้าง context แยกออกไปเป็นของมันเองใหม่ อย่างในภาพไม่รู้มองเห็นหรือเปล่า อันนี้เป็น process ที่ผมเอาไว้รันตอนเช้าทุกเช้า ก็คือเอาไว้ดึง feed ข่าวของตัวเอง ซึ่งแน่นอนว่าเราอยากจะตามข่าว AI ให้ทันแบบที่เวหาพูด ผมใช้วิธีให้ AI ไปไล่หาข่าว AI ให้อีกทีครับ ก็ไปอ่านจาก 3-4 เว็บครับ ดึงมาให้หมด กรองมาเฉพาะข่าวที่ผมสนใจ ซึ่งแน่นอนว่าถ้าเกิดผมทำอย่างเงี้ย 1 2 3 การเปิดเว็บ A การเปิดเว็บ B ไปโหลดหน้าเว็บมา มันจะต้องทบเยอะมากเลยใช่ไหมครับ แต่สิ่งที่ผมทำคือ โอเค ไม่เป็นไร คุณแบ่งเป็น sub-agent 4 ตัว คุณออกไปอ่านข่าวของหน้าเว็บแต่ละเว็บ
แล้วคุณก็สรุปส่งกลับมา หรือเขียนลงในไฟล์สักไฟล์นึง เอาไว้ก่อน จะได้ไม่ต้องมาเปลืองเวลาใน process ต่อๆ ไป หรือว่าคนให้เขียน unit test หรืออะไรเงี้ยครับ ที่มีหลายๆ ไฟล์ เราก็สามารถให้มันกระจาย task ทำได้เหมือนกัน
ประมาณนั้น อันนี้ข้อดีคือ มันจะไม่อยู่ใน context หลัก ไม่อยู่ใน primary context นะครับ และก็ถ้าจะฝากไว้คือ
task ที่เราจะทำอย่างนี้ได้ มักจะเป็น task ที่เราไม่สนใจ process ในแกนหลัก เราจะไม่สนใจ process ของมัน แต่เราสนใจแค่ result และเรามั่นใจว่า sub-agent เหล่านั้น จะทำงานได้ดีพออยู่เหมือนกัน ประมาณนั้นละกันครับ
เคลียร์ Context ทุกครั้งที่จบงานด้วยคำสั่ง /clear9:18
ต่อมา พอเราทำงานเสร็จ อย่างเมื่อกี้ task เสร็จแล้วปุ๊บ ก็ clear ครับ ไม่แน่ใจว่ามีใครใช้คำสั่งนี้บ่อยไหมครับ อันนี้ก็เป็นอีกคำสั่งหนึ่งที่ต้องใช้บ่อยๆ ถ้าเราทำงานเสร็จแล้ว ก็ commit code และก็ clear ซะ เพื่อให้เรากลับมาเป็น context เปล่าๆ ที่มีแค่ tool เล็กๆ น้อยๆ อีกครั้งหนึ่ง สมมติถ้าเราไม่ clear เราทำ task A เสร็จแล้ว และเราก็บอกว่า โอเค งั้นทำ task B ต่อเลย สิ่งที่เกิดขึ้นก็คือ task A ที่เราทำเสร็จไปแล้ว และเราไม่ต้องการให้ AI รู้แล้ว มันก็ถูกส่งขึ้นไปด้วย แล้วก็เปลือง usage token อยู่ดีนะครับ
เพราะฉะนั้นแล้ว clear บ่อยๆ ครับ
ใช้ Skill แทน MCP เพื่อโหลดสคริปต์เฉพาะตอนที่จำเป็น10:03
ต่อมา เมื่อกี้พี่นัทพูดไปแล้วเรื่องใช้ skill ใช่ไหมครับ ก็เหมือนกัน ถ้าเมื่อกี้เราพยายาม bully MCP server กันอยู่หลายรอบ แล้วถ้าเราไม่ใช้มันละทำไง ก็ใช้ skill แทนครับ เพราะ skill คือ prompt ที่ใส่ script file เข้าไปได้ ก็โยน prompt โยน skill file ให้มันรันเข้าไป จบแล้วครับ เราไม่ต้องไปทำ MCP server มันจะโหลดเฉพาะตอนที่ถูกใช้อยู่แล้ว อย่างเช่น เฮ้ย ทำ skill นี้ให้หน่อย มันก็จะถูกดึงขึ้นมาได้ โดยที่เราไม่จำเป็นต้องเอา skill นี้ ยัดเข้าไปใน context ตั้งแต่แรก หรือว่าอยู่ใน task อื่นที่ไม่จำเป็น ประมาณนั้นละกัน
บทสรุป: ทำงานให้คุ้มค่าที่สุดในแต่ละ Turn และการติดตามผลงาน10:44
ก็หมดแล้วครับ กลับมาที่รูปนี้ ผมคิดว่าจากทั้งหมดเนี่ย มันก็วนกลับมาที่นี่แหละครับ ว่าเราจะทำยังไงให้เราประหยัด
หรือทำให้แต่ละ turn ที่ส่งไป คุ้มค่าที่สุด เพราะว่าไม่งั้น ทุกครั้งที่เราส่ง token ขึ้นไป มันเหมือนเรา burn token ทิ้งไปเปล่าๆ แล้วก็อาจจะไปชน limit อย่างรวดเร็ว อย่างงั้นแหละครับ จบแล้วครับ
ฝากขายของครับ ถ้าใครอยากจะ follow Facebook ผมมีเพจนะครับ peerasak.u ตามได้ ก็จะเขียนเกี่ยวกับเรื่อง Claude Code ด้วยเหมือนกัน แต่ว่าโพสต์ล่าสุดเป็น open-code ครับ
มีคำถามไหมครับ
หมดเวลาไปแล้ว โอเคครับ งั้นจบแล้วครับ ขอบคุณมากครับ