메모리 버전

이 페이지에서는 Vertex AI Agent Engine 메모리 뱅크의 메모리 버전 리소스가 생성되고 관리되는 방법을 설명합니다.

추억 및 수정 버전의 수명 주기

데이터 소스 및 메모리 수정사항

메모리는 직접 (각각 CreateMemory, UpdateMemory 또는 DeleteMemory 사용) 또는 동적으로 (GenerateMemories 사용) 생성, 업데이트 또는 삭제할 수 있습니다. 메모리 수정 버전 리소스는 모든 변이 작업에 걸쳐 메모리 리소스의 전체 버전 기록을 제공합니다. 메모리가 생성되거나 수정될 때마다 변경할 수 없는 새 버전이 자동으로 저장됩니다. 이를 통해 메모리가 어떻게 발전했는지, (메모리 생성의 경우) 각 단계에서 어떤 구체적인 정보가 추출되고 통합되었는지 투명하게 확인할 수 있습니다.

모든 메모리 리소스에는 하나 이상의 연결된 하위 메모리 버전 리소스가 있습니다.

  • Memory 리소스는 항상 정보의 현재 통합 상태를 반영합니다. 단일 메모리는 여러 요청과 데이터 소스에서 파생된 데이터를 반영할 수 있습니다.

    Memory(
        create_time=datetime.datetime(...),
        fact='This is my current memory content after consolidation',
        name='projects/.../locations/.../reasoningEngines/../memories/...',
        scope={
          'my_scope_key': 'my_scope_value'
        },
        topics=[
          MemoryTopicId(
            managed_memory_topic=<ManagedTopicEnum.USER_PERSONAL_INFO: 'USER_PERSONAL_INFO'>
          ),
        ],
        update_time=datetime.datetime(...)
    )
    
  • MemoryRevisions 리소스는 상위 메모리의 이전 상태를 나타냅니다. 각 버전은 변이 이벤트의 메모리 스냅샷입니다. GenerateMemories를 사용하여 메모리가 변경된 경우 수정사항에는 메모리의 기존 콘텐츠와 통합되기 전에 데이터 소스 (extracted_memories)에서 추출된 정보도 포함됩니다.

    MemoryRevision(
        create_time=datetime.datetime(...),
        expire_time=datetime.datetime(...),
        extracted_memories=[
          IntermediateExtractedMemory(
            fact='This information was extracted from my data source'
          ),
        ],
        fact='This is my current memory content after consolidation',
        name='projects/.../locations/.../reasoningEngines/.../memories/.../revisions/...'
    )
    

메모리 수정은 기본적으로 사용 설정되어 있습니다. 메모리 버전 관리를 사용 중지하려면 메모리 버전 관리 사용 중지를 참고하세요.

메모리 생성

CreateMemory를 사용하여 직접 기억을 만들거나 GenerateMemories을 사용하여 동적으로 만들 수 있습니다. 메모리 생성 기능을 사용하면 동일한 범위에 대해 유사한 정보를 다루는 기존 메모리가 없는 경우 메모리가 생성됩니다.

# Direct creation using CreateMemory
client.agent_engines.memories.create(name=agent_engine_name, ...)

# Dynamic creation using GenerateMemory
client.agent_engines.memories.generate_memories(name=agent_engine_name, ...)

메모리가 생성되면 단일 Memory 리소스와 하위 MemoryRevision가 생성됩니다.

client.agent_engines.memories.get(name=memory_name)
"""
Memory(
  name="projects/123/locations/us-central1/reasoningEngines/456/memories/789",
  fact="This is my original fact.",
  ...
)
"""

list(client.agent_engines.memories.revisions.list(name=memory_name))
"""
[
  MemoryRevision(
    name="projects/123/locations/us-central1/reasoningEngines/456/memories/789/revision/123",
    fact="This is my original fact",
    ...
  )
]
"""

추억 업데이트

UpdateMemory를 사용하여 기억을 직접 업데이트하거나 GenerateMemories를 사용하여 동적으로 업데이트할 수 있습니다. 메모리 생성 기능을 사용하면 통합 프로세스에서 새 정보가 동일한 범위의 모든 기존 메모리와 중복되거나 보완적이거나 모순된다고 판단할 때 메모리가 동적으로 업데이트됩니다.

# Direct update using UpdateMemory
client.agent_engines.memories.update(name=memory_name, ...)

