7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Strands Angetsのちょっと進んだ使い方(セッション管理と会話管理)

Posted at

Strands Agentsいいですよね。

100万ダウンロードいったみたいです。そのうちいくつかは私。

先週知った、ちょっと進んだ使い方を2つ紹介します。


紹介する内容を含んだチャットアプリをGitHubで公開してますので、ぜひご活用ください!


LLMとのやり取りを永続化したい → 「セッション管理」機能

Streamlitを使うと簡単にチャットアプリが作れるのですが、ブラウザのリフレッシュでチャットのやり取りが消えてしまいます。せっかくなので永続化したいですよね。

Strands Angetsにはこの永続化を担当する「セッション管理」機能が用意されています。

ファイルシステムを使うものとAmazon S3を使うものの2つが用意されていて、カスタムで作成することもできます。

私はファイルシステムに永続化する方を使用しましたので、その方法を紹介します。

ファイルシステムに永続化するには「FileSessionManager」を使用します。

from strands.session import FileSessionManager

セッションIDと保存先のディレクトリを指定して初期化します。

session_manager = FileSessionManager(
    session_id="セッションID",
    storage_dir="保存先ディレクトリ(相対パスOK)",
)

作成したsession_managerAgentに渡します。

from strands.agent import Agent

agent = Agent(
    model="モデルID",
    session_manager=session_manager
)

こうすることで、agentを使ってLLMを呼び出した際に、自動でファイルに永続化されます。

同じセッションIDを使っていれば、自動でファイルから履歴を参照した状態でLLMを呼び出してくれるのでとても便利です!

ファイルシステム上は以下のようなディレクトリ構成でファイルが作成されます。

sessions/ (FileSessionManager作成の際に指定したディレクトリ)
├── session_{セッションID}
    ├── agents
    │   └── agent_default
    │       ├── agent.json
    │       └── messages
    │           ├── message_0.json
    │           └── message_1.json
    └── session.json

メッセージはユーザーかLLMからのメッセージごとに作成されます。

message_0.json
{
  "message": {
    "role": "user",
    "content": [
      {
        "text": "こんにちは!"
      }
    ]
  },
  "message_id": 0,
  "redact_message": null,
  "created_at": "2025-09-21T01:14:25.897323+00:00",
  "updated_at": "2025-09-21T01:14:25.897325+00:00"
}

Streamlitで、画面上に会話の履歴を復元したい場合は、session_managerのlist_messages()関数を使用します。

session_manager_instance.list_messages(
    session_id={セッションID},
    agent_id={エージェントID},
)

エージェントIDが初登場ですが、何も指定していない場合は「default」になるようです。一つのセッションの中にエージェントを複数含めることができるようです。

会話を延々と続けたい → 「会話管理」機能

やり取りが永続化できるようになったのでLLMと楽しい会話を楽しんでいたのですが、途中からなんか過去のやり取りを忘れていくことに気づきました。

実は、Strands Agentsはデフォルト状態だと「直近40個のやり取りだけを保持する」設定になっています。
これが会話管理機能です。

会話管理機能には、NullConversationManagerとSlidingWindowConversationManagerがあり、デフォルトでSlidingWindowConversationManager(window_sizeのデフォルト値が40)が使用されています。

NullConversationManagerの場合は会話が管理されず、毎回はじめましての会話になります。長い会話を実現したい場合は、SlidingWindowConversationManagerのwindow_sizeを大きな値にしてagentを作成すると良いでしょう。

from strands.agent import Agent

agent = Agent(
    model="モデルID",
    conversation_manager=SlidingWindowConversationManager(window_size=9999),
)

最近のLLMはToolを積極的に使ってくれるので、会話が40個だとすぐに足りなくなりますね。会話の量が増えると、それだけ消費トークンが増えるので、ご利用は計画的に です。


Strands Agents、かなりいいですよ。

今日紹介した機能以外にもMCP連携も対応(リモートMCPや複数MCPも対応!)したチャットアプリをGitHubで公開してますので、ぜひ、使ってみてください!

image.png

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?