세션 관리 및 압축 (심층 분석)
이 문서는 OpenClaw이 세션을 종단 간으로 관리하는 방법을 설명합니다:
- 세션 라우팅 (인바운드 메시지가
sessionKey에 매핑되는 방법) - 세션 저장소 (
sessions.json) 및 추적 내용 - 트랜스크립트 지속성 (
*.jsonl) 및 구조 - 트랜스크립트 위생 (실행 전 프로바이더별 수정)
- 컨텍스트 한도 (컨텍스트 창 vs 추적 토큰)
- 압축 (수동 + 자동 압축) 및 사전 압축 작업 연결 지점
- 조용한 관리 (사용자에게 보이는 출력을 생성하지 않아야 하는 메모리 쓰기 등)
진실의 원천: Gateway
OpenClaw은 세션 상태를 소유하는 단일 Gateway 프로세스를 중심으로 설계되었습니다.
두 가지 지속성 레이어
- 세션 저장소 (
sessions.json) - 키/값 맵:sessionKey -> SessionEntry - 트랜스크립트 (
<sessionId>.jsonl) - 트리 구조의 추가 전용 트랜스크립트
압축: 개요
압축은 오래된 대화를 트랜스크립트의 지속된 compaction 항목으로 요약하고 최근 메시지를 그대로 유지합니다.
압축은 영구적입니다 (세션 프루닝과 달리).
사전 압축 “메모리 플러시” (구현됨)
목표: 자동 압축이 발생하기 전에, 내구성 상태를 디스크에 쓰는(예: 에이전트 워크스페이스의 memory/YYYY-MM-DD.md) 조용한 에이전트 턴을 실행하여 압축이 중요한 컨텍스트를 삭제하지 못하도록 합니다.
설정 (agents.defaults.compaction.memoryFlush):
enabled(기본:true)softThresholdTokens(기본:4000)prompt(플러시 턴을 위한 사용자 메시지)systemPrompt(플러시 턴에 추가되는 추가 시스템 프롬프트)