アイデアから AI アプリへ:Strands を用いた知的研究アシスタントの構築
本文の状態
日本語全文を表示中
詳細モードで約16分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
AWS Machine Learning Blog
AWS は、機械学習の専門知識がなくても複雑な API 連携や対話状態管理を容易に行える「Strands」を紹介し、誰でも知的研究アシスタントのような AI アプリを開発できる方法を解説した。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
AI アプリの構築に、機械学習(ML)の博士号や複雑なアーキテクチャとの数ヶ月にわたる格闘は必要ありません。しかし、複数の API 呼び出しをオーケストレーションし、会話の状態を管理し、自律的に推論できるエージェントを作成しようとするとき、まさにそれが起こってしまいます。私は、自然言語処理や分散システムにおける専門知識を要する大規模なプロジェクトへと膨れ上がった、単純な AI のアイデアを目にしてきました。しかし、ここが変化した点です:Strands Agents と AWS サービスを使用することで、わずか 30 行のコードで完全に機能する AI リサーチアシスタントを構築しました。この投稿では、最初の概念から動作するアプリケーションに至るまでの具体的な手順を解説します。
Amazon Web Services (AWS) は、アジェンティック AI アプリケーションの構築に複数のオプションを提供しています。Amazon Bedrock は、インテリジェントなエージェントを駆動するためのファウンデーションモデル(FMs)へのアクセスを提供し、Kiro のようなサービスは IDE 内で直接開発者向けの AI アシスタンスを可能にします。これらのツールを使用して、特定のユースケースやドメインに合わせてカスタマイズされた独自の AI エージェントを作成することができます。
Kiro は、開発者が意思決定に集中できるようにコードを記述する AI 搭載 IDE です。Kiro Powers は、MCP サーバー、ステアリングファイル、フックを再利用可能なユニットにパッケージ化することで、Kiro IDE に専門的でオンデマンドの機能を拡張します。例えば Strands power では、SDK ドキュメント検索、入門ガイド、および正確な API パターンがバンドルされており、これにより Kiro はエージェントを正確にスケフォールドできます。AWS、パートナー、コミュニティから厳選された 50 以上のパワー(デザイン、デプロイ、セキュリティ、観測性をカバー)があり、開発者はワンクリックでインストールしてすぐに構築を開始できます。
Strands Agents は、オープンソースフレームワークであり、研究、分析、コンテンツ生成などのタスクを実行できるインテリジェントエージェントを直感的に作成する方法を提供することで、これらの開発課題に直接取り組んでいます。Strands Agents は、Python コードを通じて大規模言語モデル(LLM)の機能とカスタムロジックおよび API を組み合わせます。Strands Agents に関する詳細については、オープンソース AI エージェントソフトウェア開発キット (SDK) である Strands Agents の紹介 をご覧ください。
なぜ Strands エージェントを選ぶのか:AWS 環境における簡素化された AI 開発
Strands エージェントは、モデル駆動型アプローチを通じて、AI アプリケーション構築時に直面する核心的な課題に対処します。複雑なハードコーディングの代わりに、LLM(大規模言語モデル)による自律的な推論と計画を活用し、プロンプトとツールリストのみでエージェントを作成可能にします。ロジックやツールの使用は LLM が自動的に処理します。
このフレームワークの柔軟なアーキテクチャは、単一のエージェントからマルチエージェントネットワーク、階層型システムに至るまで幅広くサポートしており、様々な規模のプロジェクトに適しています。外部関数や API は @tool デコレータ を通じて統合でき、モデル非依存設計により Amazon Bedrock、Anthropic、OpenAI など多様な LLM プロバイダーと連携可能です。
AWS 環境においては、Strands は Amazon Bedrock や AWS Lambda などのサービスと自然に統合され、すでに本番運用レベルで利用可能です。Amazon Q や AWS Glue といったサービスでも AWS チームによって採用されています。このオープンソースフレームワークは Apache-2.0 ライセンスの下、活発なコミュニティによる貢献が行われており、ローカル開発環境と本番環境の両方で同じコードが円滑に動作します。リアルタイムストリーミング応答機能により、即時フィードバックが必要なインタラクティブアプリケーションにも適しています。
技術的な詳細については、Strands Agents SDK:エージェントアーキテクチャと観測性に関する技術的深掘りをご覧ください。
前提条件
ソリューションに取り組む前に、以下の準備が整っていることを確認してください:
- AWS アカウント。
- AWS IAM Identity Center または Builder ID に設定されたユーザー。
- Kiro のインストール。
- Amazon Bedrock にアクセスするための AWS 認証情報の設定 — AWS IAM Identity Center を使用した認証の設定(人間によるアクセスのための推奨アプローチ)。以下のコマンドを実行して設定し、ログインしてください:
aws configure sso
aws sso login --profile research-assistant
- 次に、使用するロールまたは権限セットにスコープ付きのインライン AWS Identity and Access Management (IAM) ポリシーをアタッチします。このポリシーは、本チュートリアルに必要な最小限の権限のみ付与します。具体的には、Amazon Bedrock を介して Claude Sonnet モデルを呼び出すための権限です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:Converse"
],
"Resource": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-5-sonnet-20241022-v2:0"
}
]
}
- Kiro に「Strands を使用してエージェントを構築する (power)」を追加します。

