AI 에이전트 장기 기억 구현 가이드: Letta와 Zep으로 세션이 끝나도 사용자를 기억하는 에이전트 만들기
· AI & 바이브코딩
■ 1. 컨텍스트 윈도우가 커져도 기억은 해결되지 않는다
최신 언어 모델이 수십만에서 백만 단위 토큰을 한 번에 처리할 수 있게 됐지만, 그것과 에이전트가 사용자를 기억하는 것은 다른 문제입니다. 이유는 세 가지입니다.
- 세션이 끝나면 문맥이 사라집니다. 다음 대화는 다시 처음부터 시작됩니다.
- 문맥을 길게 넣을수록 비용과 지연이 함께 늘어납니다. 매 요청마다 지난 6개월 대화를 붙일 수는 없습니다.
- 문맥이 길어지면 중간에 있는 정보를 놓치는 현상이 나타납니다. 넣었다고 해서 반드시 반영되는 것은 아닙니다.
그래서 필요한 것이 장기 기억 계층입니다. 무엇을 남기고 무엇을 버릴지, 어디에 저장하고 언제 다시 불러올지를 명시적으로 설계하는 방식입니다.
■ 2. Letta, 운영체제의 가상 메모리를 흉내 낸 접근
MemGPT라는 이름으로 알려졌던 프로젝트는 현재 Letta로 개칭되어 개발되고 있습니다. 핵심 발상은 운영체제가 램과 디스크 사이에서 페이지를 옮기듯, 에이전트가 프롬프트와 외부 저장소 사이에서 기억을 옮긴다는 것입니다.
- 메인 컨텍스트: 모델이 즉시 참조하는 프롬프트 영역입니다. 페르소나와 사용자 핵심 정보, 최근 대화가 들어갑니다. 크기는 사용하는 모델과 설정에 따라 달라집니다.
- 외부 저장소: 과거 대화 원문과 문서를 벡터 데이터베이스나 관계형 데이터베이스에 보관합니다.
- 자율 메모리 함수: 에이전트가 대화 도중 필요하다고 판단하면 스스로 검색 함수를 호출해 과거 기억을 불러오고, 중요한 사실은 핵심 기억 블록을 갱신해 저장합니다.
사람이 매번 무엇을 기억하라고 지시하지 않아도 에이전트가 기억 관리를 스스로 수행한다는 점이 이 방식의 특징입니다.
■ 3. Zep, 시간을 다루는 지식 그래프
단순 벡터 검색은 "지난달에는 파이썬을 썼지만 이번 주부터 러스트로 옮겼다"는 상황에서 두 사실을 비슷한 점수로 반환합니다. 무엇이 최신인지 구분하지 못하기 때문입니다. Zep은 대화에서 추출한 사실을 시간 정보가 붙은 지식 그래프로 관리해, 새 사실이 들어오면 이전 사실의 유효 구간을 닫는 방식으로 모순을 처리합니다.
공개된 논문에서 보고한 수치는 다음과 같습니다.
- DMR 평가: 94.8%로, 비교 대상인 MemGPT의 93.4%보다 소폭 높았습니다.
- LongMemEval 평가: 정확도가 최대 18.5%포인트 수준까지 개선됐고, 응답 지연은 기준 구현 대비 약 90% 줄었다고 보고했습니다.
간혹 "토큰 비용 90% 절감"이라는 표현이 보이는데, 논문이 보고한 90%는 비용이 아니라 지연 시간에 대한 값입니다. 비용 절감 효과는 저장 전략과 호출 방식에 따라 달라지므로 자기 환경에서 직접 측정해야 합니다.
■ 4. 기억을 정리하는 과정
기억을 계속 쌓기만 하면 검색 품질이 떨어집니다. 그래서 대부분의 프레임워크가 정리 단계를 둡니다.
- 추출: 대화에서 사실, 선호, 결정 사항을 뽑아냅니다.
- 중복 제거와 갱신: 같은 대상에 대한 기존 기억이 있으면 합치거나 대체합니다.
- 요약과 압축: 세부 대화 원문은 남겨 두되 요약본을 별도로 만들어 검색 진입점으로 씁니다.
- 만료 처리: 유효 기간이 지난 정보에 표시를 남겨 최신 정보가 우선되도록 합니다.
이 작업은 대화가 끝난 뒤 백그라운드에서 상대적으로 작은 모델로 처리하는 경우가 많습니다. 응답 속도에 영향을 주지 않으면서 비용도 낮출 수 있기 때문입니다.
■ 5. 어떤 업무에 실익이 있나
- 개인화 코파일럿: 개발자의 코드 컨벤션, 선호 라이브러리, 프로젝트 구조를 기억해 매번 같은 설명을 반복하지 않아도 되게 합니다.
- 장기 고객 응대: 이전 문의 이력과 처리 결과를 기억해 상담이 이어지도록 합니다. 다만 고객 정보를 다루므로 보관 기간과 삭제 절차를 반드시 함께 설계해야 합니다.
- 사내 온보딩 안내: 신규 입사자의 질문 이력과 학습 진행 상황을 추적해 다음 단계를 제안합니다.
공통적으로 대화가 여러 번 이어지고, 이전 맥락을 아는 것이 결과 품질을 실제로 바꾸는 업무에서 효과가 큽니다. 한 번의 질의로 끝나는 업무라면 장기 기억을 붙이는 것이 오히려 복잡도만 늘립니다.
■ 6. 실전 구축 4단계
- 1단계 환경 준비: 파이썬 환경에 Letta를 설치하고 사용할 모델과 임베딩 모델을 지정합니다. 설치 명령과 설정 방식은 버전에 따라 달라지므로 공식 저장소 문서를 기준으로 진행하십시오.
- 2단계 기억 구조 설계: 사용자 정보 블록과 에이전트 페르소나 블록을 정의합니다. 어떤 항목을 핵심 기억으로 상주시킬지 미리 정하는 것이 품질을 좌우합니다.
- 3단계 저장소 연결: 아카이브 저장소로 PostgreSQL과 pgvector 같은 조합을 연결하고, 보존 기간과 접근 권한 정책을 함께 정합니다.
- 4단계 회상 검증: 여러 세션에 걸쳐 대화한 뒤 이전 정보를 정확히 떠올리는지, 바뀐 사실을 최신 값으로 반영하는지 시나리오 테스트로 확인합니다. 잘못 기억한 사례를 모아 두면 기억 추출 규칙을 개선하는 근거가 됩니다.
■ 7. 자주 묻는 질문 3가지
질문 1. RAG만으로는 부족한가요?
목적이 다릅니다. RAG는 정해진 문서 집합에서 답의 근거를 찾는 기술이고, 장기 기억은 사용자와의 상호작용에서 생긴 사실을 시간에 따라 관리하는 기술입니다. 실제 시스템에서는 둘을 함께 씁니다.
질문 2. 개인정보는 어떻게 다뤄야 하나요?
기억은 곧 개인정보 저장이므로 수집 항목을 최소화하고, 보관 기간과 삭제 요청 처리 절차를 먼저 정해야 합니다. 민감 정보는 아예 기억 대상에서 제외하는 필터를 두는 편이 안전합니다.
질문 3. 어떤 프레임워크를 골라야 하나요?
사실 간의 시간 관계와 모순 처리가 중요하면 그래프 기반 접근이, 에이전트가 스스로 기억을 관리하는 구조가 필요하면 Letta 계열이 맞습니다. 경량 저장과 빠른 도입이 우선이면 더 단순한 메모리 라이브러리도 선택지가 됩니다. 자기 데이터로 회상 정확도를 직접 비교해 보는 것이 가장 확실합니다.
■ 8. 용어 정리
- 상태 비저장: 이전 요청의 내용을 기억하지 않고 매번 새로 처리하는 방식입니다.
- 핵심 기억: 프롬프트에 항상 포함되는 소량의 중요 정보 블록입니다.
- 아카이브 저장소: 자주 쓰지 않는 과거 기록을 보관하는 외부 저장 공간입니다.
- 시간적 지식 그래프: 사실에 유효 시점을 붙여 관계망으로 관리하는 저장 구조입니다.
- 기억 통합: 쌓인 기억을 정리, 요약, 갱신해 검색 품질을 유지하는 과정입니다.