Machine Learning

Strands Agents

AWS が公開したオープンソースのエージェント SDK。ワークフローを人間が組む代わりに、モデル自身に計画・ツール選択・振り返りをさせる「モデル駆動」の方式を取ります。試験では「エージェントをどう書くか」側の選択肢として出ます。

  • A|GenAIの核
  • D2 実装と統合

ひとことで言うと

AWS が最初に公開したオープンソースのエージェント SDKです。エージェントの定義は「モデル・ツール・プロンプト」の3つだけで、あとはエージェントループがモデルを繰り返し呼び、モデルが会話で答えるか・計画するか・振り返るか・ツールを呼ぶかを自分で決めます。AWS はこれを**モデル駆動(model-driven / model-first)**と呼び、「開発者が複雑なワークフローを組み立てる」方式と対比しています。

要するに、手順書を渡すのではなく、道具箱と目的だけを渡す方式です。従来のフレームワークは「まずAをして、結果がこうならB、そうでなければC」という配管を人間が引きました。Strands はその配管を引かず、道具の一覧と目的を渡して、順番はモデルに決めさせます。
だから試験でも「Strands の書き方」は問われません。問われるのは「順番を人間が決める必要があるか、モデルに任せてよいか」のほうです。

なぜ生まれたか

時期何が起きたか
2025-05-16AWS Open Source Blog で発表(プレビュー)。 「数行のコードでエージェントを構築・実行するモデル駆動のアプローチ」として公開
2025-07-151.0 リリース。 マルチエージェントのプリミティブ4種(agents-as-tools / handoffs / swarms / graphs)、SessionManager による状態の永続化、stream_async による非同期ストリーミングが入る。プレビューからの 150 以上のマージ済み PR のうち 22% がコミュニティからの貢献

背景にあるのは、モデル側が賢くなった結果、フレームワーク側の配管が余計になったという判断です。初期の LLM は計画も振り返りもできなかったので、人間がチェーンと分岐を書く必要がありました。Strands は「最新モデルは計画し、思考を連ねし、ツールを呼び、振り返る能力を持つ」という前提に立ち、その配管を捨てています。

AWS 自身の本番サービスでも使われており、AWS Transform for .NET は複数の専門エージェントを Strands で動かして .NET アプリの解析・移行計画・コード変換を人手を介さずに実行します。

何に使うか

用途使い方関連する試験ドメイン
単一エージェント+ツールモデル・ツール一覧・プロンプトを定義してループを回す。組み込みツールが20種以上(ファイル操作・API リクエスト・AWS サービス連携)D2
MCP サーバのツール利用MCP をネイティブサポート。ツールを SDK に直接登録せず MCP 経由で渡せるD2
階層的な委譲agents-as-tools。専門エージェントをツールとして公開し、オーケストレータが制御を手放さずに専門家へ相談するD2
人間へのエスカレーションhandoffs。組み込みの handoff_to_user ツールで、会話コンテキストを保ったまま人間に引き継ぐD2
自律的なチーム協調swarms。共有メモリを通じて複数エージェントが動的に協調する。事前定義のワークフローを持たないD2
決定論的なワークフローgraphs。条件分岐と決定点を明示したエージェントワークフロー。承認フローのように順番が決まっている処理向けD2
モデルの使い分けBedrock(Claude・Nova Premier / Pro / Lite / Micro)、Anthropic、Meta、OpenAI、Cohere、Mistral、Stability、Writer、Ollama、LiteLLM 経由。エージェントごとに別モデルを割り当てられるD2
会話状態の永続化SessionManager で会話と状態を外部データストア(Amazon S3 など)へ自動保存・復元D2

試験でどう問われるか

**D2(実装と統合・26%)専属です。**試験ガイドのスキル文では 2.1(エージェント型AIとツール統合)と 2.5(アプリ統合パターン)に名指しで出ます。**Strands の API を覚える問題は出ません。**出るのは「この要件で、どの層のどれを選ぶか」です。

問われ方正解に寄る条件引っかけの選択肢
エージェントの実装方法を選ぶ手順が事前に決まっておらず、入力に応じてツールの順番が変わる → Strands のモデル駆動ループStep Functions で全分岐を先に書く案(順番が決まらないので破綻する)
逆に、順番が決まっている承認・監査があり、実行順が毎回同じでなければならない → graphs(または Step Functions)「swarm に任せる」(決定論が要る場面で自律協調を選ばせる)
専門エージェントを束ねたい制御をオーケストレータが握ったまま専門家に聞きたい → agents-as-tools分類器でルーティングして制御ごと渡す案(そちらは AWS Agent Squad の形)
人間レビューを挟む会話文脈を保ったまま人へ → handoffs(handoff_to_user)セッションを切って別チャネルに投げ直す案
Strands か AgentCore か「書く側」の話なら Strands、「本番で走らせて監視する側」なら Amazon Bedrock AgentCore両者を競合として並べる選択肢。上下関係であって択一ではない
モデルを差し替えたいエージェントごとに別プロバイダのモデル → Strands のモデルプロバイダ抽象「モデルを変えるならコードを書き直す」前提の選択肢
本番の挙動が追えないOTEL でトレースしたい → Strands 組み込みのテレメトリ(追加の計装ライブラリ不要)アプリログを CloudWatch Logs に出すだけの案

