ข้าม​ไป​ยัง​เนื้อหา

Compaction สู้ context rot

บท​ที่ 4 คุณ​ลงมือ วัด งบ token ของ agent #15 เทิร์น​ต่อ​เทิร์น แล้ว​เห็น​กับ​ตา​ว่า​มัน​พอก​ขึ้น​ต่อ​เนื่อง — ทุกรอบ​ที่ loop เรียก getOrder หรือ getDeliveryStatus แล้ว​ป้อน blob กลับ​เข้าไป ประวัติ​ก็​ยาว​ขึ้น​อีก​ก้อน คำถาม​ของ​บท​นี้​คือ แล้ว​ทำ​อย่างไร​กับ​มัน? คุณ​จะ​ปล่อย​ให้​หน้าต่าง​พอก​จน​ใกล้​เพดาน​ไม่​ได้ เพราะ​บท​ที่ 4 พิสูจน์​แล้ว​ว่า​หน้าต่าง​ที่​เต็ม​ไม่ใช่​แค่​แพง​ขึ้น แต่​ทำให้ model เชื่อถือ​ได้​น้อย​ลง คำ​ตอบ​หลัก​ของ​บท​นี้​ชื่อ CompactionCompactionการ​สรุป/บีบ​อัด​ประวัติ​บทสนทนา​เมื่อ​ใกล้​ชน​เพดาน​หน้าต่าง แล้ว​ตั้ง​หน้าต่าง​ใหม่​จาก​บท​สรุป​นั้น (Anthropic) — ต้อง​เป็นการ​สรุป​แบบ high-fidelity ศิลปะ​อยู่​ที่ 'เก็บ​อะไร ทิ้ง​อะไร': รักษาการ​ตัดสิน​ใจ + เรื่อง​ที่​ยัง​ค้าง (order id, เหตุผล refund) ทิ้ง blob ผล​ของ tool ที่​จัดการ​ไป​แล้ว; รูป​ที่​เบา​ที่สุด​คือ​แค่​เคลียร์ tool result เก่าProcess — สรุป​ประวัติ​ที่​ยาว​ให้​กระชับ แล้ว​เริ่ม​หน้าต่าง​ใหม่​จาก​บท​สรุป​นั้น

📦 code ตัวอย่าง

บท​นี้​ลงมือ​สร้าง CompactAsync คร่อม List<ChatMessage> ตัว​เดียว​กับ​ที่ agent Order ของ​คอร์ส​ที่ 15 ใช้ (repo kaen-food-ordering กำลัง​จัด​ทำ) — ยัง​เป็น IChatClient ตัว​เดิม กติกา API เดิม​ทุก​ข้อ​จาก​คอร์ส #15: header x-api-key (ไม่ใช่ Authorization: Bearer), anthropic-version: 2023-06-01, model claude-opus-4-8 (ใช้​เป็น​ตัวอย่าง ณ 2026-07 — id เลื่อน​ไหว​ตาม​เวลา) และ ไม่​ส่ง temperature ไป​กับ model รุ่น​ล่าสุด

compaction คือ​การ​สรุป​ประวัติ​แล้ว​เริ่ม​หน้าต่าง​ใหม่

หัวข้อ​ที่​มีชื่อ​ว่า “compaction คือ​การ​สรุป​ประวัติ​แล้ว​เริ่ม​หน้าต่าง​ใหม่”

Anthropic นิยาม compaction ไว้ตรงๆ — “Compaction is the practice of taking a conversation nearing the context window limit, summarizing its contents, and reinitiating a new context window with the summary.” แกะ​ออก​มา​เป็น​สาม​จังหวะ: (1) เห็น​ว่า​ประวัติ​ใกล้​ชน​เพดาน (2) ให้ model สรุป​เนื้อหา​ทั้ง​กอง (3) สร้าง​หน้าต่าง​ใหม่​ที่​มี​บท​สรุป​แทน​ประวัติ​ดิบ​ทั้งหมด

หัวใจ​ที่​ต้อง​ขีด​เส้น​ใต้​คือ​คำ​ว่า high-fidelity — บท​สรุป​นี้​ไม่ใช่​การ​ย่อ​แบบลวกๆ “Compaction distills the contents of a context window in a high-fidelity manner, enabling the agent to continue with minimal performance degradation.” กลั่น​เนื้อหา​ให้​เข้มข้น​แบบ​รักษา​ความ​เที่ยงตรง​สูง เพื่อ​ให้ agent ทำงาน​ต่อ​ได้​โดย​ประสิทธิภาพ​แทบ​ไม่​ตก คำ​ว่า แทบ​ไม่​ตก นี่แหละ​คือ​เส้น​บางๆ ที่ compaction ที่​ดี​กับ compaction ที่​พัง​ต่าง​กัน

