View a markdown version of this page

Tentukan organisasi memori jangka panjang dengan ruang nama - Batu Dasar Amazon AgentCore

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tentukan organisasi memori jangka panjang dengan ruang nama

Saat Anda membuat AgentCore Memori, gunakan namespace untuk menentukan di mana memori jangka panjang untuk strategi memori dikelompokkan secara logis. Setiap kali memori jangka panjang baru diekstraksi menggunakan strategi memori, itu disimpan di bawah namespace yang Anda tetapkan. Ini berarti bahwa semua memori jangka panjang dicakup ke ruang nama spesifik mereka, menjaganya tetap teratur dan mencegah campur tangan dengan pengguna atau sesi lain. Anda harus menggunakan format hierarkis yang dipisahkan oleh garis miring ke depan. / Ini membantu menjaga ingatan terorganisir dengan jelas. Sesuai kebutuhan, Anda dapat memilih untuk menggunakan variabel pra-definisi berikut dalam kurung kurung di namespace berdasarkan kebutuhan organisasi aplikasi Anda:

  • ActoRid — Mengidentifikasi siapa milik memori jangka panjang.

    Seorang aktor mengacu pada entitas seperti pengguna akhir atau agent/user kombinasi. Misalnya, dalam chatbot dukungan coding, aktor biasanya pengembang yang mengajukan pertanyaan. Menggunakan ID aktor membantu sistem mengetahui pengguna mana yang dimiliki memori, menjaga data setiap pengguna tetap terpisah dan terorganisir.

  • StrategyID — Menunjukkan strategi memori yang digunakan. Pengidentifikasi strategi ini dibuat secara otomatis saat Anda membuat AgentCore Memori.

  • SessionId — Mengidentifikasi sesi atau percakapan mana memori berasal.

    Sesi biasanya merupakan percakapan tunggal atau periode interaksi antara pengguna dan agen AI. Ini mengelompokkan semua pesan dan peristiwa terkait yang terjadi selama percakapan itu.

Misalnya, jika Anda mendefinisikan namespace berikut sebagai masukan ke strategi Anda saat membuat AgentCore Memori:

/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/

Setelah pembuatan memori, namespace ini mungkin terlihat seperti:

/strategy/summarization-93483043/actor/actor-9830m2w3/session/session-9330sds8

Sebuah namespace dapat memiliki tingkat granularitas yang berbeda. Contoh berikut hanya menggunakan variabel bawaan:

Granular pada tingkat sesi

/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/

Granular di tingkat aktor di seluruh sesi

/strategy/{memoryStrategyId}/actor/{actorId}/

Granular di tingkat strategi lintas aktor

/strategy/{memoryStrategyId}/

Global di semua strategi

/

Untuk organisasi yang lebih terperinci, Anda dapat menambahkan variabel namespace khusus untuk mewakili dimensi tambahan seperti penyewa, tim, atau lingkungan.

Misalnya kode, lihat Meng aktifkan memori jangka panjang.

Variabel namespace kustom

Selain variabel bawaan (actorId,,memoryStrategyId)sessionId, Anda dapat menentukan variabel namespace khusus untuk mewakili dimensi organisasi unik aplikasi Anda, seperti perusahaan, organisasi, tim, atau lingkungan. Dengan variabel khusus, Anda dapat menjangkau memori jangka panjang di sepanjang hierarki sewenang-wenang tanpa membuat strategi duplikat atau membebani variabel bawaan secara berlebihan.

Misalnya, aplikasi multi-tenant mungkin memerlukan memori yang dicakup oleh organisasi:

/org/{orgname}/team/{teamname}/actor/{actorId}/session/{sessionId}/

Anda menentukan variabel kustom saat membuat atau memperbarui sumber daya memori yang ada menggunakan namespaceKeys parameter, dan memberikan nilainya saat runtime melalui extractionConfig.namespaceVariables bidang dalam CreateEvent operasi.

penting

Semua kunci dan nilai variabel namespace kustom harus huruf kecil.

Tentukan kunci namespace

Saat Anda membuat atau memperbarui sumber daya memori, gunakan namespaceKeys parameter untuk mendeklarasikan kunci variabel kustom dan aturan validasi opsional. Setiap kunci harus:

  • Hanya berisi karakter alfanumerik huruf kecil.

  • Bukan nama variabel bawaan (actorId,sessionId, ataumemoryStrategyId).

  • Panjang maksimal 32 karakter.

