Videos Custom Postgres Checkpointer using LangGraph

Description

Delve into the world of AI application development with Will, founder of Reacthor, as he guides you through building custom workflows using LangChain and LangGraph. Learn how these powerful tools can be leveraged to create sophisticated AI applications, particularly focusing on the innovative concept of a custom PostgreSQL checkpointer. Will shares practical insights and real-world examples, including a case study with Salary Hero, showcasing how LangChain and LangGraph can be used to address complex challenges in a production environment. Discover how these technologies can empower your AI development journey and unlock new possibilities for building intelligent and efficient applications.

Chapters

  • Introduction and Overview of Custom AI Workflows 0:00
  • LangChain vs. Traditional SDKs: Key Differences and Benefits 0:51
  • Introducing LangGraph: A Powerful Tool for Building AI Applications 2:40
  • Real-World Example: Building a Travel Agent with LangGraph 3:53
  • Understanding Checkpointers: Saving State in LangGraph Applications 7:51
  • How Checkpointers and Postgres Work Together in LangGraph 9:14
  • Case Study: Salary Hero - Automating Customer Support with LangGraph 11:36
  • Different Architectures for Building AI Agents with LangChain 14:48
  • Conclusions 17:47

Transcript

คำบรรยายต่อไปนี้อาจไม่ถูกต้องทั้งหมด หากคุณพบข้อผิดพลาดใดๆ คุณสามารถช่วยแก้ไขข้อผิดพลาดได้บน GitHub

Introduction and Overview of Custom AI Workflows0:00

สวัสดีครับทุกคน วันนี้ผมจะมาพูดถึง การใช้ PostgreSQL checkpointer แบบกำหนดเองด้วย LangGraph มันอาจจะฟังดูซับซ้อนหน่อย แต่ผมจะพยายามอธิบาย ให้เข้าใจง่ายๆ ว่ามันทำงานยังไง และวิธีการบันทึกข้อมูลในแอปพลิเคชัน AI ไปสไลด์ต่อไปได้เลยครับ ผมชื่อวิล เป็นผู้ก่อตั้ง Reacthor เราช่วยบริษัทต่างๆ สร้าง AI workflows ในเอเชียตะวันออกเฉียงใต้ และในสหรัฐอเมริกา ปัจจุบันเรามีลูกค้า

สองรายในเอเชียตะวันออกเฉียงใต้ และหนึ่งรายในสหราชอาณาจักร ผมจะเล่าให้ฟังเพิ่มเติมเกี่ยวกับการ deploy แอป การสร้างแอปพลิเคชันของคุณเอง โดยเฉพาะใน production ที่ใช้ AI ในภายหลัง แต่ก่อนอื่นเราจะมาพูดถึง

LangChain vs. Traditional SDKs: Key Differences and Benefits0:51

วิธีการทำงานของ LangChain กันก่อน ก่อนที่ผมจะเริ่ม มีใครเคยใช้ LangChain ใน production บ้างไหมครับ แค่ทดสอบ หรือ LangChain? ไม่มี ไม่เคยเลย โอเค เยี่ยมมาก

ไปสไลด์ต่อไปได้เลยครับ เรื่องแรกคือ พวกเขาใช้ SDK จาก OpenAI เพื่อ

เรียกใช้งาน LLM และ

พวกเขามี prompt ที่เฉพาะเจาะจง, มี LLM, และได้ output ออกมา ซึ่งความแตกต่างระหว่าง การใช้ SDK กับการใช้ LangChain คือ คุณมี components หลายประเภทที่สามารถใช้เป็นเครื่องมือได้ ตัวอย่างเช่น คุณสามารถใช้ tools ที่ มีคนสร้างไว้แล้ว เช่น การค้นหาบนเว็บ คุณสามารถใช้ tools เพื่อ หาข้อมูลที่ทันเหตุการณ์ เช่นสภาพอากาศ หรือคุณสามารถสร้าง tools เองสำหรับการคำนวณ ผมจะอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับประเภทของ tools ที่คุณสามารถ ใช้ใน production ได้ แต่คุณยังสามารถใช้เทคนิค RAG สำหรับ

