본문으로 건너뛰기
AIPida
채택됨고급AI 에이전트

코딩 에이전트 20턴 넘어가면 앞에서 고친 파일 다시 망가뜨립니다 — 컨텍스트 관리 어떻게 하세요?

장시간 도는 코딩 에이전트를 운영 중인데, 턴이 쌓일수록(체감상 20턴 넘어가면) 모델이 앞에서 내린 결정을 잊거나, 이미 고쳐놓은 파일을 다시 원래대로 되돌려놓거나, 엉뚱한 데로 샙니다.

지금은 그냥 대화 히스토리를 통째로 다음 호출에 넣고 있는데 이게 문제인 것 같긴 합니다. 윈도우가 커도(수십만 토큰) 중간에 있는 내용 활용이 떨어지는 느낌이에요.

실무에서 긴 에이전트 루프 컨텍스트 어떻게 관리하시나요? 요약 압축? 외부 메모리? 패턴이 궁금합니다.

답변 3

  • 채택된 답변에디터 검증

    "윈도우 크면 다 넣어도 된다"가 함정이에요. 길어질수록 모델이 중간에 묻힌 정보를 놓치는 lost in the middle 현상이 오고, 관련 없는 과거 토큰이 그냥 노이즈로 깔립니다. 넣을 수 있다 ≠ 넣어야 한다.

    제가 굴리는 코딩 에이전트는 컨텍스트를 세 층으로 쪼개요.

    1. 고정 핵심 — 목표, 제약, 지금까지 확정된 결정. 압축 안 하고 매 턴 그대로 들고 감.
    2. 작업 상태(외부 메모리) — 어떤 파일을 왜 어떻게 고쳤는지를 대화 히스토리가 아니라 별도 파일(저는 그냥 STATE.md)에 적게 하고, 매 턴 그 현재 스냅샷만 주입. 대화 원문 통째로는 안 넣음.
    3. 최근 턴 원문 — 직전 2~3턴만 raw로.

    오래된 턴 원문은 잘라내되 거기서 나온 결정/사실은 1층이나 2층으로 승격시켜서 보존합니다. 원문은 버리고 추출된 사실만 남기는 거죠. 이렇게 하면 30턴, 50턴 가도 컨텍스트가 선형으로 안 부풀고 품질도 버팁니다.

    질문에서 "이미 고친 파일을 다시 망가뜨린다"는 게 딱 2층이 없을 때 나오는 증상이에요. 작업 상태를 안 들고 있으니까 매 턴 처음 보는 것처럼 행동하는 겁니다. 이거 하나만 도입해도 체감 확 달라져요.

  • RAG로 과거 대화를 벡터DB에 박아놓고 필요할 때 검색해 넣는 방식도 있긴 한데, 코딩 에이전트엔 별로였습니다. 코드는 "의미적으로 비슷한 과거 대화"보다 "지금 이 파일의 현재 내용"이 압도적으로 중요해서요. 검색 메모리는 CS 봇처럼 사실 조각이 흩어진 도메인엔 맞는데, 상태가 또렷한 코딩/운영 작업엔 윗분 말대로 명시적 상태 스냅샷이 정답에 가깝습니다.

  • 에디터 검증

    위 3층 구조 동의하고 실전 팁 하나. 확정된 결정을 모델한테 자유 텍스트로 요약시키지 마세요. 요약의 요약의 요약 돌다 보면 초기 결정이 미묘하게 변질됩니다. 대신 포맷을 강제하는 게 나아요.

    저는 decisions.md를 append-only로 두고 이런 라인만 추가하게 합니다.

    - [확정] 인증은 매직링크로 간다 (이유: 비번관리 비용↓, 2026-06-14)
    - [확정] format.ts는 api/web 각자 두고 공유 안 함
    

    매 턴 이 파일 통째로 컨텍스트에 넣고, 절대 기존 줄을 고치지 말고 추가만. 그러면 손실이 거의 없어요.

    그리고 코딩 에이전트면 매 턴 git diff나 파일 현재 상태를 ground truth로 다시 읽게 하는 게 제일 확실합니다. 모델 기억보다 실제 디스크 상태가 진실이니까.