Anda dapat menentukan hingga 5 kunci namespace per sumber daya memori, dan hingga 5 variabel khusus per. namespaceTemplate

Ingatlah hal-hal berikut saat mendefinisikan kunci namespace:

  • Anda dapat menentukan kunci namespace yang tidak direferensikan oleh strategi apa pun untuk melakukan pra-registrasi kunci untuk penggunaan di masa mendatang.

  • Kunci namespace tunggal dapat direferensikan oleh beberapa strategi. Misalnya, {companyname} dapat muncul dalam strategi namespaceTemplate semantik dan strategi ringkasan.

  • Kunci namespace yang saat ini direferensikan oleh strategi namespaceTemplate tidak dapat dihapus. Anda harus terlebih dahulu menghapus referensi dari strategi (de-referensi kunci), lalu menghapusnya.

Untuk setiap kunci, Anda dapat secara opsional menentukan aturan validasi yang membatasi nilai yang diterima saat runtime:

  • allowedValues — Daftar hingga 10 nilai yang diizinkan (peka huruf besar/kecil). Nilai harus dimulai dengan karakter alfanumerik huruf kecil dan hanya berisi karakter alfanumerik huruf kecil, tanda hubung, dan garis bawah.

  • RegExPattern — Pola regex (hingga 64 karakter) yang nilainya harus cocok.

Ketika Anda menentukan keduanya allowedValues danregexPattern, layanan memberlakukan kedua aturan (logisAND).

Contoh berikut menunjukkan cara membuat sumber daya memori dengan variabel namespace kustom dan validasi:

aws bedrock-agentcore-control create-memory \ --name "MultiTenantAgentMemory" \ --description "Memory for a multi-tenant AI agent" \ --event-expiry-duration 10 \ --memory-strategies '[ { "semanticMemoryStrategy": { "name": "TenantScopedStrategy", "namespaceTemplates": ["/org/{orgname}/team/{teamname}/actor/{actorId}/session/{sessionId}/"] } } ]' \ --namespace-keys '[ {"key": "orgname", "validation": {"allowedValues": ["acme", "globex", "initech"]}}, {"key": "teamname", "validation": {"regexPattern": "^[a-z][a-z0-9-]*$"}} ]'

Menyediakan nilai namespace saat runtime

Saat Anda membuat acara menggunakan CreateEvent operasi, berikan nilai variabel namespace kustom di extractionConfig.namespaceVariables bidang:

aws bedrock-agentcore create-event \ --memory-id "MultiTenantAgentMemory-n29sh5ka8r" \ --actor-id "user123" \ --session-id "session67" \ --event-timestamp "$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")" \ --payload '[ { "conversational": { "content": {"text": "I need help debugging my application."}, "role": "USER" } } ]' \ --extraction-config '{ "namespaceVariables": { "orgname": "acme", "teamname": "engineering" } }'

Layanan mengganti nilai-nilai ini ke dalam templat namespace selama ekstraksi memori jangka panjang.

catatan

Jika variabel namespace kustom yang direferensikan oleh strategi tidak namespaceTemplate disediakan dalam CreateEvent permintaan, resolusi namespace tidak terjadi untuk strategi itu. Akibatnya, ekstraksi memori jangka panjang tidak dimulai untuk strategi itu. CreateEventOperasi masih berhasil dan peristiwa tersebut bertahan dalam memori jangka pendek.

Untuk mendeteksi kegagalan ini, siapkan log yang dijual dan monitor untuk NamespaceResolutionFailure metrik, yang melaporkan dengan dimensi:Operation,, ResourceStrategyType, dan ekstr StrategyId aksi yang dilewati.

Perbarui kunci namespace

Saat Anda memperbarui kunci namespace dengan UpdateMemory operasi, namespaceKeys nilai sepenuhnya menggantikan set yang ada. Untuk memperbarui dengan aman, ambil kunci saat ini denganGetMemory, terapkan perubahan Anda, dan kirimkan daftar lengkapnya.

Ingatlah kendala berikut:

  • Jika Anda menghilangkan kunci yang masih direferensikan oleh strateginamespaceTemplate, layanan akan melemparValidationException. Anda harus terlebih dahulu menghapus kunci dari strategi namespaceTemplate sebelum Anda dapat menghapusnyanamespaceKeys.

  • Untuk menambahkan kunci baru, sertakan bersama semua kunci yang ada dalam permintaan.

