ความรู้ AI agent อยู่ 3 ชั้น: chat / memory / repo — อะไรรอด /clear

ความรู้ AI agent อยู่ 3 ชั้น: chat / memory / repo — อะไรรอด /clear

TL;DR — ความรู้ที่ agent ใช้ อยู่ได้ 3 ชั้น: chat context (บทสนทนาตอนนี้) · agent memory (ไฟล์ส่วนตัวที่ถูกโหลดกลับทุก session) · repo files (ไฟล์ใน git). ต่างกันที่ 2 แกน — “รอด /clear ไหม” (durability) × “ใครเห็น” (sharing). วางความรู้ผิดชั้น = ไม่ก็ หาย (ฝากไว้ใน chat) ไม่ก็ หลุด scope (ฝากของทีมไว้ใน memory ส่วนตัว). รู้ 3 ชั้นนี้แล้วจะตอบได้ทันที ว่าอะไรควรเก็บที่ไหน

🌐 vendor-neutral — โมเดล 3 ชั้นนี้จริงกับ agent ทุกตัวที่มี memory/instruction ต่อโปรเจกต์ (Cursor, Copilot, Codex, Antigravity, Claude Code) — ต่างกันแค่ชื่อ/ที่เก็บ. ป้าย 🔷 = เจาะจง Claude Code, 🌐 = หลักการทั่วไป

การทดลอง: /clear แล้ว agent ลืมอะไร ไม่ลืมอะไร

ลองสังเกต — พอคุณ /clear (หรือเปิด session ใหม่) agent ลืมบทสนทนาเมื่อกี้เกลี้ยง แต่กลับ ยังจำ บาง preference หรือ convention ของโปรเจกต์ได้ และแน่นอนว่าไฟล์ในเรพ ไม่หายไปไหน

ทำไมบางอย่างหาย บางอย่างรอด? เพราะความรู้พวกนี้ อยู่คนละชั้น — และแต่ละชั้นมีกฎการอยู่รอด ของมันเอง. (ถ้ายังไม่เห็นภาพว่าทำไม chat ถึงหาย ลองย้อน context window ทำงานยังไง — LLM เป็น stateless สิ่งที่ “จำ” ได้คือสิ่งที่ถูกประกอบกลับเข้า context เท่านั้น)

3 ชั้นของความรู้ (จับด้วย 2 แกน)

