このページでは、Vertex AI Agent Engine Memory Bank のメモリ リビジョン リソースの作成と管理の方法について説明します。
思い出とそのリビジョンのライフサイクル

メモリは、直接(それぞれ CreateMemory、UpdateMemory、DeleteMemory を使用)または動的(GenerateMemories を使用)に作成、更新、削除できます。メモリ リビジョン リソースは、すべてのミューテーション オペレーションにわたるメモリ リソースの完全なバージョン履歴を提供します。メモリが作成または変更されるたびに、新しい不変のリビジョンが自動的に保存されます。これにより、メモリーがどのように進化してきたか、また(メモリー生成の場合)、各ステップでどのような特定の情報が抽出され、統合されたかを把握できます。
すべてのメモリ リソースには、1 つ以上の子メモリ リビジョン リソースが関連付けられています。
Memoryリソースには、常に情報の現在の統合状態が反映されます。1 つのメモリで、複数のリクエストとデータソースから派生したデータを反映できます。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/...です。
メモリーを生成するときに、関連するリビジョンに適用されるリビジョン ラベルを指定できます。ラベルは任意の Key-Value ペアです。たとえば、メモリの生成に使用されたデータソースの 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/789の789など)。
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 インスタンスへのすべてのリクエストに対して無効にするか、個々のリクエストごとに無効にできます。メモリ リビジョンが無効になっている場合、メモリが変更されてもメモリ リビジョンは作成されません。
インスタンスの設定時に、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 日です。有効期限は、Memory Bank インスタンスへのすべてのリクエストに対して構成することも、個々のリクエストに対して構成することもできます。メモリ リビジョンの有効期限が切れると、検査やロールバックはできなくなります。
インスタンスの設定時に、Memory Bank インスタンスに対するすべてのリクエストの 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
)