ผมพยายามจะเพิ่ม AI Chat ลงในแอปของผม แต่ก็ไปเจอทางตัน
ผมพยายามจะเพิ่ม AI chat assistant ลงในเครื่องมือจัดการโปรเจกต์ของผม ผมคิดว่ามันคงจะง่าย ผมวางแผนที่จะส่งประวัติการแชททั้งหมดไปยัง API
แต่มันล้มเหลว
หลังจากผ่านไป 15 ข้อความ การตอบกลับก็เริ่มช้าลงหรือเกิดข้อผิดพลาด API แจ้งข้อผิดพลาดเนื่องจากข้อความยาวเกินขีดจำกัดของ token
นี่คือสิ่งที่ผมได้ลองทำและสิ่งที่ได้ผล
ปัญหาที่ผมพบ:
- การตัดประวัติการแชท (Truncating history): ผมเก็บไว้เพียงไม่กี่ข้อความล่าสุด วิธีนี้ช่วยเรื่องความเร็ว แต่ AI ก็ลืมทุกอย่างที่คุยกันมาตั้งแต่ต้น
- การสรุปความ (Summarization): ผมให้ AI สรุปการสนทนาทุกๆ 5 ข้อความ วิธีนี้ช่วยเรื่องความจำ แต่ก็ทำให้ค่าใช้จ่ายและระยะเวลาในการรอเพิ่มสูงขึ้น
- Vector stores: ผมพยายามให้คะแนนข้อความตามความเกี่ยวข้อง แต่มันเพิ่มความซับซ้อนมากเกินไปสำหรับความต้องการของผม
วิธีแก้ไข:
ผมเลิกพยายามที่จะส่งข้อมูลทั้งหมดไป ผมใช้วิธีหลักๆ 2 วิธีเพื่อปรับปรุงประสบการณ์การใช้งาน
Streaming: ผมใช้ Server-Sent Events เพื่อแสดงข้อความในขณะที่กำลังถูกสร้างขึ้น วิธีนี้ทำให้แอปดูเหมือนทำงานเร็ว แม้ว่า AI จะต้องใช้เวลาในการประมวลผลก็ตาม
หน้าต่างบริบทแบบสามส่วน (A Three-Slot Context Window): ผมแบ่งงบประมาณ token ออกเป็นส่วนๆ ที่เฉพาะเจาะจง
- System Prompt: 500 tokens ส่วนนี้จะคงที่เสมอ
- Dynamic Context: 2000 tokens ส่วนนี้จะเก็บข้อมูลอัปเดตโปรเจกต์และสถานะของงานล่าสุด
- Conversation History: 4000 tokens ส่วนนี้คือหน้าต่างแบบเลื่อน (sliding window) ของข้อความล่าสุด
ด้วยการจัดการงบประมาณในลักษณะนี้ ผมสามารถลดขนาด payload ลงได้ถึง 40% ซึ่งช่วยประหยัดค่าใช้จ่ายและลดความหน่วง (latency) ลงได้
คำแนะนำของผม:
การเพิ่ม AI ไม่ใช่แค่การเรียกใช้ API เท่านั้น คุณต้องจัดการปริมาณข้อมูลที่จะส่งด้วย การทำ Streaming ช่วยให้ผู้ใช้รู้สึกถึงความเร็ว ส่วนกลยุทธ์การจัดการบริบท (context strategy) ที่ชาญฉลาดจะช่วยให้ AI ดูฉลาดขึ้น
คุณจัดการหน่วยความจำการสนทนาในแอปของคุณอย่างไร? คุณใช้ sliding windows หรือการสรุปความ (summarization)?
Optional learning community: https://t.me/GyaanSetuAi