การดึงข้อมูล และคุณยังสามารถ

ใช้ประวัติการแชทของคุณเมื่อคุณกำลังโต้ตอบ กับแอป LLM ของคุณ ตัวอย่างเช่น หลายครั้งที่คุณใช้ SDK

มันไม่มีความสามารถในการบันทึกความจำได้ ดังนั้น LangChain จึงมีความสามารถ ในการบันทึก memory ของคุณและดึงข้อมูลจากมัน มีใครเคยใช้ LangGraph บ้างไหมครับ? ไม่มี โอเค แน่นอน ถ้าคุณไม่เคยใช้ LangChain คุณก็คง ไม่เคยใช้ LangGraph ไปสไลด์ต่อไปได้เลยครับ

Introducing LangGraph: A Powerful Tool for Building AI Applications2:40

LangGraph คืออะไร LangGraph ถูกสร้างขึ้นโดย ทีม LangChain และมันอิงจาก Pregel ซึ่ง ถูกสร้างขึ้นโดย Google เดิมที Pregel ถูกสร้างขึ้นเพื่อ rerank ดังนั้นโดยปกติเมื่อคุณจัดอันดับเว็บไซต์ใหม่ และคุณกำลังประมวลผล request แบบ batch ดังนั้นมันถูกสร้างขึ้นเพื่อสร้าง graph database เพื่อให้คุณสามารถดึงข้อมูล และส่งผ่านข้อมูลได้อย่างรวดเร็ว LangGraph ทำงานโดยมี graph

มี node หลัก นี่เป็นเพียงตัวอย่าง และมี tools เช่น คุณสามารถค้นหา โรงแรม หาราคาที่ดีที่สุด ถ้าคุณเป็นพนักงาน Agoda

คุณน่าจะรู้จักสิ่งนี้ และคุณสามารถยืนยันการเลือกโรงแรม และส่งลิงก์การชำระเงิน จากนั้นก็มี state ผมเดาว่าพวกคุณส่วนใหญ่ใช้ JavaScript ใช่ไหม? โอเค เยี่ยม พวกคุณใช้ React เยี่ยมมาก การจัดการ state เยี่ยม นั่นคือ state ของคุณ และสิ่งที่คุณทำได้คือ บันทึกข้อความ เพิ่มข้อความ และมีตัวเลือกโรงแรม และประวัติการจองของคุณอยู่ตรงนั้น เลื่อนลงมาหน่อยครับ

Real-World Example: Building a Travel Agent with LangGraph3:53

ตัวอย่างเช่น สำหรับ travel agent ที่เรากำลังสร้างอยู่ในตอนนี้ หนึ่งในข้อกำหนดคือ เราต้องการหาราคาที่ดีที่สุด และเราต้องการให้สามารถจอง travel agent ของคุณได้โดยตรงในแอป หลายครั้งที่คุณใช้ ChatGPT

เบื้องหลังมันใช้หลายสิ่งหลายอย่าง เช่นสถาปัตยกรรมที่คุณอาจไม่คุ้นเคย เราจะลงรายละเอียดเกี่ยวกับสถาปัตยกรรมที่คุณสามารถ ใช้เมื่อคุณสร้างแอป AI

ในภายหลัง แต่สถาปัตยกรรมนี้เรียกว่า supervisor architecture โดยพื้นฐานแล้วคุณมี คำถาม มันเรียกใช้ travel node จากนั้นคุณมี router ซึ่งเป็น conditional node มันจะทำ sentiment analysis ว่านี่เป็นคำถาม เกี่ยวกับการหาโรงแรมหรือไม่ และถ้าใช่ มันจะไปยัง node ถัดไป และมันจะ เรียกใช้คำสั่ง search hotel จากนั้นก็ find the best prices และเรามี interrupt interrupt คือเมื่อผู้ใช้ตัดสินใจว่า พวกเขาต้องการเลือกโรงแรมนั้นหรือไม่ โรงแรมที่สอง หรือโรงแรมที่สี่ โรงแรมใดก็ได้ที่พวกเขาต้องการ และเมื่อผู้ใช้เลือกแล้ว

