Skip to content

자동 정리 전략 상세 설명

학습 후 활용 방법

  • 3가지 자동 정리 전략의 작동 원리 이해
  • 각 전략의 활성화/비활성화 시점 파악
  • 설정을 통한 전략 효과 최적화

현재 겪고 있는 문제

대화가 길어질수록 컨텍스트에 도구 호출이 쌓입니다:

  • AI가 같은 파일을 반복해서 읽고, 매번 전체 내용을 컨텍스트에 담음
  • 파일에 쓴 후에도 읽을 때, 원래 쓴 내용이 컨텍스트에 그대로 남아 있음
  • 도구 호출이 실패한 후에도, 방대한 입력 파라미터가 그 자리를 차지함

이러한 문제들로 인해 토큰 비용이 계속 증가하고, 컨텍스트가 "오염"되어 AI의 판단에 영향을 미칠 수 있습니다.

핵심 개념

DCP는 자동 정리 전략 3가지를 제공하여, 각 요청 전에 조용히 실행되며 LLM 비용 없이 동작합니다:

전략기본 설정역할
중복 제거✅ 활성화중복된 도구 호출을 감지하여 최신 호출만 유지
덮어쓰기❌ 비활성화읽기로 덮어쓰기된 쓰기 작업 입력 정리
오류 정리✅ 활성화N회 이상 지난 오류 도구 입력 정리

모든 전략은 다음 규칙을 따릅니다:

  • 보호 대상 도구 건너뛰기: task, write, edit 등 핵심 도구는 정리되지 않음
  • 보호 대상 파일 건너뛰기: 설정된 glob 패턴으로 보호된 파일 경로
  • 오류 메시지 보존: 오류 정리 전략은 입력 파라미터만 제거하고 오류 정보는 유지

중복 제거 전략

작동 원리

중복 제거 전략은 같은 도구명과 파라미터의 반복 호출을 감지하여 최신 호출만 유지합니다.

서명 일치 메커니즘

DCP는 "서명"으로 중복을 판단합니다:

  • 도구 이름이 동일
  • 파라미터 값이 동일 (null/undefined 제외, 키 순서 무관)

예시:

json
// 1차 호출
{ "tool": "read", "path": "src/config.ts" }

// 2차 호출 (서명 동일)
{ "tool": "read", "path": "src/config.ts" }

// 3차 호출 (서명 다름)
{ "tool": "read", "path": "src/utils.ts" }

적용 시나리오

활성화 권장 (기본 켜짐):

  • AI가 코드 분석을 위해 동일 파일을 자주 읽을 때
  • 다중 턴 대화에서 동일 설정을 반복 조회할 때
  • 최신 상태를 유지해야 하고 과거 출력은 버려도 되는 시나리오

비활성화 고려:

  • 각 도구 호출의 컨텍스트를 모두 유지해야 할 때 (예: 디버깅 출력)

설정 방법

json
// ~/.config/opencode/dcp.jsonc
{
  "$schema": "https://raw.githubusercontent.com/Opencode-DCP/opencode-dynamic-context-pruning/main/dcp.schema.json",
  "strategies": {
    "deduplication": {
      "enabled": true  // true 활성화, false 비활성화
    }
  }
}

보호 대상 도구 (기본 정리 안 됨):

  • task、write、edit、batch、plan_enter、plan_exit
  • todowrite、todoread (작업 목록 도구)
  • discard、extract (DCP 자체 도구)

이러한 도구는 설정에서도 중복 제거 정리가 불가능합니다 (하드코딩된 보호).


덮어쓰기 전략

작동 원리

덮어쓰기 전략은 후속 읽기로 덮어쓰기된 쓰기 작업 입력을 정리합니다.

예시: 쓰기 후 읽기
text
1단계: 파일 쓰기
AI가 write("config.json", {...}) 호출

2단계: 파일 읽기 확인
AI가 read("config.json") 호출 → 최신 내용 반환

덮어쓰기 전략 인식
write의 입력(크기가 클 수 있음)이 중복됨
read가 파일의 현재 상태를 이미 캡처했으므로

정리
read의 출력만 유지하고 write의 입력 제거

적용 시나리오

활성화 권장:

  • 빈번한 "쓰기 → 검증 → 수정" 반복 개발 시나리오
  • 쓰기 작업에 많은 템플릿 또는 전체 파일 내용을 포함할 때

기본 비활성화 이유:

  • 일부 워크플로우는 "쓰기 이력"을 컨텍스트로 사용에 의존
  • 일부 버전 제어 관련 도구 호출에 영향을 줄 수 있음

수동 활성화 시점:

json
{
  "strategies": {
    "supersedeWrites": {
      "enabled": true
    }
  }
}

주의사항

이 전략은 write 도구의 입력만 정리하고 출력은 정리하지 않습니다. 이는:

  • write의 출력은 보통 확인 메시지(작음)
  • write의 입력은 전체 파일 내용을 포함할 수 있음(큼)

오류 정리 전략

작동 원리

오류 정리 전략은 도구 호출 실패 후 N 회 대기한 다음 입력 파라미터를 제거합니다(오류 메시지는 유지).

턴(turn)이란?

OpenCode 대화에서:

  • 사용자 메시지 전송 → AI 응답 = 1 턴
  • 도구 호출은 턴으로 카운트되지 않음

기본 임계값은 4 턴으로, 오류 도구의 입력은 4 턴 후 자동 정리됩니다.

적용 시나리오

