อย่ามองว่า LangGraph เป็นเพียง Chain ที่ยาวขึ้น

เลิกมองว่า LangGraph เป็นเพียง LangChain ที่มีขั้นตอนเพิ่มขึ้น ความผิดพลาดนี้จะนำไปสู่ Agent ที่ทำงานผิดพลาด

LangGraph ออกแบบมาสำหรับ workflow ที่ต้องการ state, การแตกกิ่ง (branches), การเรียกใช้ tool และการอนุมัติโดยมนุษย์ มันมีไว้สำหรับ agent ที่ต้องสามารถกู้คืนจากข้อผิดพลาดได้โดยไม่ต้องเริ่มใหม่ทั้งหมด

หากคุณจะใช้งาน คุณต้องกำหนด 3 สิ่งนี้ก่อน: state, interrupts และ recovery

ขอบเขตแรก: State Schema

สำหรับ prompt เดียว ขอบเขตคือข้อความ แต่สำหรับ LangGraph ขอบเขตคือ State schema คุณต้องตัดสินใจว่า:

  • field ไหนที่จะส่งผ่านระหว่าง node
  • field ไหนที่ node จะทำการอัปเดต
  • การรวมค่า (merge values) ของ branch ที่ทำงานพร้อมกันจะทำอย่างไร
  • ค่าใดบ้างที่จะถูกบันทึกลงใน checkpoint
  • ค่าใดบ้างที่ไม่ควรถูกบันทึกไว้ถาวร

Reducers มีความสำคัญมากในจุดนี้ หากคุณไม่ตั้งกฎที่เหมาะสมสำหรับการ append ข้อความ งานที่ทำแบบขนาน (parallel) ของคุณจะทำให้ข้อมูลสูญหาย

เริ่มจากจุดเล็กๆ สร้าง graph ที่มีเพียงหนึ่ง schema, หนึ่ง node และหนึ่ง reducer หากคุณยังทำให้สิ่งนี้ทำงานไม่ได้ การเพิ่ม tools เข้าไปก็มีแต่จะช่วยซ่อนข้อผิดพลาดของคุณเท่านั้น

ขอบเขตของ Runtime

ก่อนที่คุณจะเรียก compile() graph ของคุณเป็นเพียงแค่คำอธิบาย แต่หลังจาก compile() แล้ว runtime จะเข้ามาควบคุมการทำงาน

เมื่อ graph ทำงานล้มเหลว อย่าดูแค่ที่ node ให้ตรวจสอบ 4 สิ่งนี้:

  • State schema อนุญาตให้ node เขียน key นั้นหรือไม่?
  • node ส่งคืน field ของ State ที่ถูกต้องหรือไม่?
  • reducer รวมข้อมูลได้อย่างถูกต้องหรือไม่?
  • conditional edge มีเส้นทางออก (exit path) หรือไม่?

การมีมนุษย์อยู่ในกระบวนการ (Human In The Loop)

อย่ามองว่าการอนุมัติโดยมนุษย์เป็นเพียงฟีเจอร์ของ UI แต่ให้มองว่ามันคือสัญญา (contract) ของ graph

รูปแบบที่เชื่อถือได้จะเป็นดังนี้:

  • model เสนอการเรียกใช้ tool
  • graph สร้าง interrupt ขึ้นมา
  • มนุษย์อนุมัติหรือแก้ไขการกระทำนั้น
  • graph ทำงานต่อจากจุดนั้นทันที

สิ่งนี้จะทำให้ agent สามารถกู้คืนสถานะได้ แทนที่จะเป็นเพียงแค่การตอบสนอง (reactive) ไปตามสถานการณ์

รายการตรวจสอบ (Smoke Checklist) ของคุณ

ก่อนที่คุณจะนำไปใช้งานจริง (production) ให้ทดสอบดังนี้:

  • ใช้ directory ชั่วคราวที่ไม่มีข้อมูลจริง
  • กำหนด State ขั้นต่ำที่จำเป็น
  • เขียนหนึ่ง node ที่ส่งคืนเฉพาะ field ที่ถูกต้องเท่านั้น
  • ใช้ reducer สำหรับการกระทำแบบ append
  • เพิ่มหนึ่ง interrupt ก่อนการเรียกใช้ tool
  • เพิ่ม checkpointer
  • จำลองความล้มเหลวและตรวจสอบพฤติกรรมการทำงานต่อ (resume)

หากขั้นตอนนี้ล้มเหลว อย่าเพิ่งเพิ่ม tools เข้าไป ปัญหาอยู่ที่ขอบเขตของ runtime ของคุณ

LangGraph ไม่ได้มีไว้สำหรับการเรียกใช้ model เพียงครั้งเดียว (one-off) แต่จงใช้เมื่อ AI ของคุณจำเป็นต้องทำงานหลายขั้นตอนที่สามารถตรวจสอบได้ (inspectable), หยุดพักได้ (pausable) และทบทวนได้ (reviewable)

Source: https://dev.to/doramagic/do-not-treat-langgraph-as-a-longer-chain-define-state-interrupts-and-recovery-first-4n3n

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