❌ version ดิบ: ตัด​ข้อความ​เก่า​ทิ้งดื้อๆ

วิธี​ที่​ล่อ​ตา​ที่สุด​คือ “ประวัติ​ยาว​ไป ก็​ตัด 10 ข้อความ​แรก​ทิ้ง​ซะ” — เร็ว code สั้น และ พัง​เงียบๆ เพราะ​ข้อความ​เก่า​คือ​ที่​ที่​ลูกค้า​บอก order id และ​เหตุผล​ที่​ขอ​คืน​เงิน พอ​ตัด​ทิ้ง agent ก็​ลืม​ว่า​กำลัง​ทำ​เคส​อะไร​อยู่ การ​ตัด​ตาม​ตำแหน่ง (เก่า = ทิ้ง) ไม่รู้จัก สัญญาณ มัน​ทิ้ง blob ที่​ใช้​แล้ว​กับ​ข้อเท็จจริง​ที่​ชี้ขาด​ด้วย​เกณฑ์​เดียวกัน compaction ต่าง​ตรง​ที่​ให้ model เป็น​คน​ตัดสิน​ว่า​อะไร​ชี้ขาด ไม่ใช่​ตัด​ตาม​อายุ

ทำไม​ต้อง​รักษา​หน้าต่าง​ให้​แน่น: context rot กับ lost in the middle

หัวข้อ​ที่​มีชื่อ​ว่า “ทำไม​ต้อง​รักษา​หน้าต่าง​ให้​แน่น: context rot กับ lost in the middle”

เหตุผล​ที่ compaction ไม่ใช่​ของ​ฟุ่มเฟือย​มา​จาก​สอง​งาน​วิจัย​ที่​ลง​วัน​ที่​ชัด ทั้ง​คู่​ชี้​ไป​ทาง​เดียวกัน — หน้าต่าง​ที่​ยาว​ขึ้น​ไม่​ได้​ฟรี

อย่าง​แรก​คือ Context RotContext Rotปรากฏการณ์​ที่​ความ​แม่น​ใน​การ​เรียก​ใช้​ข้อมูล​ของ model ค่อย ๆ แย่​ลง​เมื่อ context ยาว​ขึ้น — model ไม่​ได้​ประมวล​ผล​ทุก​ตำแหน่ง​เท่า​กัน (Chroma Research) คอร์ส​สอน 'หลักการ' นี้ ไม่​อ้าง​ตัวเลข % เจาะจง (เลื่อน​ไหว​เร็ว) บทเรียน​ที่​ได้​คือ​รักษา​หน้าต่าง​ให้​กระชับ​ด้วย Compaction + Curation แทนที่​จะ​ปล่อย​ให้​เต็ม​จน​เสื่อมArchitecture จาก Chroma Research: model ไม่​ได้ อ่าน token ทุก​ตัว​ด้วย​ความ​เชื่อถือ​ได้​เท่า​กัน “Large Language Models (LLMs) are typically presumed to process context uniformly—that is, the model should handle the 10,000th token just as reliably as the 100th. However, in practice, this assumption does not hold.” และ​สรุป​หลัก​ไว้​ว่า “models do not use their context uniformly; instead, their performance grows increasingly unreliable as input length grows.” — ประสิทธิภาพ​ยิ่ง​ไม่​แน่นอน​เมื่อ input ยิ่ง​ยาว แม้​กับ​งาน​ง่ายๆ อย่าง​การ​ดึง​ข้อ​มูลตรงๆ ก็ตาม

หลักการ ไม่ใช่​ตัวเลข

Context rot เป็น หลักการ: recall เสื่อม​ลง​เมื่อ​หน้าต่าง​ยิ่ง​เต็ม เท่า​นี้​พอ​สำหรับ​การ​ตัดสิน​ใจ​ทาง​วิศวกรรม — รักษา​หน้าต่าง​ให้​แน่น อย่า​ยึด​ติดตัวเลข​เปอร์เซ็นต์​การ​เสื่อม​จาก​งาน​วิจัย​ชิ้น​ใด​ชิ้น​หนึ่ง​มา​เป็น​สัจธรรม เพราะ​มัน​แปร​ตาม model และ​ยุค​ของ benchmark สิ่ง​ที่​คงทน​คือ​ทิศทาง: เต็ม​มาก​ขึ้น = เชื่อถือ​ได้​น้อย​ลง

