Revisi memori

Halaman ini menjelaskan cara resource revisi memori dibuat dan dikelola untuk Bank Memori Agent Engine Vertex AI.

Siklus proses memori dan revisinya

Sumber data dan revisi memori

Memori dapat dibuat, diperbarui, atau dihapus secara langsung (menggunakan CreateMemory, UpdateMemory, atau DeleteMemory) atau secara dinamis (menggunakan GenerateMemories). Resource revisi memori menyediakan histori versi lengkap resource memori di semua operasi mutasi. Revisi baru yang tidak dapat diubah akan otomatis disimpan setiap kali memori dibuat atau diubah. Hal ini memberi Anda transparansi tentang bagaimana memori berkembang dan (untuk pembuatan memori) informasi spesifik apa yang diekstrak dan digabungkan di setiap langkah.

Setiap resource memori memiliki satu atau beberapa resource revisi memori turunan terkait:

  • Resource Memory selalu mencerminkan status informasi saat ini yang digabungkan. Satu memori dapat mencerminkan data turunan dari beberapa permintaan dan sumber data.

    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(...)
    )
    
  • Resource MemoryRevisions merepresentasikan status historis memori induk. Setiap revisi adalah snapshot memori pada peristiwa mutasi. Jika memori diubah menggunakan GenerateMemories, revisi juga menyertakan informasi yang diekstrak dari sumber data (extracted_memories) sebelum digabungkan dengan konten memori yang ada.

    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/...'
    )
    

Revisi memori diaktifkan secara default. Untuk menonaktifkan revisi memori, lihat Menonaktifkan revisi memori.

Pembuatan memori

Kenangan dapat dibuat secara langsung menggunakan CreateMemory atau secara dinamis menggunakan GenerateMemories. Dengan pembuatan kenangan, kenangan dibuat jika tidak ada kenangan yang ada yang mencakup informasi serupa untuk cakupan yang sama:

# 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, ...)

Saat kenangan dibuat, satu resource Memory dan turunan MemoryRevision akan dibuat:

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",
    ...
  )
]
"""

Pembaruan memori

Kenangan dapat diperbarui secara langsung menggunakan UpdateMemory atau secara dinamis menggunakan GenerateMemories. Dengan pembuatan memori, memori diperbarui secara dinamis saat proses penggabungan memutuskan bahwa informasi baru bersifat duplikat, komplementer, atau bertentangan dengan semua memori yang ada untuk cakupan yang sama.

# 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, ...)

Saat kenangan diperbarui, resource Memory yang ada akan diperbarui, dan turunan MemoryRevision baru akan dibuat.

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",
    ...
  )
]
"""

Penghapusan memori

Kenangan dapat ditampilkan secara langsung menggunakan DeleteMemory atau secara dinamis menggunakan GenerateMemories. Dengan pembuatan memori, memori akan dihapus secara dinamis saat proses penggabungan memutuskan bahwa informasi baru membatalkan informasi yang ada untuk cakupan yang sama.

# 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, ...)

Saat memori dihapus, resource Memory yang ada akan dihapus, dan MemoryRevision turunan baru akan dibuat. fact dalam revisi memori terbaru kosong karena mencerminkan mutasi penghapusan.

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",
    ...
  )
]
"""

Revisi memori anak hanya dapat diakses hingga 48 jam setelah penghapusan memori induk. Selama periode pemulihan ini, Anda dapat terus memeriksa revisi memori, dan Anda dapat memulihkan memori dengan melakukan roll back ke revisi sebelumnya.

Operasi revisi memori

Bagian ini menjelaskan cara memeriksa revisi memori dan melakukan rollback memori ke revisi sebelumnya.

Mencantumkan revisi

Gunakan ListMemoryRevisions untuk menampilkan semua revisi memori yang termasuk dalam memori.

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

Ganti kode berikut:

  • MEMORY_NAME: Nama resource memori dalam format: projects/.../locations/.../reasoningEngines/.../memories/...

Saat membuat kenangan, Anda dapat memberikan label revisi yang diterapkan ke revisi terkait. Label adalah pasangan nilai kunci arbitrer. Misalnya, Anda dapat memberi label pada revisi dengan ID sumber data yang digunakan untuk membuat memori, lalu memfilter revisi menurut label ini:

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"
    }
    ...
  )
]
"""

Mendapatkan revisi

Gunakan GetMemoryRevision untuk mengambil revisi memori tertentu.

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

Ganti kode berikut:

  • MEMORY_REVISION_NAME: Nama resource revisi memori yang akan diambil dalam format: projects/.../locations/.../reasoningEngines/.../memories/.../revisions/...

Me-roll back kenangan

Gunakan RollbackMemory untuk mengembalikan kenangan ke revisi sebelumnya.

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

Ganti kode berikut:

  • MEMORY_NAME: Nama resource memori yang akan diupdate dalam format: projects/.../locations/.../reasoningEngines/.../memories/...
  • REVISION_ID: ID revisi yang harus di-roll back. Ini adalah segmen terakhir dari nama resource revisi memori, seperti 789 dalam projects/MyProject/locations/us-central1/reasoningEngines/123/memories/456/revisions/789.

Jika Anda ingin mengurungkan perubahan pada kenangan yang dibuat oleh GenerateMemories, kembalikan kenangan ke revisinya sebelum perubahan. Respons pembuatan memori mencakup referensi ke revisi sebelumnya (previous_revision) untuk setiap memori yang diperbarui atau dihapus:

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
)

Menonaktifkan revisi memori

Revisi memori diaktifkan secara default. Anda dapat menonaktifkan revisi memori untuk semua permintaan ke instance Bank Memori Anda atau untuk setiap permintaan. Jika revisi memori dinonaktifkan, revisi memori tidak dibuat saat memori diubah.

Anda dapat menonaktifkan revisi memori untuk semua permintaan ke instance Bank Memori saat menyiapkan instance:

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

Anda dapat menonaktifkan revisi memori di tingkat permintaan saat Anda mengirim permintaan:

Buat

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

Buat

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

Perbarui

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

Masa berlaku revisi

Revisi memori tidak dipertahankan selamanya. Anda harus menetapkan masa berlaku revisi atau menggunakan masa berlaku default. Time to live (TTL) default adalah 365 hari. Anda dapat mengonfigurasi masa berlaku untuk semua permintaan ke instance Memory Bank atau untuk setiap permintaan. Setelah masa berlaku revisi memori berakhir, revisi tersebut tidak tersedia untuk pemeriksaan atau rollback.

Anda dapat mengonfigurasi TTL untuk semua permintaan ke instance Memory Bank saat Anda menyiapkan instance:

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"
        }
      }
    }
  }
)

Untuk mengonfigurasi TTL untuk setiap revisi memori di tingkat permintaan, sertakan revision_expire_time atau revision_ttl dalam permintaan Anda:

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
)

Akhir masa berlaku

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
)