ประวัติการสนทนา
การสนทนายาว ๆ ต้องชนกำแพงแข็งทื่อ นั่นคือหน้าต่างบริบทของโมเดล ทุกอย่างในหน้านี้มีอยู่เพราะกำแพงนั้น และส่วนที่น่าสนใจคืออะไรที่ถูกทิ้ง อะไรที่ถูกเก็บไว้ และอะไรที่เอากลับคืนมาได้
สี่วิธีเรียกคืนบริบท
หัวข้อที่มีชื่อว่า “สี่วิธีเรียกคืนบริบท”สิ่งเหล่านี้ไม่ใช่ตัวเลือกที่แทนกันได้เสียทีเดียว หากเป็นบันไดที่เรียงจากวิธีที่ถูกที่สุดก่อน
| กลไก | ต้นทุน | เก็บไว้ | สูญเสีย |
|---|---|---|---|
| การตัดทอน | ไม่มี | ทุกคำของเรื่องเล่า | ผลลัพธ์เครื่องมือเก่าที่ไม่มีอะไรเกิดขึ้น |
| การทิ้งภาพ | ไม่มี | ข้อความรอบ ๆ ภาพเหล่านั้น | ภาพหน้าจอเก่า |
| สแนปช็อต | ไม่มี | ทุกคำ ในรูปพิกเซล | ความอ่านออกของโมเดลที่ไม่รองรับภาพ |
| การสรุป | เรียกโมเดลหนึ่งครั้ง | เรื่องเล่าหนึ่งเรื่อง | รายละเอียดที่มันไม่ได้เลือกไว้ |
การตัดทอนและการทิ้งภาพทำงานก่อน เพราะไม่มีต้นทุนและไม่สูญเสียในแบบที่สำคัญ นั่นคือมันตัดทิ้งปริมาณมากที่ไม่มีใครตั้งใจจะกลับมาอ่านซ้ำ
ทำไมการสรุปจึงเป็นทางเลือกสุดท้าย
หัวข้อที่มีชื่อว่า “ทำไมการสรุปจึงเป็นทางเลือกสุดท้าย”การสรุปเป็นวิธีเดียวในสี่วิธีที่ ต้องเรียกโมเดลหนึ่งครั้ง และเป็นวิธีเดียวที่ ตัดสินแทนคุณ ว่าอะไรสำคัญ ทั้งสองอย่างเป็นต้นทุนจริง ๆ ที่น่าสนใจกว่าคือการเรียกโมเดล เพราะจังหวะที่มันเกิดขึ้น
โดยปกติการย่อจะทำงาน ล่วงหน้า ก่อนถึงกำแพง ด้วยเกณฑ์ที่ตั้งไว้ แต่มันยังทำงานแบบตอบสนอง หลังเกิดเหตุ เมื่อผู้ให้บริการเองปฏิเสธคำขอว่าใหญ่เกินไป — การประเมินแบบฮิวริสติกนับต่ำกว่าที่ผู้ให้บริการวัดได้จริง ในสถานการณ์นั้นตัวย่อที่ใช้การสรุปต้องส่งคำขอเพื่อย่อบริบท และคำขอที่มันส่งก็คือคำขอที่เพิ่งล้นไปหมาด ๆ
สแนปช็อต
หัวข้อที่มีชื่อว่า “สแนปช็อต”การย่อแบบสแนปช็อตเรนเดอร์ประวัติที่ถูกทิ้งลงบนหน้าหนาแน่นด้วยอักขระพิกเซล แล้วส่งกลับคืนมาเป็นรูปภาพ
หลักคิดตั้งอยู่บนความแปลกของการคิดค่าบริการ โมเดลที่มองเห็นภาพคิดค่าบริการต่อภาพในอัตราคงที่หรือตามพื้นที่ ซึ่งไม่เกี่ยวเลยกับจำนวนอักขระในภาพ บทสนทนาที่ถูกทิ้งไป 12,000 อักขระมีต้นทุนเท่ากับโทเคนข้อความ 12,000 อักขระ แต่อักขระชุดเดียวกันที่เรนเดอร์ลงหนึ่งหน้าคิดเป็นภาพเดียว
สิ่งที่ทำให้วิธีนี้น่าใช้ ไม่ใช่แค่เก๋ คือมันไม่ต้องเรียกโมเดล ไม่ต้องใช้คีย์ และไม่ต้องต่อเครือข่าย มันเป็นกลยุทธ์เดียวที่พร้อมใช้เสมอเมื่อต้องกู้คืนจากภาวะล้นบริบท
รูปร่างของการประกอบกลับคืนคือส่วนหัวแบบคำต่อคำ ส่วนกลางเป็นภาพ และส่วนท้ายแบบคำต่อคำ ส่วนหัวคือโจทย์และข้อจำกัดที่ทุกอย่างถัดจากนั้นอ้างกลับมาถึง ส่วนท้ายคือจุดที่งานอยู่ปัจจุบัน ส่วนกลางคือส่วนที่ถูกอ่านซ้ำน้อยที่สุดและมีต้นทุนสูงสุด
สแนปช็อตถูกเรนเดอร์ใหม่จาก ข้อความต้นทางที่ยังเก็บไว้ ทุกครั้งที่ย่อ ไม่เคยเรนเดอร์จากพิกเซลของรอบก่อนหน้า การถ่ายภาพซ้ำจากภาพเดิมจะทำให้อักขระด้อยลงหนึ่งรุ่นต่อการย่อหนึ่งครั้ง จนไม่มีอะไรอ่านออก
การรันกลับมาทำต่อจากอะไรจริง ๆ
หัวข้อที่มีชื่อว่า “การรันกลับมาทำต่อจากอะไรจริง ๆ”ในอดีต ทุกครั้งที่ฮาร์เนสรันจะเริ่มจากประวัติว่างเปล่า และสร้างความต่อเนื่องขึ้นใหม่จากบล็อก <context> ในพรอมต์ — ซึ่งเป็น บทสรุป ของบทสนทนา ไม่ใช่ตัวบทสนทนาเอง สามสิ่งตามมาจากการออกแบบนั้น
- การทำต่อคือการเล่าใหม่ โมเดลไม่เคยเห็นการให้เหตุผลก่อนหน้าของตัวเอง หรือไบต์จริงที่เครื่องมือส่งคืน มีเพียงคำอธิบายของสิ่งเหล่านั้น
- การย้อนกลับตายไปพร้อมโปรเซส
checkpointเป็นดัชนีชี้เข้าสู่รายการข้อความที่ยังมีชีวิต การรีสตาร์ตจึงทำป้ายทุกป้ายที่โมเดลตั้งไว้หายไป - การลองใหม่แยกไม่ออกระหว่าง “ไม่มีอะไรให้ลองใหม่” กับ “ไม่มีอะไรถูกโหลด” หลังรีสตาร์ต เทิร์นที่ล้มเหลวหายไปจากสถานะที่มีชีวิตไม่ว่าจะกรณีใด
ทั้งสามข้อแก้ได้ด้วยการเก็บทรานสคริปต์ลงดิสก์ มันถูกบันทึกที่ ขอบเขตของเทิร์น ทุกครั้ง และไม่เคยบันทึกกลางเทิร์น ประวัติที่ถูกจับระหว่างการเรียกเครื่องมือกับผลลัพธ์ของมันคือประวัติที่ไม่มีผู้ให้บริการรายใดยอมรับ การพังในจังหวะนั้นจึงกู้คืนเทิร์น ก่อนหน้า แทนที่จะเป็นครึ่งเทิร์นที่เล่นซ้ำไม่ได้
การรันที่ทำต่อจะถูกตัดให้เหลือเฉพาะข้อความใหม่สุด โดยตัดตรงขอบเขตที่ไม่ใช่ผลลัพธ์เครื่องมือที่ไร้คู่ — ผลลัพธ์ที่การเรียกของมันถูกตัดทิ้งไปคือคำขอที่ผู้ให้บริการปฏิเสธทันที และทรานสคริปต์ที่ส่งไม่ได้ก็แย่กว่าทรานสคริปต์สั้น ๆ
ต้นไม้เซสชัน
หัวข้อที่มีชื่อว่า “ต้นไม้เซสชัน”ทุกข้อความบันทึกว่ามันต่อจากข้อความใด และทุกบทสนทนาระบุ ปลายสาขา ปัจจุบันของตัวเอง การตัดสินใจเพียงข้อเดียวนี้คือคุณสมบัติทั้งหมด
การแยกสาขาไม่เขียนอะไรเลย มันแค่เลื่อนตัวชี้ เส้นทางที่คุณจากมายังอยู่ตรงนั้น การสลับกลับจึงเป็นการเลื่อนตัวชี้อีกครั้ง ไม่ใช่การกู้คืน — และการแก้พรอมต์เพื่อรันใหม่ก็ไม่ต้องแลกกับคำตอบที่คุณกำลังเทียบอยู่
ถ้าไม่มีมัน การย้อนกลับทุกรูปแบบต้องซ่อนหรือลบข้อความ และการซ่อนคือคำโกหกที่ผู้อ่านคนถัดไปมองไม่ออก
สาขากับการแยก
หัวข้อที่มีชื่อว่า “สาขากับการแยก”| สาขา | การแยก | |
|---|---|---|
| สิ่งที่เกิดขึ้น | ตัวชี้เลื่อน | เส้นทางถูกคัดลอก |
| ไปที่ไหน | บทสนทนาเดิม | บทสนทนาใหม่ |
| ต้นทุน | ไม่มี | สำเนาสาขาหนึ่งชุด |
การแยกคัดลอกด้วย id ใหม่ แทนที่จะใช้แถวร่วมกัน บทสนทนาสองอันที่ใช้แถวร่วมกันจะเห็นข้อความถัด ๆ ไปของกันและกัน ซึ่งเป็นสิ่งเดียวที่การแยกต้องไม่ทำ
การย้อนกลับใช้ตัวชี้เดียวกัน
หัวข้อที่มีชื่อว่า “การย้อนกลับใช้ตัวชี้เดียวกัน”คู่ checkpoint / rewind ระหว่างการรันทำเครื่องหมายขอบเขตเทิร์นที่สะอาดไว้ แล้วกลับมาที่จุดนั้นหลังการสำรวจ โดยเก็บไดเจสต์ไว้ เพราะ checkpoint ถูกเก็บลงดิสก์เคียงข้างทรานสคริปต์ ป้ายที่โมเดลตั้งไว้ก่อนรีสตาร์ตจึงยังลงตรงจุดที่ตั้งไว้จริง checkpoint ที่เป้าหมายไม่รอดจากการตัดจะถูก ทิ้ง ไม่ใช่ถูกปรับเข้าหาจุดใกล้เคียง — การย้อนกลับ “ไปที่ป้าย” แล้วไปลงที่อื่นคือความล้มเหลวแบบเดียวกับที่การมีป้ายอยู่มีไว้เพื่อป้องกัน
เรื่องที่เกี่ยวข้อง
หัวข้อที่มีชื่อว่า “เรื่องที่เกี่ยวข้อง”- แยกสาขาการสนทนา — ตัวนำทางต้นไม้ การแยกสาขา และการนำออก
- บริบทเครื่องมือและการแคชพรอมต์ — อีกครึ่งหนึ่งของสิ่งที่เติมเต็มหน้าต่างบริบท
- คำสั่งสแลช —
/compact,/shake,/context,/tree