เราสามารถยืนยันการเลือกโรงแรม และเราอัปเดต state โดยตรง จากนั้นเราใช้

conditional router เพื่ออัปเดตตัวเลือก และเราสามารถส่งลิงก์การชำระเงิน ซึ่งเป็น tool อีกตัวหนึ่ง คุณสามารถนึกถึงชุดเครื่องมือของคุณ และคุณมี travel agent ซึ่งเป็น node ที่เชื่อมต่อกับมัน ดังนั้น LLM ของคุณมีตัวช่วยที่มันสามารถ ดึงข้อมูลหรือค้นหาเพื่อช่วย

มันได้ ผมคิดว่าความแตกต่างหลัก คือเมื่อคุณสร้างแอปพลิเคชันมาตรฐาน เช่น ที่ Agoda คุณกำลังสร้างระบบการค้นหา แอปพลิเคชัน ที่เราเห็นก่อนหน้านี้ มันคือ CRUD ใช่ไหม สร้าง อ่าน อัปเดต ลบ มันแตกต่างกันเล็กน้อยเพราะ คุณกำลังให้พลังแก่ LLM ในการ ตัดสินใจดึงข้อมูลหรือใช้ tool ที่มันต้องการ ดังนั้นมันจึงเป็นการเปลี่ยนแปลงวิธีคิดของคุณ ในแง่ของการคิด ถ้าคุณกำลังคิดถึง การเขียนโปรแกรมแบบ declarative และ imperative ทั่วไป ซึ่งคุณมีเงื่อนไขต่างๆ ที่คุณต้องกำหนดเงื่อนไขเองทั้งหมด แต่ที่นี่คุณมี รายการกฎต่างๆ และ LLM ต้องตัดสินใจว่าจะใช้ tools ไหน หรือไม่ใช้ tools เหล่านั้นเลย — เลื่อนลงมาหน่อยครับ ผมไม่รู้ว่าพวกคุณเห็นไหม ลองคลิกดูได้ไหม

มันเล็กมาก คุณน่าจะคลิกได้ โอเค

นี่คือวิธีการทำงาน คุณมี state อยู่ด้านบน checkpointer ซึ่งเราจะพูดถึงในภายหลัง ซึ่งเป็น Postgres saver และหลังจากนั้นคุณ initialize state ของคุณ และคุณมี travel agent นี่คือที่ที่คุณควบคุม state และโดยทั่วไปภายในนั้นคุณจะมีสิ่งต่างๆ เช่น tools ของคุณ และการเรียกใช้ graph

ผมไม่มีรูปภาพตรงนั้น แต่ถ้าพวกคุณ อยากคุยกับผมเพิ่มเติม ผมยินดีที่จะ โชว์โค้ดให้ดู และนี่คือที่ที่คุณ เรียกใช้งาน นี่คือภาษา Python ขออภัยถ้าคุณ เป็นนักพัฒนา JavaScript แต่ Python ดีกว่ามาก

ใช่ มันง่ายกว่ามาก และประสิทธิภาพก็ดีกว่า นี่คือ endpoint เดียว ที่คุณสามารถเรียกใช้ได้ และมันจะหาราคาที่ดีที่สุด และข้อมูลอื่นๆ — ซูมออกได้ครับ

Understanding Checkpointers: Saving State in LangGraph Applications7:51

เรามาดูกันว่า checkpointer คืออะไร โดยพื้นฐานแล้ว checkpointer คือที่ที่คุณสามารถจัดเก็บ state ใน graph และความแตกต่างระหว่างการบันทึก ข้อมูลใน database ทั่วไป อย่างที่ผมได้กล่าวไปคือ คุณกำลังทำในระดับพื้นฐาน CRUD ใช่ไหม? สำหรับ checkpointer มันแตกต่างกันเล็กน้อยตรงที่คุณมี connection ซึ่งก็คือ PostgreSQL URL ของคุณ มันอาจจะเป็น URL ที่คุณใช้บน Supabase

และคุณมี concurrency ซึ่งก็คือ pipeline ของคุณ pipeline concurrency คือที่ที่มัน set up database ที่ซึ่งมันสร้างตาราง