# Dynamic update using GenerateMemories
client.agent_engines.memories.generate_memories(name=agent_engine_name, ...)

메모리가 업데이트되면 기존 Memory 리소스가 업데이트되고 새 하위 MemoryRevision가 생성됩니다.

client.agent_engines.memories.get(name=memory_name)
"""
Memory(
  name="projects/123/locations/us-central1/reasoningEngines/456/memories/789",
  fact="This is my updated fact.",
  ...
)
"""

list(client.agent_engines.memories.revisions.list(name=memory_name))
"""
[
  MemoryRevision(
    name="projects/123/locations/us-central1/reasoningEngines/456/memories/789/revision/456",
    fact="This is my updated fact",
    ...
  ),
  MemoryRevision(
    name="projects/123/locations/us-central1/reasoningEngines/456/memories/789/revision/123",
    fact="This is my original fact",
    ...
  )
]
"""

메모리 삭제

기억은 DeleteMemory를 사용하여 직접 가져오거나 GenerateMemories를 사용하여 동적으로 가져올 수 있습니다. 메모리 생성 기능을 사용하면 통합 프로세스에서 새 정보가 동일한 범위의 기존 정보를 무효화한다고 판단할 때 메모리가 동적으로 삭제됩니다.

# Direct deletion using UpdateMemory
client.agent_engines.memories.delete(name=memory_name, ...)

# Dynamic delete using GenerateMemories
client.agent_engines.memories.generate_memories(name=agent_engine_name, ...)

메모리가 삭제되면 기존 Memory 리소스가 삭제되고 새 하위 MemoryRevision가 생성됩니다. 최신 메모리 수정사항의 fact는 삭제 변이를 반영하므로 비어 있습니다.

client.agent_engines.memories.get(name=memory_name)
"""
404 Not Found.
"""

list(client.agent_engines.memories.revisions.list(name=memory_name))
"""
[
  MemoryRevision(
    name="projects/123/locations/us-central1/reasoningEngines/456/memories/789/revision/789",
    fact="",
    ...
  ),
  MemoryRevision(
    name="projects/123/locations/us-central1/reasoningEngines/456/memories/789/revision/456",
    fact="This is my updated fact",
    ...
  ),
  MemoryRevision(
    name="projects/123/locations/us-central1/reasoningEngines/456/memories/789/revision/123",
    fact="This is my original fact",
    ...
  )
]
"""

자녀 메모리 수정사항은 부모 메모리가 삭제된 후 최대 48시간 동안만 액세스할 수 있습니다. 이 복구 기간 동안 메모리 버전을 계속 검사할 수 있으며 이전 버전으로 롤백하여 메모리를 복구할 수 있습니다.

메모리 버전 작업

이 섹션에서는 메모리 버전을 검사하고 메모리를 이전 버전으로 롤백하는 방법을 설명합니다.

버전 나열

ListMemoryRevisions를 사용하여 메모리에 속하는 모든 메모리 수정사항을 반환합니다.

list(client.agent_engines.memories.revisions.list(name=MEMORY_NAME))

다음을 바꿉니다.

  • MEMORY_NAME: 메모리의 리소스 이름입니다. 형식은 projects/.../locations/.../reasoningEngines/.../memories/...입니다.

추억을 생성할 때 관련 버전에 적용되는 버전 라벨을 제공할 수 있습니다. 라벨은 임의의 키-값 쌍입니다. 예를 들어 메모리를 생성하는 데 사용된 데이터 소스의 ID로 버전에 라벨을 지정한 다음 이 라벨로 버전을 필터링할 수 있습니다.

response = client.agent_engines.memories.generate(
    ...,
    config={
        "revision_labels": {
            "data_source": "321"
        }
    }
)

list(client.agent_engines.memories.revisions.list(
    name=MEMORY_NAME,
    config={
      "filter": "labels.data_source=\"321\""
    }
))
"""
[
  MemoryRevision(
    name="projects/123/locations/us-central1/reasoningEngines/456/memories/789/revision/123",
    labels={
      "data_source": "123"
    }
    ...
  )
]
"""

버전 가져오기

GetMemoryRevision을 사용하여 개별 메모리 버전을 가져옵니다.

client.agent_engines.memories.revisions.get(name=MEMORY_REVISION_NAME)