อย่าง​ที่​สอง​คือ Lost in the MiddleLost in the Middleผล​วิจัย (Liu et al., TACL 2024) ที่​ว่า model ใช้​ข้อมูล​ที่​อยู่ 'ต้น' หรือ 'ท้าย' context ได้​ดี​กว่า​ที่​อยู่ 'กลาง' อย่าง​มี​นัย​สำคัญ แม้​กับ model long-context — บทเรียน​เชิง​ปฏิบัติ: วางข้อเท็จจริง​ชี้ขาด (order id, เหตุผล) ไว้​ที่​หัว​หรือ​ท้าย ไม่​ฝัง​ไว้​กลาง promptArchitecture จาก Liu และ​คณะ ซึ่ง​เจาะจง​ว่า ตำแหน่ง ของ​ข้อมูล​ใน​หน้าต่าง​สำคัญ — “Performance is often highest when relevant information occurs at the beginning or end of the input context, and significantly degrades when models must access relevant information in the middle of long contexts, even for explicitly long-context models.” ข้อมูล​ที่​จม​อยู่​กลาง​หน้าต่าง​ยาวๆ ถูก model ใช้ได้​แย่​ที่สุด แม้​จะ​เป็น model ที่​โฆษณา​ว่า​รองรับ context ยาว​ก็ตาม

สอง​ข้อ​นี้​ประกอบ​กัน​เป็น​คำ​สั่ง​ทาง​วิศวกรรม​ข้อ​เดียว: รักษา​หน้าต่าง​ให้​แน่น และ​วางข้อเท็จจริง​ที่​ชี้ขาด​ไว้​ที่​หัว​หรือ​ท้าย ไม่ใช่​กลาง compaction คือ​เครื่องมือ​ที่​ทำ​ทั้ง​สอง​อย่าง​พร้อม​กัน — มัน​หด​หน้าต่าง​ให้​เล็ก​ลง (สู้ context rot) และ​เมื่อ​คุณ​ประกอบ​หน้าต่าง​ใหม่​เอง คุณ​เป็น​คน​เลือก​ว่า​บท​สรุป​กับ​เทิร์น​ล่าสุด​จะ​อยู่​ตรง​ไหน (สู้ lost in the middle)

Anthropic พูด​ชัด​ว่า​จุด​ที่​ยาก​ที่สุด​ไม่ใช่​การ​เขียน code สรุป แต่​คือ การ​เลือก“The art of compaction lies in the selection of what to keep versus what to discard, as overly aggressive compaction can result in the loss of subtle but critical context.” บีบ​แรง​เกิน​ไป​ก็​เสีย​รายละเอียด​ที่​ละเอียดอ่อน​แต่​ชี้ขาด บีบ​น้อย​เกิน​ไป​ก็​ไม่​ได้​ประหยัด​งบ​อะไร

กติกา​เก็บ-ทิ้ง​ที่ Anthropic ให้​ไว้​เป็น​รูปธรรม (ใน​บริบท​ของ coding agent) คือ “The model preserves architectural decisions, unresolved bugs, and implementation details while discarding redundant tool outputs or messages.” map ลงบน agent Order ของ​เราตรงๆ:

  • เก็บ (รักษา​ไว้): ปัญหา​ของ​ลูกค้า, order id, การ​ตัดสิน​ใจ​เรื่อง​คืน​เงิน​และ เหตุผล, thread ที่​ยัง​ค้าง​ยัง​ไม่​ปิด
  • ทิ้ง: record ออเดอร์​ดิบ​ทั้ง​ก้อน​ที่ getOrder คืน​มา​แล้ว และ​จัดการ​ไป​แล้ว, blob สถานะ​เดลิ​เวอรี​ที่​อ่าน​ค่า​เอา​ไป​ใช้​เรียบร้อย​แล้ว, ข้อความ​ซ้ำซ้อน

สังเกต​ว่า​เกณฑ์​ไม่ใช่ “เก่า/ใหม่” แต่​เป็น “ยัง​ชี้ขาด​อยู่​ไหม” — order id จาก​เทิร์น​แรก​สุด​ต้อง​อยู่​ต่อ ส่วน blob JSON ที่​เพิ่ง​ดึง​มา​เมื่อ​เทิร์นก่อน​แต่​ใช้​เสร็จ​แล้ว​ทิ้ง​ได้