และถ้ามันถูกเปิดใช้งาน นี่คือส่วนที่ แตกต่างจาก CRUD คือมันจะรวมคำสั่ง SQL

เช่น put, tuple list, และ writes

ดังนั้นมันจึงแตกต่างกันเล็กน้อยตรงที่ทุกครั้งที่เรียกใช้ LLM หรือ chain ของคุณ มันจะ รวม request บางอย่างเข้าด้วยกัน และผมจะแสดงให้คุณเห็นว่ามันทำงานอย่างไร เลื่อนลงมา โอเค กลับไปที่ตัวอย่างของเรา

How Checkpointers and Postgres Work Together in LangGraph9:14

เรามี travel agent node ถ้าคุณ เลื่อนขึ้นไปนิดหน่อย นี่คือคำถาม และตรงนี้ ถ้าคุณจำที่ผมพูดถึง Checkpointer ได้ ทุก checkpointer มี thread และ thread นั้นจะถูกบันทึก คุณสามารถคิดว่านี่เป็นเหมือน ประวัติข้อความของคุณที่บันทึกไว้กับ agent state นี่คือที่ที่มันถูกบันทึกไว้ และทุกครั้งที่คุณ ส่งคำถาม สมมติว่าคุณต้องการค้นหา การจองที่ไหนสักแห่ง มันจะดึงเวอร์ชันปัจจุบัน ของ graph state ดังนั้นมันจะรัน batch สำหรับ aget และถ้าคุณซูมออก คุณจะมี conditional node ว่า มันกำลังค้นหาโรงแรมหรือไม่ และเมื่อคุณไปถึงจุดที่ผู้ใช้ ที่กำลังเลือกโรงแรม ซึ่งก็คือโรงแรมที่หนึ่ง นี่คือที่ที่เรา รวมการดำเนินการเช่น aget และ aput ที่ซึ่งคุณต้องดึงเวอร์ชันปัจจุบันของ state และจากนั้นคุณอัปเดต

ตัวเลือกโรงแรม โรงแรมที่หนึ่ง และนี่คือที่ที่คุณ อัปเดต state และในที่สุด ผู้ใช้อนุมัติ และคุณได้รับคำตอบโดยตรงถึงผู้ใช้ สมมติว่าคุณกำลังใช้ SDK จาก OpenAI หรือ Vertex การสร้างแอปพลิเคชันแบบนี้อาจ ยากสักหน่อย เพราะคุณไม่มี control flow เมื่อ คุณใช้ SDK เดียว ดังนั้น LangChain จึงช่วยให้คุณ สามารถออกแบบ workflow ให้ AI แอปของคุณ ในแบบที่คุณมี human in the loop

โอเค นี่คือวิธีที่ checkpointer บันทึกข้อมูลไว้ภายใน Postgres คุณมี thread ID อีกครั้งอย่างที่ผมได้กล่าวไป และแต่ละ thread แสดงถึงเวอร์ชันของ state และสิ่งหนึ่งที่ผมลืมพูดถึงคือ สมมติว่าคุณอยู่ที่ เวอร์ชันสามของ graph state ทุก thread มี parent_ts ซึ่งอ้างอิงถึง state ก่อนหน้าของ parent และ child และ timestamp

ซึ่งไม่ได้อยู่ในนั้น โอเค เราไปต่อได้

Case Study: Salary Hero - Automating Customer Support with LangGraph11:36

ผมจะยกตัวอย่างในโลกจริง เรากำลังทำงานกับ Salary Hero อยู่ในขณะนี้ พวกเขามีปัญหาที่พวกเขากำลังเติบโตประมาณ 20% ทุกเดือนต่อ บริษัทที่พวกเขากำลังทำงานด้วย และพวกเขามีพนักงานประมาณหนึ่งพันคน