ชั้นอยู่ที่ไหนจริงรอด /clear?ใครเห็น
chat contextcontext window ของ session (transcript อยู่บนดิสก์ แต่ ไม่ auto-reload)❌ หายแค่ session นี้
agent memoryไฟล์ ~/.claude/…/memory/*.md (harness โหลด MEMORY.md กลับ ทุก session)✅ รอดเครื่อง/agent นี้ (private)
repo filesไฟล์ที่ commit ใน git✅ รอดทุกคน/ทูล/เครื่อง (shared)

อ่านตารางนี้เป็น “พิกัด”: เลื่อนลงล่าง = durable ขึ้น + คนเห็นเยอะขึ้น. ของชั่วคราวอยู่บนสุดก็พอ · ของที่ต้องรอดข้ามวัน/ข้ามคนต้องเลื่อนลงล่าง

ทำไม memory “รอด” แต่ chat ไม่รอด

จุดที่คนเข้าใจผิด: คิดว่า chat ก็ถูกเก็บเป็นไฟล์ (transcript) เหมือนกัน ทำไมไม่รอด?

durability ไม่ได้มาจาก “เป็นไฟล์” — แต่มาจาก “ถูกโหลดกลับเข้า context”

  • transcript เป็นไฟล์จริง แต่ harness ไม่ได้เอากลับมาใส่ context ให้อัตโนมัติ → เท่ากับหาย
  • memory รอด เพราะ harness โหลด MEMORY.md กลับเข้า context ทุก session — มันเลย “จำได้”

พูดอีกแบบ: ชั้นที่รอด = ชั้นที่ มีกลไกประกอบมันกลับเข้า context ทุกครั้ง (ตรงกับหลัก stateless ในตอนที่แล้วเป๊ะ — จำได้ = ถูก re-load ไม่ใช่ระลึกได้)

🌐 ทั่วไป: ทุกเครื่องมือมี “ชั้นที่โหลดเสมอ” (rules / instructions / memory index) vs “ชั้นที่ ไม่โหลด” (log บทสนทนา) — สิ่งที่อยู่ชั้นบนเท่านั้นถึง “จำได้”

ชั้น memory เข้าใจผิดบ่อย — 3 จุด

ชั้น memory เป็นชั้นที่ใช้ผิดกันมากสุด เพราะเข้าใจธรรมชาติมันคลาดเคลื่อน:

1. มัน durable “โดยตั้งใจ” — รอดทั้ง /clear และปิด session ตรงข้ามกับ chat ที่ระเหย: memory ถูกออกแบบให้ อยู่ยาว (นั่นคือหน้าที่ของมัน) · เป็น private/local (เห็นเฉพาะ agent/เครื่องนี้) · และ ผูกกับ path ของโปรเจกต์ (ดูหัวข้อถัดไป)

2. ไม่มี auto-clear / auto-expire → มันโตแบบสะสม ไม่มีอะไรมาลบให้ ยิ่งใช้ยิ่งพอก → ต้อง consolidate เอง เป็นระยะ: merge อันซ้ำ · ลบอัน stale (ที่ไม่จริงแล้ว) · trim index ให้กระชับ. memory ที่ไม่เคยจัด = รกและเริ่มขัดกันเอง

3. 🔷 (Claude Code) ไม่ใช่ทุกไฟล์ memory ที่โหลดเข้า context ทุก session โหลดเข้า context แค่ MEMORY.md = ตัว index (บรรทัดละ memory หนึ่งอัน) — ไม่ใช่ ทุกไฟล์. ไฟล์ fact ย่อยถูก recall เฉพาะตอน relevant

💰 ผลเชิงต้นทุน: context ที่ memory กินจริง = ความยาวของ index ไม่ใช่จำนวนไฟล์ → มี 200 memory แต่ index กระชับก็ยังถูก. คุมต้นทุนที่ “index สั้น” ไม่ใช่ “จำนวนไฟล์น้อย”

🌐 ทั่วไป: เครื่องมืออื่นมักโหลด “ดัชนี/สรุป” เข้า context ไม่ใช่ทุก note — เช็คว่าเครื่องมือคุณ โหลดอะไรต่อ session

gotcha ของชั้น memory: มันผูกกับ path

ชั้น memory มีกับดักหนึ่งที่ต้องรู้ — มันไม่ได้ผูกกับ “repo” แต่ผูกกับ path ของโฟลเดอร์ที่เปิด. เปิดจาก git worktree / symlink / subfolder = path คนละอัน = memory กองใหม่ (ว่าง) ทั้งที่เป็น repo เดียวกัน

รายละเอียดเต็ม + วิธีกันอยู่ใน memory ผูกกับ path (worktree มีของตัวเอง) — สรุปสั้น: ความรู้ที่ต้องรอดข้าม worktree/เครื่อง/เพื่อนร่วมทีม อย่าฝากชั้น memory → เลื่อนลงชั้น repo

capture: จับ “เนื้อ” ไม่ใช่ “ชื่อ” — ตอน context ยังอยู่

นี่คือ move ที่พลาดกันบ่อยสุด. สมมติระหว่าง debug service A คุณเจอวิธีแก้ปัญหาที่ดีมาก อยากเก็บไว้ ทำเป็น doc/บทความทีหลัง. ตอนนี้ความรู้นั้นอยู่ ชั้น chat เท่านั้น (รายละเอียดปัญหา + ตัวอย่าง + วิธีแก้) — ซึ่ง จะหายตอน /clear

ทางแก้มี 2 กฎ:

  1. ย้ายขึ้นชั้น durable ตอน context ยังถือมันอยู่ — อย่าเลื่อนไปทำทีหลัง เพราะ session ปิดเมื่อไร เนื้อหายเมื่อนั้น (stateless). “ทีหลัง” = สาย
  2. capture “เนื้อ” พอให้ session ที่ความจำเป็นศูนย์ทำต่อได้ — ไม่ใช่แค่หัวข้อ. จดหัวข้อลอย ๆ = ทีหลังเปิดมาไม่มีใครรู้ว่าเคสคืออะไร. เกณฑ์วัด: “คนที่ไม่เคยเห็นบทสนทนานี้ อ่านโน้ตแล้วทำต่อได้ไหม”

ตัวอย่างคลาสสิกอีกอัน: pending action ข้าม session — เช่น “ping ทีม X หลัง merge”. ถ้าฝากไว้ ในแชท = /clear ทีเดียวหาย. ต้องเลื่อนลงชั้น memory (ถ้าเป็นเรื่องเรา) หรือ repo (ถ้าทีมต้องรู้)

ของนี้ควรอยู่ชั้นไหน? (ตัดสินเร็ว ๆ)

ถามแค่ 2 แกนของตาราง — “ต้องรอด /clear ไหม + ใครต้องเห็น”:

  • ใช้จบใน session นี้ (ลอง ๆ, คิดดัง ๆ) → chat พอ ไม่ต้อง capture
  • “ฉัน/เครื่องนี้ทำงานยังไง” (preference, gotcha ส่วนตัว) → memory
  • ทีมต้องเห็น / ต้องรอดข้ามเครื่อง (decisions, conventions, สถานะงาน, ความรู้ที่ reuse) → repo

เมื่อความรู้ควรอยู่ชั้น repo แล้ว จะมีคำถามต่อว่า “แล้วกันมันซ้ำหลายที่จนขัดกัน (drift) ยังไง” — อันนั้นคือกติกา source of truth เดียว + pointer (ตอนท้ายซีรีส์) · ตอนนี้แค่วางให้ถูก ชั้น ก่อน

สรุป

  1. ความรู้ agent อยู่ได้ 3 ชั้น: chat context · agent memory · repo files
  2. จับด้วย 2 แกน: รอด /clear ไหม (durability) × ใครเห็น (sharing) — เลื่อนลงล่าง = durable ขึ้น + shared ขึ้น
  3. durability มาจากการถูกโหลดกลับเข้า context ไม่ใช่แค่ “เป็นไฟล์” (transcript เป็นไฟล์แต่ไม่ reload = หาย)
  4. ชั้น memory ผูกกับ path (worktree = กองใหม่) → ของที่ต้องรอดข้ามเครื่อง/ทีม เลื่อนลงชั้น repo
  5. capture เนื้อ (ไม่ใช่ชื่อ) ตอน context ยังอยู่ — วางผิดชั้นแล้วของหาย/หลุด scope

ต่อไปในซีรีส์ “Working with AI agents”: พอรู้แล้วว่าความรู้ควรอยู่ชั้นไหน — ตอนถัดไปเอาหลักนี้มา ประกอบเป็น ระบบ state ที่ resume ได้จริง (PLAN/PROGRESS/HANDOFF + memory + git) (ระบบ handoff ที่ resume ได้)

Supawut Thomas

Supawut Thomas

Software Developer

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