본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 19. 14:58

에이전트가 기억한다는 것, 그것이 문제입니다

요약

코딩 에이전트의 메모리 관리에서 발생하는 '과거의 사실이 현재의 거짓이 되는 문제'를 다룹니다. 단순히 기억하는 것을 넘어, 에이전트가 습득한 정보의 진위 여부를 검증하고 신뢰도를 관리하는 메커니즘의 중요성을 강조합니다.

핵심 포인트

  • 에이전트의 메모리는 단순 기억이 아닌 '진실성' 검증의 문제임
  • 기존의 동기화 방식은 잘못된 정보를 전파하여 문제를 악화시킬 수 있음
  • 에이전트의 기록은 인간의 승인이나 하드 시그널을 통해 '확인됨' 상태로 승격되어야 함
  • 의존성 변화 등 앵커가 깨지면 정보의 신뢰도를 즉시 '추측' 상태로 격하해야 함

우리는 코딩 에이전트에게 무언가를 기억하도록 가르치는 데 1년을 보냈습니다. 기억하는 것은 쉬운 부분이라는 것이 밝혀졌습니다. 어려운 부분은 그 기억들 중 어떤 것이 여전히 _진실(true)_인지 아는 것입니다.

저를 결국 좌절하게 만든 실패 사례는 다음과 같습니다.

사실로 격상된 추측

저는 Cursor에게 제 프로젝트가 npm에서 bun으로 전환되었다고 말했습니다. 나중에 Claude Code에서 에이전트는 자신 있게 npm install을 실행했고, 결코 작동하지 않을 빌드를 디버깅하며 한참을 보냈습니다. "우리는 npm을 사용한다"라는 믿음이 진실보다 더 오래 살아남은 것입니다. 그리고 에이전트에게는 그것이 메모리 속의 다른 모든 사실과 똑같아 보였기 때문에 아무도 이를 지적하지 않았습니다.

이는 전형적인 사례와 같은 형태입니다: "우리는 Jest를 사용한다"라는 사실이 Vitest로의 마이그레이션 이후에도 살아남아, 세 번의 세션이 지난 후 에이전트가 더 이상 Jest가 없는 저장소를 위해 즐겁게 Jest 테스트를 작성하는 것과 같습니다.

이 중 어느 것도 _망각(forgetting)_의 문제는 아닙니다. 에이전트는 잘 기억했습니다. 에이전트는 과거에 진실이었던 것을 기억했고, 그것이 여전히 진실인 것처럼 취급했습니다.

동기화(Sync)는 해결책이 아닙니다

대부분의 "AI 메모리" 도구들은 사실 동기화(sync) 도구입니다. 한 도구에서 일어난 일을 캡처하여 다음 도구에서 사용할 수 있게 만드는 것이죠. 그것은 진정으로 유용하지만, 위에서 언급한 문제를 조용히 _악화_시킵니다. 이제 당신의 오래된 추측이 당신과 함께 이동하기 때문입니다.

그리고 위험한 기억은 모호한 것들이 아닙니다. 그것들은 끊임없이 참조되는 것들, 즉 당신의 스택, 당신의 컨벤션(conventions), 당신의 "항상 X를 한다"와 같은 것들입니다. 높은 빈도의 읽기는 높은 신뢰도로 이어지므로, 이러한 정보들은 모든 새로운 세션에 가장 먼저 재주입됩니다. 만약 그중 하나가 틀렸다면, 중요도 점수(importance scoring)가 그것을 애정 어린 마음으로 보호하게 될 것입니다.

그래서 제가 막혔던 질문은 _에이전트가 무엇을 기억해야 하는가_가 아니었습니다. 그것은 _에이전트가 무엇을 실제로 진실이라고 부를 권리를 얻었는가_로 바뀌었습니다.

메모리를 신뢰의 문제로 취급하기

제가 도달한 모델은 다음과 같습니다: 에이전트가 작성한 그 어떤 것도 기본적으로 신뢰하지 않는 것입니다.

에이전트가 기록하는 모든 사실은 그것을 작성할 때 얼마나 자신감 있게 들렸는지와 상관없이 미검증(unverified) 상태로 남습니다. 그것은 에이전트 외부의 무언가가 그렇게 말할 때에만 "확인됨(confirmed)" 상태로 승격됩니다:

  • 내가 승인하거나 (인간의 결정),
  • 확실한 신호(hard signal)가 발생할 때 — 통과된 테스트, 명령 결과, 또는 리포지토리 앵커(dependency, 실제로 존재하는 파일)와 같은 경우입니다.

가장 중요한 부분은 다음과 같습니다: 앵커가 깨졌을 때 — 즉, 의존성(dependency)이 사라지거나 파일이 이동했을 때 — 그 사실은 만료를 기다리며 '오래됨(staleness)' 타이머에 머물러 있지 않습니다. 그것은 즉시 다시 추측(guess) 상태로 스스로를 떨어뜨립니다. 진실이 사라졌으므로, 신뢰도 함께 사라지는 것입니다.

이는 에이전트가 결코 스스로의 숙제에 점수를 매기지 않는다는 것을 의미합니다. 확신에 찬 잘못된 추론과 올바른 추론은 시작 단계에서는 동일하게(둘 다 미확인 상태로) 출발하며, 오직 하나만이

신뢰가 유일한 축은 아닙니다. 중요도/최신성 가지치기 (Importance/recency pruning) — 중요한 것은 남기고 노이즈는 버리는 것 — 는 정말 유용하고 실질적인 아이디어이며, 많은 훌륭한 메모리 도구들이 이를 핵심으로 삼고 있습니다. 다만 저는 이것이 저를 계속 괴롭혔던 질문(무엇이 실제로 사실인가)과는 다른 질문(무엇을 보관할 가치가 있는가)에 대한 답을 내놓는다고 생각합니다. 이 둘은 상호 보완적이며, 저는 둘 다를 원합니다.

이를 공개적으로 구축하기

저는 이 아이디어를 piia-engram에 담았습니다. 이는 MCP 클라이언트 (Claude Code, Cursor, Codex)를 위한 로컬 우선 (local-first), 콘텐츠 불가지론적 (content-blind) 메모리 레이어입니다. 오픈 소스이며, pip install piia-engram으로 설치할 수 있습니다. 주로 로컬 우선 방식을 채택한 이유는 "내 메모리가 프라이빗한가?"라는 질문에 대한 가장 깔끔한 답변이 "애초에 아무것도 당신의 기기를 떠나지 않았다"이기 때문입니다.

하지만 이 도구는 솔직히 아이디어에 비하면 부차적인 것입니다. 만약 여러분이 도구 간 메모리 (cross-tool memory)를 구축하거나 사용하고 있다면, 저는 진심으로 알고 싶습니다: 여러분의 에이전트가 무엇을 신뢰하도록 허용할지 어떻게 결정하나요? 중요도인가요? 최신성인가요? 출처 (Provenance)인가요? 아니면 완전히 다른 무엇인가요?

이 방식이 어디서 무너지는지 알려주세요.

공개적으로 구축 중 (Building in public). 로컬 우선 (Local-first). AI의 추측은 무언가가 그것을 증명하기 전까지는 사실이 아닙.

AI 자동 생성 콘텐츠

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

원문 바로가기
0

댓글

0