LLM에게 ‘기억’을 준다는 것: 벡터 vs 지식 그래프 기반 장기 메모리 구현
대화형 인공지능 시스템을 만들다 보면, 똑같은 질문을 반복하거나 이전 대화를 기억하지 못해 생기는 한계를 자주 마주하게 됩니다. 마치 영화 '메멘토' 속 주인공처럼 매번 상황을 새로 설명해줘야 한다면, 사용자 경험은 빠르게 떨어집니다.
이 글에서는 이러한 문제를 해결하기 위한 '장기 메모리 시스템'의 필요성과, 이를 구현하기 위한 기술적 선택지인 벡터 기반 시스템과 지식 그래프 기반 시스템에 대해 자세히 살펴보겠습니다. 또한, 실제로 사용 가능한 오픈소스 및 클라우드 솔루션도 함께 소개하며, 어떤 상황에 어떤 방식이 적합한지에 대한 인사이트를 제공하고자 합니다.
왜 LLM에게 ‘기억’이 필요한가?
LLM은 기본적으로 상태(state)를 가지지 않는 구조입니다. 한 번의 입력과 출력만 처리하고, 이전 대화나 사용자 정보를 기억하지 못합니다. 이는 인간과 가장 큰 차이 중 하나입니다. 우리가 자연스럽게 이어서 대화하듯이 LLM이 동작하길 기대하지만, 매번 처음부터 설명해야 하는 불편함이 생깁니다.
단기 메모리(Short-term Memory)는 비교적 간단하게 구현할 수 있습니다. 이전 대화 내용을 몇 개 포함하여 다시 LLM에 보내면 되기 때문입니다. 하지만 대화가 길어지고 복잡해질수록 이 방식은 금방 한계를 드러냅니다. 바로 이 지점에서 장기 메모리(Long-term Memory)의 필요성이 대두됩니다.
장기 메모리 시스템, 어떻게 구성해야 할까?
장기 메모리를 구현하기 위해 필요한 기능은 생각보다 복잡합니다. 단순히 정보를 저장하는 것을 넘어서, 다음과 같은 기능들이 필요합니다.
- 기억 불러오기: “내가 물어봤던 그 레스토랑 이름 뭐였지?”와 같은 질문에 답할 수 있도록 이전 대화나 정보를 꺼내야 합니다.
- 중요도 판단: 어떤 정보를 기억할지, 요약할지를 판단해야 합니다.
- 정보 업데이트: 과거 정보가 바뀌었을 경우, 기존 정보를 폐기하거나 수정하는 시스템이 필요합니다.
- 시간 인지: 정보가 언제 언급되었는지 인지할 수 있어야 “언제 그 얘기했었지?” 같은 질문에 답할 수 있습니다.
- 정보 연결: 복합적인 질문(예: “내가 올해 몇 번 공연 갔었지?”)에 답하려면 다양한 기억을 연결할 수 있어야 합니다.
이런 기능을 구현하기 위해 대부분의 시스템은 다음 두 가지 아키텍처 중 하나를 선택합니다.
벡터 기반 vs 지식 그래프 기반: 두 가지 접근 방식
벡터 기반 시스템
벡터 기반 시스템은 정보를 임베딩(embedding) 형태로 저장하고, 유사한 의미를 가진 정보를 검색해주는 구조입니다. 대부분의 RAG(Retrieval-Augmented Generation) 시스템이 이 방식을 따릅니다.
- 장점:
- 시작이 쉽고, 오픈소스 도구도 다양함
- 의미 기반 검색이 가능해 자연어 처리에 강함
- 단점:
- 시간이 지남에 따라 불필요한 정보가 누적됨
- 모순된 정보가 함께 검색될 가능성
- 시간 순서를 파악하거나 관계 기반 추론에 약함
이를 해결하기 위해 요약, 메타데이터(예: 타임스탬프), 데이터 압축, 주기적 정리가 필요합니다. 하지만 이 또한 관리 복잡도를 증가시키는 요소입니다.
지식 그래프 기반 시스템
지식 그래프(Knowledge Graph)는 정보를 개체(노드)와 관계(엣지)로 구성해 저장하는 방식입니다. 각 개체 간 연결성을 기반으로 다중 단계를 거친 추론(Multi-hop Reasoning)도 가능합니다.
- 장점:
- 관계 기반 정보 구조로 논리적인 추론과 시간적 인과관계 파악이 우수함
- 정보 갱신 시 기존 데이터를 보존하면서 유효성만 조정 가능 (예: invalid_at 속성)
- 단점:
- 인프라 구성 및 유지가 복잡하고, 시스템이 커질수록 검색 속도 저하 가능
- 벡터 방식보다 구현 난이도가 높음
실제 솔루션 비교
현재 사용 가능한 솔루션은 대부분 벡터 기반 혹은 지식 그래프 기반 중 하나를 따르며, LLM과의 결합을 통해 기억 생성 및 갱신을 수행합니다.
- Zep (지식 그래프 기반)
LLM을 활용해 정보 노드를 생성하고, 타임스탬프를 기반으로 갱신. 모순된 정보도 함께 저장하면서 변경 이력을 추적 가능. SOC 2 인증된 클라우드 서비스 제공. - Mem0 (벡터 기반)
팩트 기반 정보를 자동 추출해 저장하며, 유효하지 않은 정보는 덮어쓰는 방식으로 정리. 자체 편집 기능을 통해 오래된 정보를 자동 업데이트. - Letta (벡터 기반)
기본적으로 Mem0와 유사하나, 핵심 기억(Core Memory) 기능을 추가하여 대화 요약을 블록 단위로 관리.
이들 솔루션은 모두 사용자가 정의한 카테고리(예: 사용자 프로필, 현재 기분 등)에 따라 기억을 분류할 수 있는 구조를 갖고 있습니다.
비용과 확장성: 꼭 고려해야 할 요소
이러한 시스템을 도입할 때 중요한 것은 비용 구조입니다. 대부분 무료로 시작할 수 있지만, 사용량이 늘면 메시지 단위 요금이 발생합니다. 수백 개의 대화가 매일 발생하는 서비스에서는 비용이 빠르게 증가할 수 있습니다.
비용을 줄이는 전략 예시:
- 중요 메시지만 저장하도록 분류기(Classifier) 사용
- 나머지는 자체 벡터 저장소에 요약해서 저장
- 일정 주기로 오래된 데이터 압축 또는 제거
초기에는 클라우드 솔루션으로 시작하고, 서비스가 커지면 자체 호스팅이나 하이브리드 방식으로 전환하는 것이 효과적입니다.
LLM에게 기억을 준다는 것은 단순히 대화 이력을 저장하는 것을 넘어, 정보를 어떻게 저장하고 언제 어떻게 꺼내쓸지를 설계하는 일입니다.
- 벡터 기반은 빠르게 시작할 수 있으나, 정보의 시간적 관계나 복잡한 추론에는 한계가 있습니다.
- 지식 그래프 기반은 구조화된 추론과 업데이트에 강하지만, 관리 복잡도가 높습니다.
- 어떤 방식을 선택하든, 요약, 분류, 시간 인지, 정보 갱신 기능은 필수입니다.
아직 완벽한 솔루션은 존재하지 않지만, 현재의 도구와 접근 방식으로도 충분히 강력한 장기 기억 시스템을 구축할 수 있습니다. 중요한 것은 기술보다도 ‘기억’이 사용자 경험에서 어떤 역할을 할지를 먼저 정의하고, 그 목적에 맞는 설계를 선택하는 일입니다.
지금이 바로, LLM에 ‘기억’을 불어넣을 시점입니다.
Agentic AI: Implementing Long-Term Memory | Towards Data Science
The problem and current solutions
towardsdatascience.com