활성화 권장 (기본 켜짐):

  • 도구 호출이 실패하고 입력이 클 때 (예: 큰 파일 읽기 실패)
  • 오류 정보는 유지해야 하지만 입력 파라미터는 더 이상 가치가 없을 때

비활성화 고려:

  • 디버깅을 위해 실패 도구의 전체 입력을 유지해야 할 때
  • "간헐적" 오류를 자주 만나고 이력을 유지하고 싶을 때

설정 방법

json
{
  "strategies": {
    "purgeErrors": {
      "enabled": true,   // 활성화 스위치
      "turns": 4        // 정리 임계값 (턴 수)
    }
  }
}

보호 대상 도구 (기본 정리 안 됨):

  • 중복 제거 전략과 동일한 보호 도구 목록

전략 실행 순서

3가지 전략은 고정된 순서로 실행됩니다:

mermaid
graph LR
    A["메시지 목록"] --> B["동기 도구 캐시"]
    B --> C["중복 제거 전략"]
    C --> D["덮어쓰기 전략"]
    D --> E["오류 정리 전략"]
    E --> F["정리 콘텐츠 교체"]

이는:

  1. 먼저 중복 제거 (중복 감소)
  2. 그 다음 덮어쓰기 정리 (무효화된 쓰기 정리)
  3. 마지막으로 오류 정리 (만료된 오류 입력 정리)

각 전략은 이전 전략의 결과를 기반으로 하며, 동일 도구를 중복 정리하지 않습니다.


함정 경고

❌ 오해 1: 모든 도구가 자동으로 정리된다고 생각

문제: task, write 등의 도구가 정리되지 않는 이유는?

원인: 이러한 도구는 보호 도구 목록에 있어 하드코딩된 보호를 받습니다.

해결책:

  • write 정리가 필요하다면 덮어쓰기 전략 활성화 고려
  • task 정리가 필요하다면 보호 파일 경로 설정을 통해 간접적으로 제어 가능

❌ 오해 2: 덮어쓰기 전략으로 컨텍스트가 불완전해짐

문제: 덮어쓰기 전략 활성화 후 AI가 이전 쓰기 내용을 찾지 못함.

원인: 전략은 "읽기로 덮어쓰기된" 쓰기만 정리하며, 쓰기 후 읽기가 없었다면 정리되지 않습니다.

해결책:

  • 파일이 실제로 읽혔는지 확인 (/dcp context로 확인 가능)
  • 쓰기 이력 유지가 필요하다면 이 전략 비활성화

❌ 오해 3: 오류 정리 전략이 너무 빨리 정리됨

문제: 오류 입력이 방금 정리되자마자 AI가 같은 오류를 다시 만남.

원인: turns 임계값이 너무 작게 설정됨.

해결책:

json
{
  "strategies": {
    "purgeErrors": {
      "turns": 8  // 기본값 4에서 8로 증가
    }
  }
}

언제 이 기술을 사용할까

시나리오추천 전략 조합
일상 개발 (읽기 위주)중복 제거 + 오류 정리 (기본 설정)
빈번한 쓰기 검증모두 활성화 (수동으로 덮어쓰기 활성화)
도구 실패 디버깅중복 제거만 활성화 (오류 정리 비활성화)
전체 컨텍스트 이력 필요모두 비활성화

본 강의 요약

  • 중복 제거 전략: 중복 도구 호출 감지, 최신 호출만 유지 (기본 활성화)
  • 덮어쓰기 전략: 읽기로 덮어쓰기된 쓰기 작업 입력 정리 (기본 비활성화)
  • 오류 정리 전략: N 회 후 오류 도구 입력 정리 (기본 활성화, 임계값 4)
  • 모든 전략은 보호 대상 도구와 보호 대상 파일 경로를 건너뜀
  • 전략은 고정된 순서로 실행: 중복 제거 → 덮어쓰기 → 오류 정리

다음 강의 예고

다음 강의에서는 **LLM 기반 정리 도구**를 학습합니다.

학습할 내용:

  • AI가 discard와 extract 도구를 자율적으로 호출하는 방법
  • 의미 수준의 컨텍스트 최적화 구현 방식
  • 핵심 발견을 추출하는 모범 사례

부록: 소스 코드 참고

클릭하여 소스 코드 위치 확인

업데이트 시간: 2026-01-23

기능파일 경로줄 번호
중복 제거 전략 구현lib/strategies/deduplication.ts13-83
덮어쓰기 전략 구현lib/strategies/supersede-writes.ts16-105
오류 정리 전략 구현lib/strategies/purge-errors.ts16-80
전략 엔트리 익스포트lib/strategies/index.ts1-5
기본 설정lib/config.ts423-464
보호 대상 도구 목록lib/config.ts68-79

주요 함수:

  • deduplicate() - 중복 제거 전략 메인 함수
  • supersedeWrites() - 덮어쓰기 전략 메인 함수
  • purgeErrors() - 오류 정리 전략 메인 함수
  • createToolSignature() - 중복 제거 매칭을 위한 도구 서명 생성
  • normalizeParameters() - 파라미터 정규화 (null/undefined 제거)
  • sortObjectKeys() - 파라미터 키 정렬 (서명 일관성 보장)

기본 설정값:

  • strategies.deduplication.enabled = true
  • strategies.supersedeWrites.enabled = false
  • strategies.purgeErrors.enabled = true
  • strategies.purgeErrors.turns = 4

보호 대상 도구 (기본 정리 안 됨):

  • task、todowrite、todoread、discard、extract、batch、write、edit、plan_enter、plan_exit