こんにちは、YAMALEXの駿です。
最近はStrandsAgentsとStrandsAgents Toolsを組み合わせていろいろなエージェントを作るのにはまっています。
今回は StrandsAgents と Claude 4 のインターリーブ思考 を組み合わせ、マルチエージェントなし で Deep Research 相当の調査レポートを生成する手法を紹介します。
1. はじめに
2025年初頭にOpenAIがDeep Research機能を発表して以来、AI分野では高度な情報調査・分析機能への関心が急速に高まっています。
従来、複雑な調査タスクを自動化するには、複数のエージェントを使った構成や複雑なワークフローを作成する必要がありました。
しかし今回、StrandsAgentsとClaude のインターリーブ思考を組み合わせることで、シングルエージェントでDeepResearch相当の機能を実現できることを確認しました。
本記事では、この革新的なアプローチについて実装から実行結果まで詳しく解説します。
1.1. DeepResearchについて
DeepResearchは、AIを活用した高度な情報収集・分析・レポート作成機能です。
複雑な調査タスクを短時間で自動化できる次世代のリサーチツールとして注目されています。
従来人間が数時間から数日かけて行っていた情報収集や分析を、わずか5〜30分程度で完了させる能力を持ちます。
OpenAIのDeep Researchを筆頭に、Google(Gemini)、Anthropic(Claude)、Perplexity AI、xAI(Grok)など、主要なAI企業が次々と類似機能を導入し、この分野における競争が活発化しています。
また、このブログでもDifyを使ったDeepResearch実装の紹介をしているので、そちらもぜひ読んでみてください。
1.2. StrandsAgentsとは
StrandsAgentsは、AWS が開発したオープンソースのAIエージェント構築フレームワークです。
以下の特徴があります。
特徴 | 概要 |
---|---|
シンプルな設計 | Pythonベースで直感的なAPIを提供 |
モデル駆動型アプローチ | 複数のLLMプロバイダーをサポート |
豊富なツール | 20以上の事前構築済みツールを提供 |
MCP対応 | Model Context Protocol(MCP)サーバーとの統合が可能 |
インターリーブ思考とは
インターリーブ思考(Interleaved Thinking)は、Claude 4モデルで導入された革新的な機能です。
従来の拡張思考(Extended Thinking)を発展させ、ツール使用中に思考プロセスを挟むことができます。
具体的には以下のような動作を実現します。
- ツール結果の分析: ツール呼び出しの結果を受け取った後、その内容について思考
- 動的な戦略調整: 初期計画を状況に応じて修正
- 段階的推論: 複数のツール呼び出しの間に推論ステップを挿入
このインターリーブ思考により、単純な線形処理ではなく、より人間らしい柔軟な思考プロセスを実現できます。
なお、インターリーブ思考は下記モデルでのみ実行できます。
- Claude Opus 4
- Claude Sonnet 4
- Claude Sonnet 3.7
■従来のDeepResearchエージェント構成

従来の構成
■インターリーブ思考を使ったDeepResearchエージェント構成