# Get the current memory configuration current = control_client.get_memory(memoryId="MultiTenantAgentMemory-n29sh5ka8r") existing_keys = current['memory'].get('namespaceKeys', []) # Add a new key while preserving existing ones existing_keys.append({ 'key': 'category', 'validation': { 'allowedValues': ['backend', 'frontend', 'data'] } }) # Update with the full set control_client.update_memory( memoryId="MultiTenantAgentMemory-n29sh5ka8r", namespaceKeys=existing_keys )

Batasi akses jalur tulis dengan kunci kondisi IAM

Anda dapat membuat kebijakan IAM yang menggunakan kunci bedrock-agentcore:namespaceVariable/<variableName> kondisi untuk mengontrol nilai variabel namespace kustom mana yang dapat digunakan pemanggil saat membuat acara. Dengan kunci kondisi ini, Anda dapat menerapkan isolasi penyewa di jalur penulisan.

Kunci kondisi mengikuti pola di bedrock-agentcore:namespaceVariable/<key> <key> mana nama variabel namespace didefinisikan dinamespaceKeys.

Kebijakan berikut mengizinkan pemanggil membuat acara hanya bila disetel orgname keacme, dan secara eksplisit menolak permintaan saat orgname disetel ke: globex

{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCreateEventForAcme", "Effect": "Allow", "Action": "bedrock-agentcore:CreateEvent", "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringEquals": { "bedrock-agentcore:namespaceVariable/orgname": "acme" } } }, { "Sid": "DenyCreateEventForGlobex", "Effect": "Deny", "Action": "bedrock-agentcore:CreateEvent", "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringEquals": { "bedrock-agentcore:namespaceVariable/orgname": "globex" } } } ] }

Tabel berikut menunjukkan bagaimana IAM mengevaluasi permintaan berdasarkan apakah kunci kondisi ada dalam kebijakan dan apakah permintaan tersebut menyediakan variabel namespace:

Apakah kebijakan memiliki syaratnamespaceVariable? Permintaan menyediakan variabel? Hasil Alasan

Tidak

Tidak

Diizinkan

Kondisi tidak dievaluasi

Tidak

Ya

Diizinkan

Kunci konteks tambahan diabaikan

Ya

Ya (nilai yang cocok)

Diizinkan

Kondisi terpenuhi

Ya

Tidak

Ditolak

Kunci kondisi hilang, tidak bisa dipenuhi

Ya

Ya (nilai tidak cocok)

Ditolak

Kondisi tidak terpenuhi

Batasi akses jalur baca dengan IAM

Anda dapat membuat kebijakan IAM untuk membatasi akses baca memori berdasarkan cakupan yang Anda tentukan, seperti aktor, sesi, dan namespace. Gunakan cakupan sebagai kunci konteks dalam kebijakan IAM Anda.

Kebijakan berikut membatasi akses untuk mengambil memori ke namespace atau rekaman tertentu di bawah hierarki NamespacePath tertentu. Dalam contoh ini, kebijakan mengizinkan akses hanya ke memori dengan ruang nama yang tepat seperti summaries/agent1/ OR dengan ruang nama di bawah hierarki NameSpacePath berikut dengan, seperti atau. summaries/agent1/ summaries/agent1/session1/ summaries/agent1/session2/

{ "Version":"2012-10-17", "Statement": [ { "Sid": "SpecificNamespaceAccess", "Effect": "Allow", "Action": [ "bedrock-agentcore:RetrieveMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringEquals": { "bedrock-agentcore:namespace": "summaries/agent1/" } } }, { "Sid": "SpecificNamespacePathAccess", "Effect": "Allow", "Action": [ "bedrock-agentcore:RetrieveMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringLike": { "bedrock-agentcore:namespacePath": "summaries/agent1/*" } } } ] }
catatan

API pengambilan (ListMemoryRecords,RetrieveMemoryRecords) memerlukan namespace yang diselesaikan sepenuhnya. Variabel namespace kustom sudah diganti pada titik ini, sehingga kunci yang ada bedrock-agentcore:namespace dan kunci bedrock-agentcore:namespacePath kondisi mencakup jalur baca tanpa konfigurasi tambahan.