왜 에이전트 메모리가 문제인가
AI 에이전트가 프로덕션 환경에 대규모 배포되면서 공통적으로 맞닥뜨리는 한계가 드러나고 있다. LLM은 본질적으로 **무상태(stateless)**다. API 호출이 이루어질 때마다 이전 대화를 전혀 기억하지 못한 채 새로 시작한다. 이를 해결하기 위해 팀들은 다양한 임시방편을 써왔다.
- 전체 대화 이력을 매번 컨텍스트 창에 밀어넣기 (비용 폭발적 증가)
- 수동으로 관리하는 사실(fact) 파일 유지 (유지보수 부담, 확장성 없음)
- 직접 메모리 시스템 구축 (시간과 비용 소모)
Weaviate CEO 밥 반 뤼이트는 이 문제를 한 문장으로 정리했다.
"메모리는 질문에 답하는 에이전트와 시간이 지날수록 더 잘하는 에이전트의 차이입니다."
Engram이란 무엇인가
Engram은 Weaviate 벡터 데이터베이스 위에서 실행되는 관리형 메모리 서비스다. 에이전트 애플리케이션에서 발생하는 원시 이벤트(대화, 텍스트, 사전 추출된 사실 등)를 받아 자동으로 구조화된 내구성 있는 메모리로 변환하고, 이를 하이브리드 시맨틱+키워드 검색으로 조회할 수 있게 제공한다.
1. 추출(Extract) — 원시 텍스트·대화에서 개별 사실을 추출한다.
2. 변환(Transform) — 기존 메모리와 비교해 중복 제거·병합·시간 변화 반영.
3. 커밋(Commit) — Weaviate 벡터 DB에 최종 메모리 상태를 저장.
전체 과정은 비동기(fire-and-forget)로 실행돼 에이전트 응답 지연에 영향을 주지 않는다.
핵심 기능: 구조화·범위 지정·템플릿
범위(Scoping) 지정
메모리는 프로젝트·사용자·속성 단위로 격리된다. 멀티테넌트 환경에서 특정 사용자의 메모리가 다른 사용자에게 노출되지 않으며, 멀티에이전트 시스템에서는 필요할 때 컨텍스트를 공유할 수도 있다.
기성 템플릿
복잡한 파이프라인 설정 없이 바로 사용할 수 있는 use-case 템플릿을 제공한다.
| 템플릿 | 설명 |
|---|---|
| 개인화(Personalization) | 사용자 선호도·이력을 기억해 맞춤 응답 제공 |
| 지속 학습(Continual Learning) | 에이전트가 피드백으로부터 점진적으로 개선 |
| 멀티에이전트 공유 상태 | 여러 에이전트가 동일한 컨텍스트 풀에서 협업 |
하이브리드 검색
메모리 조회는 벡터 유사도 검색(의미 기반)과 BM25 키워드 검색을 결합한 하이브리드 방식을 지원한다. 이미 수억 건의 다운로드로 검증된 Weaviate 검색 스택을 그대로 사용하므로 별도 검색 인프라 구축이 필요 없다.
직접 메모리 레이어를 구축하면 추출 LLM 선택, 중복 제거 로직, 벡터 저장소 운영, 검색 최적화를 모두 직접 처리해야 한다. Engram은 이 모든 것을 관리형 서비스로 제공하며, 필요하면 파이프라인 개별 단계까지 직접 제어하는 옵션도 열려 있다.
실제 구현 예: 채팅 앱에 장기 메모리 추가
Engram의 전형적인 사용 사례는 대화 기반 에이전트에 장기 메모리를 추가하는 것이다.
- 대화 후: 교환된 메시지를 Engram에 전송 (
memories.add()) - 백그라운드 파이프라인: "베를린에 거주", "스페셜티 커피 선호" 등의 사실을 자동 추출·저장
- 다음 대화 전: 사용자 입력 관련 메모리를 조회 (
memories.search()) - LLM 호출: 검색된 메모리를 시스템 프롬프트에 포함해 개인화된 응답 생성
세션을 종료하고 재시작해도 에이전트는 이전 대화에서 알게 된 사실을 기억한다.
- Weaviate Engram이 GA 전환: 오픈소스 Weaviate DB 기반 AI 에이전트용 관리형 메모리 서비스
- 비동기 3단계 파이프라인: 추출 → 변환(중복제거) → 커밋
- 범위 지정(Scoping)으로 프로젝트·사용자별 메모리 격리 및 멀티에이전트 공유 지원
- 기성 템플릿: 개인화, 지속 학습, 멀티에이전트 공유 상태
- 하이브리드 검색(벡터 + BM25 키워드) 지원
- 무료 티어: 월 1,000회 파이프라인 실행 / 유료: $45/월~