AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

에이전트 메모리

표준 AI 상호 작용은 상태를 저장하지 않으므로 세션이 종료되면 모델은 대화에 대한 모든 컨텍스트를 잃게 됩니다. 상담원 메모리는 상담원에게 여러 대화에 걸쳐 있는 영구적인 지식 저장 제공하여 상태를 저장하지 않는 상호 작용을 상태를 유지하고 적응형 워크플로로 변환합니다. 에이전트 환경에서 학습하고 이 저장 업데이트하고 후속 작업에 필요한 정보를 호출합니다.

각 세션이 끝난 후 재설정되는 임시 컨텍스트 창 달리 에이전트 메모리는 에이전트 빈 상태로 되돌아가지 않도록 합니다. 이 기능이 없으면 에이전트 재방문 사용자, 이전 결정 사항 또는 기존 워크플로를 기억할 수 없습니다.

MongoDB Atlas Agent Engine은 프로젝트 전체에서 이러한 지속성을 관리 위해 전용 메모리 서비스를 도입합니다. 이 서비스는 배경 에서 대화를 구문 분석하여 지속형 정보를 캡처하는 동시에 애플리케이션이 저장 에 메모리를 쓰기 (write) 있도록 합니다.

메모리는 데이터 수명과 구조에 따라 단기 기억과 장기 기억이라는 두 가지 별개의 계층으로 작동합니다. 배경 추출 파이프라인 단기 대화를 장기 지식으로 처리합니다.

단기 기억(STM)은 원시 대화 기록을 시간순으로 저장합니다. 이 플랫폼은 각 회전이 발생하는 실시간 기록합니다. 에이전트 최근 턴에서 즉각적인 대화 컨텍스트를 필요로 하는 경우 STM에서 읽습니다.

Atlas Agent Engine은 3단계 수명 주기를 통해 대화형 턴을 지속형 메모리로 변환합니다.

  • 턴 기록: 에이전트 사용자와 상호 작용할 때 플랫폼은 각 턴을 단기 기억에 기록합니다.

  • 스냅샷 생성: 세션이 구성된 메시지 수 또는 유휴 임계값에 도달하면 배경 프로세스 대화 기록을 요약된 스냅샷 으로 컴파일합니다.

  • LLM 추출: 대규모 언어 모델(LLM)은 스냅샷 분석하고 지속형 지식을 적절한 장기 기억 유형으로 추출합니다.

추출은 비동기적으로 실행되므로 회전수가 기록되어도 에이전트의 응답이 차단되지 않습니다. 세션에서 추출한 지식은 바로 다음 차례가 아닌 후속 대화를 위해 장기 기억에서 사용할 수 있게 됩니다. 단기 기억을 통해 최근 턴을 즉시 사용할 수 있으며 추출된 지식이 잠시 후 나타납니다.

장기 기억은 세션 전반에 걸쳐 지속되며 대화에서 추출한 지속형 지식을 보유합니다. 이 플랫폼은 단기 기억을 정제하거나 직접 쓰기를 통해 장기 기억을 생성합니다.

플랫폼에 배포된 에이전트의 경우, 플랫폼은 대화를 자동으로 단기 기억으로 기록하고 장기 기억을 추출하지만, 에이전트는 필요할 때 장기 기억을 직접 쓰기 (write) 수 있습니다. 외부 애플리케이션은 일반적으로 플랫폼 정제용 소프트웨어 개발 키트(SDK)를 사용하여 단기 메모리를 쓰기 (write) . SDK 또는 메모리 MCP(Model Context Protocol)를 통해 장기 메모리를 직접 쓰기 (write) 수도 있습니다.

이 플랫폼은 장기 기억을 네 가지 특수 유형으로 구성합니다.

  • 시맨틱 메모리: 레이블이 지정된 사실을 저장합니다.

  • 일화 기억: 과거의 상호 작용과 대화를 개별 에피소드로 저장합니다.

  • 절차적 메모리: 재사용 가능한 단계별 지침과 워크플로를 저장합니다.

  • 분류학적 메모리: 도메인 용어와 해당 정의를 저장합니다.

다음 섹션에서는 각 유형에 대해 자세히 설명합니다.

시맨틱 메모리는 사용자 또는 애플리케이션 에 대해 레이블이 지정된 사실을 저장합니다. 사실은 사실을 낳은 대화를 넘어 관련성을 유지하는 지식입니다. 예시 를 들어, 팩트는 사용자의 집에 있는 공항이나 창 좌석에 대한 선호도를 캡처할 수 있습니다.

Atlas Agent Engine은 배경 추출 및 직접 쓰기를 통해 시맨틱 메모리를 생성합니다.

  • 백그라운드 추출: 대화 스냅샷에서 사실을 추출하고 시간이 지남에 따라 중복되거나 업데이트된 정보를 통합합니다.

  • 직접 쓰기: save_semantic(label=..., text=...)로 팩트를 저장합니다.