ที่เข้ามาและโต้ตอบกับแอป และพวกเขาต้องการความช่วยเหลือมาก หมายถึง พวกเขาต้องการข้อมูลเกี่ยวกับสินเชื่อ พวกเขาต้องการดึง ข้อมูลเกี่ยวกับว่าพวกเขาสามารถ กู้เงินเดือนนี้หรือเดือนหน้าได้หรือไม่ และพวกเขากำลังได้รับประมาณ สมมติว่า 800 คำขอต่อวัน และพวกเขามีเพียงห้าคน ฝ่ายสนับสนุนลูกค้าห้าคน และพวกเขาสามารถตอบกลับได้เพียง 300 ข้อความต่อวัน ดังนั้นพวกเขาจึงถูกจำกัด ในสภาพแวดล้อมนั้น ดังนั้นพวกเขาจึงพยายามไปที่ ผู้ขายรายอื่น แต่พวกเขาไม่สามารถ สร้างโซลูชันแบบกำหนดเองได้ เพราะข้อมูลของพวกเขา กระจัดกระจายไปทั่ว พวกเขามีข้อมูลใน Excel

ข้อมูลใน Google Sheets แทบทุกที่ ดังนั้นโดยพื้นฐานแล้ว เราเข้ามาและสิ่งแรกที่เราทำคือสร้าง แบบจำลองกราฟแบบนี้ เพื่อ แสดงสถานะต่างๆ ของ flow

นี่เป็นเพียงส่วนหนึ่ง ผมจะไม่แสดงทั้งหมด แต่คุณสามารถนึกภาพผู้ใช้เข้ามาพร้อมกับคำถาม พร้อมกับ sentiment analysis ก่อนที่ผมจะอธิบาย ปัญหาส่วนหนึ่งที่พวกเขามีคือ ผู้ใช้ของพวกเขาออนไลน์ ดังนั้นเราต้องระบุตัวตน ผู้ใช้ สิ่งหนึ่งคือสิ่งที่พวกเขา ทำด้วยตนเองคือ พวกเขาโต้ตอบกับลูกค้าโดยตรง และพยายามหาว่าเป็นใคร ค้นหาใน database ว่าเป็นใคร บริษัทไหน ลำดับความสำคัญหนึ่ง แล้วพวกเขาก็ตอบกลับผู้ใช้ เราลบขั้นตอนทั้งหมดนั้น

ที่มนุษย์ทำ สิ่งแรกที่เราทำคือ ทักทายผู้ใช้ หลังจากทักทายผู้ใช้ เราอัปเดต state ว่า greeting = true หลังจากนั้น เราจะยืนยันตัวตนผู้ใช้ นี่คือที่ที่ LLM ทำงาน เรียกใช้คำสั่ง authentication เพื่อให้ผู้ใช้สามารถเข้าสู่ระบบได้ เมื่อผู้ใช้เข้าสู่ระบบแล้ว เราบันทึกไว้ใน state และ เปลี่ยนเส้นทางพวกเขาตามลำดับความสำคัญ ดังนั้นจึงถูกเปลี่ยนเส้นทางไปยังฝ่ายสนับสนุนลูกค้า LLM ที่สามารถ

ให้ข้อมูลแก่ผู้ใช้ สิ่งหนึ่งเมื่อพวกเขา ถูกเปลี่ยนเส้นทางมาที่นี่ — ผมไม่แน่ใจว่าพวกคุณคุ้นเคย กับคำว่า crews หรือไม่ — โดยพื้นฐานแล้วคุณมี master agent ถ้าคุณเลื่อนขึ้นไปด้านบน คุณกำหนดว่าคำถามคืออะไร

และคุณมี master agent และ master agent นั้น สามารถส่งต่อข้อมูลนั้น ส่งต่อไปยัง agent ที่ถูกต้อง เช่น นโยบายบริษัท ข้อมูลทั่วไป การขอสินเชื่อ การชะลอการชำระเงิน และ master agent นั้นมี tools

Different Architectures for Building AI Agents with LangChain14:48

ถ้าคุณจำได้ tools เหล่านั้นมี กรณีการใช้งานที่แตกต่างกัน tools จะดึง ข้อมูลจาก Google ดึงข้อมูลจาก sheets พวกเขาทำการปรับแต่งมากมาย เพื่อตอบกลับผู้ใช้ เช่น การชะลอการชำระเงิน พวกเขาได้รับคำขอชะลอการชำระเงินจำนวนมาก สิ่งที่เราทำคือ เราสังเกตเห็นว่า มีการชะลอการชำระเงิน จากนั้นเราเรียกใช้ tool ที่ตอบกลับและส่ง

