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:

  1. ระลึกถึงขั้นตอนการทำงานที่ดีที่สุดที่เคยรู้
  2. ลองทำตามนั้นก่อน
  3. ตรวจสอบแต่ละขั้นตอน
  4. กลับไปใช้วิธีการสำรวจใหม่หากล้มเหลว
  5. อัปเดตหน่วยความจำหลังจากทำสำเร็จ

สิ่งนี้เปลี่ยนระบบอัตโนมัติที่เปราะบาง ให้กลายเป็นหน่วยความจำในการปฏิบัติงานที่มีประโยชน์

ผมยังแยกกฎที่ต้องใช้ตลอดเวลา (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