LangGraph

LangGraph 11강

[고급] 타임 트래블 & 상태 이력

체크포인터가 매 단계를 저장하므로, 그래프의 모든 과거 상태가 남아 있다. 타임 트래블은 과거 체크포인트를 조회하고, 그 지점의 State를 고쳐 거기서부터 다시 실행하는 기능이다. 디버깅("왜 저렇게 판단했지?"), what-if 실험, 사람이 개입해 경로를 바꾸는 데 쓴다.

LangGraph 11강 구성도

이 강의 목표는 상태 이력을 조회하고 특정 지점에서 분기 실행하는 법을 익히는 것이다.

1. 현재 상태 보기

cfg = {"configurable": {"thread_id": "t1"}}
snap = app.get_state(cfg)
print(snap.values)   # 현재 State
print(snap.next)     # 다음에 실행될 노드

2. 과거 이력 훑기

get_state_history는 최신부터 과거까지 모든 체크포인트를 돌려준다.

for snap in app.get_state_history(cfg):
    cid = snap.config["configurable"]["checkpoint_id"]
    print(cid, snap.next)

3. 특정 지점부터 재실행(분기)

과거 체크포인트의 config를 그대로 invoke에 넘기면 그 시점부터 다시 실행된다. 원본 이력은 보존되고 새 분기가 생긴다.

past = some_snap.config    # 과거 체크포인트 config
app.invoke(None, past)     # 그 지점부터 재개 → 다른 결과 분기

상태를 바꿔 분기하려면 update_state로 값을 덮어쓴 뒤 재개한다.

app.update_state(past, {"messages": [("user", "다르게 해봐")]})
app.invoke(None, past)

핵심 명령·용어

이름
get_state(cfg) 현재 상태 스냅샷
get_state_history(cfg) 과거 전체 이력
checkpoint_id 특정 체크포인트 식별자
update_state 상태를 수정해 분기

예제

# 두 번째 이전 체크포인트로 되돌아가 재실행
history = list(app.get_state_history(cfg))
target = history[2]                      # 과거 어느 지점
app.invoke(None, target.config)          # 거기서부터 새 분기

해설) 타임 트래블은 "실행을 되감아 다른 선택을 해보는" 강력한 디버깅·실험 도구다. 체크포인터가 있기에 가능한 LangGraph의 차별점이다.

댓글 0