インターリーブ思考を使った構成
2. 実装
2.1. エージェント
今回の実装では、DeepResearchクラスを中心とした構成を採用しました。以下が核となるコードです:
import asyncio import os from textwrap import dedent from mcp import StdioServerParameters, stdio_client from strands import Agent from strands.models.bedrock import BedrockModel from strands.tools.mcp import MCPClient TAVILY_API_KEY = os.getenv('TAVILY_API_KEY') websearch = MCPClient( lambda: stdio_client( StdioServerParameters( command='npx', args=['-y', 'tavily-mcp@latest'], env={'TAVILY_API_KEY': TAVILY_API_KEY}, ) ) ) class DeepResearch: PROMPT = dedent("""\ ユーザーから伝えられた調査したいトピックに対して、PDF換算で3枚分の詳細かつ広範なレポートを作成してください。 レポートはMarkdown形式でフォーマットしてください。 必ず日本語でレポートを書いてください レポートする内容はWeb検索を用いて収集してください。 収集した内容をよく吟味し、さらに徹底的な調査が必要だと判断した内容は、検索文言を書き換えてさらにWeb検索を行ってください。 ユーザーが指示したトピックについて包括的な情報を収集することが重要です。 参照したサイト脚注で示し、脚注には `[脚注番号][タイトル](URL)` 形式で列挙してください。 """) def __init__(self, tools): model = BedrockModel( model='us.anthropic.claude-sonnet-4-20250514-v1:0', streaming=True, additional_request_fields={ 'thinking': {'type': 'enabled', 'budget_tokens': 4000}, 'anthropic_beta': ['interleaved-thinking-2025-05-14'], }, ) self.agent = Agent( model=model, system_prompt=self.PROMPT, tools=tools, ) async def stream(self, prompt): async for event in self.agent.stream_async(prompt): if text := event.get('event', {}).get('contentBlockDelta', {}).get('delta', {}).get('text', ''): yield text for content in event.get('message', {}).get('content', []): if isinstance(content, dict) and (tool_use := content.get('toolUse', '')): print(tool_use)
2.2. モデル(インターリーブ思考を有効にする)
Claude 4のインターリーブ思考を有効にするために、以下の設定を行います:
model = BedrockModel( model='us.anthropic.claude-sonnet-4-20250514-v1:0', streaming=True, additional_request_fields={ 'thinking': {'type': 'enabled', 'budget_tokens': 4000}, 'anthropic_beta': ['interleaved-thinking-2025-05-14'], }, )
ポイント
設定 | 役割 |
---|---|
thinking |
拡張思考を有効化し、思考トークンの予算を設定 |
anthropic_beta |
インターリーブ思考機能を有効化するベータヘッダー |
streaming |
リアルタイムでの結果出力を有効化 |
この設定により、エージェントはツール使用の合間に思考プロセスを挟みながら、動的に調査戦略を修正できるようになります。
2.3. ツール(Tavily MCP)
Tavily MCPサーバーは、AI専用に設計された高度な検索・データ抽出機能を提供します。
Model Context Protocol(MCP)を介してStrandsAgentsと統合されています。
2.3.1. Tavily MCPサーバーの特徴
特徴 | 概要 |
---|---|
AI最適化検索 | LLM向けに最適化された検索結果を提供 |
リアルタイム情報 | 最新のWeb情報へのアクセス |
多様な検索機能 | 一般検索、ニュース検索、ドメイン指定検索 |
構造化データ抽出 | WebページからのAI-powered コンテンツ抽出 |
2.3.2. MCP統合の実装
websearch = MCPClient( lambda: stdio_client( StdioServerParameters( command='npx', args=['-y', 'tavily-mcp@latest'], env={'TAVILY_API_KEY': TAVILY_API_KEY}, ) ) )
この実装により、エージェントは以下のツールにアクセスできます:
tavily-search
: 一般的なWeb検索tavily-extract
: 特定URLからのコンテンツ抽出tavily-crawl
: Webサイトの構造化クローリングtavily-map
: サイトマップの生成
3. 実行
実際の実行例として、「StrandsAgentsについて」というクエリでテストを行いました。
3.1. 思考プロセス
「StrandsAgents」について詳細なレポートを作成するためにWeb検索を行います。まずは基本的な情報から調査していきましょう。 Tool #1: tavily-search {'toolUseId': 'tooluse_nlRia3AiSxKtTqIcUIW5tA', 'name': 'tavily-search', 'input': {'query': 'StrandsAgents とは 概要 特徴', 'search_depth': 'advanced', 'max_results': 10}} まず、StrandsAgentsについてさらに詳しい情報を得るために、公式ドキュメントの内容を確認してみましょう。 Tool #2: tavily-extract {'toolUseId': 'tooluse_FgM2FQAIRfqQIq-BWzAAwA', 'name': 'tavily-extract', 'input': {'urls': ['https://strandsagents.com/latest/', 'https://aws.amazon.com/jp/blogs/news/introducing-strands-agents-an-open-source-ai-agents-sdk/'], 'extract_depth': 'advanced'}} より詳細な情報を収集するために、いくつかの具体的なユースケースや実装例について調査を進めていきましょう。 Tool #3: tavily-search {'toolUseId': 'tooluse_BYQQst_8RTKNMl29XzB8zA', 'name': 'tavily-search', 'input': {'query': 'Strands Agents 実装例 コードサンプル ユース ケース', 'search_depth': 'advanced'}} StrandsAgentsの実装例やコード構造について、より詳細に調査してみましょう。公式ドキュメントのコードサンプルを確認します。 Tool #4: tavily-extract {'toolUseId': 'tooluse__1NIfbQpT0GQN2_k2-a2hg', 'name': 'tavily-extract', 'input': {'urls': ['https://strandsagents.com/latest/user-guide/quickstart/'], 'extract_depth': 'advanced'}} マルチエージェントシステムについてより深く理解するため、関連ドキュメントを確認しましょう。 Tool #5: tavily-extract {'toolUseId': 'tooluse_J8RqHAfaSuekfKVMyWZ13A', 'name': 'tavily-extract', 'input': {'urls': ['https://strandsagents.com/latest/user-guide/concepts/multi-agent/agents-as-tools/'], 'extract_depth': 'advanced'}} 次に、Strands Agentsの実用的な例として、RAG(Retrieval-Augmented Generation)の実装例を確認しましょう。 Tool #6: tavily-search {'toolUseId': 'tooluse_E2gPYoibQb2LECRZ2iXf-Q', 'name': 'tavily-search', 'input': {'search_depth': 'advanced', 'query': 'Strands Agents RAG 実装 ナレッジベース retrieve ツール 例'}} 特定のサンプルコードを確認してみましょう。Knowledge Baseを使ったRAG実装の詳細を理解するために、関連ドキュメントを調査します。 Tool #7: tavily-extract {'toolUseId': 'tooluse_ExrhAWzjT6ykET0fSdrvvA', 'name': 'tavily-extract', 'input': {'urls': ['https://strandsagents.com/latest/examples/python/knowledge_base_agent/'], 'extract_depth': 'advanced'}} 次に、Strands Agentsを使用する上での課題や制限についても調査しましょう。 Tool #8: tavily-search {'toolUseId': 'tooluse_slS6HdbjTpC4hraWyh25Jg', 'name': 'tavily-search', 'input': {'search_depth': 'advanced', 'query': 'Strands Agents 制限 課題 デメリット セキュリティ'}} Strands Agentsの実用例と企業での導入事例についても調べましょう。 Tool #9: tavily-search {'toolUseId': 'tooluse_DbBWLVxnRhu4nXtHPP8E_Q', 'name': 'tavily-search', 'input': {'search_depth': 'advanced', 'query': 'Strands Agents 事例 企業導入 ユースケース Amazon Q Developer AWS Glue'}} 最後に、Strands Agentsの将来性や展望についても情報を集めましょう。 Tool #10: tavily-search {'toolUseId': 'tooluse_D_GJqij3Q0eLbXbHXHI7ww', 'name': 'tavily-search', 'input': {'search_depth': 'advanced', 'query': 'Strands Agents 将来性 展望 ロードマップ 機能拡張'}} 全ての収集した情報を整理して、StrandsAgentsについての包括的なレポートを作成します。
上の思考とツール利用の履歴を見るとわかるように、インターリーブ思考を有効にすることで、 検索結果をもとにクエリを拡張し、さらに詳細な情報を検索する、DeepResearch相当の動きが実現できています。
- 初回検索:StrandsAgents とは 概要 特徴 で基礎情報取得
- 判断 & 追加検索:結果を見て「RAG」「ユースケース」などキーワードを追加
- 再検索:専門分野や最新事例を深掘り
- Markdown レポート生成:脚注付きで出力
実行結果
最終的に生成されたレポートは、以下の要素を含む包括的な内容となりました。
- 概要: 基本情報、特徴
- 主要機能: 主要機能、ツール、マルチエージェント
- 実装: エージェント、カスタムツール、RAGの実装
- 活用: 活用例、ベストプラクティス、他のフレームワークとの比較
- 責任あるAI: ガードレール、注意点
全文が見たい方はこちら
# StrandsAgentsに関する包括的レポート ## 1. StrandsAgentsの概要と基本原理 ### 1.1 StrandsAgentsとは StrandsAgentsは、2025年5月16日にAWSから発表された、AIエージェントを構築・実行するためのオープンソースのPython SDKです。わずか数行のコードでAIエージェントを作成できる「モデル駆動型アプローチ」を採用しており、シンプルなエージェントのユースケースから複雑なものまで、そしてロー カル開発から本番環境でのデプロイまでをカバーします。すでにAmazon Q Developer、AWS Glue、VPC Reachability Analyzerなど、AWSの複数チームが 本番環境でStrandsAgentsを使用しています[^1]。 ### 1.2 モデル駆動型アプローチの特徴 StrandsAgentsの核となるのは「モデル駆動型アプローチ」です。従来のエージェントフレームワークでは、開発者が複雑なワークフローやオーケストレーションロジックを定義する必要がありましたが、StrandsAgentsでは最新の大規模言語モデル(LLM)の推論、計画立案、ツール使用機能を最大限に活用 します。開発者はプロンプトとツールのリストをコードで定義するだけでエージェントを構築でき、エージェントの動作はLLMが担います[^2]。 ### 1.3 エージェンティックループ StrandsAgentsの中核となる処理の流れは「エージェンティックループ」と呼ばれます。このループでは: 1. モデルがユーザー入力とコンテキストを受け取る 2. モデルが推論と計画を行う 3. 必要に応じてツールを選択・実行する 4. ツールの結果を利用して推論を継続する 5. 最終的な応答を生成する、またはループを継続する この流れにより、エージェントは自律的にタスクを遂行できます[^3]。 ## 2. StrandsAgentsの主要機能と特長 ### 2.1 主要な機能 StrandsAgentsの主要な機能には以下のものがあります: - **軽量かつシンプルな設計**: 簡潔なコードでエージェントを作成・実行 - **本番環境対応**: 完全な可観測性、トレース機能、スケーラブルなデプロイオプション - **マルチモデル対応**: Amazon Bedrock、Anthropic、Ollama、Meta、LiteLLMなど多様なモデルプロバイダーをサポート - **豊富な組み込みツール**: 多彩な機能を持つツールが事前に用意されている - **マルチエージェントとオートノマスエージェント**: 複数エージェントの連携やセルフインプルーブメントをサポート - **多様なインタラクション**: 会話型、非会話型、ストリーミング、非ストリーミングなど様々なタイプのエージェントに対応 - **セキュリティとガードレール**: セキュリティ機能が組み込まれている[^4] ### 2.2 組み込みツール StrandsAgentsには以下のような豊富な組み込みツールが用意されています: - **RAG・メモリ系** - retrieve: 知識ベースから情報検索やRAG用途 - memory: エージェントの記憶保持 - **ファイル操作** - file_read / file_write: ファイルの読み書き - editor: ファイル編集や検索 - **システム・シェル操作** - shell: シェルコマンド実行 - environment: 環境変数の管理 - cron: 定期実行のスケジューリング - **コード実行** - python_repl: Pythonコードの実行 - **Web・API連携** - http_request: APIコールやWebデータ取得 - slack: Slack連携[^5] ### 2.3 マルチエージェント機能 StrandsAgentsでは、複数のエージェントが協調して動作するマルチエージェントシステムを構築できます。具体的には以下のようなパターンがサポートされています: - **Agents as Tools**: 特化したエージェントをツールとして他のエージェントから呼び出す - **Swarm**: 複数エージェントが協調してタスクを解決する - **Graph**: エージェント間の依存関係を定義して複雑なワークフローを実現 - **Workflow**: 順序付けられたエージェントの実行で複雑なタスクを解決[^6] ## 3. 実装と開発方法 ### 3.1 基本的な実装方法 StrandsAgentsで基本的なエージェントを実装する方法は非常にシンプルです: ```python from strands import Agent # エージェントの作成 agent = Agent() # エージェントへの質問 agent("こんにちは") ``` わずか3行のコードで完全に機能するエージェントを実装できます[^7]。 ### 3.2 カスタムツールの作成 StrandsAgentsでは、`@tool`デコレータを使用して簡単にカスタムツールを作成できます: ```python from strands import Agent, tool @tool def letter_counter(word: str, letter: str) -> int: """ 単語内の特定の文字の出現回数をカウントします。 Args: word (str): 検索対象の単語 letter (str): カウントする文字 Returns: int: 文字の出現回数 """ if not isinstance(word, str) or not isinstance(letter, str): return 0 if len(letter) != 1: raise ValueError("'letter'パラメータは1文字である必要があります") return word.lower().count(letter.lower()) # カスタムツールを使用してエージェントを作成 agent = Agent(tools=[letter_counter]) ``` このように、必要な機能をPython関数として定義し、`@tool`デコレータをつけるだけでエージェントが利用できるツールを作成できます[^8]。 ### 3.3 RAGの実装 StrandsAgentsでは、Amazon Bedrock Knowledge Basesなどを使って簡単にRAG(Retrieval-Augmented Generation)を実装できます: ```python from strands import Agent from strands_tools import retrieve # 環境変数にナレッジベースIDを設定 # export STRANDS_KNOWLEDGE_BASE_ID=your_knowledge_base_id # retrieveツールを使用してエージェントを作成 agent = Agent(tools=[retrieve]) # RAGを使った質問応答 query = "会社の休暇ポリシーについて教えてください" response = agent(query) ``` `retrieve`ツールは、Amazon Bedrock Knowledge Basesのセマンティック検索機能を使用して、クエリに関連する情報を取得します[^9]。 ## 4. 活用例とユースケース ### 4.1 AWSでの活用例 StrandsAgentsは既にAWSの複数のサービスで活用されています: - **Amazon Q Developer**: コード生成や開発支援のAIアシスタント - **AWS Glue**: データ統合サービス - **VPC Reachability Analyzer**: ネットワーク接続性分析ツール[^10] ### 4.2 一般的なユースケース StrandsAgentsは以下のようなユースケースに適しています: - **自然対話アプリケーション**: チャットボットや会話型アシスタント - **プロトタイプから本格開発**: 段階的な機能拡張が可能 - **AWSエコシステムとの統合**: 既存のAWSサービスとシームレスに連携 - **マルチAPI統合システム**: 複数のAPIを連携させるアプリケーション - **知識ベースとの連携**: RAGを活用した情報検索・応答システム[^11] ### 4.3 具体的な実装例 #### チャットボットの実装例 ```python from strands import Agent from strands_tools import retrieve, http_request CHATBOT_SYSTEM_PROMPT = """ あなたは親切でプロフェッショナルなカスタマーサポートアシスタントです。 常に丁寧で正確な情報を提供するよう心がけてください。 わからない質問には正直に「わかりません」と答えてください。 """ agent = Agent( system_prompt=CHATBOT_SYSTEM_PROMPT, tools=[retrieve, http_request] ) response = agent("商品の返品方法について教えてください") print(response) ``` #### RAGを使った知識ベース検索 ```python import os from strands import Agent from strands_tools import retrieve, memory # ナレッジベースIDを設定 os.environ["STRANDS_KNOWLEDGE_BASE_ID"] = "your_knowledge_base_id" # 情報を保存する関数 def store_information(agent, content): result = agent.tool.memory(action="store", content=content) return "情報を保存しました。" # 情報を検索する関数 def retrieve_information(agent, query): result = agent.tool.memory(action="retrieve", query=query, min_score=0.4, max_results=5) if not result: return "関連情報が見つかりませんでした。" return f"検索結果:\n{result}" # エージェントの作成 agent = Agent(tools=[retrieve, memory]) # 情報の保存 store_information(agent, "当社の営業時間は平日9時から18時です。") # 情報の検索 print(retrieve_information(agent, "営業時間はいつですか?")) ``` ## 5. StrandsAgentsの技術的詳細 ### 5.1 サポートするモデルプロバイダー StrandsAgentsは以下のモデルプロバイダーをサポートしています: - **Amazon Bedrock**: Claude、Llama 2、Mistral、Titan、Cohere Commandなど - **Anthropic**: Claude 3シリーズ - **LiteLLM**: OpenAI、Anthropic、Mistral、Cohereなどを統一インターフェースで利用可能 - **Llama API**: MetaのLlamaモデル - **Ollama**: ローカル実行のためのモデル - **OpenAI**: GPT-4、GPT-3.5など[^12] ### 5.2 ストリーミングとコールバック StrandsAgentsでは、エージェントの応答をリアルタイムでストリーミングする機能が提供されています。非同期イテレータとコールバックハンドラの2 種類のアプローチがサポートされています: #### 非同期イテレータの例 ```python import asyncio from strands import Agent agent = Agent(callback_handler=None) async def stream_response(): query = "2050年の世界について予測してください" async for event in agent.stream_async(query): if "data" in event: print(event["data"], end="", flush=True) asyncio.run(stream_response()) ``` #### コールバックハンドラの例 ```python from strands import Agent def my_callback_handler(**kwargs): if "data" in kwargs: print(kwargs["data"], end="") elif "current_tool_use" in kwargs: tool = kwargs["current_tool_use"] print(f"\n[ツール使用: {tool.get('name')}]") agent = Agent(callback_handler=my_callback_handler) agent("AIの未来について教えてください") ``` これらの機能により、エージェントの思考プロセスや応答をリアルタイムで表示できます[^13]。 ### 5.3 デプロイオプション StrandsAgentsは様々なデプロイオプションをサポートしています: - **AWS Lambda**: サーバーレス環境でのデプロイ - **AWS Fargate**: コンテナ化されたエージェントのデプロイ - **Amazon EKS**: Kubernetesを使ったデプロイ - **Amazon EC2**: 仮想サーバーでの実行 これらのオプションにより、ユースケースや要件に合わせた最適なデプロイ方法を選択できます[^14]。 ## 6. セキュリティと責任あるAI ### 6.1 セキュリティ機能 StrandsAgentsは以下のようなセキュリティ機能を提供しています: - **ガードレール**: Amazon Bedrockのガードレール機能を簡単に統合し、不適切な出力をブロック - **プロンプトインジェクション対策**: セキュアなプロンプト設計のガイドライン - **ツール使用制限**: 特定のツールの使用条件を設定可能 - **認証情報管理**: APIキーなどの認証情報を安全に管理[^15] ### 6.2 セキュリティ上の注意点 StrandsAgentsを使用する際には、以下の点に注意が必要です: 1. ツールに過度な権限を与えない(特にシェルコマンド実行などの危険な操作) 2. プロンプトインジェクション攻撃への対策を講じる 3. ユーザー入力のバリデーションを徹底する 4. 重要な操作にはユーザー確認を挟む 5. 認証情報は環境変数など安全な方法で管理する[^16] ### 6.3 責任あるAIの実践 StrandsAgentsを使用した責任あるAI開発のためのベストプラクティス: 1. 適切なモデルとプロンプトの選択 2. ユーザー情報の保護と適切な処理 3. 出力内容のモニタリングと監査 4. フィードバックループの構築と継続的な改善[^17] ## 7. 課題と制限事項 ### 7.1 現在の制限事項 StrandsAgentsには以下のような制限や課題があります: 1. **一部の高度な設定・連携の制限**: 細かい設定の調整が難しい場合がある 2. **自動化による技術理解の低下リスク**: ブラックボックス化による問題 3. **確率的な動作**: LLMの確率的な性質による予測不能な動作 4. **決定論的処理の難しさ**: 常に同じ結果を得ることが困難 5. **厳密なフロー制御の課題**: モデルが予期外のツール選択をする可能性[^18] ### 7.2 パフォーマンスの最適化 StrandsAgentsのパフォーマンスを最適化するためのポイント: 1. 適切なモデルの選択(タスクに合ったモデルを使用する) 2. システムプロンプトの最適化 3. ツールの適切な設計と実装 4. キャッシングの活用 5. 非同期処理の活用[^19] ## 8. 将来の展望と開発ロードマップ ### 8.1 機能拡張の方向性 StrandsAgentsの今後の開発ロードマップには以下のような項目が含まれています: 1. **プラグインベースのツール拡張**: より多様なツールの簡単な追加 2. **RAGとの統合強化**: より高度な知識検索・利用機能 3. **マルチモーダル対応**: 視覚情報などの扱いの強化 4. **状態保持の拡張**: 会話履歴や知識ベースの長期保存・再利用 5. **LLMフローエンジンとの連携**: LangGraphなど他のフレームワークとの統合[^20] ### 8.2 エコシステムの発展 StrandsAgentsを中心としたエコシステムの発展が期待されています: 1. **SaaS型サービスの登場**: GUI上でエージェントを構築・管理できるプラットフォーム 2. **他のAIツールとの連携強化**: LangChain、LlamaIndexなどとの統合 3. **業務自動化プラットフォーム**: AgentOpsの実現 4. **コミュニティ主導の発展**: オープンソースとしての継続的な改善[^21] ### 8.3 企業導入の見通し StrandsAgentsの企業導入における今後の可能性: 1. **エンタープライズ向け機能の強化**: セキュリティ、ガバナンス、監査機能 2. **業界特化型のソリューション**: 金融、医療、製造業など向けの特化型エージェント 3. **内部業務の自動化**: 顧客サポート、ヘルプデスク、ナレッジマネジメントなど 4. **クロス企業コラボレーション**: 複数企業間でのエージェント連携[^22] ## 9. StrandsAgentsの実用例とベストプラクティス ### 9.1 実際の導入事例 StrandsAgentsの実際の導入事例には以下のようなものがあります: 1. **Amazon Q Developer**: コード生成や開発支援のAIアシスタント 2. **AWS Glue**: データ統合サービス 3. **VPC Reachability Analyzer**: ネットワーク接続性分析ツール 4. **社内情報検索Slackボット**: RAG機能を使った企業内ナレッジ検索[^23] ### 9.2 開発のベストプラクティス StrandsAgentsを使った開発のベストプラクティス: 1. **CLIとSDKの適切な使い分け**: CLIで試行錯誤し、SDKで本格実装 2. **システムプロンプトの明確化**: エージェントの役割と制約を明確に定義 3. **ツール設計の最適化**: 適切な粒度と明確なドキュメントを備えたツール 4. **段階的な機能追加**: 基本機能から徐々に複雑な機能を追加 5. **テストとモニタリングの充実**: エージェントの挙動を継続的に監視[^24] ### 9.3 効率的なワークフロー StrandsAgentsを使った効率的な開発ワークフロー: 1. プロトタイピング(CLI環境での試行錯誤) 2. 基本エージェントの実装(コアロジックの設計) 3. ツールの追加(機能拡張) 4. マルチエージェント構造の構築(必要に応じて) 5. テストと最適化 6. 本番環境へのデプロイ[^25] ## 10. 他のエージェントフレームワークとの比較 ### 10.1 LangChainとの比較 StrandsAgentsとLangChainの主な違い: 1. **設計思想**: Strandsはモデル駆動型、LangChainはチェーン/パイプライン型 2. **コードの簡潔さ**: Strandsはより少ないコードでエージェントを実装可能 3. **AWSとの統合**: StrandsはAWSサービスとのネイティブ統合が強力 4. **エコシステム**: LangChainはより成熟したエコシステムとコミュニティを持つ[^26] ### 10.2 AutoGenとの比較 StrandsAgentsとAutoGenの主な違い: 1. **マルチエージェント**: AutoGenはマルチエージェント設計に特化 2. **実装の複雑さ**: StrandsはよりシンプルなAPIを提供 3. **モデルサポート**: StrandsはAWSサービスとの統合が強力 4. **学習曲線**: Strandsの方が学習が容易[^27] ### 10.3 各フレームワークの適性 どのようなケースで各フレームワークを選ぶべきか: 1. **Strands**: AWSエコシステムとの統合、シンプルなエージェント、迅速な開発が必要な場合 2. **LangChain**: 複雑なチェーン処理、多様なコンポーネント、成熟したエコシステムが必要な場合 3. **AutoGen**: 複雑なマルチエージェントシステム、高度なエージェント間協調が必要な場合[^28] ## まとめ StrandsAgentsは、わずか数行のコードでAIエージェントを構築・実行できるオープンソースSDKとして、AIエージェント開発の新時代を切り開きつつあ ります。モデル駆動型アプローチを採用することで、開発者は複雑なワークフローを定義する代わりにモデルの推論能力に依存し、より迅速かつ柔軟な エージェント開発が可能になっています。 AWSの複数チームが本番環境でStrandsAgentsを採用しており、Amazon Q Developer、AWS Glue、VPC Reachability Analyzerなどのサービスで活用されています。豊富な組み込みツール、多様なモデルプロバイダーのサポート、マルチエージェント機能、セキュリティ機能などを備え、幅広いユースケース に対応可能です。 一方で、LLMの確率的な性質による予測不能な動作や、高度な設定の調整が難しいといった課題も存在します。今後はプラグインベースのツール拡張、RAGとの統合強化、マルチモーダル対応などの機能拡張が期待されています。 StrandsAgentsは、AIエージェント開発の民主化を促進し、様々な産業や用途でのAI活用を加速させる可能性を秘めています。オープンソースとしての継続的な発展と、コミュニティの貢献によって、さらなる進化が期待される技術です。 [^1]: https://aws.amazon.com/jp/blogs/news/introducing-strands-agents-an-open-source-ai-agents-sdk/ [^2]: https://benjamin.co.jp/blog/technologies/strands-agents-handson/ [^3]: https://strandsagents.com/latest/user-guide/concepts/agents/agent-loop/ [^4]: https://strandsagents.com/latest/ [^5]: https://tech.nri-net.com/entry/iap_strands_agent_cli [^6]: https://strandsagents.com/latest/user-guide/concepts/multi-agent/agents-as-tools/ [^7]: https://speakerdeck.com/r3_yamauchi/aws-strands-agents-sdk-20250614-jawsugdei-lt [^8]: https://strandsagents.com/latest/user-guide/quickstart/ [^9]: https://qiita.com/yu-Matsu/items/22a85b1e602e79733c43 [^10]: https://aws.amazon.com/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/ [^11]: https://www.docswell.com/s/sohjin/5M7P26-2025-07-01-103147 [^12]: https://strandsagents.com/latest/user-guide/concepts/model-providers/ [^13]: https://strandsagents.com/latest/user-guide/concepts/streaming/ [^14]: https://strandsagents.com/latest/user-guide/deploy/ [^15]: https://qiita.com/kyuko/items/cb75e8f0a50985ca2030 [^16]: https://www.issoh.co.jp/tech/details/7199/ [^17]: https://strandsagents.com/latest/user-guide/safety-security/responsible-ai/ [^18]: https://tech.nri-net.com/entry/iap_strands_agent_cli [^19]: https://strandsagents.com/latest/user-guide/observability-evaluation/ [^20]: https://www.issoh.co.jp/tech/details/7199/ [^21]: https://www.issoh.co.jp/tech/details/7199/ [^22]: https://www.issoh.co.jp/tech/details/7199/ [^23]: https://qiita.com/yu-Matsu/items/22a85b1e602e79733c43 [^24]: https://tech.nri-net.com/entry/iap_strands_agent_cli [^25]: https://benjamin.co.jp/blog/technologies/strands-agents-handson/ [^26]: https://www.issoh.co.jp/tech/details/7199/ [^27]: https://www.issoh.co.jp/tech/details/7199/ [^28]: https://www.issoh.co.jp/tech/details/7199/
4. ポイント
DeepResearchなど、従来であればマルチエージェント構成で実装する必要があった内容について、 インターリーブ思考を活用した単一エージェントとして構築した際の利点を以下に示します。
4.1. 複雑な実装が不要
従来のマルチエージェント構成では、以下のような複雑さがありました。
- エージェント間の通信プロトコルの設計
- タスク分散とワークフロー管理
- 状態管理と同期処理
- エラーハンドリングと回復処理
しかし、インターリーブ思考を活用することで、単一エージェント内(約70行のコード)で以下が実現できます。
- 思考と検索の繰り返し: 自然な推論プロセス
- 動的戦略調整: 初期計画の柔軟な修正
- 情報の再帰的取得: 必要に応じた追加調査
4.2. 情報の欠落とハルシネーションの抑制
マルチエージェント構成での課題
- 情報伝達時の劣化: エージェント間でのコンテキスト損失
- 責任の分散: 誤情報の源泉が特定困難
- 整合性の維持: 複数エージェント間での情報一貫性
シングルエージェント+インターリーブ思考の利点
- コンテキストの継続: 全ての情報が単一セッション内で管理
- 出典の一貫性: 検索結果と推論プロセスが直接結合
- 品質の統制: 単一モデルによる一貫した品質基準
まとめ
本記事では、StrandsAgents + Claude インターリーブ思考によるシングルエージェントDeepResearchの実現について詳しく解説しました。
主要な成果
- アーキテクチャの簡素化: 複雑なマルチエージェント構成が不要
- 品質の向上: 情報の欠落やハルシネーションの大幅な削減
- 開発効率の向上: 実装・デバッグ・運用の全段階での効率化
- 実用性の確認: 実際の企業調査での高品質なレポート生成
今後の展望
インターリーブ思考技術の発展により、さらに高度なAIエージェントの実現が期待されます。
- 自律的学習: 調査プロセス自体の学習と最適化
- 専門化: ドメイン特化型の高精度エージェント
- 協調: 複数の特化エージェントの効率的な連携
StrandsAgents + Claude インターリーブ思考は、AI エージェント技術の実用化において重要なマイルストーンとなる技術です。
シンプルでありながら強力なこのアプローチが、今後のAI アプリケーション開発の新たな標準となることが期待されます。
Acroquest Technologyでは、キャリア採用を行っています。
- Azure OpenAI/Amazon Bedrock等を使った生成AIソリューションの開発
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- マイクロサービス、DevOps、最新のOSSやクラウドサービスを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。