การทำ AI Orchestration: LangChain เทียบกับ Native Code

ความเร็วเป็นสิ่งสำคัญเมื่อคุณสร้างต้นแบบ AI (prototypes) นักพัฒนาต้องการเชื่อมต่อ prompt, vector stores และโมเดลอย่างรวดเร็ว ความต้องการนี้จึงผลักดันให้มีการใช้ framework อย่าง LangChain

แต่มุมมองของผมจะเปลี่ยนไปเมื่อต้องย้ายโค้ดจากขั้นตอนการทำต้นแบบไปสู่สภาพแวดล้อมการใช้งานจริง (production) ในระดับ production คุณต้องชั่งน้ำหนักทุก dependency เทียบกับหนี้ทางเทคนิค (technical debt) คุณต้องพิจารณาเรื่องการดีบั๊ก (debugging), การบำรุงรักษา (maintenance) และการเปลี่ยนแปลงที่อาจส่งผลกระทบต่อระบบ (breaking changes)

ผมได้เปรียบเทียบสองวิธีในการสร้าง GenAI data pipelines: การใช้ Pure Native Python และ LangChain Expression Language (LCEL)

นี่คือข้อดีและข้อเสียที่ต้องแลกเปลี่ยนกัน:

แนวทางแบบ Native Python

  • ใช้ OpenAI client อย่างเป็นทางการที่มีน้ำหนักเบา
  • ช่วยลดช่องโหว่ด้านความปลอดภัย (vulnerability surface) และป้องกันปัญหาเรื่อง dependency
  • โค้ดเป็นไปตามลำดับการทำงานมาตรฐาน
  • Stack traces จะระบุบรรทัดที่เกิดข้อผิดพลาดได้อย่างแม่นยำ
  • คุณสามารถใช้ breakpoint และการทำ logging มาตรฐานได้อย่างง่ายดาย
  • คุณใช้งานผ่าน API schema ดั้งเดิมจากผู้ให้บริการโดยตรง

แนวทางแบบ LangChain

  • มีการนำ package ที่ซ้อนกันหลายชั้นเข้ามาใช้
  • การปรับใช้ในระดับองค์กรขนาดใหญ่ต้องเผชิญกับภาระในการดำเนินงาน (operational overhead) ที่มากขึ้นเพื่อดูแลรักษา dependency เหล่านี้
  • ใช้ custom pipe operator ในการประกาศ pipeline
  • สิ่งนี้ทำให้การดีบั๊กทำได้ยากขึ้น เพราะ stack traces จะลึกลงไปในโค้ดของ framework
  • ช่วยแยกคุณออกจากความเปลี่ยนแปลงของ API เฉพาะของแต่ละโมเดล
  • คุณสามารถเปลี่ยนผู้ให้บริการโมเดล เช่น จาก OpenAI เป็น Anthropic ได้โดยมีการเปลี่ยนแปลงเพียงเล็กน้อย

วิธีการเลือก:

เลือก Native หาก pipeline ของคุณเป็นธุรกรรมขั้นตอนเดียวที่เรียบง่าย หากคุณทำการแปลง text-to-JSON โดยตรง ควรทำให้ระบบของคุณเบาและตรวจสอบได้ง่ายด้วยการเขียน wrapper code ที่สะอาดตา

เลือก LangChain เมื่อความต้องการของคุณเพิ่มขึ้น หากคุณต้องการการจัดการ prompt ที่ซับซ้อน, หน่วยความจำระยะยาว (long-term memory) หรือต้องเปลี่ยนผู้ให้บริการโมเดลหลายรายอย่างรวดเร็ว framework นี้ก็คุ้มค่ากับต้นทุนที่เสียไป

เป้าหมายของเราไม่ใช่แค่การเขียนโค้ดให้น้อยลง แต่เราต้องสร้างระบบที่บำรุงรักษาได้และรองรับการขยายตัว (scale) ได้

Source: https://dev.to/ingit_bhatnagar/orchestrating-ai-langchain-framework-abstraction-vs-pure-native-code-4iec

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