flowchart LR
  H1["เทิร์น 1-2<br/>ปัญหา + order id"]
  H2["blob getOrder<br/>ดิบ ใช้แล้ว"]
  H3["blob getDeliveryStatus<br/>ดิบ ใช้แล้ว"]
  H4["เทิร์นล่าสุด"]
  H1 --> C
  H2 --> C
  H3 --> C
  H4 --> C
  C["compaction<br/>model สรุปประวัติ"]
  C --> S["สรุปความละเอียดสูง<br/>เก็บ: ปัญหา · order id · เหตุผลคืนเงิน"]
  S --> W["หน้าต่างใหม่ แน่น<br/>system + สรุป + เทิร์นล่าสุด"]
  classDef drop fill:#7f1d1d,stroke:#450a0a,color:#f8fafc;
  classDef keep fill:#0891b2,stroke:#064e5b,color:#f8fafc;
  class H2,H3 drop;
  class W keep;

คำ​บรรยาย​ภาพ: ประวัติ​ที่​พอก​ยาว — ข้อเท็จจริง​ที่​ชี้ขาด (เทิร์น​แรก, เทิร์น​ล่าสุด) ปน​กับ blob ดิบ​ที่​ใช้​แล้ว (สี​แดง) — ไหล​เข้า compaction ซึ่ง​ให้ model สรุป​เป็น​ก้อน​ความ​ละเอียด​สูง เก็บ​เฉพาะ​สิ่ง​ที่​ชี้ขาด แล้ว​ประกอบ​หน้าต่าง​ใหม่​ที่​แน่น (สี​ฟ้า) เหลือ​แค่ system + บท​สรุป + เทิร์น​ล่าสุด เกณฑ์​คัด​คือ “ยัง​ชี้ขาด​อยู่​ไหม” ไม่ใช่ “เก่า​หรือ​ใหม่”

วิธี implement ที่ Anthropic ใช้​ตรง​ไป​ตรง​มา — “we implement this by passing the message history to the model to summarize and compress the most critical details.” คือ​ส่ง​ประวัติ​ทั้ง​กอง​กลับ​เข้า model เอง พร้อม​คำ​สั่ง​ที่​ระบุ​ชัด​ว่า​เก็บ​อะไร​ทิ้ง​อะไร แล้ว​เอา​บท​สรุป​ที่​ได้​มา​ประกอบ​หน้าต่าง​ใหม่ นี่​คือ code คร่อม List<ChatMessage> ตัว​เดิม​จาก​คอร์ส #15:

using Microsoft.Extensions.AI;
// history คือ running List<ChatMessage> ตัวเดิมจากคอร์ส #15
// chat คือ IChatClient ตัวเดิม (x-api-key, anthropic-version 2023-06-01,
// "claude-opus-4-8" เป็นตัวอย่าง ณ 2026-07 — ไม่ส่ง temperature)
async Task<List<ChatMessage>> CompactAsync(IList<ChatMessage> history, IChatClient chat)
{
var toSummarize = new List<ChatMessage>(history)
{
new(ChatRole.User,
"สรุปเคส support นี้จนถึงตอนนี้ " +
"KEEP: ปัญหาของลูกค้า, order id, การตัดสินใจเรื่องคืนเงินและเหตุผล, thread ที่ยังค้าง " +
"DROP: record ออเดอร์ดิบที่จัดการไปแล้ว")
};
// ไม่มี ChatOptions ที่ตั้ง temperature — กำกับผ่าน prompt เท่านั้น
var summary = await chat.GetResponseAsync(toSummarize, new ChatOptions());
return
[
history[0], // system message เดิม
new(ChatRole.Assistant, summary.Text), // บทสรุปความละเอียดสูงก้อนเดียว
history[^1] // เทิร์นล่าสุด
];
}

หน้าต่าง​ใหม่​ที่ return ออก​มา​มี​แค่​สาม​ชิ้น: system message เดิม, บท​สรุป​หนึ่ง​ก้อน, และ​เทิร์น​ล่าสุด — จาก​ประวัติ​ที่​อาจ​ยาว​หลาย​สิบ​ข้อความ สังเกต​ว่า​เรา​วาง​บท​สรุป​ไว้ ต้น หน้าต่าง​และ​เทิร์น​ล่าสุด​ไว้ ท้าย โดย​ตั้งใจ ตาม lost in the middle — สิ่ง​ที่​ชี้ขาด​อยู่​ที่​ขอบ ไม่​จม​กลาง

