AI และ LLMเอเจนต์

Checkpoint และหน่วยความจำระยะยาวของ LangGraph

เก็บเอเจนต์ LangGraph แบบถาวรบน HotKV หยุด เล่นต่อ และย้อนเวลาผ่านสถานะของกราฟ และเก็บหน่วยความจำระยะยาวที่ค้นหาตามความหมายได้

การทดสอบความสอดคล้องที่ผ่าน
81
saver
ซิงก์ + อะซิงก์
ไม่จำเป็น
ไม่ต้องใช้ไลเซนส์
ขั้นที่ 1 จาก 6
ติดตั้ง

แพ็กเกจเดียวสำหรับ checkpointer และที่เก็บ Python 3.10 ขึ้นไป

เซสชันตัวอย่างplaying
# ติดตั้ง
$ pip install langgraph-checkpoint-hotkv
Successfully installed langgraph-checkpoint-hotkv

ตัวอย่างแบบแอนิเมชันพร้อมคำสั่ง HotKV จริงและคำตอบตัวอย่าง คลิกขั้นตอนใดก็ได้เพื่อข้ามไปยังขั้นนั้น คำสั่งและคำตอบยังคงเป็นภาษาอังกฤษ ตรงตามที่คุณพิมพ์และเห็นใน HotKV

ปัญหา

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

HotKV จัดการอย่างไร

langgraph-checkpoint-hotkv เก็บ checkpoint ของแต่ละกราฟใน HotKV กราฟถูกขัดจังหวะแล้วเล่นต่อได้ หรือย้อนกลับไปยังขั้นก่อนหน้าใดก็ได้แล้วแตกสาขาจากตรงนั้น ที่เก็บคู่กันเก็บหน่วยความจำระยะยาวข้ามเธรด ค้นพบได้ด้วย namespace ด้วยตัวกรอง หรือด้วยความหมายเมื่อมีโมเดล embedding

ทีละขั้นตอน

เกิดอะไรขึ้นบ้าง ทีละคำสั่ง

  1. 01

    ติดตั้ง

    แพ็กเกจเดียวสำหรับ checkpointer และที่เก็บ Python 3.10 ขึ้นไป

    pip install langgraph-checkpoint-hotkv
  2. 02

    คอมไพล์ด้วย HotKV checkpointer

    ทุกขั้นของกราฟถูกบันทึกใน HotKV แล้ว

    graph = builder.compile(checkpointer=HotKVSaver(hotkv.from_url("hotkv://localhost:6379")), interrupt_before=["refund"])
  3. 03

    รันจนถึงจุดที่ต้องอนุมัติ

    กราฟทำงานผ่านขั้นตอนต่างๆ บันทึก checkpoint หลังแต่ละขั้น และหยุดก่อนการคืนเงิน

    graph.invoke({"messages": [("user", "Refund order 1182")]}, {"configurable": {"thread_id": "t-81"}})
  4. 04

    หลายชั่วโมงต่อมา หลังรีสตาร์ต

    โปรเซสรีสตาร์ตข้ามคืน สถานะยังอยู่ใน HotKV รออยู่ที่ขั้นเดิม

    graph.get_state({"configurable": {"thread_id": "t-81"}}).next
  5. 05

    อนุมัติและเล่นต่อ

    ผู้อนุมัติตอบว่าใช่ และกราฟทำงานต่อจาก checkpoint ที่บันทึกไว้

    graph.invoke(None, {"configurable": {"thread_id": "t-81"}})
  6. 06

    จดจำข้ามเธรด

    หน่วยความจำระยะยาวอยู่ในที่เก็บ และค้นพบได้อีกในบทสนทนาใดก็ตามในภายหลัง

    store.put(("users", "42"), "prefs", {"refunds": "prefers store credit"})
เหมาะกับงานแบบไหน

สถานการณ์จริง

เวิร์กโฟลว์แบบมีมนุษย์ร่วมวง

การคืนเงิน การเปลี่ยนสัญญา และการ deploy ขึ้นโปรดักชันรอให้คนอนุมัติ นานเป็นนาทีหรือเป็นวัน โดยไม่ต้องเปิดโปรเซสค้างไว้

เอเจนต์วิจัยที่ทำงานยาวนาน

การรันที่ล้มเหลวที่ขั้น 40 เล่นต่อจากขั้น 40 แทนที่จะเริ่มใหม่

การดีบักและการประเมินผล

ย้อนกลับไปที่ checkpoint ก่อนหน้าใดก็ได้ เปลี่ยนอินพุตแล้วแตกสาขา เพื่อดูว่าเอเจนต์จะทำงานอย่างไร

อยู่ในตัว

สิ่งที่คุณได้รับ

Checkpointer

HotKVSaver และ AsyncHotKVSaver เก็บสถานะของกราฟระหว่างการรัน พร้อม interrupt, resume และ time travel

ที่เก็บระยะยาว

HotKVStore เก็บรายการข้ามเธรด ค้นหาได้ด้วย namespace ตัวกรอง หรือความหมาย พร้อมวันหมดอายุตามต้องการ

ผ่านการทดสอบความสอดคล้อง

ผ่านชุดทดสอบความสอดคล้องของ checkpointer จาก LangGraph เอง 81 การทดสอบใน 8 ความสามารถ สำหรับทั้งสอง saver

ไม่ต้องมีโมดูล ไม่ต้องมีไลเซนส์

ใช้ชนิดข้อมูลหลักของ HotKV และดัชนีเวกเตอร์ และทำงานได้ทั้งมีและไม่มีไลเซนส์ enterprise

Checkpointer และที่เก็บ

python
from langgraph.checkpoint.hotkv import HotKVSaver

with HotKVSaver.from_conn_string("hotkv://localhost:6379") as checkpointer:
    graph = builder.compile(checkpointer=checkpointer)
    graph.invoke({"messages": [("user", "hi")]}, {"configurable": {"thread_id": "1"}})
ข้อมูลอ้างอิง:hotkv-langgraph on GitHub

คำถามที่พบบ่อย

ต้องมีไลเซนส์ enterprise ไหม

ไม่ต้อง checkpointer และที่เก็บใช้ชนิดข้อมูลหลักและดัชนีเวกเตอร์ของ HotKV และทำงานบนเซิร์ฟเวอร์ที่มีหรือไม่มีไลเซนส์ก็ได้

รองรับ async ไหม

รองรับ AsyncHotKVSaver และ AsyncHotKVStore ใช้ได้กับ ainvoke และ astream

หลายแอปใช้เซิร์ฟเวอร์เดียวร่วมกันได้ไหม

ได้ ทุกอย่างถูกเก็บภายใต้คีย์พรีฟิกซ์ ค่าเริ่มต้นคือ langgraph ซึ่งเปลี่ยนได้ต่อแอปพลิเคชันหรือต่อสภาพแวดล้อม

กรณีใช้งานที่เกี่ยวข้อง

ลองกับเวิร์กโหลดของคุณเอง

HotKV ใช้โปรโตคอลของ Redis คุณจึงชี้ไคลเอนต์ที่มีอยู่มาที่ HotKV แล้วรันคำสั่งเดียวกันนี้ได้