AgentCore Memory の使用を開始する
Amazon Bedrock Amazon Bedrock AgentCore Memory を使用すると、AI エージェントの会話コンテキストを保存する AgentCore Memory リソースを作成および管理できます。この入門ガイドでは、依存関係をインストールし、短期メモリ機能と長期メモリ機能の両方を実装する方法について説明します。手順では、AgentCore CLI を使用します。
ステップは次のとおりです。
-
セマンティック戦略を含む AgentCore メモリを作成する
-
イベント (会話履歴) をメモリリソースに書き込む
-
長期メモリからメモリレコードを取得する
その他の例については、「Amazon Bedrock AgentCore Memory examples」を参照してください。
前提条件
開始する前に、以下を確認してください。
-
AWS 認証情報が設定されたアカウント (
aws configure) -
Python 3.10 以降がインストールされている
-
Node.js 18+ がインストールされている (AgentCore CLI の場合)
Amazon Bedrock Amazon Bedrock AgentCore Memory の使用を開始するには、依存関係をインストールし、AgentCore CLI プロジェクトを作成し、仮想環境を設定します。以下のコマンドはターミナルで直接実行できます。
pip install bedrock-agentcore npm install -g @aws/agentcore agentcore create --name agentcore-memory-quickstart --no-agent cd agentcore-memory-quickstart python -m venv .venv source .venv/bin/activate
AgentCore CLI には、メモリリソースを作成および管理するためのコマンドが用意されています。agentcore add memory を使用してメモリを作成し、agentcore deployプロビジョニングします AWS。イベントオペレーションとセッション管理には、 AWS Python SDK (Boto3) () bedrock-agentcore を使用します。
注記
AgentCore CLI は、メモリリソースの作成とデプロイに役立ちます。Amazon Bedrock AgentCore Memory オペレーションの完全なセットについては、Boto3 ドキュメントbedrock-agentcore-control
完全な例: ステップ 1~3 を示す Amazon Bedrock AgentCore サンプル
ステップ 1: AgentCore メモリを作成する
エージェントに関する情報の保存を開始するには、AgentCore メモリが必要です。デフォルトでは、メモリイベント (短期メモリと呼ばれる) を AgentCore メモリに書き込むことができます。インサイトを抽出して長期メモリレコードに配置するには、リソースにメモリ戦略が必要です。これは、会話データの処理方法と抽出する情報 (事実、好み、概要など) を定義する設定です。
このステップでは、短期メモリと長期メモリの両方を使用できるように、セマンティック戦略を使用して AgentCore メモリを作成します。これには 2~3 分かかります。 AWS コンソールで AgentCore Memory リソースを作成することもできます。
セマンティック戦略を使用してメモリを作成します。
例
デプロイ後、メモリが作成されたことを確認します。
agentcore status
ステップ 2: イベントをメモリに書き込む
エージェントAgentCoreメモリに短期メモリとしてイベントを書き込むことができ、長期メモリに関するインサイトを抽出します。
イベントをメモリに書き込むには、複数の目的があります。まず、イベントの内容 (最も一般的には会話履歴) は短期メモリとして保存されます。次に、関連するインサイトはイベントから取得され、長期メモリの一部としてメモリレコードに書き込まれます。
イベントを作成するには、メモリリソース ID、アクター ID、セッション ID が必要です。このステップでは、エンドユーザーとチャットボット間のメッセージをシミュレートする 3 つのイベントを作成します。
import boto3 from bedrock_agentcore.memory import MemorySessionManager from bedrock_agentcore.memory.constants import ConversationalMessage, MessageRole control_client = boto3.client('bedrock-agentcore-control', region_name='us-west-2') # Retrieve the memory created in Step 1 response = control_client.list_memories() memory = response['memories'][0] memory_id = memory['id'] # Create a session to store memory events session_manager = MemorySessionManager( memory_id=memory_id, region_name="us-west-2") session = session_manager.create_memory_session( actor_id="User1", session_id="OrderSupportSession1" ) # Write memory events (conversation turns) session.add_turns( messages=[ ConversationalMessage( "Hi, how can I help you today?", MessageRole.ASSISTANT)], ) session.add_turns( messages=[ ConversationalMessage( "Hi, I am a new customer. I just made an order, but it hasn't arrived. The Order number is #35476", MessageRole.USER)], ) session.add_turns( messages=[ ConversationalMessage( "I'm sorry to hear that. Let me look up your order.", MessageRole.ASSISTANT)], )
特定のアクターのイベント (ターン) は、書き込み後に取得できます。
# Get the last k turns in the session turns = session.get_last_k_turns(k=5) for turn in turns: print(f"Turn: {turn}")
この場合、アクターとセッションの最後の 3 つのイベントを確認できます。
ステップ 3: 長期メモリからレコードを取得する
イベントがメモリリソースに書き込まれた後、分析され、有用な情報が長期メモリに送信されました。メモリにはセマンティックな長期メモリ戦略が含まれているため、システムは事実情報を抽出して保存します。
すべてのメモリレコードを一覧表示するには、以下を使用します。
# List all memory records memory_records = session.list_long_term_memory_records( namespace_path="/" ) for record in memory_records: print(f"Memory record: {record}") print("--------------------------------------------------------------------")
または、セマンティック検索の一部として最も関連性の高い情報を求めます。
# Perform a semantic search memory_records = session.search_long_term_memories( query="can you summarize the support issue", namespace_path="/", top_k=3 )
ユーザーに関する重要な情報は、長期メモリである可能性があります。エージェントは、完全な会話履歴ではなく長期メモリを使用して、LLMs がコンテキストで過負荷にならないようにすることができます。
既存のエージェントへのメモリの追加
メモリなしで Strands エージェントを作成し、後で追加する場合は、次の手順に従います。
-
プロジェクトにメモリリソースを追加します。
agentcore add memory --name MyMemory --strategies SEMANTIC,SUMMARIZATION agentcore deploy -
エージェントに
memory/ディレクトリを作成します。mkdir -p app/MyAgent/memory -
を作成する
app/MyAgent/memory/session.py:import os from typing import Optional from bedrock_agentcore.memory.integrations.strands.config import AgentCoreMemoryConfig, RetrievalConfig from bedrock_agentcore.memory.integrations.strands.session_manager import AgentCoreMemorySessionManager MEMORY_ID = os.getenv("MEMORY_MYMEMORY_ID") REGION = os.getenv("AWS_REGION") def get_memory_session_manager(session_id: str, actor_id: str) -> Optional[AgentCoreMemorySessionManager]: if not MEMORY_ID: return None retrieval_config = { f"/users/{actor_id}/facts": RetrievalConfig(top_k=3, relevance_score=0.5), f"/summaries/{actor_id}/{session_id}": RetrievalConfig(top_k=3, relevance_score=0.5) } return AgentCoreMemorySessionManager( AgentCoreMemoryConfig( memory_id=MEMORY_ID, session_id=session_id, actor_id=actor_id, retrieval_config=retrieval_config, ), REGION ) -
セッションマネージャーを使用する
main.pyように を更新します。from memory.session import get_memory_session_manager @app.entrypoint async def invoke(payload, context): session_id = getattr(context, 'session_id', 'default-session') user_id = getattr(context, 'user_id', 'default-user') agent = Agent( model=load_model(), session_manager=get_memory_session_manager(session_id, user_id), system_prompt="You are a helpful assistant.", ) response = agent(payload.get("prompt")) return response -
更新されたプロジェクトをデプロイします。
agentcore deploy
注記
各メモリリソースは、デプロイ後にエージェントのランタイム環境で自動的に使用できる環境変数 MEMORY_<NAME>_ID (大文字、アンダースコア付き) を取得します。
クリーンアップ
メモリリソースが完了したら、削除できます。
agentcore remove memory --name CustomerSupportSemantic agentcore deploy
次の手順
以下の点を考慮してください。
-
メモリリソースに別の戦略を追加します。
-
オブザーバビリティを有効にして、メモリの動作をより可視化する
-
その他の例を参照してください。