[!NOTE] 요약 (TL;DR)
- 가벼운 프로덕션 코어: 계획(planning), 도구 디스패칭(tool dispatching), 리플렉션(reflection), 그리고 스트리밍 이벤트를 갖춘 비동기 Python FSM을 구현하여, 무겁고 일반적인 프레임워크 사용을 피합니다.
- Human-in-the-Loop 및 상태 복구: 고위험 동작에 대한 네이티브 인터럽트 워크플로우를 구현하고, 체크포인트 영속성(checkpoint persistence)과 결합하여 원활한 프로세스 재시작 복구를 지원합니다.
- 다음 단계: 이 기반 런타임을 Multi-Agent Collaboration & Concurrency로 확장하여 다중 액터 스웜(multi-actor swarms)을 구현합니다.
에이전트 상태를 명시적으로 만드는 이유?
루프는 현재 노드, 인자, 복구 위치, 그리고 중지 규칙을 기록함으로써 신뢰할 수 있는 에이전트를 구현할 수 있습니다. 상태 그래프(state graph)는 이러한 제어 흐름들을 검사 가능하게 만듭니다. 기초 지식은 agent loops and state machines를 참고하세요.
다운로드 가능한 Python 예제는 Python 3.11+ 및 SQLite 3.35+가 필요하며, 외부 종속성은 없습니다. 환불은 인메모리 리스트에서 시뮬레이션되며, 결제 서비스와 연결되지는 않습니다.
승인 체크포인트 및 복구 위치
체크포인트는 다음 노드, 비즈니스 상태, 소비된 단계(consumed steps), 그리고 상태를 저장합니다. 딕셔너리만 저장하고 Planner에서 재시작하는 것은 승인된 매개변수를 덮어쓰거나 이전 작업을 다시 실행할 수 있게 합니다.
이 예제는 SQLite에 체크포인트를 영속화합니다. 승인은 일시 중지된 노드를 재개하고, 거부는 실행을 종료하며, 조건부 데이터베이스 업데이트는 승인의 소비자(consumer)를 하나로 제한합니다. 승인은 하나의 경계(boundary)에 적용되며, 나중에 민감한 노드는 여전히 인터럽트됩니다. 워크플로우를 재구축할 때 노드 식별자와 구현은 호환성을 유지해야 합니다.
flowchart LR
Plan[Planner] --> Pending[SQLite pending checkpoint]
Pending --> Decision{Decision}
...
완전한 실행 예제
Run python3 state_graph.py. The demo closes storage and rebuilds the graph against the same database to demonstrate recovery after a worker restart.
"""Small SQLite-backed approval workflow; no external side effects in the demo."""
import asyncio
import copy
...
보장 사항 및 프로덕션 확장 기능
이 예제는 승인 상태를 영속화하고 중복된 승인 소비를 방지합니다. 외부 결제를 정확히 한 번 실행하지는 않습니다. 결제가 성공했지만 체크포인트가 저장되기 전에 충돌하는 경우, 여전히 안정적인 비즈니스 Idempotency 키 또는 트랜잭션 아웃박스가 필요합니다. 에이전트 오케스트레이션 및 평가를 참조하세요.
동기식 SQLite 트랜잭션은 로컬 예제에 적합합니다. 프로덕션 시스템에는 인증된 승인자, 매개변수 바운드 결정, 스냅샷 마이그레이션, 감사 기록(audit records), 리스(leases), 취소 전파 등이 필요합니다. LangGraph는 또한 영속적인 체크포인트와 자체 호스팅 관찰 가능성(observability)을 지원하며, 사용자 정의 런타임 자체가 본질적으로 더 안전하지는 않습니다.
자주 묻는 질문 (FAQ)
Q1: 승인 거부가 도구를 실행하나요?
아니요. resume(run_id, "rejected")는 보류 중인 레코드를 소비하고 거부된 이벤트를 방출합니다. 유효하지 않은 결정은 암묵적으로 승인하는 대신 오류를 발생시킵니다.
Q2: 중복된 승인 콜백이 환불을 반복할 수 있나요?
보류 중인 레코드는 한 번만 클레임될 수 있습니다. 중복된 콜백은 거부됩니다. 실제 결제 API는 여전히 재시도 전반에 걸쳐 Idempotency가 필요합니다.
Q3: 체크포인트가 외부 부작용을 되돌리나요?
아니요. 제어 흐름 영속성과 외부 트랜잭션은 별개의 관심사입니다. 실행 및 복구 경계는 고급 도구 실행를 참조하세요.
참고 자료: LangGraph 영속성, Temporal 활동 Idempotency.
본문은 blog.llmgo.top의 [LLM Systems Architecture]에서 처음 게시되었습니다.