オープンソース AI エージェント SDK / Strands Agents で 『さくらの AI Engine』を動作させる (1)
今日はStrands Agents というPythonのオープンソース AI エージェント SDK を使って『さくらのAI Engine』を動かしてみます。
Strands Agents とは
AWS が開発したPythonのオープンソース AI エージェント SDK です。Amazon Bedrockとの連携を想定していますが、モデルに依存せず、OpenAIやAnthropic等その他モデルと連携させることが可能です。
そもそも生成AIアプリケーションにおける Agent とは?
生成AIにかかわる多くのベンダーがAgent機能をリリースしていますが、Agentは何を意味するものか?という定義は明示的には定まっていないようです。一般的には、1回のプロンプト入力で複数の外部ツール(MCP)やLLM呼び出しを行い複雑なタスクを実行する 仕組みを指します。

Strands Agents は3つの機能から構成されます。
モデル:Strands Agents はオープンソースでありAmazon Bedrock専用ではなく、様々なLLMモデルとの連携が可能となっています。
ツール:目的ごとに各ステップの処理を行います。
プロンプト:Agentに与えられる一連の仕事目標です。
エージェンティックループ
Strands Agents の大きな特徴の一つが エージェンティックループ です。生成AIの検索能力を拡張するMCPは基本的に1プロンプトが1外部ツール呼び出しとなっていました。 エージェンティックループ機能により一度のプロンプトで複数の外部ツール呼び出しを実行させることが可能となり、与えられた複雑な仕事を完遂するため外部ツール呼び出しと、LLMによる回答の生成を繰り返しお行うことが可能です。この機能は次の記事で試してみたいと思います。
さっそくやってみる
1. Strands Agents とシンプルなテスト
まずstrands agents をインストールします。
pip install strands-agents
test.pyという名前でファイルを作成します。
from strands import Agent
agent = Agent()
agent("エージェンティックAIについて教えてください。")
次にファイルを実行します。
python -u test.py 以下の様な回答が戻ってきます。
エージェンティックAI(Agentic AI)について詳しく説明いたします。
## エージェンティックAIとは
エージェンティックAIは、**自律的に目標を設定し、計画を立て、行動を実行できるAIシステム**のことです。従来の受動的なAIとは異なり、能動的に環境と相互作用し、複雑なタスクを独立して遂行できます。
## 主な特徴
### 1. **自律性(Autonomy)**
- 人間の詳細な指示なしに行動できる
- 状況に応じて柔軟に判断・実行
### 2. **目標指向性(Goal-oriented)**
- 明確な目標に向かって行動
- 長期的な計画立案が可能
Strands Agents はオープンソースであり汎用的に多くのLLMモデルに対応しているとはいえAWSに開発された関係上、モデルが何も指定されないとAmazon Bedrockを呼び出します。aws configureで正しいAWS Credentialsが設定さえれている必要があります。
└ Bedrock region: us-east-1
└ Model id: us.anthropic.claude-sonnet-4-20250514-v1:0
AWS環境が無い人はtest.pyの実行テストをスキップして下さい。
2. OpenAI 用ライブラリのインストール
では次にStrands Agents のOpenAI用ツールをインストールします。
pip install 'strands-agents[openai]'
test.pyを以下に変更します。
from strands import Agent
from strands.models.openai import OpenAIModel
# 🔑 OpenAIの公式APIキーを直接ベタ書き
OPENAI_API_KEY = "sk-xxxxxx"
# OpenAI モデル設定(base_url を明示的に指定)
model_openai = OpenAIModel(
client_args={
"api_key": OPENAI_API_KEY,
"base_url": "https://api.openai.com/v1", # OpenAI公式エンドポイントを指定
},
model_id="gpt-oss-120b", # 使用するモデルID
params={
"max_tokens": 1000,
"temperature": 0.7,
}
)
# エージェント生成
agent_openai = Agent(model=model_openai, callback_handler=None)
# 実行
response_openai = agent_openai("こんにちは!自己紹介してください。")
print("Response from OpenAI:", response_openai)
Response from OpenAI: こんにちは!私はAIアシスタントです。さまざまな情報を提供したり、質問に答えたり、タスクをサポートしたりするために設計されています。何かお手伝いできることがあれば教えてください!
無事動作しています。Bedrock 同様に OpenAI用APIキーが無い場合はこちらもskipして問題ありません。
3. さくらのAI Engine との連携
では記事の目的である『さくらのAI Engine』と連携してみます。『さくらのAI Engine』ではOpenAI互換APIをサポートしgpt-oss-120bを提供しています。上記のtest.pyを以下に書き換えます。
from strands import Agent
from strands.models.openai import OpenAIModel
# 🔑 OpenAIの公式APIキーを直接ベタ書き
OPENAI_API_KEY = "49xx0957-6f26-4d7e-8c35-e017662b5da7:Ulh6HCqdk+t8sG3c4YnIw+jNNCZJA4E9JLGuGJ0f"
# OpenAI モデル設定(base_url を明示的に指定)
model_openai = OpenAIModel(
client_args={
"api_key": OPENAI_API_KEY,
"base_url": "https://api.ai.sakura.ad.jp/v1", # さくらのエンドポイントを指定
},
model_id="gpt-oss-120b", # 使用するモデルID
params={
"max_tokens": 1000,
"temperature": 0.7,
}
)
# エージェント生成
agent_openai = Agent(model=model_openai, callback_handler=None)
# 実行
response_openai = agent_openai("こんにちは!自己紹介してください。")
print("Response from OpenAI:", response_openai)
Response from OpenAI: こんにちは!はじめまして、ChatGPTです。
- **役割**:皆さんの質問に答えたり、アイデアを出したり、文章を書いたりと、さまざまなサポートを行うAIアシスタントです。
- **開発元**:OpenAI が開発した大型言語モデル(GPT‑4 アーキテクチャ)をベースにしています。
- **得意分野**:日本語・英語をはじめとした多言語での会話、プログラミング、科学・歴史・文化の解説、創作活動の支援、日常のちょっとした相談など、幅広いトピックに対応できます。
- **学習範囲**:2024年までの公開情報や書籍・ウェブ記事などを大量に学習していますが、リアルタイムの出来事や個人情報にはアクセスできません。
何か聞きたいことや手伝ってほしいことがあれば、遠慮なく教えてくださいね!😊
無事動作しました!
次に記事ではAgentsの本来の役割である、一つのプロンプトで複数のツールを呼び出した処理を行ってみます。
Discussion