팩트를 조회 하려면 get_semantic를 사용하여 레이블로 찾거나 search_semantic을 사용하여 의미별로 팩트를 찾습니다. 시맨틱 메모리는 기본값 으로 build_context에 포함되어 있으므로 에이전트 검색하는 컨텍스트에 관련 팩트가 표시됩니다.

다음 예시 팩트를 저장하고, 레이블별로 검색하고, 의미별로 채팅을 검색합니다.

from agentic_platform_memory import (
Memory,
MemoryRequestContext,
)
memory = Memory(
api_key="<your-access-token>",
project_id="<your-project-id>",
)
chat = memory.bind(
MemoryRequestContext(
user_id="user_1",
session_id="thread_123",
)
)
chat.save_semantic(
label="home-airport",
text="The user's home airport is Boston.",
)
fact = chat.get_semantic("home-airport")
hits = chat.search_semantic("home airport")

일화적 메모리는 과거 대화를 요약된 에피소드로 저장합니다. 에피소드는 의사 결정과 그 결과를 포함하여 대화에서 발생한 내용을 캡처합니다. 일화적 기억은 사용자의 과거 상호 작용에 대해 에이전트 알아야 하는 답변입니다.

Atlas Agent Engine은 배경 추출 및 직접 쓰기를 통해 일시적인 메모리를 생성합니다.

  • 백그라운드 추출: 대화 스냅샷에서 에피소드와 해당 참여자를 추출합니다.

  • 직접 쓰기: save_episode(title=..., content=...)로 에피소드를 저장합니다.

에피소드는 대화 전반에 걸쳐 지속됩니다. 에이전트 이후 대화 중에 한 대화에서 무슨 일이 일어났는지 기억할 수 있습니다.

에피소드를 조회 하려면 search_episodes을 사용하여 의미별로 찾거나 list_episodes을 사용하여 사용자의 에피소드를 나열합니다. 일화적 기억은 build_context의 기본값 소스 중 하나이므로 관련 에피소드가 포함됩니다.

다음 예시 에피소드를 저장하고 검색한 다음 사용자의 에피소드를 나열합니다.

from agentic_platform_memory import (
Memory,
MemoryRequestContext,
)
memory = Memory(
api_key="<your-access-token>",
project_id="<your-project-id>",
)
chat = memory.bind(
MemoryRequestContext(
user_id="user_1",
session_id="thread_123",
)
)
chat.save_episode(
title="Vacation planning",
content="Planned a summer trip to Lisbon.",
)
episodes = chat.search_episodes("trip to Lisbon")
recent = chat.list_episodes()

절차 메모리는 재사용 가능한 절차를 저장합니다: 에이전트 특정 작업 완료하기 위해 따라야 하는 단계별 워크플로. 절차는 항공편 옵션 비교 또는 환불 요청 처리 와 같은 작업을 수행하는 방법을 캡처합니다.

Atlas Agent Engine은 배경 추출 및 직접 쓰기를 통해 절차 메모리를 생성합니다.

  • 백그라운드 추출: 대화 스냅샷에서 재사용 가능한 절차를 추출합니다.

  • 직접 쓰기: save_procedure(procedure=..., description=..., content=...)로 절차를 저장합니다.

절차를 조회 하려면 discover_procedures을 사용하여 쿼리 로 후보를 찾거나 get_procedure을 사용하여 이름으로 전체 절차를 로드합니다. 절차적 메모리는 시맨틱 및 일화적 기본값이 아닌 build_context에서 명시적인 옵트인을 요구합니다.

다음 예시 프로시저를 저장하고 조회합니다.

from agentic_platform_memory import (
Memory,
MemoryRequestContext,
)
memory = Memory(
api_key="<your-access-token>",
project_id="<your-project-id>",
)
chat = memory.bind(
MemoryRequestContext(
user_id="user_1",
session_id="thread_123",
)
)
chat.save_procedure(
procedure="compare-flights",
description="Compare flight options.",
content="Rank flights by price, stops, and total travel time.",
)
candidates = chat.discover_procedures("compare flights")
full = chat.get_procedure("compare-flights")

분류학적 메모리는 도메인 용어와 해당 정의를 저장합니다. 텀 도메인 내 단어의 의미를 정의합니다(예: 여행 관리 에서 red-eye ). 사용자 범위의 메모리와 달리 분류학적 메모리는 프로젝트 의 모든 사용자와 대화에서 사용할 수 있는 공유 도메인 지식입니다.