อีเมลไปยังทีมสนับสนุนลูกค้าว่า มีผู้ใช้ประมาณ 800 คน ที่กำลังขอ

ชะลอการชำระเงิน ดังนั้นเราต้อง ดูแลเรื่องนี้ นี่เป็นวิธีที่แตกต่างกัน ที่คุณสามารถออกแบบได้ — ถ้าคุณเลื่อนลงไปอีกหน่อย และออกจากตรงนี้ — เพื่อให้คุณ

เข้าใจวิธีการสร้างแอปพลิเคชันประเภทนี้ คุณสามารถไปที่ langchain.com แต่เมื่อคุณไปถึง LangGraph มันอาจจะซับซ้อนขึ้นเล็กน้อย ดังนั้นผมขอแนะนำให้อ่านเอกสาร อย่างละเอียดเพื่อทำความเข้าใจ แต่ส่วนแรกที่ผม กล่าวถึง เมื่อนี่คือกรณีการใช้งานสำหรับ Salary Hero บริษัทที่เรากำลังทำงานด้วยคือ เราทักทายผู้ใช้ก่อน นี่คือ LLM เดี่ยวที่ไม่มี tools เลย เพียงแค่ทักทายผู้ใช้ สถาปัตยกรรมที่สองเรียกว่า basic supervisor agent ซึ่งมี supervisor และ tools ที่สามารถใช้พูดคุยกับ ผู้ใช้และยืนยันตัวตนผู้ใช้ และคุณมี crews

คุณสามารถนึกถึง crews ได้ สมมติว่าเป็นครู และคุณมีผู้ช่วยเกี่ยวกับเรื่องต่างๆ คนหนึ่งเปลี่ยนผ้าอ้อมนักเรียน อีกคน สอนนักเรียนและช่วยเหลือนักเรียน ครูสามารถเรียกใช้ tools ต่างๆ คนต่างๆ ที่มีในชุดเครื่องมือ เพื่อดึงข้อมูล หรือให้ข้อมูล นี่เป็นสิ่งเดียวกันเมื่อ คุณมีทีม crew แบบลำดับชั้น แต่ในกรณีนั้น จะเป็นครูใหญ่ที่ทำสิ่งนั้น และนี่เป็นบทความที่ดีที่ควรอ่าน ถ้าคุณไม่เคยสร้างระบบประเภทนี้มาก่อน คุณจะไม่เข้าใจมัน ผมไม่เข้าใจอะไรเลย ผมแค่ใส่ลงใน ChatGPT และให้มันอธิบายสิ่งนี้ให้ แต่มันเยี่ยมมาก มันทำให้คุณ มีมุมมองเกี่ยวกับวิธีการสร้าง ระบบ multi-agent เหล่านี้ ทุกครั้งที่ผมพูดถึง การสร้าง customer support agent มันอาจจะดูง่าย แต่ส่วนที่ยากที่สุดคือ

ข้อมูลกระจัดกระจายไปทั่ว ขึ้นอยู่กับองค์กร และการสร้างเครื่องมือเฉพาะสำหรับลูกค้า คือสิ่งที่พวกเขากำลังมองหา

Conclusions17:47

ขอบคุณครับ Reacthor เราอยู่บน LinkedIn นี่คืออีเมลของผม ถ้าคุณต้องการติดต่อ ถ้าคุณต้องการพูดคุยเพิ่มเติมเกี่ยวกับสิ่งที่ผม พูดถึงในระหว่างการพูดคุยนี้ ยินดีครับ ถ้าคุณต้องการให้ผมแสดง ตัวอย่างแอปพลิเคชันที่ผมกำลังสร้างอยู่กับบริษัทต่างๆ ยินดีครับ และถ้าคุณ

ต้องการพูดคุย ผมอยู่ที่นี่ ขอบคุณครับ