จัดการบริบทเหมือนทรัพยากรอย่างหนึ่ง
บทสนทนาที่ยาวไม่ได้ไม่มีต้นทุน เมื่อเธรดยาวขึ้นเรื่อย ๆ คำสั่งก่อนหน้าจะถูกฝังลึกลงไป โมเดลจะพึ่งพาข้อความล่าสุดมากขึ้น และรายละเอียดที่คุณพูดไว้เมื่อยี่สิบรอบก่อนก็จะค่อย ๆ หมดความสำคัญไปอย่างเงียบ ๆ ลองนึกภาพหน้าต่างบริบท () เป็นกล่องขนาดคงที่: เมื่อบทสนทนาโตขึ้น กล่องก็เต็มขึ้น และคำสั่งแรกสุดของคุณก็จะถูกดันไปอยู่ก้นกล่องที่โมเดลให้ความสนใจน้อยที่สุด:
early turn long conversation
┌──────────────┐ ┌──────────────┐
│ SPEC (clear) │ │ chatter │ ◀ recent (heeded)
│ │ │ chatter │
│ │ │ fix attempt │
│ │ │ old code v3 │
│ │ ───▶ │ old code v2 │
│ │ ├──────────────┤
│ │ │ SPEC (buried)│ ◀ ignored
└──────────────┘ └──────────────┘
│ XXXXXXXXXXXX │ ◀ pushed out
└──────────────┘
ปฏิบัติกับหน้าต่างบริบทเหมือนพื้นที่ทำงานที่คุณมีหน้าที่ดูแลให้สะอาด ไม่ใช่หน่วยความจำที่ไม่มีวันหมด
นิสัยไม่กี่อย่างที่ช่วยได้:
- ทวนสเปกใหม่เมื่อคุณเปลี่ยนทิศทาง อย่าสมมติว่าข้อกำหนดจากสิบข้อความก่อนหน้ายังใช้ได้อยู่ สรุปเป้าหมายปัจจุบันเป็นย่อหน้าสั้น ๆ แล้วให้ AI ทำงานจากตรงนั้น
- เริ่มบทสนทนาใหม่สำหรับปัญหาใหม่ เมื่อคุณเปลี่ยนจากโค้ดระบบล็อกอินไปเป็นบั๊ก CSS (Cascading Style Sheets — ภาษาที่ควบคุมหน้าตาของหน้าเว็บ) ให้เปิดบทสนทนาใหม่ การลากบริบทที่ไม่เกี่ยวข้องติดไปด้วยจะทำให้โมเดลแย่ลง ไม่ใช่ดีขึ้น
- วางโค้ดปัจจุบัน ไม่ใช่ประวัติศาสตร์ ถ้าฟังก์ชันหนึ่งเปลี่ยนไปแล้วห้าครั้ง AI ไม่ต้องการเวอร์ชันเก่าทั้งห้า — มันต้องการเวอร์ชันที่มีอยู่ตอนนี้ ให้สถานะปัจจุบันและการเปลี่ยนแปลงถัดไปแก่มัน
- เก็บแหล่งความจริงสั้น ๆ ไว้นอกแชท สำหรับงานที่ยาวขึ้น ไฟล์เพียงไม่กี่บรรทัด ("สแตก การตัดสินใจสำคัญ อะไรเสร็จแล้ว อะไรต้องทำต่อ") ช่วยให้คุณเริ่มบทสนทนาใหม่ได้ในไม่กี่วินาที แทนที่จะต้องไล่สร้างมันขึ้นมาใหม่จากการเลื่อนย้อนกลับ
เป้าหมายคือสิ่งเดียวกับที่วิ่งอยู่ตลอดทั้งบทนี้: ทุกขณะ AI ควรทำงานจากภาพที่ถูกต้องและกระชับของงาน — ไม่ใช่บทสนทนายาวเหยียดที่ต้องเดาทางเอาเอง