ソリューション概要
インテリジェントな研究アシスタントの構築
このセクションでは、Strands Agents がエージェント型 AI 機能の開発をどのように効率化するかを示します。例として紹介する研究アシスタントは、最小限のコードでインテリジェントな機能をアプリケーションに迅速に統合する方法を解説しています。まず、Agent() の初期化によってエージェントを作成し、次にプロンプトエンジニアリングを通じてエージェントの動作を定義します。その後、ツールとプロセス応答を提供してクリーンな出力を得ることで、自律的な研究能力を追加します。
このソリューションにはコードがわずか 30 行しか必要なく、Strands が AI 開発の複雑さを直感的な実装へとどう変換できるかを証明しています。可視化には Streamlit を使用していますが、中核となる機能は、Strands が最小限の介入で自律的な推論、ツールの選択、タスク実行を処理する能力にあります。
Strands Agents の始め方
まずは、Strands Agents を用いてシンプルな Q&A 形式の研究アシスタントを構築します。IDE で Strands Agents SDK をインストールしてください:
Kiro -> Terminal
pip install strands-agents
研究アシスタントには Streamlit も必要なので、以下のコマンドで Streamlit をインストールしてください:
pip install streamlit
次に、最初のエージェントを Python ファイルとして作成します。ファイル名は research.py としましょう。
from strands import Agent
デフォルト設定でエージェントを作成する
agent = Agent()
エージェントに質問する
agent("Tell me about agentic AI")

