개요
MongoDB Atlas Agent Engine 메모리 서비스는 전체 에이전트 배포서버 와 별도로 독립형 서비스로 실행 수 있습니다. 이 가이드 사용하여 메모리 프로젝트 위한 메모리 서버 프로비저닝하고 agent-engine-sdk-memory Python 소프트웨어 개발 키트(SDK)를 사용하여 외부 애플리케이션 에서 대화 컨텍스트를 기록 하고 조회 .
다음 모드 중 하나로 메모리 서비스를 실행 수 있습니다.
호스팅: 메모리 서버 Atlas Agent Engine에서 실행되며, 애플리케이션 서비스 계정 액세스 토큰을 사용하여 메모리 서버에 연결합니다. 배포된 애플리케이션 에 이 모드 사용합니다.
로컬: 메모리 서버
agentengineCLI 로 managed 로컬 Docker 컨테이너에서 실행되며, 애플리케이션 여기에 직접 연결됩니다. 이 모드 사용하여 로컬에서 개발하고 테스트할 수 있습니다.
호스팅된 메모리 서비스
호스팅 모드 에서 agent-engine-sdk-memory SDK는 서비스 계정 액세스 토큰을 사용하여 호스팅된 메모리 게이트웨이에 연결합니다. 게이트웨이는 서비스 계정에서 조직 과 프로젝트 읽습니다. 각 대화에 대해 user_id 및 session_id 값을 SDK에 전달하여 대화의 메모리 범위를 해당 사용자 및 세션으로 지정합니다.
팁
메모리에 대해 자세히 학습 에이전트 메모리 가이드 참조하세요.
호스팅 모드 에서는 다음과 같은 기능을 사용할 수 있습니다.
record_turn(),build_context()및search()SDK 메서드를 사용하여 대화 컨텍스트를 기록하고 검색합니다.시맨틱, 일화, 절차 및 분류 검색
save_*,get_*또는list_*형식의 직접 생성 및 읽기 작업사용자 지정 메모리 유형, 일반
save()및retrieve()메서드 사용
로컬 메모리 서비스
로컬 모드 에서 agentic-platform-memory SDK는 agentengine dev up 명령이 컴퓨터에서 시작하는 로컬 오케스트레이션 엔진(oe) 프록시에 직접 연결됩니다. base_url 값을 로컬 oe URL 로 설정하다 해야 합니다. 연결에 project_id 또는 액세스 토큰을 설정하다 하지 마세요.
로컬 모드 에서는 다음 기능을 사용할 수 있습니다.
record_turn(),build_context()및search()SDK 메서드를 사용하여 대화 컨텍스트를 기록하고 검색합니다.시맨틱, 일화, 절차 및 분류 검색
save_*,get_*또는list_*형식의 직접 생성 및 읽기 작업
로컬 모드 에서는 사용자 지정 메모리 유형을 사용할 수 없습니다.
다양한 메모리 유형에 대해 자세히 학습 에이전트 메모리 가이드 참조하세요.
호스팅된 메모리 서비스 구성
이 섹션에서는 Atlas Agent Engine에서 호스팅되는 메모리 전용 프로젝트 생성하는 방법을 설명합니다.
전제 조건
이 튜토리얼을 시작하기 전에 다음 리소스가 있는지 확인하세요.
agentengineCLI 설치되고 인증되었습니다. 자세한 학습 은 설치 및 인증을 참조하세요.agentengine auth login실행 하여 Atlas Agent Engine에 액세스합니다.메모리 임베딩을 생성하기 위한 Voyage AI API 키입니다.
ANTHROPIC_API_KEY와 같은 대규모 언어 모델(LLM) 제공자 위한 API 키입니다.pip또는uv를 설치하여 Python SDK를 설치합니다.메모리 데이터를 저장 위한 Atlas Flex(최소 요구 사항),
M10,M20이상 계층 클러스터 (권장). 클러스터 를 프로비저닝하려면 Atlas 리소스 설정을 참조하세요.이 가이드 Atlas cluster 에 대한 연결 문자열 필요합니다. 연결 문자열 조회 방법을 학습 보려면 클러스터에 연결 가이드 를 참조하세요.
메모리 데이터와 인덱스 수의 증가에 따라 이를 수용할 수 있도록 전용
M10이상의 계층 클러스터 배포하는 것이 좋습니다. Atlas Flex는 메모리 서비스를 지원 수 있는 가장 낮은 클러스터 계층 입니다.클러스터의 IP 액세스 목록 Atlas Agent Engine 데이터 영역의 트래픽을 허용해야 합니다. 데이터 플레인 IP 주소를 추가하는 방법을 학습 Atlas 네트워크 액세스 구성 섹션을 참조하세요.
참고
연결된 Atlas cluster 메모리에 필요한 검색 및 벡터 검색 인덱스를 생성할 수 없는 경우, Atlas Agent Engine은 Memory: waiting 단계에서 배포서버 중지하고 Error: context deadline exceeded 오류 메시지와 함께 시간 초과될 수 있습니다.
단계
메모리 설정을 구성합니다.
project-config.yaml파일 열고memory:차단 아래에 시크릿 이름과 추출 제공자 설정하다 .다음 명령을 실행하여 프로젝트 에 필요한 시크릿을 설정하다 .
agentengine secret set MONGODB_URI --value "<value>" --project-id <project-id> agentengine secret set VOYAGE_API_KEY --value "<value>" --project-id <project-id> agentengine secret set ANTHROPIC_API_KEY --value "<value>" --project-id <project-id> 다음 자리 표시자 값을 바꿉니다.
<value>: 시크릿의 값입니다.MONGODB_URI: Atlas cluster 의 연결 문자열입니다.VOYAGE_API_KEY: 사용자의 Voyage AI 키입니다.ANTHROPIC_API_KEY: LLM 제공자 키입니다.
<project-id>:agentengine project create명령이 반환한 프로젝트 객체 ID . 메모리 전용 워크플로에는agents.yaml파일 이 포함되어 있지 않으므로 이 플래그가 필요합니다.
다른 제공자 사용하는 경우
ANTHROPIC_API_KEY을 LLM 제공자 의 키 이름으로 바꿉니다.메모리 구성을 저장합니다.
agentengine memory configure
참고
MONGODB_URI 시크릿을 설정하다 하지 않거나 메모리 서비스가 연결 문자열 가리키는 클러스터 에 연결할 수 없는 경우 프로비저닝이 실패합니다. 프로비저닝 실패하면 클러스터의 IP 액세스 목록 Atlas Agent Engine 데이터 플레인 IP 주소가 포함되어 있는지 확인하세요.
서비스 계정을 만들고 액세스 토큰을 조회 .
다음 명령어를 실행하여 프로젝트 에 대한 서비스 계정을 만듭니다.
agentengine service-account create memory-service --project-id <project-id> --role PROJECT_OWNER <project-id>자리 표시자를 프로젝트 ID 로 바꿉니다. 명령 출력에서 클라이언트 ID 와 클라이언트 시크릿을 저장합니다. Atlas Agent Engine은 클라이언트 시크릿을 한 번만 표시합니다.다음 명령을 실행하여 클라이언트 ID 와 클라이언트 시크릿을 액세스 토큰으로 교환합니다.
export ACCESS_TOKEN=$(curl --fail-with-body --silent --show-error \ --user <client-id> \ --data grant_type=client_credentials \ "https://agentengine.mongodb.com/api/v1/oauth/token" | jq -er .access_token) <client-id>자리 표시자를 클라이언트 ID 로 바꿉니다.curl는 클라이언트 시크릿을 에코하지 않고 입력하라는 메시지를 표시합니다.팁
액세스 토큰은 1시간 동안 유효합니다. 현재 토큰이 만료되기 전에 새 토큰을 요청하세요.
Python SDK를 설치합니다.
이전 단계에서 내보낸 액세스 토큰을 사용하여 플랫폼의 비공개 레지스트리에서 agent-engine-sdk-memory 패키지 설치합니다.
pip install agent-engine-sdk-memory \ --extra-index-url "https://ignore:$ACCESS_TOKEN@agentengine.mongodb.com/api/v1/packages/python/simple"
uv pip install agent-engine-sdk-memory \ --extra-index-url "https://ignore:$ACCESS_TOKEN@agentengine.mongodb.com/api/v1/packages/python/simple"
URL username:password 형식을 사용합니다. 레지스트리가 비밀번호 필드 에 있는 액세스 토큰만 사용하여 인증하기 때문에 ignore은(는) 자리 표시 사용자 이름 입니다. $ACCESS_TOKEN는 이전 단계에서 내보낸 액세스 토큰으로 확인됩니다.
대화 컨텍스트를 기록하고 조회 .
애플리케이션 에서 다음 코드를 추가하여 클라이언트 생성하고, 사용자 ID를 바인딩하고, 회전이 발생할 때 기록 , 이후 대화에서 관련 컨텍스트를 조회 .
from agent_engine_sdk_memory import ( Memory, MemoryRequestContext, ) # Create the client using your access token. memory = Memory(service_account_token="<your-access-token>") # Bind the user and session for this conversation. chat = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_123", ) ) # Record turns as they happen. chat.record_turn( role="user", content="I always fly out of Boston.", ) chat.record_turn( role="assistant", content="Got it, Boston is saved as your home airport.", ) # In a later conversation, recall what matters. later = memory.bind( MemoryRequestContext( user_id="user_1", session_id="thread_456", ) ) context = later.build_context( query="Where should the flight book from?" ) hits = later.search("home airport", top_k=5)
참고
차례를 기록한다고 해서 즉시 장기 기억이 생성되는 것은 아닙니다. 메모리 서비스는 비동기적으로 턴을 장기 기억으로 통합합니다. 기록된 회전은 쓰기 (write) 직후 search() 또는 build_context() 결과에 나타나지 않을 수 있습니다.
메모리 구성 업데이트
서버 다시 프로비저닝하지 않고 메모리 구성을 업데이트 하려면 다음 단계를 수행합니다.
project-config.yaml파일 에서memory:차단 편집합니다.프로젝트 디렉토리 에서
agentengine memory configure를 실행 메모리 구성을 업로드합니다.agentengine memory apply를 실행하여 구성을 적용 .
플랫폼에서 메모리를 구성하는 방법을 학습 메모리 구성을 참조하세요.
로컬 메모리 서비스 구성
이 섹션에서는 로컬 메모리 스택 을 스캐폴딩하고, 시작하고, 연결하는 방법을 보여줍니다.
전제 조건
이 튜토리얼을 시작하기 전에 다음 리소스가 있는지 확인하세요.
agentengineCLI 설치되었습니다. 자세한 학습 은 설치 및 인증을 참조하세요.메모리 임베딩을 생성하기 위한 Voyage AI API 키입니다.
배경 추출을 활성화 경우
ANTHROPIC_API_KEY와 같은 대규모 언어 모델(LLM) 제공자 용 API 키입니다.pip또는uv를 설치하여 Python SDK를 설치합니다.
단계
로컬 메모리 프로젝트 스캐폴딩합니다.
다음 명령을 실행하여 로컬 개발을 위한 메모리 전용 프로젝트 스캐폴딩합니다. "My Project"을(를) 프로젝트 이름으로 바꿉니다.
agentengine create --memory-only --name "My Project"
이 명령은 memory_only을(를) true(으)로 설정하고 메모리 구성 스키마 지정하는 project-config.yaml 파일 작성합니다.
이 명령은 agent.yaml 파일, agents/ 디렉토리 또는 에이전트 런타임 코드를 생성하지 않습니다. --memory-only 플래그와 --template, --llm, --memory 또는 --open-egress 플래그를 결합할 수 없습니다.
로컬 스택 시작합니다.
프로젝트 디렉토리 에서 다음 명령을 실행 로컬 메모리 스택 시작합니다.
agentengine dev up
메모리 전용 프로젝트 의 경우 이 명령은 다음 컨테이너만 시작합니다.
mongodb: 로컬 Atlas 호환 MongoDB 인스턴스memory-server: 메모리 런타임 서비스oe: SDK가 연결하는 로컬 오케스트레이션 엔진 프록시
명령 출력에는 로컬 oe 및 memory-server 서비스에 대한 URL이 포함됩니다. 이후 단계에서 사용할 oe URL 복사합니다.
로컬 스택 관리 하려면 다음 명령을 사용합니다.
명령 | 설명 |
|---|---|
| 로컬 스택 의 상태를 표시합니다. |
| 모든 서비스에 대한 스트림 로그. 해당 서비스에 대한 로그만 스트림 하려면 |
| 컨테이너를 제거하지 않고 로컬 스택 중지합니다. |
| 로컬 스택 중지하고 컨테이너와 볼륨을 제거합니다. |
SDK를 로컬 스택 에 연결합니다.
Python 애플리케이션 디렉토리 로 이동합니다. 이 디렉토리 첫 번째 단계에서 생성한 프로젝트 디렉토리 와 분리될 수 있습니다.
그런 다음 애플리케이션 에 다음 코드를 추가하여 로컬 스택 에 연결합니다. http://localhost:<oe-port>을 agentengine dev up 명령 출력에서 복사한 URL 로 바꿉니다.
from agentic_platform_memory import Memory, MemoryRequestContext # Set the base_url to the local oe URL printed by "agentengine dev up". memory = Memory(base_url="http://localhost:<oe-port>") # Bind conversation identity. session = memory.bind( MemoryRequestContext( user_id="user_123", session_id="session_456", ) ) # Record a turn. session.record_turn(role="user", content="I prefer window seats on flights.") # Build context. context = session.build_context( query="What seat preferences are known?", enabled_sources={"stm", "semantic", "episodic"}, ) print(context.formatted_context)
로컬 연결 오류 문제 해결
로컬 메모리 스택 실행 때 MemoryRouteNotFoundError (404) 오류가 표시될 수 있습니다. 이 오류를 주소 하려면 project_id 값을 설정하다 하지 않았는지 확인하세요.
SDK는 project_id 값을 사용하여 요청을 수신하는 URL 경로를 식별합니다. 로컬 연결의 경우와 같이 project_id이 설정하다 되지 않은 경우 SDK는 로컬 oe 프록시가 제공하는 경로로 요청을 보냅니다. project_id 이 설정하다 되면 SDK는 호스팅된 Atlas Agent Engine만 제공하는 프로젝트 범위 경로로 요청을 보냅니다. 로컬 스택 프로젝트 범위 경로를 제공 하지 않으므로 이 경로로 요청 전송하면 오류가 발생합니다.
호스팅된 워크플로의 셸 에 오래된 AGENTIC_MEMORY_PROJECT_ID 환경 변수가 설정하다 경우, SDK는 로컬 스택 에 대해 MemoryRouteNotFoundError를 반환하는 프로젝트 범위의 경로를 요청합니다. 로컬 스택 에 연결하기 전에 다음 명령을 실행 하여 이 변수의 설정을 해제합니다.
unset AGENTIC_MEMORY_PROJECT_ID
다음 단계
Atlas Agent Engine에서 실행되는 에이전트 의 메모리를 활성화 하려면 에이전트에 메모리 추가 가이드 를 참조하세요.