에이전트 상태 관리 설계
LHG 2026-08-29
처음 보는 사람도 이해되게 먼저 풀어둔다
AgentState
MemorySaver
ag_agent_checkpoint
LangGraph 체크포인트 기능은 그대로 쓰되, 역할을 나눈다
ag_chat_session_meta
ag_chat_turn_meta
op_*
내장 기능을 그대로 쓸지 판단하려면 먼저 이 두 개념부터 구분해야 한다
내장 기능을 쓰려면 먼저 알아야 하는 관계다
AgentState ├─ messages ← Message channel ├─ current_step ├─ next_agent ├─ retry_count └─ approval_status ↓ Checkpointer → MemorySaver 또는 DB
Message channel은 Checkpointer가 저장하는 State의 일부일 수 있다.
지금 시스템은 Message channel 없이 AgentState 중심으로 실행하고 MemorySaver가 State와 실행 위치를 저장한다.
대화는 저장하지만 실행 상태까지 담지는 못한다
Message는 대화 내용이지 실행 상태 자체가 아니다
사용자 입력: 승인 → 계획 승인인가? → 보고서 선택인가? → NL2SQL 추가 질문에 대한 답인가?
현재 단계와 승인 대기 위치가 함께 있어야 정확히 재개할 수 있다.
Message는 대화 문맥으로, AgentState는 실행 제어로 역할을 나눠 쓴다. 단순 챗봇에는 적합하지만, 대형 멀티에이전트의 실행 상태·재개·분산 제어까지 혼자 맡기에는 한계가 있다.
Message는 대화 문맥으로, AgentState는 실행 제어로 역할을 나눠 쓴다.
단순 챗봇에는 적합하지만, 대형 멀티에이전트의 실행 상태·재개·분산 제어까지 혼자 맡기에는 한계가 있다.
내부 저장소일 뿐, 업무 기능을 대신하는 테이블은 아니다
한 질문 안에서도 에이전트·Gate를 여러 번 거친다
ag_chat_turn_meta.turn_index
대형 멀티에이전트 시스템은 체크포인트 하나에 모든 역할을 몰아넣지 않는다.
체크포인트 저장 방식 하나만 바뀌는 게 아니다
LangGraph의 네이티브 state와 체크포인트 기능은 그대로 쓴다. Message와 내장 테이블만으로는 채팅 순서·질의 재실행·사용자 승인· 취소·다중 인스턴스 제어를 처리할 수 없어서 ag_agent_checkpoint, ag_chat_turn_meta, op_* 테이블로 역할을 나눴다.