본문으로 건너뛰기

세션 요약

세션 내용을 증분 방식으로 요약하는 시스템입니다. (.ai-core v2.1.0 기준)

핵심 개념

summaries는 2차 원본입니다. 단순 축약이 아니라, 1차 원본(sessions/)의 노이즈를 제거하고 정제한 데이터입니다.

1차 원본 (sessions/)     → 로그 원본, 노이즈 포함
2차 원본 (summaries/) → 정제, 정보 손실 최소화
3차 가공 (필요 시) → 토큰 기반 축약
Multi-LLM 컨텍스트의 단일 소스

user-prompt-submit.sh가 외부 LLM에 주입하는 컨텍스트는 summaries/에서만 가져옵니다. 설정: session.context_for_llm.source: summaries_only

증분 요약 방식

기존 요약을 재작성하지 않고, 새 대화만 추가합니다.

설정의미
modeappend_only기존 요약 유지, 새 대화만 추가
max_new_conversations_per_batch15한 번에 처리하는 최대 대화 수
max_initial_conversations30첫 요약 생성 시 처리 대화 수

왜 append_only인가

방식장점단점
전체 재요약일관성 높음정보 손실 누적, 비용 높음
append_only정보 손실 최소화, 비용 절감요약 크기 증가 가능

append_only를 선택한 이유: summaries는 "2차 원본"이므로 정보 보존이 일관성보다 우선합니다. 크기 문제는 3차 가공(brief/auto 모드)에서 별도 처리합니다.

정제 규칙

대상처리 방식
사용자 질문문법 개선, 의도 유지
LLM 응답문맥 파악 필수 정보 모두 포함 (파일 경로, 설정값 before/after, 결정 이유 등)
우선 보존파일 경로, 설정값 변경, 승인/거절, 에러 해결, 신규 기능 생성

LLM 폴백 체인

요약 생성은 외부 LLM이 담당합니다. 실패 시 다음 LLM으로 자동 전환됩니다.

stop hook → run_heavy_tasks_background()

gemini (gemini-2.5-flash)
↓ 실패 시
opencode (zai-coding-plan/glm-5)
↓ 실패 시
codex (gpt-5.4)
↓ 모두 실패 시
{} 빈 객체 기록
LLM모델타임아웃
geminigemini-2.5-flash60초
opencodezai-coding-plan/glm-560초
codexgpt-5.460초

설정 위치: detail/session.json > summary.llm.summary_chain

폴백 체인의 실용성

gemini가 가장 빠르고 안정적이므로 1순위입니다. 3개 모두 실패하면 빈 객체를 기록하여 다음 세션에서 재시도할 수 있도록 합니다.

요약 파일 형식

{
"session_id": "6588f90e-...",
"compact_count": 0,
"last_updated": "2026-04-10T10:55:00Z",
"token_count": 850,
"turn_count": 15,
"summary": "[{\"ts\":\"...\",\"type\":\"user\",\"topic\":\"...\",\"content\":\"...\"},...]"
}

파일 위치: .ai-core/data/context/summaries/{session_id}.json

생성 흐름

세션 종료 (/quit)

stop.sh [포그라운드]
├── Git 요약 출력
├── Handoff 자동 저장
└── 백그라운드 태스크 시작

[백그라운드] (disown, Claude 대기 없음)
├── Transcript 추출
├── 프로젝트 로그 동기화
├── 세션 요약 생성 (LLM 폴백 체인)
├── RAG 임베딩
└── 컨텍스트 아카이브

3차 가공 (필요 시)

2차 원본이 너무 커지면 별도 로직으로 축약합니다.

모드설명
brief시간대별 차등 요약 (최근 20건은 상세, 이전은 간략)
auto토큰 기반 자동 축약 (max_tokens 8000 초과 시 brief 적용)

토큰 추정

언어추정 비율
한글 많음 (50%+)약 2자/토큰
혼합 (20-50%)약 3자/토큰
영어 많음약 4자/토큰

컨텍스트 주입 설정

user-prompt-submit.sh가 summaries를 Claude에 주입할 때의 설정:

설정설명
sourcesummaries_onlysummaries만 사용
max_tokens50000주입 최대 토큰
strategybottom_up최신 대화 우선

다음 단계