可観測性は「追加で入れるもの」ではありません。Strands Agents SDK はテレメトリを内蔵しており、追加の計装ライブラリを必要としません。スパンは strands.telemetry.tracer というスコープ名で出ます。AgentCore Runtime 上に ADOT(AWS Distro for OpenTelemetry)付きでデプロイした場合、Runtime 側が session.id 属性を注入してスパンとイベントレコードを自動でエクスポートします。「計装コードを書く」という選択肢は、この時点で不要な作業になります。

実務でどう使うか

  • スパンの種別は gen_ai.operation.name で決まります。 invoke_agent(エージェント呼び出し)/execute_tool(ツール実行)/chat(推論)の3つ。評価サービスはこの属性でスパンを分類するので、独自にスパン名だけ変えてもトレースの読み取りは変わりません
  • テレメトリの配信モードで、会話の中身がどこに載るかが変わります。 split telemetry ではスパンと相関する別のイベントレコードに、unified telemetry ではスパンにぶら下がるインラインイベントに載ります。識別属性(gen_ai.operation.name)はどちらのモードでもスパン側にあります。ログの掘り方を書く前にどちらで出ているかを確認しないと、空振りします
  • デプロイ形態は4通りが想定されています。 クライアントローカル実行/エージェントを API の後ろに置く/エージェントとツールの実行環境を分離する/ツール実行をクライアントとバックエンドに混在させる。「エージェントは必ずサーバ側」という前提を置かないこと
  • Python と TypeScript の両方にクイックスタートがあります。 言語選択がそのまま制約にならない設計です
  • AWS サービスとの統合は Bedrock だけではありません。 Lambda・Step Functions などとも繋がる前提で作られています。「Strands = Bedrock 専用」と読むと、モデルプロバイダの一覧(OpenAI・Mistral・Ollama ほか)と矛盾します

ハマりどころ: Strands はSDK であって、マネージドサービスではありません。SLA も、リージョン別の提供状況も、AWS のサービスクォータもありません。可用性・スケール・隔離は、載せる先(AgentCore Runtime / Lambda / ECS など)の性質で決まります。「Strands を使えば本番運用が付いてくる」という読み方をしないこと。

取り違えやすいもの

迷う相手切り分けの一言
Amazon Bedrock AgentCoreStrands は書くための SDK、AgentCore は載せるための基盤。AWS の枠組み案内でも「フレームワーク」と「プラットフォーム」は別の章。Runtime はフレームワーク非依存なので、Strands で書いたものをそのまま載せます
AWS Agent Squadあちらは分類器がリクエストごとに担当エージェントを選ぶ方式。Strands は1つのエージェントのループの中でモデルがツールを選ぶ方式。「振り分けか、ループか」で分かれます
LangGraph / CrewAI / AutoGen / LlamaIndexAWS の Prescriptive Guidance では Strands と同じ「フレームワーク」の章に並列でプロファイルされています。Strands だけが特別扱いされているわけではありません
Amazon Bedrock Agents(Classic)あちらはマネージドサービスで、新規顧客には開放されていません(既存顧客は継続利用可)。Strands はコード側の選択肢なので、新規設計の比較対象としては非対称です
AWS Step FunctionsStep Functions は状態遷移を人間が定義します。Strands の graphs も決定論的ですが、ノードの中身はエージェントです。「ワークフローが LLM を呼ぶ」のか「エージェントが決定論的に並ぶ」のかで読み分けます
MCPMCP はプロトコル、Strands はそれを喋るクライアント側の実装のひとつ。「MCP に対応している」は機能であって、競合関係ではありません

想起チェック

Q1. シナリオに何が書いてあれば、Step Functions での明示的なワークフローではなく Strands のモデル駆動ループに寄りますか。

実行するツールの順番が入力によって変わり、事前に列挙できないことです。逆に「承認ステップが固定」「監査で毎回同じ経路であることを示す必要がある」と書いてあれば、決定論側(graphs や Step Functions)に寄ります。

Q2. agents-as-tools と handoffs の違いを1文ずつで。

agents-as-tools は専門エージェントをツールとして公開し、オーケストレータが制御を手放さずに呼び出す階層的委譲です。handoffs は組み込みの handoff_to_user で、会話コンテキストを保ったまま責任を人間に渡す仕組みです。

Q3. swarms と graphs はどちらも複数エージェントですが、選択の基準は?

事前定義のワークフローが要るかどうかです。swarms は共有メモリを通じて動的に協調し、ワークフローを事前定義しません。graphs は条件分岐と決定点を明示した決定論的な制御で、承認チェーンのように順番が決まっている処理向けです。

Q4. Strands で書いたエージェントの可観測性を確保するために、追加で書くべき計装コードは?

ありません。 SDK がテレメトリを内蔵しており、追加の計装ライブラリは不要です。AgentCore Runtime 上に ADOT 付きでデプロイすれば、Runtime が session.id を注入してスパンとイベントレコードを自動エクスポートします。

Q5. 「Strands と AgentCore のどちらを使うべきか」という問いが成立しない理由は?

層が違うからです。 Strands はエージェントを書くための SDK、AgentCore はエージェントを実行・監視するための基盤で、AgentCore Runtime はフレームワーク非依存です。択一ではなく重ねて使う関係になります。

出典(AWS公式)