

# AgentCore Memory の使用を開始する
<a name="memory-get-started"></a>

Amazon Bedrock Amazon Bedrock AgentCore Memory を使用すると、AI エージェントの会話コンテキストを保存する AgentCore Memory リソースを作成および管理できます。この入門ガイドでは、依存関係をインストールし、短期メモリ機能と長期メモリ機能の両方を実装する方法について説明します。手順では、AgentCore CLI を使用します。

ステップは次のとおりです。

1. セマンティック戦略を含む AgentCore メモリを作成する

1. イベント (会話履歴) をメモリリソースに書き込む

1. 長期メモリからメモリレコードを取得する

その他の例については、[「Amazon Bedrock AgentCore Memory examples](memory-examples.md)」を参照してください。

## 前提条件
<a name="memory-prerequisites"></a>

開始する前に、以下を確認してください。
+  ** 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](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agentcore-control.html)」と[「bedrock-agentcore](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/bedrock-agentcore.html)」を参照してください。

 **完全な例:** ステップ 1～3 を示す [Amazon Bedrock AgentCore サンプル](https://github.com/awslabs/amazon-bedrock-agentcore-samples/tree/main/01-tutorials)を参照してください。

## ステップ 1: AgentCore メモリを作成する
<a name="memory-create-resource"></a>

エージェントに関する情報の保存を開始するには、AgentCore メモリが必要です。デフォルトでは、メモリイベント (短期メモリと呼ばれる) を AgentCore メモリに書き込むことができます。インサイトを抽出して長期メモリレコードに配置するには、リソースに*メモリ戦略*が必要です。これは、会話データの処理方法と抽出する情報 (事実、好み、概要など) を定義する設定です。

このステップでは、短期メモリと長期メモリの両方を使用できるように、セマンティック戦略を使用して AgentCore メモリを作成します。これには 2～3 分かかります。 AWS コンソールで AgentCore Memory リソースを作成することもできます。

セマンティック戦略を使用してメモリを作成します。

**Example**  

1. 

   ```
   agentcore add memory --name CustomerSupportSemantic --strategies SEMANTIC
   agentcore deploy
   ```

1. `agentcore` を実行して TUI を開き、**追加** を選択して**メモリ** を選択します。

1. メモリ名を入力します。  
![メモリウィザード: 名前を入力](https://docs.aws.amazon.com/ja_jp/bedrock-agentcore/latest/devguide/images/tui/memory-add-name.png)

1. **セマンティック**戦略を選択し、以下を確認します。  
![メモリウィザード: SEMANTIC 戦略を選択する](https://docs.aws.amazon.com/ja_jp/bedrock-agentcore/latest/devguide/images/tui/memory-add-strategies.png)

   次に、 `agentcore deploy`を実行してメモリをプロビジョニングします AWS。

デプロイ後、メモリが作成されたことを確認します。

```
agentcore status
```

## ステップ 2: イベントをメモリに書き込む
<a name="memory-write-events"></a>

エージェント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: 長期メモリからレコードを取得する
<a name="memory-retrieve-records"></a>

イベントがメモリリソースに書き込まれた後、分析され、有用な情報が長期メモリに送信されました。メモリにはセマンティックな長期メモリ戦略が含まれているため、システムは事実情報を抽出して保存します。

すべてのメモリレコードを一覧表示するには、以下を使用します。

```
# 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 がコンテキストで過負荷にならないようにすることができます。

## 既存のエージェントへのメモリの追加
<a name="memory-add-to-existing-agent"></a>

メモリなしで Strands エージェントを作成し、後で追加する場合は、次の手順に従います。

1. プロジェクトにメモリリソースを追加します。

   ```
   agentcore add memory --name MyMemory --strategies SEMANTIC,SUMMARIZATION
   agentcore deploy
   ```

1. エージェントに `memory/` ディレクトリを作成します。

   ```
   mkdir -p app/MyAgent/memory
   ```

1. を作成する`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
       )
   ```

1. セッションマネージャーを使用する`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
   ```

1. 更新されたプロジェクトをデプロイします。

   ```
   agentcore deploy
   ```

**注記**  
各メモリリソースは、デプロイ後にエージェントのランタイム環境で自動的に使用できる環境変数 `MEMORY_<NAME>_ID` (大文字、アンダースコア付き) を取得します。

## クリーンアップ
<a name="memory-cleanup"></a>

メモリリソースが完了したら、削除できます。

```
agentcore remove memory --name CustomerSupportSemantic
agentcore deploy
```

## 次の手順
<a name="memory-next-steps"></a>

以下の点を考慮してください。
+  メモリリソースに[別の戦略を追加します](long-term-enabling-long-term-memory.md#long-term-adding-strategies-to-existing-memory)。
+  [オブザーバビリティを有効に](memory-observability.md)して、メモリの動作をより可視化する
+ その他の[例](memory-examples.md)を参照してください。