Coding Agent ของผมจำได้แค่เซสชัน แต่จำงานไม่ได้
Coding agent สามารถรักษาบทสนทนาให้ต่อเนื่องได้ แต่ก็ยังให้ความรู้สึกเหมือนขี้ลืมอยู่ดี
ผมเจอปัญหานี้ตอนกำลังสร้าง CliGate ผมแก้ไขเรื่องความต่อเนื่องของเซสชัน (session continuity) แล้ว แต่การทำงานซ้ำๆ ก็ยังช้าเกินไปอยู่ดี
ตัว agent จำบทสนทนาได้ แต่จำ "งาน" ไม่ได้
ความต่อเนื่องของเซสชันช่วยแก้ปัญหาหนึ่งได้ มันช่วยในเรื่องคำสั่งต่อเนื่อง เช่น:
- continue
- ทำแบบเดียวกันกับไฟล์นี้
- ลองใหม่อีกครั้ง
นั่นมีประโยชน์ แต่มันไม่ได้ช่วยอะไรเลยเมื่อคุณต้องทำ workflow เดิมซ้ำอีกครั้งในอีกไม่กี่วันต่อมา
Agent จำเป็นต้องระลึกได้ว่าอะไรที่ทำให้การทำงานครั้งล่าสุดสำเร็จ มันจำเป็นต้องรู้ว่า:
- ปุ่มไหนใช้งานได้
- ขั้นตอนไหนที่เป็นทางตัน
- ฟิลด์ไหนที่ต้องจัดการเป็นพิเศษ
- กฎข้อไหนที่คุณต้องการให้ใช้เสมอ
การรันครั้งแรกนั้นมี "ต้นทุน" สูงที่สุด เพราะเป็นช่วงที่ agent ต้องสำรวจและค้นหารายละเอียดที่ไม่ได้ระบุไว้ใน prompt ของคุณ
ก่อนที่ผมจะแก้ไข รายละเอียดเหล่านี้จะอยู่ใน raw logs เท่านั้น ตัว agent มีประวัติการคุย (history) แต่ไม่มีหน่วยความจำที่นำกลับมาใช้ใหม่ได้ (reusable memory) มันจึงต้องค้นพบทุกอย่างใหม่ทุกครั้ง
นั่นไม่ใช่ความฉลาด แต่มันคือการต้องจ่ายค่าเสียเวลาในการ debug ซ้ำสองรอบ
วิธีที่ผิดคือการพยายามบันทึกประวัติให้มากขึ้นแล้วหวังว่าโมเดลจะนำไปใช้ แต่นั่นจะสร้าง noise (ข้อมูลขยะ) ขึ้นมาแทน
ผมจึงสร้าง memory layer ขนาดเล็กที่นำกลับมาใช้ใหม่ได้ขึ้นมาแทน โดยเน้นไปที่:
- procedures (ขั้นตอนการทำงาน)
- facts (ข้อเท็จจริง)
- directives (คำสั่ง)
- references (การอ้างอิง)
ผมเลิกพยายามบันทึกทุกอย่างที่เกิดขึ้น แต่เริ่มบันทึกเฉพาะสิ่งที่ "ควรค่าแก่การจดจำ"
ตอนนี้ assistant ใช้ memory layer แบบอิงไฟล์ (file-based) เพื่อระลึกถึง:
- a procedure: ขั้นตอนการทำงานที่ดีที่สุดและทางตันที่เคยเจอ
- a fact: URL หรือการตั้งค่าเฉพาะเจาะจง
- a directive: วิธีที่คุณต้องการให้งานดำเนินไป
- a reference: แหล่งที่อยู่ของเอกสารประกอบ (documentation)
นี่คือวิธีที่มนุษย์ทำงาน
ผมไม่ได้ต้องการการเล่นซ้ำอดีตที่สมบูรณ์แบบ เพราะอินเทอร์เฟซมีการเปลี่ยนแปลงและปุ่มต่างๆ ก็ย้ายที่ได้ ผมต้องการให้ agent:
- ระลึกถึงขั้นตอนการทำงานที่ดีที่สุดที่เคยรู้
- ลองทำตามนั้นก่อน
- ตรวจสอบแต่ละขั้นตอน
- กลับไปใช้วิธีการสำรวจใหม่หากล้มเหลว
- อัปเดตหน่วยความจำหลังจากทำสำเร็จ
สิ่งนี้เปลี่ยนระบบอัตโนมัติที่เปราะบาง ให้กลายเป็นหน่วยความจำในการปฏิบัติงานที่มีประโยชน์
ผมยังแยกกฎที่ต้องใช้ตลอดเวลา (standing rules) ออกจากประวัติการสนทนาด้วย กฎอย่างเช่น "ตอบเป็นภาษาจีนเสมอ" หรือ "ห้ามแตะต้องข้อมูล production" ไม่ใช่บริบทของเซสชัน (session context) แต่มันคือ กฎการปฏิบัติงาน (operating rules)
เมื่อผมแยกสิ่งเหล่านี้ออกจากกัน assistant ก็เริ่มคาดเดาได้ มันไม่ต้องเสียเวลาค้นหาความต้องการของคุณใหม่ในระหว่างที่กำลังทำงาน
งานที่ต้องทำซ้ำสั้นลงกว่าเดิม assistant ทำงานได้เร็วขึ้นเพราะมันไม่ต้องเริ่มจากโมเดลที่ว่างเปล่าทุกครั้ง
อย่าสับสนระหว่างการมีบทสนทนาที่ต่อเนื่อง กับระบบที่สามารถเรียนรู้ได้
เซสชันช่วยให้บทสนทนาดำเนินต่อไปได้ หน่วยความจำช่วยให้บทเรียนที่มีประโยชน์คงอยู่
หากคุณกำลังสร้าง coding agent ลองถามตัวเองดูว่า: ระบบของคุณกำลังจำแค่บทสนทนา หรือกำลังจำขั้นตอนการทำงานที่ประสบความสำเร็จกันแน่?
Source: https://dev.to/codekingai/my-coding-agent-remembered-sessions-not-work-that-was-the-bug-2fig
