Reference: GEODE의 컨텍스트 시스템은 4개의 분리된 메커니즘이 합쳐진 결과입니다. 메모리 계층(5-tier), 프롬프트 어셈블리(5-layer), 토큰 예산 가드(200K), Clean Context 패턴(anchoring 방지). 모든 LLM 호출 직전에 이 4개가 차례로 작동해 단일 AssembledPrompt를 만들어 모델에 전달합니다.
1. 메모리 계층 (5-tier)
하위 tier가 상위 tier를 override합니다. Claude Code의 3-tier memory를 5-tier로 일반화한 형태.
| Tier | 이름 | 위치 | 역할 |
|---|---|---|---|
| 0 | Agent Identity | GEODE.md | 에이전트 정체성, 제약, 도메인 규칙. 항상 첫머리에 들어감. |
| 1 | User Profile | ~/.geode/profile.md | 사용자 역할, 전문성, 학습된 패턴. bidirectional learning이 갱신. |
| 2 | Organization | ~/.geode/org/ | cross-project 공유 데이터. 다수 프로젝트가 공통 참조. |
| 3 | Project | ./.geode/memory/PROJECT.md | 현 프로젝트의 50개 insight. LRU 회전. |
| 4 | Session | in-memory | 현재 대화 history. 200-turn sliding window. |
토큰 예산 (default): Identity 10%, Profile 5%, Org 25%, Project 25%, Session 35%. 합 100%, 200K 컨텍스트 윈도 기준.
2. 프롬프트 어셈블리 (5-layer)
core/llm/prompt_assembler.py:PromptAssembler.assemble()이 6 단계로 프롬프트를 조립합니다. 결과는 불변(frozen=True) AssembledPrompt 객체.
@dataclass(frozen=True)
class AssembledPrompt:
system: str # 최종 시스템 프롬프트
user: str # 최종 사용자 프롬프트
assembled_hash: str # SHA-256[:12] of (system + user)
base_template_hash: str # SHA-256[:12] of original base_system
fragment_count: int
total_chars: int
fragments_used: list[str] # 추적용 식별자| Layer | 내용 | 출처 |
|---|---|---|
| L1 | Agent base persona | node-specific base_system (analyst, evaluator, ...) |
| L2 | Memory injection | 5-tier memory 위 표 |
| L3 | Skill injection | SkillRegistry의 활성 스킬 |
| L4 | Tool definitions | core/tools/definitions.json (deferred 도구 제외) |
| L5 | Cache boundary marker | __GEODE_PROMPT_CACHE_BOUNDARY__ 또는 <dynamic_context> XML (v0.93+) |
어셈블 직후 PROMPT_ASSEMBLED hook이 발화되어 어셈블된 프롬프트의 fingerprint(hash, fragment_count, total_chars)가 관측 stack에 흐릅니다.
3. 200K 절대 토큰 가드 (v0.40+)
200K 윈도 모델이라도 percent 기반 threshold (80%, 95%) 와 별도로 절대 200K ceiling을 둡니다. GLM처럼 정확 윈도가 202_752인 경우에도 200_000 cap을 적용해 rate-limit pool 분리 회피.
- 80% threshold: Phase 1 compaction. 도구 결과를 요약 텍스트로 압축.
- 95% threshold: Phase 2 compaction. 70% adaptive prune (oldest 메시지 우선).
- 200K 절대 cap: graceful drain. 진행 중 도구 호출 마감 후 종료.
- 25K MCP 결과 가드: 한 도구 호출의 결과가 25K 토큰 넘으면 HTML→Markdown 폴백.
v0.94.0에서 GLM context window를 200_000 flat → 정확 202_752로 정정. 200K guard는 그대로 유지되며 절대 ceiling으로 동작합니다.
4. Clean Context (anchoring 방지)
병렬 Analyst들이 같은 입력으로 동시 호출될 때, 한 Analyst의 결과를 다른 Analyst의 컨텍스트에 노출하면anchoring bias가 발생합니다. GEODE는 병렬 분석에 들어가는 컨텍스트에서 analyses 필드를 제외합니다.
구현: core/agent/loop.py의 Send API 호출 시 state.copy(exclude=analyses)로 노드 입력을 정제. 검증: verify_independence 가드가 Analyst 결과의 cross-correlation (CV < 0.05) 을 확인하고 anchoring 의심 시 RESCORE.
5. 캐싱 인터페이스
어셈블된 프롬프트의 STATIC 영역(L1+L2+L3+L4)과 DYNAMIC 영역(L5 이후 turn별 변경분)을 경계로 분리해 cache_control을 적용.
- Anthropic. system 블록
cache_control: ephemeral+ 직전 3개 non-system 메시지의apply_messages_cache_control(). 4-breakpoint. - OpenAI. 서버 측 자동 캐싱. v0.94+
prompt_cache_key자동 도출. - GLM, Codex. 프로바이더 관리.
자세히: Prompt Caching.
다른 시스템 비교
| 시스템 | memory tier | prompt 조립 | 토큰 가드 |
|---|---|---|---|
| GEODE | 5-tier (Identity → Profile → Org → Project → Session) | 5-layer + Hook 관측 | 200K 절대 + 80/95% phase + 25K MCP |
| Claude Code | 4-tier (managed → user → project → local) CLAUDE.md | 도구 정의 + system prompt 직접 조립 | 200K window 안의 자동 compaction |
| LangChain Memory | BufferMemory / ConversationBufferWindowMemory 등 9종 | 수동 prompt template | token_limit 옵션 (수동) |
| LlamaIndex Context | Index → Retriever → Synthesizer | response_synthesizer로 prompt | chunk_size + chunk_overlap 수동 |
관련 문서
- cache 메커니즘: Prompt Caching
- 해시 ratchet: Prompt Hashing
- system prompt 변형: System Prompt Modes
- 장기 실행 가드: Long-running Safety
- 외부 사료:
mango-wiki/.../concepts/geode-memory-system.md,geode-prompt-assembly.md,geode-context-guard.md,geode-context-overflow-prevention.md