Стабільність LangGraph: контрольні точки, які дозволяють відновити роботу та HITL
Пояснення стабільності LangGraph: як чекпоїнти зберігають стан кожної нитки, щоб інтерупції, схвалення людиною під час виконання, повторні спроби та відлов помилок шляхом «подорожей у часі» функціонували ефективно.
Джерела: LangGraph Persistence: The Feature That Makes Everything Else Possible
У цьому посібнику створюється функціональний шлях для LangGraph Persistence: функції, яка робить можливим усе інше. Основна увага приділяється контрактам, перевіркам та коду, який можна додати до репозиторію без необхідності здогадуватися щодо його призначення. Для загального огляду перед зміною коду необхідно визначити вхідні дані, власника кроку та критерії завершення. Оператори повинні мати змогу перезапустити крок з відомої точки контролю, не здогадуючись про прихований стан. Краще використовувати невеликі, тестирувані одиниці коду замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність.
Короткий огляд того, що ми знаємо наразі
Щоб швидко підсумувати те, що ми знаємо наразі, необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок з відомої точки контролю, не здогадуючись про прихований стан. Розглядайте цю стадію як контракт між вхідними даними та перевіреними результатами. Позначте елементи проекту, визначте критерії успіху та не допускайте мовчазного часткового завершення. Створюйте точки контролю після дорогих кроків, щоб повторні спроби не призводили до подвійного оплати однакового виклику моделі.
Що насправді є персистентністю
Щоб зрозуміти, що насправді означає стійкість, необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Записуйте час виконання та витрати поруч із функціональними результатами. Забезпечення прозорості заздалегідь запобігає несподіваним рахункам у спільних середовищах. Створюйте точки контролю після дорогих кроків, щоб повторні спроби не призводили до подвійного обчислення однакових викликів моделі.
Як це насправді працює: точки контролю
Щодо того, як це насправді працює: перед зміною коду необхідно визначити контрольні точки, вхідні дані, власника кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої контрольної точки, не намагаючись вгадати прихований стан. Конфігурацію слід тримати окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, яке можуть перевіряти оператори. Створюйте контрольні точки після дорогих кроків, щоб повторні спроби не призводили до подвійного оплати однакового виклику моделі. Щодо того, як це насправді працює: перед зміною коду необхідно визначити контрольні точки, вхідні дані, власника кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої контрольної точки, не намагаючись вгадати прихований стан. Віддавайте перевагу невеликим, тестованим одиницям перед об’ємними скриптами. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність.
Робота з потоками: розділення кількох виконань
Для потоків: щоб утримувати кілька виконань окремо, необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись здогадатися про прихований стан. Розглядайте цю стадію як контракт між вхідними даними та перевіреними результатами. Позначте елементи, визначте перевірки успіху та не допускайте беззвучного часткового завершення. Сталість перетворює демонстрації на системи: потоки, участь людини та відлов помилок через аналіз історії залежать від неї.
Код (він простіший, ніж ви думаєте)
Для коду (він простіший, ніж ви можете собі уявити), необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Записуйте час виконання та витрати поруч із функціональними результатами. Раннє бачення допомагає уникнути несподіваних рахунків у спільних середовищах. Стабільність перетворює демонстрації на системи: потоки, участь людей та відлов помилок через аналіз історії змін залежать від неї.
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph
from langgraph.checkpoint.memory import InMemorySaver
from typing import TypedDict
llm = ChatOpenAI()
class JokeState(TypedDict):
topic: str
joke: str
explanation: str
def generate_joke(state: JokeState):
response = llm.invoke(f"Generate a joke on the topic: {state['topic']}")
return {"joke": response.content}
def generate_explanation(state: JokeState):
response = llm.invoke(f"Explain this joke: {state['joke']}")
return {"explanation": response.content}
# Build graph
graph = StateGraph(JokeState)
graph.add_node("generate_joke", generate_joke)
graph.add_node("generate_explanation", generate_explanation)
graph.add_edge("__start__", "generate_joke")
graph.add_edge("generate_joke", "generate_explanation")
graph.add_edge("generate_explanation", "__end__")
# Add persistence - this is the key line
checkpointer = InMemorySaver()
workflow = graph.compile(checkpointer=checkpointer)
config = {"configurable": {"thread_id": "1"}}
result = workflow.invoke(
{"topic": "pizza"},
config=config
)
# Get the final state
workflow.get_state(config)
# Get ALL intermediate states
workflow.get_state_history(config)
config_2 = {"configurable": {"thread_id": "2"}}
result_2 = workflow.invoke({"topic": "pasta"}, config=config_2)
Що можна створити за допомогою цього
Щоб зрозуміти, що можна створити за допомогою цього інструменту, необхідно перед зміною коду визначити вхідні дані, власника кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Конфігурацію слід тримати окремо від коду програми. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, яке можуть перевіряти оператори. Сталість перетворює демонстрації на системи: потоки виконання, участь людини та налагодження з використанням механізму „подорож у часі“ залежать від неї. Щоб зрозуміти, що можна створити за допомогою цього інструменту, необхідно перед зміною коду визначити вхідні дані, власника кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Краще використовувати невеликі, перевірювані одиниці коду замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність.
1. Короткострокова пам’ять у чат-ботах
1. Для короткострокової пам’яті в чат-ботах необхідно перед зміною коду визначити вхідні дані, власника кроку та критерії завершення. Оператори мають мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Розглядайте цю стадію як контракт між вхідними даними та перевіреними результатами. Позначте елементи, визначте критерії успіху та не допускайте безповідомного часткового завершення. Зберігайте стан графа у вигляді простих структур із чіткими типами даних. Вкладені структури приховують інформацію про те, який вузол заповнив певне поле, що ускладнює продовження роботи після перерв.
2. Стійкість до збоїв
Для 2. Толерантності до збоїв необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись визначити прихований стан. Записуйте час виконання та витрати поруч із функціональними результатами. Раннє відображення інформації запобігає несподіваним рахункам у спільних середовищах. Зберігайте стан графа у простій та типованій формі. Вкладені структури приховують інформацію про те, який вузол заповнив яке поле, та ускладнюють продовження роботи після перерв.
import time
def step_two(state):
print("Step 2 running...")
time.sleep(30) # simulating a slow operation
return {"step_two": "done"}
workflow.invoke(None, config=config)
3. Участь людини
Для підходу 3. «Людина в ланцюзі» необхідно перед зміною коду визначити вхідні дані, відповідальну особу за крок та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Конфігурацію слід тримати окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, яке можуть перевіряти оператори. Стан графа має бути простим та типізованим. Вкладені структури приховують інформацію про те, який вузол заповнив яке поле, що ускладнює продовження роботи після перерв. Для підходу 3. «Людина в ланцюзі» необхідно перед зміною коду визначити вхідні дані, відповідальну особу за крок та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Краще використовувати невеликі, перевірювані одиниці коду замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність.
4. Подорож у часі
Для етапу «Подорож у часі» необхідно визначити вхідні дані, відповідальну особу за виконання кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового завершення роботи. Створюйте точки контролю після дорогих кроків, щоб повторні спроби не призводили до подвійного обчислення однакового виклику моделі.
# Go back to a specific checkpoint and change the topic
workflow.update_state(
{"configurable": {"thread_id": "1", "checkpoint_id": "<checkpoint_id>"}},
{"topic": "samosa"}
)
# Re-run from that point
workflow.invoke(None, config={"configurable": {"thread_id": "1", "checkpoint_id": "<new_checkpoint_id>"}})
Більша картина
Для етапу «Більша картина» також необхідно визначити вхідні дані, відповідальну особу та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Фіксуйте час виконання та витрати разом із функціональними результатами. Чітка відстежуваність запобігає несподіваним рахункам у спільних середовищах. Створюйте точки контролю після дорогих кроків, щоб повторні спроби не призводили до подвійного обчислення однакового виклику моделі.
Структуроване навчання за межами блогів
Для структурованого навчання за межами блогів необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Конфігурацію слід зберігати окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, яке можуть перевіряти оператори. Створюйте точки контролю після дорогих кроків, щоб повторні спроби не призводили до подвійного оплати однакового виклику моделі.
Курси
Для курсів необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан.
Чек-лист для експлуатації
Для чек-листу експлуатації також необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан.
Необхідно разом задокументувати шлях успішного виконання та шлях відновлення. Повторні спроби та обробка некоректних повідомлень є частиною продукту.
Зберігання даних перетворює демонстрації на системи: потоки, участь людей у процесі та відлов помилок під час роботи з часом залежать від нього.
Якщо дозволяє бюджет, додайте тест на роботу критичного шляху в CI з використанням фікстур.
Віддавайте перевагу невеликим, тестованим одиницям перед об’ємними скриптами. Коли якийсь крок зазнає невдачі, ця проблема має вказувати на конкретну відповідальність.
Постійність перетворює демонстрації на системи: для їхньої роботи необхідні потоки, участь людини та можливості відладки з використанням механізму подорожей у часі.
Перш ніж підвищувати рівень складності стека, заморозьте версії, зафіксуйте ідеальний запис дій для критичного шляху та підтвердьте кроки для скасування змін. У спільних середовищах потрібні обмеження на частоту запитів, перевірки прав доступу та чіткий власник для зміни секретних даних.