ฐานความรู้ที่อัปเดตตัวเองได้สำหรับ Terminal AI

ผมใช้เวลาส่วนใหญ่ในแต่ละวันอยู่ใน terminal พร้อมกับผู้ช่วยเขียนโค้ด AI

บ่อยครั้งที่ผมแก้ปัญหาที่ยากๆ ระหว่างเซสชัน ผมเจอวิธีแก้ที่ซับซ้อนหรือการตั้งค่าคอนฟิกเฉพาะอย่าง แต่พอปิดแท็บไป ความรู้นั้นก็หายวับไปเลย เดือนต่อมา ผมก็ต้องมาแก้ปัญหาเดิมซ้ำอีกครั้ง

ผมจึงสร้างระบบขึ้นมาเพื่อให้ผู้ช่วยของผมจดบันทึกด้วยตัวเองโดยใช้ Claude Code hooks

ระบบนี้ประกอบด้วยสามส่วน:

  • ค้นหาฐานความรู้ Markdown ขนาดเล็กในทุกๆ prompt เพื่อให้บริบท (context)
  • บันทึกโน้ตที่มีประโยชน์เมื่อจบเซสชัน
  • โหลดดัชนี (index) เมื่อเริ่มเซสชัน

นี่คือวิธีสร้างระบบนี้โดยไม่ทำให้เวิร์กโฟลว์ของคุณช้าลง

1. ใช้ UserPromptSubmit สำหรับการดึงข้อมูล (retrieval)

hook นี้จะทำงานทุกครั้งที่คุณส่ง prompt โดยจะรับข้อความของคุณและสามารถฉีด (inject) บริบทเข้าไปก่อนที่โมเดลจะตอบกลับ

อย่าปล่อยให้โมเดลตัดสินใจเองว่าจะดูโน้ตเมื่อไหร่ ให้ใช้การค้นหาที่รวดเร็วอย่าง grep เพื่อหาไฟล์ที่เกี่ยวข้อง และฉีดเฉพาะผลลัพธ์ที่ตรงที่สุด 5 อันดับแรก วิธีนี้จะช่วยให้กระบวนการทำงานเสร็จสิ้นภายในเวลาไม่เกิน 100ms

กฎสองข้อสำหรับ search hooks:

  • เน้นประหยัด: ใช้ grep แทน LLM สำหรับการค้นหาในขั้นแรก
  • เน้นความคล่องตัว: ฉีดเฉพาะชื่อหัวข้อและเส้นทางไฟล์ (file paths) เท่านั้น หากโมเดลต้องการรายละเอียดเพิ่ม มันสามารถเปิดไฟล์เองได้

2. หลีกเลี่ยงการใช้ Stop hook สำหรับงานหนัก

Stop hook จะทำงานทุกครั้งที่ผู้ช่วยตอบกลับเสร็จสิ้น หากคุณรันงานที่ใช้เวลานานในส่วนนี้ ผู้ช่วยของคุณจะทำงานช้าลง เซสชันที่มีการโต้ตอบ 30 ครั้ง จะไปกระตุ้นงานหนักถึง 30 งาน

แทนที่จะทำแบบนั้น ให้ใช้ SessionEnd เพื่อบันทึกข้อมูลทั้งเซสชันเพียงครั้งเดียว

3. แก้ปัญหาข้อจำกัดของ SessionEnd

SessionEnd เป็นแบบ non-blocking หากคุณเริ่มงานเบื้องหลัง (background task) ที่ใช้เวลานานในส่วนนี้ ระบบอาจจะสั่งปิดงานนั้นเมื่อเซสชันสิ้นสุดลง

วิธีแก้คือการใช้ hook สองตัว:

  • SessionEnd: เพิ่มเส้นทางของ transcript ลงในไฟล์คิว (queue file) อย่างรวดเร็ว
  • SessionStart: ดึงข้อมูลจากคิวนั้นออกมา แล้วรันงานบันทึกข้อมูลที่หนักหน่วงในเบื้องหลัง

เนื่องจากเซสชันถัดไปกำลังทำงานอยู่ กระบวนการเบื้องหลังจึงจะยังคงทำงานต่อไปได้

4. ป้องกันการเกิด loop ไม่สิ้นสุด

เมื่อคุณสั่งรัน headless AI เพื่อเขียนโน้ต มันจะรับสืบทอดสภาพแวดล้อม (environment) ของคุณมาด้วย ซึ่งหมายความว่า AI ตัวใหม่จะไปกระตุ้น hook ของตัวมันเอง และทำให้เกิด loop ของการเรียกใช้งาน AI อย่างไม่สิ้นสุด

ให้เพิ่ม recursion guard ไว้ที่ส่วนบนสุดของสคริปต์เสมอ:

[ -n "$KB_CAPTURE" ] && exit 0

ตั้งค่า KB_CAPTURE=1 เมื่อคุณเริ่มรันงานบันทึกข้อมูลในเบื้องหลัง

สรุปการตั้งค่า:

  • ใช้ UserPromptSubmit เพื่อฉีดบริบทได้ทันที
  • ใช้ SessionEnd เพื่อนำงานเข้าคิว
  • ใช้ SessionStart เพื่อรันงานจริง
  • ใช้โมเดลราคาถูกในการสรุปโน้ตเพื่อประหยัดค่าใช้จ่าย

การไม่ต้องกลับมาแก้ปัญหาเดิมซ้ำเพียงครั้งเดียว ก็คุ้มค่ากว่าการรันงานบันทึกข้อมูลหลายครั้งแล้ว

Source: https://dev.to/just_an_electron/a-self-updating-knowledge-base-for-my-terminal-ai-assistant-claude-code-hooks-28jb

Optional learning community: https://t.me/GyaanSetuAi