これで完了です。あなたは今、最初の AI エージェントを構築しました。次に、実行したときにこのエージェントが何ができるかを見てみましょう。
ターミナルで以下のコマンドを実行してください:
python -u research.py
この基盤を確立した後、プロンプトエンジニアリングを活用して実装を強化し、より洗練された研究アシスタントを作成しましょう。Strands エージェントによって駆動される包括的な研究レポートを受け取り、トピックを動的に入力できる Web インターフェースを Streamlit を使用して構築します。
Kiro による AI 支援開発:研究アシスタントの実装生成
自然言語でのプロンプトと対話を通じて研究アシスタントのコードを生成する Kiro の機能を活用し、開発プロセスを加速させましょう。要件を自然言語で記述し、Strands エージェントと Streamlit を使用して機能的な研究アシスタントアプリケーションを作成するために Kiro が支援します。
以下の手順を実行してください:
- Kiro を開く。
- 新しい Python ファイル(例:research_assistant.py)を作成する。
- 以下のプロンプトを提供する:
Strands Agent ライブラリを使用した Streamlit の研究アシスタントアプリを作成してください。以下の正確な要件に従ってください:
翻訳全文
- アプリタイトル:「Research Assistant」、サブタイトルは「トピックを入力して、研究分析と推奨事項を取得」
- 入力テキストフィールドのプレースホルダー:「例:再生可能エネルギー、人工知能」
- 「Generate Research Report(研究レポートを生成)」ボタンをクリックした際の動作:
- 「Researching and analyzing...(調査・分析中...)」というメッセージと共にスピナーを表示
- 端末出力の干渉を防ぐため、標準出力(stdout)をリダイレクト(sys および os をインポートし、devnull を使用)
- Agent() インスタンスを作成
- 以下の正確なプロンプトテンプレートを使用:「あなたは研究アシスタントです。トピック '{topic}' について:1. トピックの概要を約50語で説明 2. {topic} に関する最新の論文を2件、各20語以内で見つける 3. トピックに関連する注意点と前提条件(例:アジェンティック AI の場合、機械学習および生成 AI が前提)を各20語以内で記述 4. この研究分野における主要な貢献者および著名人2名とその経歴を各25語以内で記載 5. さらに読むための関連 URL を2件と、https://arxiv.org/ の研究論文へのリンクを提供」
- st.subheader(f"Research Report: {topic}") で見出しを表示し、st.write(response.message['content'][0]['text']) で回答内容を表示
- finally ブロック内で標準出力を復元
- トピックが入力されていない場合は警告を表示
標準出力のリダイレクトには try/finally パターンを使用すること。コードは最小限かつ機能的に保つこと。
Kiro が完全な実装を生成するため、その後保存して実行できます。
以下は Kiro からのコードです。
import sys
import os
import streamlit as st
from strands import Agentst.title("Research Assistant")
st.write("Enter a topic to get research analysis and recommendations")
topic = st.text_input("Research Topic", placeholder="e.g., renewable energy, artificial intelligence")
if st.button("Generate Research Report"):
if topic:
with st.spinner("Researching and analyzing..."):
old_stdout = sys.stdout
try:
sys.stdout = open(os.devnull, "w")
agent = Agent()
response = agent(
f"You are a research assistant. For the topic '{topic}': "
f"1. Overview of the topic in about 50 words "
f"2. Find recent 2 articles about {topic} in 20 words each "
f"3. Things to know relevant to the topic and description as prerequisites in 20 words each "
f"like if topic is agentic ai then prereq is machine learning and generative ai "
f"4. 2 key contributors and well known people in this field of research topic including their bio in 25 words each "
f"5. give relevant 2 urls to read more and any research papers from https://arxiv.org/"
)
finally:
sys.stdout = old_stdout
st.subheader(f"Research Report: {topic}")
st.write(response.message["content"][0]["text"])
else:
st.warning("Please enter a topic to research.")
注:ウェブ検索ツールがない場合、エージェントはトレーニング知識から URL を生成します。これらは最新の論文を反映していない可能性があります。*ライブ取得には、適切な MCP サーバーをツールとして追加してください*。
MCP サーバーの責任ある選択
- MCP サーバーを特定のバージョンまたはコミットハッシュに固定してください(例:pip install "arxiv-mcp==X.Y.Z")。
- インストール前にソースコードを確認してください。本番環境でのユースケースには、Amazon Bedrock ネイティブの検索機能(Knowledge Bases/RAG)をお勧めします。
- 顧客向けまたは組織間デプロイの場合、サードパーティ製の MCP サーバーは、組織の法務およびセキュリティ審査プロセスを経由してルーティングしてください。
- MCP サーバーは、エージェントのプロセス特権(利用可能な AWS クレデンシャルを含む)を共有します。これらは信頼境界の一部として扱ってください。
*本番ワークロードでは、AWS managed remote MCP servers via Amazon Bedrock AgentCore の利用を検討してください。これにより、プロセスの分離、集中型認証が実現され、ローカルでのクレデンシャル露出を排除できます*。
本番環境におけるセキュリティ上の考慮事項
- ユーザー入力を検証する。トピックの長さを制限し、文字列をエージェントに渡す前に印刷できない文字を除去する(この投稿内のコード参照)。
- Amazon Bedrock Guardrails を有効化する。プロンプト注入と不安全な出力のフィルタリングのために、モデル呼び出しにガードレールをアタッチする。詳細は、「Amazon Bedrock Guardrails を使用して有害コンテンツを検出およびフィルタリングする」を参照のこと。
- ログ機能をオンにする。Amazon Bedrock のモデル呼び出しログと AWS CloudTrail データイベント(bedrock:InvokeModel および bedrock:Converse)を有効化し、不正利用の追跡やインシデントの再構築が可能にするようにする。
- コストを制限する。Amazon Bedrock のオンデマンドクォータアラームとセッションごとのクエリ上限を設定し、トピックの洪水攻撃やコスト枯渇を防ぐ。
- 永続化データを分類する。会話履歴を保存する場合、データを書き込む前にデータを分類し、機密値を赤書き(redact)する。
- 共有責任モデルを確認する。AWS が管理する範囲とユーザーが責任を持つ範囲の境界については、「AWS 共有責任モデル」を参照のこと。
コードをより深く理解したい場合は、Kiro に「Can you explain code in context?」(文脈内のコードを説明してください)と尋ねることができます。