summary.Text คือ accessor เพื่อ​ความ​สะดวก

summary.Text บน ChatResponse เป็น​ตัว​ช่วย​อ่าน​ข้อความ​แบบ​รวบรัด แต่ เนื้อ​ใน​จริง ของ​คำ​ตอบ​ยัง​เป็น content[] block array เหมือน​ที่​คุณ​เห็น​ตอน​ยิง Messages API ดิบ​ใน​คอร์ส #15 — ไม่มี .text ระดับ​บน​สุด​ของ response จริงๆ accessor ตัว​นี้​แค่​ไล่ block แล้ว​ต่อ text ให้ กติกา​ข้อ​นี้​ไม่​เปลี่ยน​แม้​ผ่าน IChatClient

ควร trigger เมื่อไร? ใช้​ตัวเลข token ที่​คุณ​วัด​ได้​จริง​ใน​บท​ที่ 4 — พอ input tokens ข้าม​เกณฑ์​ที่​ตั้ง​ไว้ (เช่น สัดส่วน​หนึ่ง​ของ​เพดาน​หน้าต่าง) ก็​เรียก CompactAsync ก่อน​เทิร์น​ถัด​ไป ไม่ใช่​รอ​จน​ชน​เพดาน​แล้ว​ค่อย​ทำ

test ที่​ต้อง​เขียน: ป้อน transcript หก​เทิร์นที่​อัด​แน่น​ด้วย blob getOrder/getDeliveryStatus เข้าไป เรียก CompactAsync แล้ว assert ว่า order id กับ เหตุผล​การ​คืน​เงิน ยัง​โผล่​อยู่​ใน​หน้าต่าง​ใหม่​ที่​ประกอบ​เสร็จ — นี่​คือ​การ​พิสูจน์ “minimal performance degradation” ด้วย​มือ: ถ้า assertion ผ่าน แปล​ว่า compaction รักษา​สิ่ง​ที่​ชี้ขาด​ไว้​ครบ ถ้า​ตก แปล​ว่า​คุณ​บีบ​แรง​เกิน​ไป

ไม่ใช่​ทุก​ครั้ง​ที่​ต้อง​เรียก model มา​สรุป Anthropic ชี้​ว่า​รูป​ที่​ปลอดภัย​และ​เบา​ที่สุด​คือ​แค่​ลบ​ผล​ของ tool เก่า​ทิ้ง — “One of the safest lightest touch forms of compaction is tool result clearing, most recently launched as a feature on the Claude Developer Platform.” พอ agent อ่าน​ค่า​จาก blob getOrder เอา​ไป​ตัดสิน​ใจ​คืน​เงิน​เรียบร้อย​แล้ว ตัว blob ดิบ​ก้อน​นั้น​ก็​ไม่มี​หน้าที่​อีก​ต่อ​ไป — เคลียร์​มัน​ออก​จาก​ประวัติ​ได้​เลย โดย​ไม่​ต้อง​เรียก model มาสรุปอะไร

🔁 เชื่อม​กับ​บท​ที่ 6

tool result clearing คือ​ประตู​สู่​บท​ถัด​ไป​พอดี — ใน​บท​ที่ 6 จัด​ระเบียบ​ผล​ของ tool เรา​จะ​ปั้น สิ่ง​ที่ tool คืน​กลับ​มา ตั้งแต่​แรก​ให้​เหลือ​แต่ field ที่ agent ต้อง​ใช้​จริง แทนที่​จะ​คืน JSON ทั้ง​ก้อน​แล้ว​ค่อย​มา​เคลียร์​ทีหลัง สอง​เทคนิค​นี้​เสริม​กัน: บท​ที่ 6 ทำให้ payload เล็ก​แต่​ต้น บท​นี้​จัดการ​ก้อน​ที่​สะสม​ไว้​แล้ว

compaction แก้​ปัญหา​หน้าต่าง​พอก แต่​ตัว​มัน​เอง​ก็ ทิ้ง ข้อมูล​บาง​ส่วน​ถาวร​ทุก​ครั้ง​ที่​สรุป ถ้า​มี​ข้อเท็จจริง​ที่​ต้อง​อยู่​รอด​ข้าม session ไม่ใช่​แค่​ข้าม​การ​สรุป คุณ​จับ​คู่​มัน​กับ memory จาก​บท​ที่ 3 ได้ — compaction รักษา หน้าต่าง​ที่​กำลัง​ทำงาน ให้​เล็ก​โดย​ไม่​ต้อง​จด​บันทึก​ฝั่ง client ส่วน memory รักษา​สิ่ง​ที่​ต้อง รอด​จาก​การ​สรุป ไว้​นอก​หน้าต่าง

