"장기 대화나 대용량 문서를 처리하는 AI 에이전트 시스템에서 대화가 길어질수록 지난 대화의 중요한 핵심 정보(Entity)나 지침을 잊어버리고, 대화 문맥 전체를 프롬프트에 반복 주입하느라 API 비용이 매일 기하급수적으로 증가하는 '메모리 과부하 및 망각 문제' 때문에 시스템 운영에 어려움을 겪었습니다."
AI 에이전트를 장기 프로젝트 관리자, 개인화 학습 코치, 혹은 다회차 상담 챗봇으로 구축하여 운용할 때 설계자를 가장 골치 아프게 만드는 문제가 있습니다. 바로 '대화가 누적될수록 발생하는 기억 상실과 프롬프트 비용 폭증' 현상입니다.
에이전트가 사용자와 20번, 30번 넘게 깊은 대화를 나누다 보면 기존 대화 내역 전체를 메인 프롬프트에 계속 이어서 밀어 넣을 수밖에 없습니다. 그 결과 대화 한 번에 2만~3만 토큰이 소비되며 API 비용이 눈덩이처럼 불어나고, 정작 대화 초반에 나누었던 사용자의 핵심 취향이나 고유 정보(Entity)는 모델의 컨텍스트 압박 속에 희미해져 또다시 같은 질문을 되묻는 실수를 저지르게 되지요. 오늘은 제가 직접 경험했던 '장기 대화 처리 중 사용자의 중요 정보를 잊어버려 신뢰도를 잃었던 메모리 잔혹사'와 이를 완벽하게 해결해 낸 '계층적 압축 메모리 & 엔티티 영구 저장소(Hierarchical Compaction & Entity Store)' 구축기를 이야기해 볼게요.
1. "어제 말씀드린 제 이름을 또 물어보시나요?" - 단기 기억상실의 비극
사용자의 학습 습관과 개별 취향을 기억하여 장기적으로 맞춤형 조언을 제공하는 에이전트를 오픈했을 때였습니다. 대화 초기에는 아주 똑똑하게 사용자의 상태를 파악하고 맞춤형 솔루션을 제안하여 감탄을 자아냈지요.
하지만 대화 회차가 15회를 넘어서면서 문제가 터졌습니다. 프롬프트 토큰 용량을 아끼기 위해 최근 대화 5개만 남기고 과거 대화를 무작정 잘라버리는 슬라이딩 윈도우(Sliding Window) 방식을 적용했더니, 에이전트가 어제 사용자가 말했던 '현재 공부 중인 과목'이나 '목표 점수' 같은 핵심 맥락을 완전히 까먹어버린 것입니다. 사용자는 "어제 다 말했는데 왜 똑같은 걸 또 물어보냐"며 깊은 실망감을 드러냈지요.
단순히 전체 대화를 다 밀어 넣는 방식은 비용 폭탄을 부르고, 대화를 무작정 잘라내는 방식은 에이전트의 영혼(맥락)을 파괴한다는 사실을 뼈저리게 깨달은 순간이었습니다.
2. 시행착오: 매 대화마다 "이전 대화 요약해 줘"라고 시켰더니...
기억을 유지해 보겠다고 매 대화가 끝날 때마다 전체 대화를 요약하는 프롬프트를 실행해 보았습니다.
그러나 이 역시 또 다른 장벽에 부딪혔습니다. 요약문 생성을 위해 매번 전체 문맥을 LLM에 넘기다 보니 요약 전용 API 호출 비용이 배보다 배꼽이 더 크게 발생했고, 요약이 거듭될수록 '사용자의 이름', '특정 날짜', '고유 식별값' 같은 정밀한 사실(Fact) 데이터가 두리뭉실한 문장으로 뭉개져 사라졌습니다. 일반적인 텍스트 요약만으로는 고유 정보(Entity)의 정밀성을 지켜낼 수 없었던 것이죠.
💡 몬이쌤의 생각: 학원에서 아이의 생활기록부를 작성할 때 아이가 했던 모든 말을 토씨 하나 안 틀리고 다 기록할 필요는 없습니다. 아이의 '이름, 목표 대학, 약점 유형, 좋아하는 보상' 같은 핵심 지표는 생활기록부 앞장 카드(Entity Store)에 딱 고정해 두고, 일일 수업 내용은 짧은 3줄 요약 노트(Compacted Memory)로 관리하는 정교한 기억 분류 체계가 필요합니다.
3. 해결책: '엔티티 추출 & 계층적 메모리 압축' 3단계 장기 기억 프로토콜
비용을 최소화하면서도 사용자와 나눈 수개월 간의 대화 맥락과 핵심 팩트를 100% 완벽하게 보존하기 위해, 저는 '3단계 계층적 압축 메모리 & 엔티티 저장소 파이프라인'을 구축했습니다.
- 1단계 [실시간 엔티티 분리 추출(Entity Graph Extraction)]: 사용자의 입력 속에서 이름, 설정값, 고유 명사, 핵심 선호도 데이터가 감지되면, 이를 텍스트 대화록에 남겨두지 않고 즉시 JSON 형태의 독립된 '엔티티 영구 저장소(Entity DB)'에 구조화하여 기록합니다.
- 2단계 [계층적 요약 압축(Hierarchical Summary Compaction)]: 대화가 10회 이상 누적되면, 배경 맥락 텍스트만을 별도의 비동기 가벼운 모델로 넘겨 '에피소드 요약' -> '상위 주제 요약'으로 2단계 압축하여 프롬프트의 메모리 슬롯을 최소화합니다.
- 3단계 [동적 맥락 결합 주입(Dynamic Context Assembly)]: 새로운 대화가 들어오면, [엔티티 DB의 고정 팩트] + [압축된 상위 대화 요약] + [최근 3개의 생생한 대화]만을 조합하여 메인 프롬프트에 주입합니다.
4. 결과: API 토큰 요금 70% 절감 & 중요 팩트 기억 정확도 100% 달성!
3단계 계층적 압축 메모리 및 엔티티 저장소 프로토콜을 도입한 이후, 사용자와 수백 번의 대화를 이어가더라도 프롬프트 토큰 사용량이 일정 수준 이하로 완벽하게 통제되었습니다!
무겁게 쌓이던 맥락 텍스트가 가볍고 정교하게 압축되면서 월 API 토큰 비용이 70% 이상 대폭 절감되었을 뿐만 아니라, 엔티티 DB를 통해 사용자의 핵심 고유 정보를 단 하나도 잊어버리지 않고 100% 기억해 내는 완벽한 개인화 에이전트를 완성했지요.
수준 높은 AI 에이전트를 설계한다는 것은 단지 대화 내역을 계속 프롬프트에 덧붙이는 것에 머물지 않습니다. '변하지 않는 핵심 고유 정보(Entity)와 흘러가는 맥락 요약(Compacted Context)을 분리하여 영구 기억 창고에 새기는 메모리 아키텍처를 세우는 것'이 지능의 장기 지속성을 결정짓는 핵심 비결입니다.
여러분의 AI 에이전트도 대화가 조금만 길어지면 예전 내용을 잊어버리거나 API 요금이 폭증하여 고민이신가요? 전체 대화를 무작정 프롬프트에 실어 나르지 말고, 엔티티 추출과 계층적 압축 메모리 파이프라인을 도입해 보세요. 알뜰한 비용으로 독자와의 모든 추억을 영구히 기억하는 명품 에이전트를 소유하게 되실 겁니다.
