ทำไมคุณไม่ควรเปิดการเชื่อมต่อ DB ค้างไว้ระหว่างการเรียกใช้งาน LLM
ความหน่วง (Latency) ของ AI ไม่ได้มีแค่เวลาที่โมเดลใช้ในการประมวลผลเท่านั้น แต่ยังรวมถึงวิธีการที่คุณจัดการกับการเชื่อมต่อฐานข้อมูลด้วย
การถือครองการเชื่อมต่อ DB ไว้ในขณะที่รอ LLM หรือ Embedding API สามารถทำให้ Connection Pool ของคุณหมดลงได้ การเรียกใช้งานภายนอกที่ล่าช้าจะทำให้ Session เปิดค้างไว้นานเกินความจำเป็น
ผมได้เข้าไปดูใน repo ของ Honcho เพื่อดูวิธีแก้ไขของพวกเขา พวกเขาเปลี่ยนจากการใช้ session เดียวที่เปิดค้างไว้นาน มาเป็นการใช้ session สั้นๆ ที่เจาะจงตามแต่ละงานแทน
รูปแบบเดิม
- เปิด DB session
- อ่านการตั้งค่าผู้ใช้
- เรียกใช้งาน LLM (ช้า)
- เรียกใช้งาน Embedding API (ช้า)
- บันทึกผลลัพธ์
- ปิด DB session
รูปแบบใหม่
- เปิด DB session เพื่อตรวจสอบความพร้อม (pre-flight checks)
- อ่านค่าที่จำเป็นลงในตัวแปร
- ปิด DB session
- เรียกใช้งาน LLM และ Embedding APIs (โดยไม่ถือครองการเชื่อมต่อ DB)
- เปิด DB session ใหม่แบบสั้นๆ เพื่อบันทึกผลลัพธ์
- ปิด DB session
เป้าหมายไม่ใช่การเลิกใช้ฐานข้อมูล แต่คือการแยกความสอดคล้องของธุรกรรม (Transaction Consistency) ออกจากการรอคอยเครือข่าย
5 ขั้นตอนในการจัดการการเชื่อมต่อของคุณ
- กำหนดขอบเขตความสอดคล้อง (Consistency boundaries) ของคุณ
- ดึงค่าที่จำเป็นทั้งหมดลงในตัวแปร ก่อนที่จะมีการเรียกใช้งาน API ภายนอกใดๆ
- ปิดขอบเขตการทำงานของฐานข้อมูล (Database scope)
- ดำเนินการงานภายนอกที่ล่าช้า
- เปิดขอบเขตการเขียน (Write scope) ใหม่แบบสั้นๆ เพื่อบันทึกผลลัพธ์สุดท้าย
หมายเหตุ: หากคุณใช้ pgvector การค้นหาจะทำงานภายในฐานข้อมูล ดังนั้นคุณต้องเปิด session ค้างไว้ในระหว่างการทำงานนั้น
การลดระยะเวลาของ session ช่วยเพิ่มความสามารถในการขยายระบบ (Scaling) แต่ต้องระวังข้อผิดพลาดประเภท detached-object ใน ORM ของคุณ และตรวจสอบให้แน่ใจว่าข้อมูลยังคงมีความสอดคล้องกันผ่าน transaction snapshots
Source: https://dev.to/junhyun-dev/neurin-llm-hocul-jung-db-connectioneul-jabji-anhneun-iyu-3abg
Optional learning community: https://t.me/GyaanSetuAi
