Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Strands Agents超入門

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Strands Agents超入門

Avatar for KintoTech_Dev

KintoTech_Dev

May 29, 2026

More Decks by KintoTech_Dev

Other Decks in Technology

Transcript

  1. 【出版当日!ランチイベント】 AgentCore実践入門 Strands Agents 超入門 A Quick Tour of Strands

    Agents 2026.05.29 KINTOテクノロジーズ株式会社 Principal Generative AI Engineer 森田 和明
  2. プロフィール SPEAKER 02 / 18 KINTOテクノロジーズ株式会社 コーポレートIT部 AIファーストG Principal Generative AI

    Engineer 森田 和明 Kazuaki Morita 業務系システム開発やモバイルアプリ開発の経験を経て、2015年頃からAWSを採用した受託開発を経験。サーバーレス・ IoT・生成AI などを組み合わせたアーキテクトとして活躍。 現在は社内の生成AI活用の推進や、トヨタグループにおけるAI活用支援を担当。 Qiita qiita.com/moritalous X x.com/moritalous GitHub github.com/moritalous
  3. Strands Agentsとは SECTION 01 · OVERVIEW 03 / 18 「モデル

    × ツール × プロンプト」だけで AIエージェントを動かすSDK モデル駆動型アプローチを採用。LLM自身が与えられたツールとプロンプトか ら「次に何をするか」を決め、自律的にタスクを進める。アプリ側は道具と指 示を渡すだけ。 01 モデル非依存 — Bedrock / OpenAI / Anthropic / Googleなど主要プロバイ ダーを差し替え可能 02 Agent Loop(思考 → ツール呼び出し → 結果反映)をSDKが肩代わり 03 PythonとTypeScript の二系統。基本機能はほぼ同等 OFFICIAL SITE strandsagents.com
  4. PythonもTypeScriptもGA SECTION 01 · MILESTONES 04 / 18 Pythonに遅れてTypeScriptも1.0.0に到達し、どちらもproduction-readyに。バージョンは 2026/05/25現在。

    P Y T H O N LATEST v1.41.0 GAリリース 2025/07/16 v1.0.0を先行リリース strands-agents / strands-agents-tools Built-in Toolsが豊富。実験的機能(Bidirectional streaming / Agent steering) はこちら先行。 T Y P E S C R I P T LATEST v1.3.0 GAリリース 2026/05/01 v1.0.0が先日GA! @strands-agents/sdk 基本機能はPythonと同等。Next.jsなどのフロントエンド側に組み込みやす い。
  5. Python版 とTypeScript版 SECTION 01 · FEATURE PARITY 05 / 18

    基本機能はほぼ同じ。差が出るのは モデル連携の幅 と Built-in Toolsの数、そして 実験的機能。 観点 Python版 TypeScript版 基本機能 エージェント実行、ストリーミング、構造化出力 同等 モデル連携 Bedrock / OpenAI / Anthropic / Google + Ollama / LiteLLM 広い Bedrock / OpenAI / Anthropic / Googleなど主要モデル ツール連携 Custom / MCP / Built-in(豊富) 豊富 Custom / MCP(Built-inは限定的) 限定的 会話・状態管理 会話/セッション/Memory/Hooks 同等 マルチエージェント Swarm / Graph / Workflow / A2A 同等 可観測性 OpenTelemetry 同等 実験的機能 Bidirectional streaming / Agent steering 未対応 未対応
  6. どちらを選ぶ? SECTION 01 · DECISION 06 / 18 機能差で選ぶというより、組み込み先の環境と開発者のスキルセットで選ぶ。 PYTHON版が向く

    データ・ML文脈、 サーバーサイド主体 例:Pandasでデータ分析した結果を使って判断するエージェント → Pythonのエコシステムにそのまま乗せられる 例:社内バッチやAPIサーバー側でエージェントを動かす → Built-in Toolsが豊富で素早く立ち上がる TYPESCRIPT版が向く フロントエンド一体型、 Edge / Node環境 例:Next.js製フロントの一部としてチャットボットを組み込む → UIとエージェントロジックを同じ言語で書ける 例:Cloudflare WorkersなどのEdgeランタイム → TypeScript一本で完結 💡 AgentCoreランタイム上で動かす場合はPython版がおすすめ。AgentCore SDKのTypeScript版はまだプレビュー。
  7. Python版のコード SECTION 01 · HELLO STRANDS · PY 07 /

    18 これだけ書けば ツール付きエージェント が動く。 $ uv add strands-agents strands-agents-tools # パッケージは 2 つ from strands import Agent from strands_tools import http_request agent = Agent( # モデル model="us.anthropic.claude-sonnet-4-6", # プロンプト system_prompt="あなたは優秀なアシスタントです。", # ツール tools=[http_request], ) agent("https://www.sbcr.jp/product/4815641238/にアクセスして、書籍名を教えて。") agent.py
  8. TypeScript版のコード SECTION 01 · HELLO STRANDS · TS 08 /

    18 構造はほぼ同じ。APIの形が揃っているので片方を知っていればもう片方もすぐ書ける。 $ npm add @strands-agents/sdk # SDK は 1 パッケージ import { Agent } from '@strands-agents/sdk' import { httpRequest } from '@strands-agents/sdk/vended-tools/http-request' const agent = new Agent({ model: 'us.anthropic.claude-sonnet-4-6', systemPrompt: 'あなたは優秀なアシスタントです。', tools: [httpRequest], }) await agent.invoke('https://www.sbcr.jp/product/4815641238/にアクセスして、書籍名を教えて。') agent.ts
  9. 素のSDKで書くと… SECTION 02 · WITHOUT STRANDS 10 / 18 同じ「ツールを呼び出して回答する」をboto3だけでやると、ツール定義

    → 呼び出しループ → 結果を返す までを全て手で 書くことに。 import boto3, math client = boto3.client("bedrock-runtime") # 1. ツール本体(本質はここの 2 行だけ) def circle_area_tool(radius): return f"{math.pi * radius**2:.10f}" tool_list = {"circle_area_tool": circle_area_tool} # 2. ツール定義(JSON Schema を手書き・ネストが深い…省略) tool_spec = {"toolSpec": { """name / description / inputSchema を全部手書き...""" }} messages = [{"role": "user", "content": [{"text": "半径3と7の面積を教えて"}]}] response = client.converse(modelId="...", messages=messages, toolConfig={"tools": [tool_spec]}) # 3. ツール呼び出しループを手で回す while True: tool_request = [c for c in response["output"]["message"]["content"] if "toolUse" in c] if not tool_request: break messages.append(response["output"]["message"]) tool_result = [...] # 各 toolUse を実行 → toolResult に詰め直す(10 行ほど省略) messages.append({"role": "user", "content": tool_result}) response = client.converse(...) # ↻ 再送信 これ全部が 毎回必要なボイラープレート。 本質のロジック(円の面積を計算する関数)は たった2行。 手書きで必要な行数 ≈ 60 ツール1つの最小構成でも、ループ管理と結果フォーマットでこの ボリューム ツール定義JSONを手書き ・ whileループの設計 ・ tool_use_idの取り回し ・ 結果をmessagesに詰め直し ・ 例外・最大ターン数の考慮(未対応) ・
  10. Strandsに任せられること SECTION 02 · WHAT STRANDS DOES 11 / 18

    前のスライドで手書きしていた これら全部 が、Strandsを使うとSDKの中に隠れる。 BEFORE — 素のboto3 ~60 行のボイラープレート + ループ設計を毎回 アプリ側で面倒を見るもの × JSON Schemaを手書き(ツール定義) × whileループの設計・終了判定 × tool_use_idの取り回し × toolResultへの詰め直しとmessages再構築 × converseの再送信 × 例外・最大ターン数の考慮(未対応) AFTER — Strands ~8 行で同じことが動く。 ツール定義もデコレータでOK from strands import Agent, tool @tool def circle_area(radius: float) -> str: return f"{math.pi * radius**2:.10f}" agent = Agent( model="...", tools=[circle_area]) agent("半径3と7の円の面積を教えて")
  11. Strands Agentsの構成要素 SECTION 03 · BUILDING BLOCKS 13 / 18

    エージェント本体は 3つの要素 だけで構成される。Agentクラスに渡す引数もそれぞれ1つずつ。 → この3つをAgentクラスに渡すと、Agent Loop(思考 → ツール呼び出し → 結果反映) を自動で回してくれる。 01 モデル MODEL 推論を担うLLM。 Bedrock / OpenAI / Anthropic / Google / Ollama / LiteLLM を差し替えだけで切り替えられる。 model="..." 02 ツール TOOLS LLMが呼び出せる機能。 @tool デコレータ (Custom) 、 Built-in Tools 、 MCP サーバー の3系統がある。 tools=[...] 03 プロンプト PROMPT エージェントの振る舞いを決める指示。テキスト 以外に画像・ドキュメント・動画も渡せる。 system_prompt="..."
  12. 補助機能 SECTION 03 · AUXILIARY 14 / 18 3要素に加えて、4つの補助機能が標準で提供される。 セッション管理

    SESSION 会話履歴を永続化して、後から再開できる。保存先はファイル、S3、AgentCore Memoryから選べる。 FileSessionManager S3SessionManager AgentCore Memory 使いどころ チャット履歴の保存・再開 フック(Hooks) HOOKS Agent Loopの節目(モデル呼び出しの前後、ツール呼び出しの前後 …)に処理を 差し込める。プロンプトに頼らず確実に適用できるのがキモ。 before_model after_model before_tool after_tool 使いどころ ログ取得・入力検証・ツール制御・リトライ 会話管理 CONVERSATION コンテキストウィンドウ超過を防ぐために、履歴を 削除or要約 で自動調整してく れる。長期会話のエージェントに必須。 SlidingWindow Summarizing Null 使いどころ 長い会話を続けるエージェント 構造化出力 STRUCTURED OUTPUT Pydanticモデルで返す型を定義 → エージェントの結果を型付きデータで受け取れ る。後続処理との連携が素直になる。 BaseModel response_model=... 使いどころ プログラム連携・APIレスポンス
  13. マルチエージェント構成 SECTION 04 · MULTI-AGENT 15 / 18 マルチエージェントも構築できるよう、4種類の組み合わせ方が用意されている。 A2A

    Agent-to-Agent Protocol にも対応 — 異なるフレームワーク間でエージェント同士を連携させられる。 Agents as Tools AGENT_AS_TOOL 子エージェントを「ツール」として親 に渡す。指揮官 → 専門家のシンプル構 造。 Workflow WORKFLOW 順番が決まったパイプライン。直列に 流して、段階ごとに役割を切り替え る。 Graph GRAPH 分岐・合流のあるネットワーク。条件 で進路が変わるワークフロー。 Swarm SWARM 複数エージェントが互いに会話・自律 的に協調。合議制で問題を解く。 4章でハンズオン
  14. エコシステム SECTION 05 · ECOSYSTEM 16 / 18 本体だけでなく、開発から評価・運用まで をカバーするパッケージ群が提供される。

    strands-agents エージェント本体(コア) Agentクラス・Agent Loop・セッション管理・Hooks・会話管理・構造化出力を同 梱。 strands-agents-tools Python only Built-in Tools群 すぐ使える汎用ツール集。検証やプロトタイプをゼロ起動で始められる。 http_request rss file_read shell calculator tavily_search TS版は一部をコアに同梱( @strands-agents/sdk/vended-tools/* ) strands-agents-evals Python only Evals SDK LLM-as-a-Judgeで自動評価。rubric(評価基準)を自然言語で定義。トレーシング連 携でツール選択や思考過程まで評価できる。 strands-agents-sops Python only Strands Agent SOP Standard Operating Proceduresの略。動作手順をMarkdownで定義して system_prompt に渡すだけ。コードアシスト等のビルトインSOPもある。 strands-agents[otel] OpenTelemetry対応 — Arize PhoenixやLangfuseなどでトレースを可視化。本番運用の観測性を確保。
  15. SUMMARY 手軽に、 エージェントを。 モデル / ツール / プロンプトを渡すだけで、 エージェントを手軽に動かせるオープンソースSDK。 PythonとTypeScriptの2系統、どちらも1.0.0でGA済み

    ツール呼び出しループとスキーマ生成をSDKが肩代わり 補助機能・マルチエージェント・エコシステムも一通り揃う 公式 strandsagents.com