Стойкасць 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 з фіксатрамі.
Валіце маленькія, тэставаныя елементы замест вялікіх скрыптав. Калі якісь крок не выйшае, адказка за гэта падазе на адну конкрэтную адпаведнасць.
Пазбірчыва праця ператварае дэманты ў сістэмы: нейтры, участнікі працэсу і аптэйніранне пад час дыягностыкі залежаць ад гэтага.
Перш чым пераводзіце всю стак-структуру, заморозьце версіі, зафіксуйце ідэальны транскрыпт для крытычнага маршруту і паказвайце способы вярнення да пачатковага стану. У спільных срэдах неабходны ліміты частоты запуска, перакананні ў належнасці і чысткі власнік для змены секрэтных даных.