🧬

Strands AgentsをLLM抜きでS3 KVSクライアントとして使ってみる

に公開

Strands Agentsは、AWSが公開したオープンソースのAIエージェントSDKです。数行のコードでAIエージェントが作れます。

セッション管理機能を使うと、会話履歴やAIエージェントの状態が永続化できます。組み込みの保存先はローカルファイルシステムとS3です。

今回は、Strands Agentsを単なるS3 KVSクライアントとして使ってみます。LLMは呼び出しません。そういう使い方が便利な場合もあるでしょうから。

  • Strands Agentsをすでに利用中のアプリケーションで、何かしらのデータを永続化したい場合
  • プロトタイピングでシンプルなKVSを使いたい場合

1. S3バケットの作成

まず、保存先となるS3バケットを作ります。

aws s3api create-bucket \
  --bucket nice-bucket-name \
  --region ap-northeast-1 \
  --create-bucket-configuration LocationConstraint=ap-northeast-1

2. Strands Agentsのインストール

次に、Strands Agentsをインストールします。

pip install strands-agents

3. KVSへの保存

続いて、下記のコードを write.py として保存します。

from strands import Agent
from strands.session.s3_session_manager import S3SessionManager

session_manager = S3SessionManager(
    session_id="user-123",
    bucket="nice-bucket-name",
    prefix="optional-prefix",
    region="ap-northeast-1",
)
agent = Agent(
    agent_id="agent-123",
    session_manager=session_manager,
)

# キーと値の設定
agent.state.set("string_value", "hello")
agent.state.set("number_value", 42)
agent.state.set("boolean_value", True)
agent.state.set("list_value", [1, 2, 3])
agent.state.set("dict_value", {"nested": "data"})
agent.state.set("null_value", None)

# S3への保存
session_manager.sync_agent(agent)

保存したら実行します。

python write.py

以上で、データがS3に保存されるはずです。

念のため、S3を見てみましょう。オブジェクトが作られているはずです。

aws s3 ls s3://nice-bucket-name --recursive

S3の保存例

2025-08-15 20:24:19        479 optional-prefix/session_user-123/agents/agent_agent-123/agent.json
2025-08-15 20:24:19        161 optional-prefix/session_user-123/session.json

4. KVSの参照

最後に、下記のコードを read.py として保存します。

import pprint

from strands import Agent
from strands.session.s3_session_manager import S3SessionManager

session_manager = S3SessionManager(
    session_id="user-123",
    bucket="nice-bucket-name",
    prefix="optional-prefix",
    region="ap-northeast-1",
)
agent = Agent(
    agent_id="agent-123",
    session_manager=session_manager,
)

# 参照
string_value = agent.state.get("string_value")
pprint.pprint(string_value)
all_state = agent.state.get()
pprint.pprint(all_state)

保存したら実行します。

python read.py

write.py で保存した内容が表示されるはずです。

実行結果

'hello'
{'boolean_value': True,
 'dict_value': {'nested': 'data'},
 'list_value': [1, 2, 3],
 'null_value': None,
 'number_value': 42,
 'string_value': 'hello'}
ENECHANGE

Discussion