다음을 바꿉니다.

  • MEMORY_REVISION_NAME: 가져올 메모리 버전의 리소스 이름입니다. 형식은 projects/.../locations/.../reasoningEngines/.../memories/.../revisions/...입니다.

추억 롤백하기

RollbackMemory를 사용하여 메모리를 이전 버전으로 롤백합니다.

client.agent_engines.memories.rollback(
    name=name=MEMORY_NAME,
    target_revision_id=REVISION_ID
)

다음을 바꿉니다.

  • MEMORY_NAME: 업데이트할 메모리의 리소스 이름입니다(projects/.../locations/.../reasoningEngines/.../memories/... 형식).
  • REVISION_ID: 롤백해야 하는 버전의 ID입니다. 메모리 수정 리소스 이름의 마지막 세그먼트입니다(예: projects/MyProject/locations/us-central1/reasoningEngines/123/memories/456/revisions/789789).

GenerateMemories에서 변경한 추억을 실행취소하려면 변경 전 버전으로 추억을 롤백하세요. 메모리 생성 응답에는 업데이트되거나 삭제된 각 메모리의 이전 버전 (previous_revision)에 대한 참조가 포함됩니다.

operation = client.agent_engines.memories.generate(
  ...
)

# Rollback the first generated memory to the previous revision.
client.agent_engines.memories.rollback(
    name=operation.response.generated_memories[0].memory.name,
    target_revision_id=operation.response.generated_memories[0].previous_revision
)

메모리 버전 사용 중지

메모리 수정은 기본적으로 사용 설정되어 있습니다. Memory Bank 인스턴스의 모든 요청 또는 각 개별 요청에 대해 메모리 수정사항을 사용 중지할 수 있습니다. 메모리 버전이 사용 중지된 경우 메모리가 변경될 때 메모리 버전이 생성되지 않습니다.

인스턴스를 설정할 때 메모리 뱅크 인스턴스에 대한 모든 요청에 대해 메모리 수정사항을 사용 중지할 수 있습니다.

client.agent_engines.create(
  config={
    "context_spec": {
      "memory_bank_config": {
        "disable_memory_revisions": True
      }
    }
  }
)

요청을 보낼 때 요청 수준에서 메모리 버전을 사용 중지할 수 있습니다.

생성

client.agent_engines.memories.generate(
  ...,
  "config": {
    "disable_memory_revisions": True
  }
)

만들기

client.agent_engines.memories.create(
  ...,
  "config": {
    "disable_memory_revisions": True
  }
)

업데이트

client.agent_engines.memories.update(
  ...,
  "config": {
    "disable_memory_revisions": True
  }
)

버전 만료

메모리 수정사항은 영구적으로 유지되지 않습니다. 버전의 만료를 설정하거나 기본 만료를 사용해야 합니다. 기본 TTL (수명)은 365일입니다. 메모리 뱅크 인스턴스에 대한 모든 요청 또는 각 개별 요청에 대해 만료를 구성할 수 있습니다. 메모리 버전이 만료되면 검사하거나 롤백할 수 없습니다.

인스턴스를 설정할 때 메모리 뱅크 인스턴스의 모든 요청에 대해 TTL을 구성할 수 있습니다.

client.agent_engines.create(
  config={
    "context_spec": {
      "memory_bank_config": {
        "ttl_config": {
          # Persist memory revisions for 30 days after they're created.
          "revision_ttl": f"{30 * 60 * 60 * 24}s"
        }
      }
    }
  }
)

요청 수준에서 각 메모리 버전의 TTL을 구성하려면 요청에 revision_expire_time 또는 revision_ttl를 포함하세요.

TTL

config = {
    # Persist memory revisions for 30 days after they're created.
    "revision_ttl": f"{30 * 60 * 60 * 24}s"
}

client.agent_engines.memories.create(
  ...,
  config=config
)

client.agent_engines.memories.update(
  ...,
  config=config
)

client.agent_engines.memories.generate(
  ...,
  config=config
)

만료

import datetime

config = {
    "revision_expire_time": datetime.datetime.now(tz=datetime.timezone.utc) + datetime.timedelta(weeks=3)
}

client.agent_engines.memories.create(
  ...,
  config=config
)

client.agent_engines.memories.update(
  ...,
  config=config
)

client.agent_engines.memories.generate(
  ...,
  config=config
)