체크포인터가 매 단계를 저장하므로, 그래프의 모든 과거 상태가 남아 있다. 타임 트래블은 과거 체크포인트를 조회하고, 그 지점의 State를 고쳐 거기서부터 다시 실행하는 기능이다. 디버깅("왜 저렇게 판단했지?"), what-if 실험, 사람이 개입해 경로를 바꾸는 데 쓴다.
이 강의 목표는 상태 이력을 조회하고 특정 지점에서 분기 실행하는 법을 익히는 것이다.
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
댓글은 운영자만 작성할 수 있어요.