MemGPT 소개 및 Milvus와의 통합
5월에 열린 비정형 데이터 밋업에서 UC Berkeley 박사 과정 학생이자 MemoryGPT(MemGPT)의 공동 창립자인 Charles Packer가 함께했습니다. Charles는 현재 대규모 언어 모델(LLMs)의 근본적인 병목 현상인 제한된 메모리를 강조하고, MemGPT가 OS 설계에서 영감을 얻어 이 문제를 어떻게 해결하고자 하는지 설명했습니다.
이 블로그에서는 강연에서 논의된 핵심 개념을 다루고 MemGPT가 도입한 ‘가상 확장 메모리’를 설명합니다. 하지만 지식을 직접 습득하고 싶다면 YouTube에서 전체 강연을 다시 볼 수 있습니다.
현재 LLM의 제한된 메모리
Charles는 LLM의 컨텍스트로서의 메모리를 소개하며 강연을 시작했고, 그 중요성을 강조했습니다. “LLM에게 메모리는 전부입니다.” LLM의 컨텍스트 창은 대화 중에 유지할 수 있는 정보의 양을 정의합니다. 이러한 유지 능력은 언어 모델이 이전 질의의 정보를 기억할 수 있게 하여 다양한 챗봇 애플리케이션을 개발하는 강력한 도구가 되게 합니다.
그러나 대부분의 주류 LLM에서 컨텍스트 창은 상당히 제한적입니다. 몇 가지 예로는 GPT4의 32k 토큰과 GPT4-Turbo의 128k 토큰이 있습니다. 제한된 메모리는 이러한 챗봇 애플리케이션이 일정 수의 질의가 지나면 오래된 대화를 잊어버리는 경향이 있음을 의미하며, 이는 실망스러운 사용자 경험으로 이어질 수 있습니다. Charles는 이 문제를 LLM 애플리케이션의 주요 병목 현상으로 강조하며, LLM이 어시스턴트가 아니라 검색 엔진에 불과하게 된다고 덧붙였습니다.
검색 엔진, LLM, AI 어시스턴트 간의 관계
메모리 문제에 가장 가까운 해결책은 검색 증강 생성(RAG)과 Gemini 같은 긴 컨텍스트 LLM입니다. 하지만 이것들이 어느 정도 개선을 제공하긴 하지만, RAG는 진정한 메모리가 아니며 긴 컨텍스트 LLM은 계산 비용을 여러 배로 증가시킵니다. 게다가 DevinAI 같은 긴 컨텍스트 모델의 기대 이하 성능은 제한된 컨텍스트가 문제가 아님을 증명합니다. 대신 문제는 토큰 관리 부실로 인한 컨텍스트 오염입니다.
MemGPT: 검색 엔진에서 어시스턴트로
MemGPT는 컴퓨터 시스템에서 구현된 메모리 페이징에서 영감을 받은 가상 확장 컨텍스트 창을 도입합니다. 컴퓨터에서는 핵심 정보가 더 빠른 접근을 위해 메모리(RAM)에 저장되지만, RAM이 가득 차면 나머지 데이터는 영구 저장소(ROM)에 저장됩니다. 운영 체제(OS)는 접근해야 하는 내용에 따라 RAM과 ROM 사이에서 정보를 교환합니다.
MemGPT는 확장 메모리 시스템을 생성하여 동일한 개념을 따릅니다. LLM 컨텍스트를 두 부분으로 나눕니다.
메인 컨텍스트: 이는 기반 LLM의 컨텍스트 창입니다. 제한된 대역폭을 가지며 즉시 접근할 수 있는 가장 관련성 높은 정보를 저장합니다.
외부 컨텍스트: 외부 컨텍스트는 영구 저장소(ROM)에 생성되며 무한한 창을 가집니다. 대화가 계속되고 메인 컨텍스트가 가득 차면서 핵심 아이디어와 정보를 저장합니다.
MemGPT는 두 컨텍스트 간의 정보 흐름을 관리하는 역할을 맡습니다. 현재 컨텍스트를 기반으로 메모리를 동적으로 업데이트하며, 메인 메모리 저장소와 외부 메모리 저장소 간에 정보를 효율적으로 교환합니다. 이러한 제어와 효율성이 시스템 성능의 핵심입니다.
이 접근 방식은 긴 컨텍스트 메모리를 요구하는 애플리케이션에서 MemGPT를 핵심 구성 요소로 자리매김하게 합니다. 예를 들어, 주요 사용자 생활 정보를 유지해야 하는 개인 비서 챗봇이 큰 이점을 얻을 수 있습니다. 개인 관계와 업무 세부 정보는 외부 컨텍스트에 저장되며, 진행 중인 대화에서 필요할 때 검색됩니다. 이 접근 방식은 사용자에게 진정한 '개인화된' 경험을 제공하여 시스템의 관련성과 유용성을 향상시킵니다.
MemGPT의 구조
Charles는 MemGPT의 아키텍처 설계와 표준 LLM 간의 주요 차이점을 설명했습니다. 첫 번째는 컨텍스트 처리 방식의 차이로, 위에서 자세히 논의했습니다. 두 번째는 입력과 출력을 처리하는 방식입니다. 입력과 출력은 JSON으로 구조화되어 있으며, 이를 일반 텍스트가 아니라 이벤트와 함수 호출로 취급합니다.
표준 LLM 설정
MemGPT 작동 방식
문서, 사용자 쿼리, 시스템 알림을 입력으로 받아 LLM에서 이벤트를 트리거할 수 있습니다. 이벤트는 파싱되어 LLM으로 전달되며, LLM은 확장된 컨텍스트를 활용해 요구 사항을 처리하고 함수 호출과 같은 작업을 수행합니다. 이러한 아키텍처 설계를 통해 특정 작업을 수행하도록 훈련된 에이전트처럼 동작할 수 있습니다. 예를 들어 이메일이 수신되면 이벤트를 트리거할 수 있고, LLM은 이메일을 파싱하여 핵심 세부 정보를 추출하고 강조 표시합니다.
서비스로서의 MemGPT
Charles는 장기 사용을 위해 MemGPT를 프라이빗 서버에 배포하는 방법을 설명하며 세션을 마무리했습니다. 모든 상호작용과 쿼리는 시스템이 종료된 후에도 접근할 수 있는 상태 저장 데이터베이스에 유지됩니다.
MemGPT 에이전트는 서버에서 실행되므로 REST 애플리케이션 프로그래밍 인터페이스(API)를 통해 접근됩니다. 에이전트는 인터넷을 통해 어디서든 접근할 수 있어 상용 애플리케이션과 쉽게 통합할 수 있습니다.
MemGPT를 Milvus Vector Database와 통합하기
Milvus는 십억 규모의 벡터 저장 및 검색을 위한 오픈 소스 벡터 데이터베이스입니다. 또한 검색 증강 생성(RAG) 애플리케이션을 구축하는 데 가장 중요한 기술 중 하나입니다.
Milvus는 MemGPT와 통합되어 개발자가 외부 데이터 소스와 연결된 AI 에이전트를 더 쉽게 구축할 수 있게 합니다.
다음 예제에서는 MemGPT를 사용하여 Milvus에 저장된 사용자 지정 데이터 소스와 채팅하겠습니다.
구성
필요한 종속성을 설치합니다.
pip install 'pymemgpt[milvus]'
다음 명령을 통해 Milvus 연결을 구성합니다:
memgpt configure
...
? Select storage backend for archival data: milvus
? Enter the Milvus connection URI (Default: ~/.memgpt/milvus.db): ~/.memgpt/milvus.db
URI를 로컬 파일 경로(예: ~/.memgpt/milvus.db)로 설정하기만 하면, 빠른 프로토타이핑을 위한 Milvus의 경량 버전인 Milvus Lite를 통해 로컬 Milvus 서비스 인스턴스가 자동으로 호출됩니다.
중요 참고: 백만 개 이상의 문서처럼 더 많은 양의 데이터가 있는 경우, Docker 또는 Kubernetes에서 더 성능이 뛰어난 Milvus 서버를 설정하는 것을 권장합니다. 이러한 경우 URI는 서버 URI여야 하며, 예를 들어 <http://localhost:19530>입니다.
외부 데이터 소스 생성
이 단계에서는 MemGPT 챗봇에 외부 데이터를 공급하기 위한 데이터 소스를 생성해야 합니다. 예시 데이터 소스로 MemGPT의 연구 논문을 사용하겠습니다.
이 논문을 다운로드하기 위해 curl 명령을 사용하겠습니다. 브라우저에서 PDF 다운로드를 해도 됩니다.
curl -L -o memgpt_research_paper.pdf https://arxiv.org/pdf/2310.08560.pdf
이제 논문을 다운로드했습니다. 그런 다음 memgpt load를 사용하여 MemGPT 데이터 소스를 생성해야 합니다:
memgpt load directory --name memgpt_research_paper --input-files=memgpt_research_paper.pdf
Loading files: 100%|███████████████████████████████████| 1/1 [00:00<00:00, 3.94file/s]
Loaded 74 passages and 13 documents from memgpt_research_paper
데이터 소스를 MemGPT 에이전트에 연결하기
이제 데이터 소스를 만들었습니다. 언제든지 이를 MemGPT chabot에 연결할 수 있습니다.
memgpt_doc 페르소나를 사용하여 새 챗봇을 만들어 보겠습니다(원하는 어떤 페르소나든 사용할 수 있습니다):
memgpt run --persona memgpt_doc
에이전트와 채팅할 때, 데이터 소스를 에이전트의 아카이브 메모리에 "연결"할 수 있습니다:
? Would you like to select an existing agent? No
🧬 Creating new agent...
-> 🤖 Using persona profile: 'sam_pov'
-> 🧑 Using human profile: 'basic'
🎉 Created new agent 'PoliteButterfly' (id=d26e1981-ff36-4095-97a0-61a1601dfb5d)
Hit enter to begin (will request first MemGPT message)
💭 Interesting, I've got a first-time user. Time to present myself and get to understand the user's needs. I wonder what brings Chad here today.
🤖 Greetings Chad! I'm MemGPT. How may I assist you today?
> Enter your message: /attach
? Select data source memgpt_research_paper
100%|███████████████████████████████████| 1/1 [00:00<00:00, 4.81it/s]
새 챗봇 테스트하기
데이터를 챗봇의 메모리에 로드했습니다. 이제 질문을 시작할 수 있습니다.
> Enter your message: The paper I loaded into your archival memory is called MemGPT. Can you tell me more about it?
💭 It seems Chad would like to know more about the paper titled 'MemGPT' that's stored in my archival memory. It's time to search the archival memory for details and background data to provide a comprehensive
understanding of the paper. Let's remember to page through results until I've gathered enough information to answer Chad's enquiry.
⚡🧠 [function] searching memory with archival_memory_search
💭 Based on the found results, MemGPT is an AI system designed for tasks like extended conversations and document analysis. It efficiently manages different tiers of storage to provide extended context within
the LLM’s limited cap. Also, noteworthy from my findings is that MemGPT performs impressively in deep memory retrieval (DMR) and document QA tasks. Let's prepare a comprehensive response for Chad.
🤖 Certainly, Chad. MemGPT, or MemoryGPT, is a system specially designed for tasks like extended conversations and document analysis which are traditionally hindered by the limited context windows of modern
Large Language Models (LLMs). It uses a technique inspired by hierarchical memory systems in traditional operating systems, called virtual context management. This technique allows for an effective provision
of extended context within an LLM’s limited context window by intelligently managing different storage tiers, much like paging between physical memory and disk. Notably, MemGPT outperforms the fixed-context
baselines in deep memory retrieval and it's able to analyze large documents with precision.
마무리 생각
Charles Packer의 짧은 발표는 MemGPT의 개념을 깊이 있게 살펴볼 수 있는 좋은 기회였습니다. 이 세션에서는 기존 LLM의 메모리 및 컨텍스트 한계를 논의하고, 이를 LLM 애플리케이션의 병목으로 제시했습니다.
MemGPT는 디스크 스토리지에 저장되는 외부 컨텍스트를 생성하여 확장 가상 메모리의 개념을 도입합니다. 이 개념은 컴퓨터 OS가 RAM과 ROM 사이에서 정보를 스와핑하여 메모리를 관리하는 방식에서 영감을 받았습니다. MemGPT 에이전트는 중요한 정보를 외부 데이터베이스에 저장하고 현재 컨텍스트를 기반으로 해당 정보에 접근할 수 있습니다. 이 에이전트는 긴 컨텍스트 애플리케이션 개발을 위한 새로운 가능성을 열어줍니다.
Milvus 벡터 데이터베이스와 MemGPT를 통합함으로써 외부 데이터 소스와 연결된 AI 에이전트 개발을 간소화하는 데 한 걸음 더 나아갔습니다. 이 글에서는 또한 이 통합을 사용하여 외부 메모리를 갖춘 챗봇을 구축하는 방법을 보여주는 예시를 공유했습니다.
계속 읽기

Zilliz Cloud Now Available in AWS Asia Pacific (Seoul)
Zilliz Cloud is now available in AWS Seoul — low-latency vector search, in-country data residency, and one-step migration for Korean AI teams. 31 regions across 5 clouds.

How Zilliz Saw the Future of Vector Databases—and Built for Production
An inside look at how Zilliz built vector databases for real-world use, focusing on scalability, stability, and running them reliably at scale.

Announcing VDBBench 1.0: Open-Source VectorDB Benchmarking with Your Real-World Production Workloads
Discover VDBBench 1.0, an open-source tool for benchmarking vector databases with real-world production data, streaming ingestion, and concurrent workloads.