Atlas Agent Engine은 배경 추출 및 직접 쓰기를 통해 분류학적 메모리를 생성합니다.

  • 백그라운드 추출: 대화 스냅샷에서 용어와 해당 도메인을 추출합니다.

  • 직접 쓰기: save_taxonomic(domain=..., term=..., definition=...)로 텀 을 저장합니다.

텀 조회 하려면 get_taxonomic_term를 사용하여 도메인 및 텀 로 찾거나 search_taxonomic을 사용하여 의미별로 용어를 찾습니다. list_domains를 사용하여 프로젝트 에 있는 도메인을 나열합니다. 분류학적 메모리는 build_context에서 명시적 옵트인이 필요합니다.

다음 예시 텀 저장하고 읽은 다음 검색합니다.

from agentic_platform_memory import (
Memory,
MemoryRequestContext,
)
memory = Memory(
api_key="<your-access-token>",
project_id="<your-project-id>",
)
chat = memory.bind(
MemoryRequestContext(
user_id="user_1",
session_id="thread_123",
)
)
chat.save_taxonomic(
domain="airline",
term="red-eye",
definition="An overnight flight that lands the next morning.",
)
definition = chat.get_taxonomic_term("airline", "red-eye")
matches = chat.search_taxonomic("overnight flight", domain="airline")
domains = chat.list_domains()

정보가 한 번의 대화 이상으로 지속되어야 한다고 결정했다면, 데이터의 형태와 의도된 용도에 따라 장기 기억 유형을 선택하세요.

메모리 유형
저장 내용
범위
주요 질문

semantic

영구적으로 레이블이 지정된 팩트

사용자

에이전트 사실로 알고 있는 것은 무엇인가요?

간헐적

요약된 상호 작용 기록 및 결과

사용자

과거 대화에서 어떤 일이 일어났나요?

절차 적

재사용 가능한 단계별 워크플로

사용자

에이전트 이 작업 어떻게 수행해야 하나요?

분류학적

도메인 용어 및 정의

프로젝트 전체(공유)

이 도메인 텀 무엇을 MEAN 하나요?

정보가 여러 범주에 걸쳐 있는 것으로 보이는 경우 이러한 운영 경계를 따라 해당 정보가 속하는 위치를 평가합니다.

  • 사실 대 이벤트(의미론적 대 일화): 시맨틱 메모리는 여행자가 선호하는 시트 이나 집의 공항과 같은 현재 상태 또는 진실을 저장합니다. 일화적 메모리는 과거 항공편 예약 대화와 같이 해당 선호도가 논의되거나 사용된 상호 작용에 대한 역사적 내러티브를 저장합니다.

  • 지식 대 실행(의미론적 대 절차적): 시맨틱 메모리는 에이전트 리콜하는 수하물 허용 한도와 같은 사실을 제공합니다. 절차 메모리는 항공편을 검색 하고 비교하는 데 필요한 단계 시퀀스와 같이 에이전트 실행하는 지침을 제공합니다.

  • 사용자 컨텍스트 대 도메인 표준(의미론적 대 분류학적): 시맨틱 메모리는 여행자의 상용 고객 계층 과 같은 사용자별 세부 정보를 추적합니다. 분류학적 메모리는 전체 프로젝트 에서 공유되는 표준 용어를 정의합니다(예: 정예 계층 또는 적목 현상을 정의하는 자격 기준).

메모리 유형은 상호 배타적이기보다는 보완적입니다. 단일 에이전트 동일한 워크플로 내에서 여러 메모리 유형을 쿼리하는 경우가 많습니다. 예시 를 들어 여행 예약 에이전트 다음을 참조할 수 있습니다.

  • 여행자의 집 공항, 선호 좌석 및 상용 고객 번호를기억하는 시맨틱 메모리입니다.

  • 과거 여행에서 토론, 예약된 일정, 취소된 항공편을 검토 할 수 있는일시적인 메모리입니다.

  • 항공편 옵션을 비교하거나 취소된 연결편을 다시 예약하는 단계별 워크플로를 실행하기 위한절차적 메모리입니다.

  • open-jaw routing, layover 또는 red-eye와 같은 항공 업계 용어를 해석하기 위한 분류학적 메모리입니다.

데이터가 네 가지 내장 유형 중 하나에 맞지 않는 경우 대신 사용자 지정 메모리 유형을 선언할 수 있습니다. 방법을 학습 에이전트에 메모리 추가 가이드 에서 사용자 지정 메모리 유형 선언을 참조하세요.

백그라운드 추출은 project-config.yaml의 memory.extraction 차단 에서 활성화된 메모리 유형에 대해 실행됩니다. 메모리 유형을 추출하려면 enabled 목록에 추가합니다:

memory:
extraction:
enabled:
- semantic
- episodic
- procedural
- taxonomic