Kiro は以下のように応答します。

開発初期段階では、エージェントの出力は Streamlit インターフェース上で正しくストリーミング表示されていましたが、同時にターミナルにも表示されており、そこで突然切り捨てられてしまう問題がありました。これはアプリケーションの機能には影響しませんでしたが、開発環境に不要なノイズを生み出していました。Kiro とさらに対話を行う中で、コードを修正し標準出力(stdout)のリダイレクトを実装することで、エージェントの応答が意図したインターフェースでのみ表示されるように確認できました。
これは Kiro を用いたコーディングにおける重要な利点を示しています——自然言語によるフィードバックを通じて実装を反復的に改善できる点です。このようなエッジケースに遭遇した場合、望ましい動作を記述するだけで、Kiro がそれに応じてコードを修正してくれます。例えば、空または不正なエージェント応答に対するエラーハンドリングを追加するように Kiro に依頼してみるのも良いでしょう。
では、改良されたアプリケーションが実際にどのように動くか見てみましょう。
エージェントに命を吹き込む
ターミナルで、research_assistant.py ファイルが保存されているディレクトリに移動し、以下のコマンドを実行してください:
streamlit run research_assistant.pyこれにより、Streamlit アプリが起動します。
注意: streamlit run はデフォルトで 127.0.0.1 にバインドされるため、UI はこのマシンからのみアクセス可能です。認証、CSRF(クロスサイトリクエストフォージェリ)保護、および Amazon Bedrock のコスト上限を追加せずに、LAN(–server.address=0.0.0.0)やインターネットに公開しないでください。ローカル開発者ツールにおけるブラウザの DNS リバインディング(DNS-rebinding)は既知の懸念事項です。共有利用を行う場合は、Streamlit 組み込みの認証機能を使用するか、認証ゲートウェイを介してリバースプロキシすることを検討してください。
前のコマンドを実行すると、以下のメッセージが表示されます。メールアドレス欄は空白のままにすることも選択できます。
**
*Streamlit へようこそ!*
*有益なオンボーディングメール、ニュース、オファー、プロモーション、*
*そしてたまに配布されるグッズを受け取りたい場合は、下のメールアドレスを入力してください。それ以外の場合は、*
*この項目を空白のままにしてください。
*E メール:*
次に、Streamlit アプリを開くためのリンクが表示されます。


関心のあるトピックを入力し、「研究レポートの生成(Generate Research Report)」を選択できます。

これにより、以下のように研究レポートが生成されます。

異なるレポートや詳細情報を取得したい場合は、ファイルがコンテキストに含まれている状態で Kiro にコードの修正を依頼するか、自分でコードを変更することもできます。
結論
本記事では、Strands Agents がエージェント型 AI アプリの開発をどのように効率化するかについて探りました。
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み