본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 18. 21:16

APX 메모리 압축은 하나의 다이얼이 아닌 두 개의 다이얼입니다

요약

APX는 에이전트의 컨텍스트 관리를 위해 압축 시점(compact_threshold)과 최신 기록 보존 범위(keep_recent)를 분리하여 제어하는 메모리 압축 메커니즘을 제공합니다. 이를 통해 컨텍스트 재활용 효율을 높이면서도 최신 작업의 정확성을 유지할 수 있습니다.

핵심 포인트

  • 압축 시점과 보존 범위를 두 개의 독립된 다이얼로 분리하여 관리
  • compact_threshold를 통해 대화가 길어지는 시점에 요약 수행
  • keep_recent를 통해 최신 편집 및 도구 출력의 원문 유지
  • 두 설정값 사이의 명확한 간격 유지가 메모리 효율의 핵심
  • 백그라운드 압축 방식을 통해 응답 지연 시간 최소화

APX 메모리 압축은 하나의 다이얼이 아닌 두 개의 다이얼입니다

APC가 프로젝트에 포터블 컨텍스트 레이어를 제공합니다. APX는 그 컨텍스트에 런타임을 제공합니다. 채팅이 길어지면, APX는 모호한 '더 많은 내용을 유지' 스위치로 메모리를 해결하려고 하지 않습니다. 대신 두 개의 별도 다이얼인 compact_thresholdkeep_recent을 사용합니다.

이 분리가 중요합니다. 하나의 다이얼은 압축이 언제 시작될지 결정하고, 다른 하나는 가장 최신 작업의 어느 정도가 원문 그대로 유지될지를 결정합니다.

이 둘을 섞어 쓰면, 압축이 유용성을 잃게 됩니다. 너무 많은 최근 기록을 유지하면 충분한 컨텍스트를 재활용할 수 없습니다. 너무 일찍 압축하면 여전히 중요한 새로운 세부 사항들을 버리게 됩니다. APX는 경계를 명시적으로 만들어 이를 방지합니다.

트리거 (The trigger)

compact_threshold는 APX가 채널 채팅을 압축하기 시작하는 지점입니다. 현재 기본값은 60 턴입니다. 그 이전까지는 아무것도 재작성되지 않습니다. 그 이후부터는, 보존된 창 너머의 가장 오래된 자료들이 JSONL 로그 내의 밀도 높은 type: "compact" 기록으로 요약됩니다.

이 요약은 장식용이 아닙니다. 미래 턴에서는 시스템 턴(system turn)으로 이를 앞에 붙여 모델이 모든 원본 메시지를 재실행하지 않고도 오래된 작업의 압축된 버전을 볼 수 있게 합니다.

압축은 응답(reply)의 빠른 경로에서도 실행됩니다. APX는 이미 존재하는 압축 내용을 가지고 답변한 다음, 백그라운드에서 오래된 기록을 압축합니다. 이것이 올바른 절충안입니다: 응답 지연 시간(response latency)은 낮게 유지되고, 다음 턴은 신선한 요약의 이점을 누립니다.

보존 창 (The preserved window)

keep_recent은 두 번째 다이얼입니다. 그 역할은 간단합니다: 에이전트가 최신 편집 내용, 도구 출력(tool outputs), 결정을 정확히 발생한 대로 계속 볼 수 있도록 가장 최근 턴들을 원문 그대로 유지하는 것입니다.

현재 기본값은 40입니다.

이 숫자는 임의적이지 않습니다. 이는 압축을 위해 충분한 오래된 자료를 요약할 수 있게 하면서도, 다음 몇 턴 동안 사용할 수 있는 충분히 큰 라이브 창(live window)을 남겨둡니다. 또한 keep_recentcompact_threshold에 너무 가깝게 설정하는 가장 흔한 실수를 설명해줍니다.

만약 compact_threshold60이고 keep_recent55라면, 압축 (compaction)을 통해 제거할 수 있는 부분은 아주 미미합니다. 요약 (summarization)에 따른 비용은 지불하면서 공간은 거의 확보하지 못하게 됩니다. 두 값이 동일하다면, 기본적으로 시스템의 유용한 부분을 비활성화한 것과 다름없습니다.

지루하지만 효과적인 합리적인 규칙은 다음과 같습니다:

  • compact_threshold는 히스토리가 너무 길어지는 시점을 결정합니다.
  • keep_recent는 얼마나 많은 최신 컨텍스트 (context)를 정확하게 유지해야 하는지를 결정합니다.
  • keep_recent는 반드시 compact_threshold보다 명확히 낮은 수준을 유지해야 합니다.

APX가 실제로 작성하는 내용

APX가 설정 (config)에서 사용하는 형태는 다음과 같습니다:

{
  "memory": {
    "compact_model": "ollama:gemma4:31b-cloud",
...

모델 선택 또한 중요합니다. APX는 가벼운 요약기 (summarizer)를 선호하며, 가급적 로컬 (local) 모델을 권장합니다. 기본 모델 (primary model)과 대체 모델 (fallback model)을 모두 사용할 수 없는 경우, 압축은 조용히 건너뜁니다. 원본 턴 (raw turns)은 그대로 유지되며, 대화는 계속 진행됩니다.

이러한 실패 모드 (failure mode)는 중요합니다. 메모리 압축은 연속성을 개선해야지, 응답을 차단해서는 안 됩니다.

튜닝 시점

채널에서 많은 잡담, 도구 출력 (tool output), 또는 반복적인 수정 사항이 발생하는 경우에는 더 낮은 임계값 (threshold)을 사용하세요. 코드 편집, 리뷰 단계, 또는 정확한 문구에 의존하는 인수인계와 같이 최신 턴들이 여전히 중요한 상태 (state)를 담고 있는 경우에는 더 큰 keep_recent 값을 사용하세요.

변경해야 할 특별한 이유가 없다면 기본값을 사용하십시오. 기본값은 이미 의도된 균형을 반영하고 있습니다: 최신 40개 턴을 그대로 보존하고, 채팅이 60개 턴을 넘어서면 압축을 시작하며, 런타임 (runtime)의 반응성을 유지하도록 설계되었습니다.

수동 작업을 원한다면, APX는 디스크 상의 긴 세션을 압축하기 위해 apx session compact <slug> 명령어를 제공합니다. 이는 아카이빙 (archiving) 전에 영구적인 요약을 만들고 싶을 때 유용합니다. 자동 채널 압축은 여전히 라이브 채팅을 위한 주요 메커니즘입니다.

결론

APX 메모리 압축은 하나의 다이얼이 아닙니다. 그것은 경계 (boundary)와 버퍼 (buffer)의 조합입니다.

compact_threshold는 APX가 언제 압축을 시작할지 결정합니다. keep_recent는 무엇을 정확하게 유지해야 할지 결정합니다. APC는 프로젝트 계약 (project contract)을 휴대 가능하게 유지하며, APX는 라이브 대화의 범위를 제한합니다.

그 분리가 바로 핵심입니다. 프로젝트의 의미는 안정적으로 유지됩니다. 런타임 노이즈 (Runtime noise)는 압축됩니다. 새로운 작업은 계속해서 가시성을 유지합니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0