세션이 죽어도 이어지는 자율 루프, state.json 영속화
AI 에이전트 자율 루프가 세션 종료 후에도 진행을 잃지 않도록 state.json에 완료 상태·다음 단계·증거 경로를 기록하는 패턴을 정리했어요.
밤새 돌려둔 AI 에이전트가 중간에 끊겨서, 아침에 보니 처음부터 다시 시작하고 있던 적 없나요? 저도 장시간 자율 루프를 운영하면서 이 문제를 몇 번 겪었어요. 원인은 단순해요. 진행 상황이 모델의 대화 컨텍스트 안에만 있었거든요.
대화 기록은 휘발성이에요
LLM 세션은 언제든 끊길 수 있어요. 타임아웃, 컨텍스트 한계 도달, 프로세스 종료까지 이유도 다양해요. 진행 상황이 세션 안에만 있으면 재시작하는 순간 전부 사라져요.
더 위험한 건 어중간한 상태예요. 절반만 끝난 작업을 새 세션이 완료로 착각하거나, 이미 한 일을 또 하면서 결과물을 덮어쓰기도 해요. 그래서 진행 상태는 세션 밖, 파일에 둬야 해요.
state.json에 담는 필드는 4개예요
직접 만들어 보니 복잡한 스키마는 필요 없었어요. 필드 4개면 충분해요.
- 완료 체크리스트
- 다음 단계
- 증거 경로
- 결정 기록
완료 체크리스트는 단계별로 끝났는지 표시하는 목록이에요. 다음 단계는 재시작한 세션이 바로 집어 들 작업 하나를 가리켜요. 증거 경로에는 산출물 파일이나 로그 위치를 적어요. "완료"라는 말 대신 확인 가능한 흔적을 남기는 거예요. 결정 기록은 지시에 없던 판단을 했을 때 무엇을 왜 했는지 한 줄씩 적는 자리예요.
루프 구조는 3단계면 끝나요
세션이 시작되면 먼저 state.json을 읽고, 다음 단계 하나만 실행하고, 결과를 기록한 뒤 저장해요. 이 순서를 지키면 어디서 죽어도 다음 세션이 파일만 읽고 이어가요. 스키마 정하고 읽기·쓰기 코드를 넣는 데 10분 정도 걸렸어요.
기록 시점이 중요해요. 여러 단계를 몰아서 저장하면 그 사이에 죽었을 때 다 날아가요. 단계 하나가 끝날 때마다 바로 써야 해요. 저장 자체도 임시 파일에 쓰고 이름을 바꾸는 방식으로 하면, 쓰는 도중 끊겨도 파일이 깨지지 않아요.
적용해 봤더니 달라진 점
라이프케어로그 블로그 글을 자동으로 만드는 루프에 적용해 봤더니, 6단계짜리 작업이 중간에 끊겨도 다시 돌려 보니 끊긴 지점부터 이어갔어요. 처음부터 다시 도는 낭비가 사라진 거예요.
주의할 점도 있어요. 완료 판정은 "잘된 것 같다"가 아니라 파일 존재나 테스트 통과처럼 객관적 기준이어야 해요. 테스트해 보면 기준이 모호한 단계에서 루프가 같은 자리를 맴돌더라고요. 재시도 상한도 10회 정도로 걸어두는 편이 안전해요. 상한이 없으면 실패하는 단계를 무한 반복해요.
자율 루프의 신뢰는 모델 성능보다 재시작해도 이어지는 구조에서 나와요. 파일 하나로 시작할 수 있으니, 오래 도는 루프가 있다면 오늘 state.json부터 붙여 보세요.
관련 글
댓글
아직 댓글이 없어요. 첫 댓글을 남겨주세요.