【ITニュース解説】Amazon Bedrock AgentCore Runtime - Part 6 Using AgentCore short-term Memory with Strands Agents SDK
2025年09月29日に「Dev.to」が公開したITニュース「Amazon Bedrock AgentCore Runtime - Part 6 Using AgentCore short-term Memory with Strands Agents SDK」について初心者にもわかりやすく解説しています。
ITニュース概要
Amazon Bedrock AgentCoreの短期記憶機能は、AIエージェントが過去の会話を覚えて、文脈に沿った賢い対話を可能にする。Strands Agents SDKを使い、会話履歴を保存・活用して、ユーザー情報やこれまでのやり取りを踏まえた応答をする実装方法を解説する。
ITニュース解説
AI(人工知能)エージェントを開発する際、エージェントがユーザーとの会話の内容を記憶し、その記憶に基づいてより適切な応答をすることは非常に重要である。しかし、多くの場合、AIエージェントはデフォルトでは「ステートレス」であり、一度会話が終わるとその内容を忘れてしまう。これは、まるで毎回初めて会う人のように、会話のたびに自己紹介や背景情報を繰り返さなければならないようなもので、ユーザーにとっては不便で非効率的だ。このような問題を解決するため、Amazon Bedrock AgentCore Runtimeは、エージェントに記憶機能を与える新しいアプローチを提供している。
この記事では、Amazon Bedrock AgentCore RuntimeとStrands Agents SDKを組み合わせて、エージェントが会話を記憶する方法、特に「短期記憶」に焦点を当てて解説する。Strands Agents SDKは、エージェントを開発するための便利なツールキットで、これまでに構築したカスタムエージェントに記憶機能を組み込む手順を詳しく見ていく。
AgentCore Memoryには、大きく分けて二種類の記憶がある。一つは「短期記憶(Short-term memory)」、もう一つは「長期記憶(Long-term memory)」だ。この記事では短期記憶に注目し、次回の記事で長期記憶について説明する。短期記憶とは、エージェントが直近の会話を記憶し、その場その場の文脈を維持するための記憶システムを指す。例えば、プログラミングのデバッグを支援するエージェントと会話している場合を想像してみよう。まず変数名の確認を依頼し、次に構文エラーの修正を頼み、さらに使用されていないインポートの検出を依頼するといった一連のやり取りがあるとする。この時、エージェントはこれら一連の会話を短期イベントとしてAgentCore Memoryに保存する。これにより、ユーザーが前の会話内容を改めて説明しなくても、エージェントは文脈を理解し、連続性のある会話を続けられるようになるのだ。短期記憶は、単に会話を記録するだけでなく、リアルタイムの対話、複数のステップからなる複雑なタスクの完了、セッション内での知識の蓄積、そして文脈に基づいた意思決定といった高度な機能を実現するための基盤となる。
AgentCore短期記憶を作成するプロセスは、まずAgentCoreメモリクライアントを初期化することから始まる。これは、エージェントがメモリサービスと通信するための窓口のようなものだ。次に、create_memory_and_waitという関数を使って実際にメモリを作成する。この時、メモリに名前(例:OrderStatisticsAgentMemory)と説明を与える。特に重要なのがevent_expiry_daysというパラメータで、これは短期記憶に保存された会話イベントをどれくらいの期間保持するかを指定する。最大で365日まで設定できるが、短期記憶の性質上、直近の会話に特化するため、通常はもっと短い期間を設定することが多い。また、この関数に空のstrategiesリストを渡すことで、これが短期記憶であることを明示する。メモリが正常に作成されると、一意のIDが返される。このmemory_idは、後でエージェントがメモリにアクセスする際に必要となる。作成されたメモリは、Amazon BedrockのAgentCoreコンソールからも確認でき、詳細な設定を見ることができる。
Strands AgentsでAgentCore短期記憶を利用するには、「フック」という仕組みを用いる。フックは、特定のエージェントイベントが発生した際に、カスタムコードを実行するための仕組みだ。まず、ShortTermMemoryHookProviderというクラスを実装し、Strands Agentsが提供するHookProviderを継承させる。このクラスのコンストラクタには、先ほど作成したメモリクライアントとmemory_idを渡す。
次に、このフックプロバイダに、どのイベントでどの関数を実行するかを登録する。今回は二つの主要なイベントに注目する。一つはMessageAddedEventで、これはユーザーからのメッセージがエージェントに追加された、つまり会話が行われた直後に発生する。このイベントが発生すると、on_message_addedという関数が呼び出される。この関数の中では、エージェントが受け取った最新のメッセージ(ユーザーの入力とエージェントの応答)と、会話しているユーザーを一意に識別するactor_id、そして現在の会話セッションを一意に識別するsession_idを取得する。そして、これらの情報をmemory_client.create_event関数に渡して、会話の内容をAgentCore短期記憶に保存する。これにより、エージェントは会話のログを記憶として残せるようになる。
もう一つの重要なイベントはAgentInitializedEventで、これはエージェントが起動される直後に発生する。このイベントがトリガーされると、on_agent_initializedという関数が呼び出される。この関数では、actor_idとsession_idを使って、memory_client.get_last_k_turns関数を呼び出す。この関数は、指定されたactor_idとsession_idに基づき、メモリに保存されている直近の過去k回(この記事の例では5回)の会話履歴を取得する。取得した会話履歴は、そのままだとエージェントが理解しにくい形式であるため、整形して一つの文脈文字列にまとめる。そして、この文脈文字列をエージェントの「システムプロンプト」に追加する。システムプロンプトとは、エージェントの基本的な振る舞いや、考慮すべき情報などを指示する初期設定のようなもので、ここに過去の会話履歴を追加することで、エージェントはまるで過去の会話を「思い出した」かのように、その文脈を踏まえた上で新しい質問に答えられるようになるのだ。
作成したAgentCore短期記憶フックをエージェントで使用する最終ステップでは、エージェントを初期化する際に、このShortTermMemoryHookProviderをhooksパラメータとして渡す。また、actor_idとsession_idをstateパラメータとしてエージェントに渡す。これらのIDは、エージェントが特定のユーザーや会話セッションの記憶を正しく管理するために不可欠な識別子となる。通常、actor_idはユーザーIDやエージェントIDなど、会話する主体を一意に識別するものであり、session_idは特定の会話セッションを一意に識別する。
エージェントがAgentCoreメモリにアクセスするためには、AWSのIAM(Identity and Access Management)ロールに適切な権限を追加する必要がある。具体的には、エージェントがメモリ内のイベントをリスト表示したり、新しいイベントを作成したり、メモリレコードを取得したりするためのアクション(bedrock-agentcore:ListEvents、bedrock-agentcore:CreateEvent、bedrock-agentcore:RetrieveMemoryRecords)を許可する必要がある。これらの権限は、エージェントがどのメモリリソースにアクセスできるかを示すリソースのARN(Amazon Resource Name)とともに設定される。
実際にAgentCore短期記憶がどのように機能するかを具体例で見てみよう。まずエージェントに「こんにちは、私の名前はヴァディムです。今日は晴れています。注文ID 12376の情報を教えてください」と話しかける。エージェントは注文情報を返すが、この時、あなたの名前と天気に関する情報も短期記憶に保存される。次に「注文ID 12375の情報を教えてください」と別の注文について尋ねる。これも記憶される。そして、「私の名前と今日の天気はなんですか?」と尋ねると、エージェントは以前の会話からあなたの名前が「ヴァディム」であり、天気が「晴れ」であったことを正確に答え、さらに「晴れの日を楽しんでください!」といった文脈に沿った返答をする。さらに、「これまでに情報を得たすべての注文を要約してください」と尋ねると、エージェントは過去の会話で取得した複数の注文情報(12376と12375)をすべて記憶しており、それぞれの詳細な情報をまとめて要約し、さらに「今日はまだ晴れの日を楽しんでいますか、ヴァディム?」と、以前の記憶に基づいたパーソナライズされたメッセージを加えて応答する。これらはすべて、AgentCore短期記憶がエージェントに会話の文脈と個人情報を記憶させ、より賢く、パーソナライズされた対話を実現している証拠だ。
この記事では、Amazon Bedrock AgentCore RuntimeとStrands Agents SDKを用いて、カスタムエージェントにAgentCore短期記憶を実装し、会話の直近の文脈を記憶させる方法について詳しく解説した。Strands Agentsのフックとイベントライフサイクルを理解し、会話の保存と過去の会話の取得・利用の仕組みを学ぶことで、初心者でもAIエージェントの記憶機能を構築する基礎を身につけられる。これにより、エージェントは単なる応答機械ではなく、より人間らしい、文脈を理解した対話が可能になる。