Anthropic รายงาน​ว่า​เมื่อ​ใช้ memory คู่​กับ​การ​ตัด​แต่ง context บน benchmark งาน​ค้น​เว็บ 100 เทิร์น ได้ “84% token savings and a 39% performance improvement” — ตัวเลข​นี้​มา​จาก​การ​วัด​ชิ้น​เดียว (eval 100 เทิร์น​หนึ่ง​ชุด) ใช้​เป็น ทิศทาง ว่าการ​จับ​คู่​นี้​ให้​ผล ไม่ใช่​ตัวเลข​ที่​จะ​ได้​เป๊ะ​ทุก​งาน

🔁 ต่อยอด​จาก​บท​ที่ 3

กติกา​เก็บ-ทิ้ง​ของ compaction ประกอบ​เข้า​กับ memory ระยะ​ยาว​ใน​บท​ที่ 3 ได้ตรงๆ: ก่อน​สรุป ให้ agent saveMemory() สิ่ง​ที่​ต้อง​รอด​ข้าม session ออก​ไป​ก่อน แล้ว​ค่อย compact — บท​ที่ 8 จะ​ร้อย​ทั้ง​สอง​ชั้น​นี้​เข้า​ด้วย​กัน​ใน context layer ตัว​เต็ม

ปลายทาง​ของ​บท​นี้​คือ​วินัย​เดียว: อย่า​ปล่อย​ให้​หน้าต่าง​พอก​จน​ล้น​แล้ว​เชื่อถือ​ไม่​ได้ ให้​สรุป​มัน​ให้​แน่น​อย่าง​มี​ศิลปะ เก็บ​สิ่ง​ที่​ชี้ขาด ทิ้ง​สิ่ง​ที่​ใช้​แล้ว บท​หน้า​เรา​ขยับ​ไป​ที่ ต้นทาง ของ​การ​พอก — ปั้น​สิ่ง​ที่ tool คืน​กลับ​มา​ตั้งแต่​แรก


🔗 อ้างอิง​ต้นทาง​ของ​บท​นี้

บท​นี้​อิง​ต้นทาง​ที่​ลง​วัน​ที่​กำกับ อ่าน​ต่อ​ได้​โดยตรง:

  • Anthropic, “Effective context engineering for AI agents” (2025-09-29) — นิยาม compaction, การกลั่น​แบบ high-fidelity, ศิลปะ​ของ​การ​เลือก​เก็บ-ทิ้ง, กติกา​เก็บ architectural decisions/unresolved bugs ทิ้ง redundant tool outputs, วิธี implement ด้วย​การ​ส่ง​ประวัติ​กลับ​เข้า model และ tool result clearing ใน​ฐานะ​รูป​ที่​เบา​ที่สุด
  • Anthropic, “Context management” (Sept 2025) — ตัวเลข 84% token savings / 39% performance improvement จาก eval งาน​ค้น​เว็บ 100 เทิร์น (memory คู่​กับ​การ​ตัด​แต่ง context — ดัชนี​เดียว ใช้​เป็น​ทิศทาง)
  • Chroma Research, “Context Rot: How Increasing Input Tokens Impacts LLM Performance” (2025-07-14) — หลักการ context rot: model ไม่​ได้​ประมวล​ผล context อย่าง​สม่ำเสมอ ประสิทธิภาพ​ยิ่ง​ไม่​แน่นอน​เมื่อ input ยิ่ง​ยาว (หลักการ ไม่ใช่​ตัวเลข​เปอร์เซ็นต์)
  • Liu et al., “Lost in the Middle: How Language Models Use Long Contexts” (arXiv 2023-07-06; TACL 2024) — ประสิทธิภาพ​สูงสุด​เมื่อ​ข้อมูล​ที่​เกี่ยวข้อง​อยู่​ต้น​หรือ​ท้าย​หน้าต่าง และ​เสื่อม​ชัด​เมื่อ​จม​อยู่​กลาง

เช็กความเข้าใจ — บทที่ 5

ข้อ 1 / 3

ตามนิยามของ Anthropic compaction คืออะไร?