개발자로서 여러분은 데이터 프라이버시, 제어, 그리고 AI 도구 간의 원활한 상호 운용성을 보장하는 강력한 메모리 솔루션을 찾고 있습니다. 이러한 트렌드는 로컬 우선(local-first), 개발자 중심의 메모리 시스템으로 명확하게 기울고 있습니다. 오픈 소스 Mem0 프레임워크와 같은 기술로 구현된 **OpenMemory MCP 서버** 개념이 이러한 변화를 주도합니다. 이는 개인적인 로컬 메모리 레이어를 제공하여, 데이터가 여러분의 머신에 안전하게 유지되는 동안 AI 에이전트가 애플리케이션 전반에 걸쳐 컨텍스트를 기억하도록 합니다. 이 가이드는 여러분과 같은 개발자를 위한 것입니다. **Mem0**를 사용하여 필수 구성 요소를 설치하고, 자체 로컬 OpenMemory MCP 서버를 실행하며, 해당 REST API를 능숙하게 사용하여 더 스마트하고 컨텍스트를 인지하는 AI 애플리케이션을 만드는 방법에 대한 전체 과정을 안내합니다. 지속적이고 로컬인 AI 메모리를 해제하기 시작해 봅시다. 💡 멋진 API 테스팅 도구를 원하시나요? 아름다운 API 문서를 생성해 줍니다. 개발자 팀이 최대한의 생산성으로 함께 작업할 수 있는 통합된 올인원 플랫폼을 원하시나요? Apidog는 여러분의 모든 요구를 충족하며, Postman을 훨씬 더 저렴한 가격으로 대체합니다! 1단계: 개발 환경 준비 설치에 들어가기 전에 기본적인 개발 도구를 준비하고 작업할 핵심 구성 요소를 이해하는 것이 중요합니다. 우리는 주로 다재다능한 **Mem0** 오픈 소스 프레임워크를 사용하여 로컬 OpenMemory MCP 서버를 설정하고 상호 작용할 것입니다. 이러한 상호 작용은 주로 해당 REST API를 통해 이루어지며, AI의 메모리를 관리하는 표준화된 방법을 제공합니다. Introducing OpenMemory MCP OpenMemory MCP는 내장 UI를 갖춘 개인적인 로컬 우선 메모리 레이어이며, 모든 MCP 클라이언트와 호환됩니다. 클라우드 동기화나 외부 스토리지가 없어 모든 메모리가 로컬에 구조화되어 제어 하에 유지되도록 보장합니다. **Mem0** 및 해당 종속성과 완벽하게 호환되도록 최신 Python 환경, 가급적 3.8 버전 이상이 필요합니다. python.org에서 최신 Python을 다운로드할 수 있습니다. Python과 함께, **Mem0** 설치에 필수적인 Python 패키지 설치 도구인 pip
가 필요하며, 이는 일반적으로 Python 설치에 포함되어 있습니다. mem0ai
Python 라이브러리가 우리의 엔진이 될 것입니다. 이 오픈 소스 특성은 로컬 서버를 실행하여 효과적으로 OpenMemory MCP 서버가 되도록 합니다. 이 전체 설정은 메모리 서버를 로컬 머신에서 실행하는 것을 우선시하여, OpenMemory 철학의 핵심 원칙인 데이터 및 작업에 대한 완전한 제어를 제공합니다. 그런 다음 서버는 REST API를 통해 기능을 노출하며, 모델 컨텍스트 프로토콜(MCP)에 정의된 표준 작업과 일치하는 메모리 추가, 검색 및 관리를 위한 엔드포인트를 제공합니다. **전문가 팁:** 가상 환경(venv
또는 conda
와 같은)을 사용하는 것은 현명한 조치입니다. 이는 프로젝트 종속성을 관리하고 다른 Python 프로젝트와의 충돌을 방지하는 데 도움이 됩니다. 2단계: Mem0 프레임워크 설치 방법 mem0ai
패키지를 설치하는 것은 로컬 AI 메모리 서버를 갖기 위한 첫 번째 실질적인 단계입니다. 이는 핵심 **Mem0** 라이브러리 및 필요한 모든 구성 요소를 시스템에 갖추게 하는 간단한 명령으로 수행됩니다. 터미널을 열고(가상 환경을 사용하는 경우 활성화), 다음 설치 명령을 실행합니다. ```bash pip install mem0ai ``` 이 명령은 핵심 Memory
클래스를 포함하여 Python에서 직접 메모리 관리를 위한 mem0ai
라이브러리를 설치합니다. 또한 다양한 대규모 언어 모델(LLM) 및 벡터 데이터베이스 지원과 **Mem0** REST API 서버를 실행하는 데 필요한 FastAPI 및 Uvicorn 구성 요소도 얻게 됩니다. 설치가 완료되면 pip show mem0ai
로 설치된 패키지 버전을 확인하거나 Python 세션에서 빠른 임포트를 시도하여 확인할 수 있습니다. ```python import mem0 print(mem0.__version__) ``` pip
는 또한 FastAPI(API 구축용), Uvicorn(ASGI 서버용) 및 다양한 데이터 처리 라이브러리와 같은 필수 종속성 설치를 자동으로 처리합니다. mem0ai
가 설치되면 기본적인 소프트웨어를 갖게 됩니다. Python 스크립트에서 메모리 작업을 위해 라이브러리를 직접 사용할 수 있지만, MCP 클라이언트가 상호 작용할 수 있는 "서버" 측면을 위해서는 내장 서버 기능을 사용할 것입니다. 3단계: 로컬 메모리 서버 구성 방법 서버를 시작하기 전에 기본 **Mem0** 인스턴스를 구성하는 옵션이 있습니다. 이 구성은 서버의 메모리 처리 및 검색 기능을 구동할 대규모 언어 모델(LLM), 벡터 데이터베이스 및 임베딩 모델을 결정하기 때문에 중요합니다. 본질적으로 서버의 "두뇌"를 사용자 정의하는 것입니다. **Mem0** 서버(및 기반이 되는 Memory
클래스)는 주로 환경 변수를 사용하여 구성됩니다. 이는 코드를 수정하지 않고도 백엔드를 설정할 수 있는 유연한 접근 방식입니다. 예를 들어, LLM을 구성하려면 OpenAI의 경우 OPENAI_API_KEY
, Anthropic의 경우 ANTHROPIC_API_KEY
또는 Ollama를 통한 로컬 모델의 경우 MEM0_LLM_PROVIDER="ollama"
와 같은 변수를 설정할 수 있습니다. 마찬가지로 벡터 데이터베이스의 경우 **Mem0**는 기본적으로 LanceDB(로컬이며 추가 설정이 필요 없음)를 사용하지만, MEM0_VECTOR_STORE_PROVIDER="qdrant"
와 같은 변수를 사용하여 Qdrant와 같은 대안을 지정할 수 있습니다. 임베딩 모델 구성은 종종 LLM 제공업체와 연결되지만 독립적으로 지정할 수도 있습니다. 특정 환경 변수를 설정하지 않으면 **Mem0**는 합리적인 기본값을 사용하려고 시도합니다. 그러나 다른 방식으로 지정되지 않은 경우 기본 LLM에 OpenAI 키가 필요할 수 있습니다. 이러한 선택은 서버에 상당한 영향을 미칩니다. LLM은 메모리가 이해되는 방식에 영향을 미치고, 벡터 데이터베이스는 저장 효율성과 검색 속도에 영향을 미칩니다. 다양한 LLM, 벡터 저장소 및 임베더에 대한 모든 구성 가능한 환경 변수 및 옵션의 포괄적인 목록은 항상 공식 **Mem0** 문서를 참조하십시오. **전문가 팁:** 간단한 로컬 설정(LLM용 Ollama 및 기본 LanceDB와 같은)으로 시작하십시오. 이는 시스템에 익숙해지는 데 도움이 됩니다. 그런 다음 필요에 따라 더 고급 설정을 탐색하십시오. 4단계: OpenMemory MCP 서버 실행 방법 mem0ai
가 설치되고 (선택적으로) 원하는 대로 구성되었으므로 이제 로컬 서버 프로세스를 시작할 수 있습니다. 이 서버는 REST API 엔드포인트를 노출하여 다른 애플리케이션이나 스크립트가 메모리 작업을 수행할 수 있도록 합니다. mem0ai
패키지는 서버를 실행하는 편리한 명령줄 스크립트를 제공합니다. 터미널에서 다음을 입력하기만 하면 됩니다. ```bash mem0-server ``` 필요한 경우 사용자 지정 호스트와 포트를 지정할 수도 있습니다. 예를 들어: mem0-server --host 127.0.0.1 --port 8000
. 기본값은 일반적으로 포트 8000
에서 0.0.0.0
(사용 가능한 모든 네트워크 인터페이스)입니다. 시작되면 Uvicorn(FastAPI 애플리케이션을 실행하는 서버)이 콘솔에 로그를 출력하여 서버가 실행 중이며 요청을 수신 대기하고 있음을 나타냅니다. 다음과 같은 메시지가 표시됩니다: INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
. 이제 OpenMemory MCP 서버가 로컬에서 실행 중입니다! http://localhost:8000
(또는 사용자 지정 주소)을 가리키도록 구성된 MCP 호환 클라이언트는 서버와 상호 작용할 수 있습니다. 다음으로 살펴볼 REST API를 직접 사용할 수도 있습니다. 서버를 중지하려면 실행 중인 터미널에서 CTRL+C
를 누르기만 하면 됩니다. mem0-server
명령은 본질적으로 Uvicorn ASGI 서버를 시작하며, 이는 **Mem0** 내에 정의된 FastAPI 애플리케이션을 실행합니다. 이 애플리케이션은 REST API 엔드포인트를 호스팅하며, 이 실행 중인 인스턴스가 바로 로컬 OpenMemory MCP 서버입니다. 5단계: 서버 API 기능 이해 **Mem0** 서버는 AI 메모리를 프로그래밍 방식으로 관리할 수 있는 포괄적인 REST API를 제공합니다. 이 API는 정보 추가, 검색, 목록화 및 삭제를 위한 표준화된 방법을 제공함으로써 모델 컨텍스트 프로토콜의 핵심 원칙을 준수합니다. API는 표준 HTTP/HTTPS 프로토콜을 사용하며, JSON은 요청 및 응답 본문의 데이터 형식입니다. 기본 설정으로 서버를 로컬에서 실행하는 경우 기본 URL은 http://localhost:8000
이 됩니다. API를 통해 사용할 수 있는 핵심 작업(**Mem0** REST API 구현을 기반으로 함)에는 새 정보 저장을 위한 POST /add
, 관련 메모리 검색을 위한 POST /search
, 여러 메모리 목록화(필터 옵션 포함)를 위한 GET /get_all
, ID로 단일 메모리 검색을 위한 GET /get
, 기존 메모리 수정을 위한 PUT /update
, 특정 메모리 제거를 위한 DELETE /delete
, 사용자별 필터링 가능성이 있는 메모리 전체 삭제를 위한 DELETE /delete_all
이 포함됩니다. 기본적으로 로컬에서 실행되는 mem0-server
는 인증을 구현하지 않습니다. 이는 주로 로컬 개발 및 사용을 위한 것이기 때문입니다. 프로덕션 또는 노출된 배포를 고려하는 경우(상당한 추가 보안 레이어 없이는 권장되지 않음), 인증은 구현해야 할 중요한 측면이 될 것입니다. **전문가 팁:** API를 대화식으로 탐색할 수 있습니다. 서버가 시작되면 브라우저에서 http://localhost:8000/docs
를 방문해 보세요. **Mem0**의 FastAPI 서버는 일반적으로 Swagger UI를 통해 이 유용한 문서 페이지를 제공합니다. 6단계: API를 사용하여 메모리 추가 방법 /add
엔드포인트는 메모리 서버에 데이터를 수집하는 주요 도구입니다. 이를 통해 텍스트 정보를 저장하고 특정 사용자와 연결하며, 더 나은 구성 및 검색을 위해 선택적 메타데이터를 포함할 수 있습니다. 이를 사용하려면 /add
엔드포인트에 POST
요청을 보냅니다. 요청 본문은 JSON이어야 하며 data
(메모리의 문자열 내용), user_id
(이 메모리와 연결된 사용자의 식별자 – 사용자별 메모리 구성 및 검색에 중요), 선택적으로 metadata
({"source": "chat_log"}
와 같이 저장하려는 추가 키-값 쌍을 포함하는 JSON 객체)를 포함해야 합니다. 다음은 curl
을 사용한 예입니다. ```bash curl -X POST http://localhost:8000/add \ -H "Content-Type: application/json" \ -d '{ "data": "Alice prefers Python for web development.", "user_id": "user_alice", "metadata": {"topic": "preferences", "language": "Python"} }' ``` 다음은 Python requests
라이브러리를 사용하여 수행하는 방법입니다. ```python import requests import json url = "http://localhost:8000/add" payload = { "data": "Alice prefers Python for web development.", "user_id": "user_alice", "metadata": {"topic": "preferences", "language": "Python"} } headers = {"Content-Type": "application/json"} response = requests.post(url, data=json.dumps(payload), headers=headers) print(response.json()) ``` 서버는 추가를 확인하는 JSON으로 응답하며, 종종 새로 생성된 메모리의 고유 ID를 포함합니다. 예를 들어: {"message": "Memory added successfully", "memory_id": "some-unique-id"}
. /add
에 대한 각 호출은 새 메모리 레코드를 생성합니다. user_id
는 다중 사용자 애플리케이션 또는 컨텍스트 분리에 필수적이며, 메타데이터는 검색 가능성과 구성을 크게 향상시킵니다. 7단계: API를 통해 저장된 메모리 검색 방법 메모리가 저장되면 /search
엔드포인트를 통해 의미론적 검색을 수행할 수 있습니다. 이는 검색어가 저장된 텍스트와 정확히 일치하지 않더라도 주어진 쿼리 및 사용자 컨텍스트와 관련된 정보를 검색할 수 있음을 의미합니다. query
문자열, 검색하려는 메모리의 user_id
, 그리고 선택적 매개변수(메타데이터 필드를 기반으로 하는 더 구체적인 기준을 위한 filters
– 정확한 구조는 **Mem0**의 구현에 따라 다름 – 및 검색 결과 수를 제한하기 위한 limit
)를 포함하는 JSON 본문과 함께 /search
에 POST
요청을 보냅니다. curl
예제는 다음과 같습니다. ```bash curl -X POST http://localhost:8000/search \ -H "Content-Type: application/json" \ -d '{ "query": "What are Alices language preferences?", "user_id": "user_alice", "limit": 3 }' ``` Python requests
사용: ```python import requests import json url = "http://localhost:8000/search" payload = { "query": "What are Alices language preferences?", "user_id": "user_alice", "limit": 3 } headers = {"Content-Type": "application/json"} response = requests.post(url, data=json.dumps(payload), headers=headers) print(response.json()) ``` 예상되는 응답은 검색 쿼리와 일치하는 메모리 객체의 JSON 배열입니다. 이러한 객체는 일반적으로 메모리 내용, 메타데이터, 그리고 쿼리와 얼마나 밀접하게 일치하는지를 나타내는 관련성 점수를 포함합니다. 예를 들어: [{"id": "some-unique-id", "data": "Alice prefers Python for web development.", ..., "score": 0.85}]
. **전문가 팁:** 검색에서 user_id
를 올바르게 사용하는 것이 필수적입니다. 이는 사용자가 자신의 관련 메모리만 검색하도록 보장하며, 이는 개인 정보 보호 및 맞춤형 경험 제공에 중요합니다. 8단계: API로 특정 메모리 검색 방법 검색 외에도 API는 여러 메모리를 나열하거나 고유 식별자로 단일 특정 메모리를 가져오는 엔드포인트를 제공합니다. 이는 메모리 뱅크를 탐색하거나 알려진 정보를 직접 액세스하는 데 유용합니다. 여러 메모리를 나열하려면 GET /get_all
엔드포인트를 사용합니다. user_id
와 같은 쿼리 매개변수를 전달하여 사용자별 메모리를 필터링하고, limit
를 사용하여 반환할 메모리 수를 지정하며, 메모리가 많은 경우 페이지네이션을 위해 page
를 사용할 수 있습니다. 예를 들어, curl -X GET "http://localhost:8000/get_all?user_id=user_alice&limit=5"
는 "user_alice"의 처음 5개 메모리를 검색합니다. 응답은 메모리 객체의 JSON 배열이 됩니다. 특정 메모리를 가져오려면 memory_id
쿼리 매개변수와 함께 GET /get
을 사용합니다: curl -X GET "http://localhost:8000/get?memory_id=some-unique-id"
. 이는 해당 단일 메모리를 나타내는 JSON 객체를 반환하거나 찾을 수 없는 경우 오류를 반환합니다. Python requests
를 사용하여 /get_all
을 사용하는 방법은 다음과 같습니다. ```python import requests url = "http://localhost:8000/get_all" params = {"user_id": "user_alice", "limit": 5} response = requests.get(url, params=params) print(response.json()) ``` /get_all
엔드포인트는 특히 관리 작업이나 사용자의 메모리를 탐색해야 할 때 유용합니다. /get
은 /add
응답이나 이전 검색 결과에서 메모리의 ID를 이미 알고 있을 때 사용하는 기본 방법입니다. 9단계: API를 사용하여 메모리 업데이트 및 삭제 방법 AI의 지식 기반이 정확하고 관련성을 유지하도록 하기 위해 API는 기존 메모리 레코드를 업데이트하거나 완전히 제거하는 데 필요한 제어를 제공합니다. 메모리를 업데이트하려면 memory_id
를 쿼리 매개변수로 사용하여 /update
에 PUT
요청을 보냅니다. 요청 본문은 JSON이어야 하며 새 data
(텍스트 내용) 또는 새 metadata
(해당 메모리의 기존 메타데이터를 대체함)를 포함할 수 있습니다. 예를 들어: ```bash curl -X PUT "http://localhost:8000/update?memory_id=some-unique-id" \ -H "Content-Type: application/json" \ -d '{"data": "Alice now also enjoys Go for systems programming."}' ``` 특정 메모리를 삭제하려면 memory_id
를 쿼리 매개변수로 사용하여 /delete
에 DELETE
요청을 사용합니다: curl -X DELETE "http://localhost:8000/delete?memory_id=some-unique-id"
. 더 광범위한 정리를 위해 DELETE /delete_all
엔드포인트를 사용할 수 있습니다. user_id
쿼리 매개변수를 제공하면(예: curl -X DELETE "http://localhost:8000/delete_all?user_id=user_alice"
) 해당 특정 사용자의 모든 메모리가 삭제됩니다. user_id
가 생략되면 시스템의 *모든* 메모리가 삭제될 수 있으므로 극도로 주의하여 사용하고 항상 **Mem0** 문서에서 정확한 동작을 확인하십시오. 서버는 일반적으로 이러한 작업의 성공 또는 실패를 확인하는 JSON 메시지로 응답합니다. **전문가 팁:** 실수로 인한 데이터 손실을 방지하기 위해 삭제 엔드포인트, 특히 delete_all
을 호출하기 전에 애플리케이션 로직에 신중한 확인 및 사용자 확인을 항상 구현하십시오. 결론 이제 **Mem0** 오픈 소스 프레임워크를 사용하여 로컬 OpenMemory MCP 서버를 설정하고 해당 REST API를 사용하는 필수 단계를 모두 거쳤습니다. **Mem0**를 설치하고, 서버를 실행하고, 해당 API와 상호 작용하는 이 지침을 따르면 AI 애플리케이션의 메모리에 대한 직접적인 제어를 얻게 됩니다. 이는 새로운 수준의 지속성, 개인화 및 프라이버시를 촉진합니다. 로컬에서 API 기반 AI 메모리를 프로그래밍 방식으로 관리하는 기능은 사용자 선호도를 기억하는 챗봇부터 프로젝트 세부 정보를 기억하는 개발자 도우미에 이르기까지 더 스마트하고 컨텍스트를 인지하는 시스템을 위한 광범위한 가능성을 열어줍니다. 로컬, API 기반 AI 메모리를 만드는 능력은 이제 여러분의 것입니다. 이 API를 실험하고 진정으로 학습하고 발전하는 AI 애플리케이션 구축을 시작하십시오.