最近Amazon Bedrockに入門してみました。
Agents for Amazon Bedrockを触っていたら、急にMemoryという項目が増えたので試してみました。
説明
Bedrockはステートレスなので、もし以前の会話を利用したい場合はどこかにチャットの履歴を保有しておかなければなりません。AWSでは保存先としてDynamoDBがよく使われていると思います。
Agents for Amazon Bedrockでも同じように、履歴をどこかに保存しておかなければいけませんでした。
"Memory"機能は、クリック1つでとても簡単に履歴の保存(正確にはBedrockとやりとりの要約の保存)を実現できます。
これにより、使い方によっては保存先を用意する必要がなくなりました。
Memoryを有効してみた
Memoryの有効化自体は非常に簡単です。Agents for Amazon Bedrockでエージェント作成する時に、"Enable memory"を"Enabled"にチェックを入れるだけです。
"Specify memory duration"は保存期間で1 - 30日の間で選択できます。
生成されたMemory
あとはいつも通り、プロンプトを入力するだけでOKです。
実際に作成されたMemoryは以下の右枠のようになっています(MemoryIdと Session IDは隠しています)。
日本語で入力しても英語で保存されるようです。
私が試した時には、コンソールに表示されるまで20分程度かかってしまっていました。
マネジメントコンソールからプロンプトを入力するときは、今のところ"MemoryId"や"Session ID"を変更して、入力することはできないようです。マネジメントコンソールをリロードしても、"MemoryId"や"Session ID"が変更されることはなかったです。なので、間違えて別のページに飛んでしまってもMemoryは残ってくれます。
試す際には、適宜Memoryを削除しておかないと、入力したくない履歴も入り込んでしまうので注意が必要でしょう。
Memoryがプロンプトに反映される仕組み
Traceを見る限り、Memoryで要約された内容は、自動でプロンプトに追加されるみたいです。
これにより、以前の内容を覚えている状態で、Bedrockと会話できます。
マネジメントコンソールをリロードしてから要約をお願いすると、きちんと覚えていてくれました。
boto3から呼び出し
今回は試していませんが、以下の記事を見る限り、boto3から呼び出せるようになっているようです。
boto3では、"memoryId"や"sessionId"を入力できるので、ユーザーごとに保存することが可能なようです。ユーザー数の上限などはドキュメントが見つからなかったですが、流石に今後制限が追加されるのはないでしょうか。
まとめ
LangChainを用いて独自に実装していた部分が、Agents for Amazon Bedrockでフルマネージドサービスとして実現できるようになってきました。
Code Interpreterも相まって、Agents for Amazon Bedrockの使い勝手がかなり向上してきていると思います。
まだプレビューなので本番適用はできないですが、GAされた暁にはAgents for Amazon Bedrockも選択肢に入れて良いかもしれないと思いました。