📌

オープンソース AI エージェント SDK / Strands Agents で 『さくらの AI Engine』を動作させる (1)

に公開

今日はStrands Agents というPythonのオープンソース AI エージェント SDK を使って『さくらのAI Engine』を動かしてみます。

Strands Agents とは

https://aws.amazon.com/jp/blogs/news/introducing-strands-agents-an-open-source-ai-agents-sdk/
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