활성화된 각 유형은 대화 스냅샷에서 해당 종류의 메모리를 추출하는 자체 추출 처리기를 실행합니다.

enabled 목록은 자동 배경 추출에 적용됩니다. 해당 유형에 대한 자동 추출이 꺼져 있어도 애플리케이션 은 SDK로 모든 내장 메모리 유형을 계속 저장할 수 있습니다.

메모리 서비스를 활성화 하고 배포된 프로젝트 에 추출 구성을 적용 하려면 에이전트에 메모리 추가 가이드 를 참조하세요.

에이전트 는 두 가지 고유한 검색 모드, 즉 어셈블된 컨텍스트 또는 원시 레코드를 통해 메모리를 쿼리하고 읽습니다.

  • 어셈블된 컨텍스트: 에이전트 에 대한 프롬프트 준비된 단일 텍스트 차단 서식을 지정합니다. build_context 및 build_context_from_sources 메서드는 선택한 메모리 유형을 쿼리 , 일치 항목의 순위를 지정 및 중복 제거하고, 토큰 예산에 맞게 결과를 조정합니다.

  • 원시 레코드: 사용자 지정 애플리케이션 로직에 대한 구조화된 데이터 객체를 반환합니다. search 또는 유형별 검색 메서드를 사용하여 코드의 레코드를 검사하거나 필터하다 .

기본값 으로 컨텍스트 빌더 일시적 및 시맨틱 메모리를 검색 . 단기, 절차적 또는 분류학적 기억을 포함하려면 해당 소스를 enabled_sources에 나열합니다.

다음 예시 절차 메모리를 포함하여 채팅 세션에 대한 컨텍스트를 빌드합니다.

from agentic_platform_memory import (
Memory,
MemoryRequestContext,
)
memory = Memory(
api_key="<your-access-token>",
project_id="<your-project-id>",
)
chat = memory.bind(
MemoryRequestContext(
user_id="user_1",
session_id="thread_123",
)
)
context = chat.build_context(
query="What is relevant to the next trip-planning task?",
enabled_sources={"episodic", "semantic", "procedural"},
)

참고

플랫폼에 배포된 에이전트 런타임에 의해 이미 설정하다 ID를 사용하여 사전에 연결된 app.memory 클라이언트 수신합니다. 독립형 애플리케이션 Memory을 구성하고 user_id와 session_id 자체를 바인딩합니다.

모든 메모리 레코드는 해당 레코드가 생성된 프로젝트 와 격리됩니다. 데이터는 프로젝트 경계를 절대 넘지 않습니다. 프로젝트 내에서 플랫폼은 두 가지 가시성 범위를 사용하여 기록 액세스 제어합니다.

  • 비공개: 기록 과 연결된 사용자 ID만 액세스할 수 있습니다. 시맨틱, 일화 및 절차 메모리는 기본값 private로 설정됩니다.

  • 조직: 프로젝트 의 모든 사용자가 액세스할 수 있습니다. 도메인 정의와 용어는 프로젝트 전체에서 공유되어야 하므로 분류학적 메모리의 기본값은 org입니다.

에이전트 읽기 또는 검색 실행하면 플랫폼에서 읽기를 호출자의 프로젝트 및 사용자 범위로 제한하므로 결과에는 호출자가 읽을 수 있는 레코드만 포함됩니다.

중요

서비스 계정 메모리 ID

서비스 계정이 배포된 에이전트 호출하면 Atlas Agent Engine은 서비스 계정의 자체 ID를 런타임 메모리 ID로 사용합니다. 플랫폼은 호출 요청 또는 agentengine invoke --user-id 플래그가 제공하는 모든 최종 사용자 user_id 값을 무시합니다.

자동 회전 기록, 추출, 통합 및 app.memory 작업은 이 확인된 ID를 사용합니다. 결과적으로 동일한 서비스 계정을 통해 인증하는 호출은 하나의 메모리 사용자 범위를 주식 .

이 제한은 서비스 계정이 호출하는 배포된 에이전트에만 적용됩니다. 독립형 프로젝트 범위 메모리 서비스는 영향을 받지 않습니다. 이 서비스는 호출자로부터 명시적인 user_id 및 session_id 값을 계속 받습니다.

최종 사용자별로 메모리를 격리하려면 애플리케이션 에서 독립형 메모리 서비스를 호출하고 각 호출에 명시적인 user_id 및 session_id 값을 전달합니다. 자세한 학습 은 독립형 메모리 서비스 사용을 참조하세요.

에이전트 에 대한 메모리를 활성화 방법을 학습 에이전트에 메모리 추가를 참조하세요.

전체 에이전트 배포서버 없이 메모리를 사용하는 방법을 학습 보려면 독립형 메모리 서비스 사용을 참조하세요.