AWSが発表したAIエージェント構築SDK「Strands Agents」を5分だけ触ってみよう！

何かすごそうなのが来ました！

https://aws.amazon.com/jp/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/

Strandsは日本人に馴染みの薄い単語ですが、DNAのように複数の糸がからまって幹をなす鎖を表すようですね。（LLMとツールの暗喩のようです）

いわゆる「組み紐」ですね。ﾀｷｸｩｰﾝ!


# 世はAIエージェントSDK戦国時代！

この分野ではLangChainシリーズのLangGraphがずっと人気ですし、

https://qiita.com/minorun365/items/6ca84b62230519d1d0ef

最近はTypeScriptで書けるMastraも注目です。

https://qiita.com/Syoitu/items/bfcc49e3941e8fefe4da

また、OpenAIやGoogleなどのモデルベンダーもSDKをオープンソース公開する流れになっています。

https://github.com/openai/openai-agents-python

https://github.com/google/adk-python

そこにAWSも参入！というわけです。


# 3秒でAIエージェントが書ける！

ユーザーガイドを見てみましょう。

https://strandsagents.com/0.1.x/

`pip install strands-agents` したら、なんと以下だけでAIエージェントが動きます！

```py: agent.py
from strands import Agent

agent = Agent()
agent("Strandsってどういう意味？")
```

これを実行すると、デフォルトではAWSオレゴンリージョンのAmazon BedrockでClaude 3.7 Sonnetが推論に使われます。

※事前にAWS CLIの認証を通しておく必要があります。


# 実際にAIエージェントを作ってみよう

公式クイックスタートを少しアレンジしたものを使います。

https://strandsagents.com/0.1.x/user-guide/quickstart/

最初にPythonのパッケージマネージャーuvで、プロジェクトディレクトリを作りましょう。

```zsh: ターミナル
brew install uv
uv init strands-agents-handson
```

VS CodeなどのIDEでディレクトリを開き、Pythonの仮想環境を有効化しましょう。

```zsh: ターミナル
cd strands-agents-handson
uv venv
source .venv/bin/activate
```

必要なライブラリを追加します。uvを使えば、pipよりも爆速ですね。

```zsh: ターミナル
uv add strands-agents strands-agents-tools strands-agents-builder
```

事前にAWSアカウントを用意して、オレゴンリージョンでBedrockのClaude Sonnet 3.7を有効化しておきましょう。

また、作業PC上でAWS CLIの認証設定を済ませておき、ターミナルに環境変数（`AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY`）をセットしましょう。

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html

その後、以下のメインコードを作成します。

```py: agent.py
from strands import Agent, tool
from strands_tools import current_time, python_repl

@tool
def letter_counter(word: str, letter: str) -> int:
    return word.lower().count(letter.lower())

agent = Agent(tools=[current_time, python_repl, letter_counter])

message = """
いくつか質問があります。

1. いま日本は何時？
2. その時刻表示の中に「1」はいくつある？
3. ここまで話した内容をPyhtonコードにして。テストしたあとにコード内容を表示して。
"""

agent(message)
```

書けたら実行してみましょう。

```zsh: ターミナル
uv run agent.py
```

結果はやってみてのお楽しみ！


# 話題のMCPにもばっちり対応

Model Context Protocol標準に従って、他の人が作った便利なツールをStrandsから実行してみましょう。

https://strandsagents.com/0.1.x/user-guide/concepts/tools/mcp-tools/

以下のコードを書いてみます。

```py: mcp-agent.py
from strands import Agent
from strands.tools.mcp import MCPClient
from mcp import stdio_client, StdioServerParameters

# ローカルMCPサーバーを定義
stdio_mcp_client = MCPClient(lambda: stdio_client(
    StdioServerParameters(
        command="uvx",
        args=["awslabs.aws-documentation-mcp-server@latest"]
    )
))

# 利用可能なツールを読み込んでエージェントに設定
with stdio_mcp_client:
    agent = Agent(
        tools=stdio_mcp_client.list_tools_sync()
    )
    agent("BedrockのClaude 3.7 SonnetのモデルIDは？")
```

書けたら実行してみましょう。

```zsh: ターミナル
uv run mcp-agent.py
```

結果はやってみてのお楽しみ！
もちろん、Streamable HTTPを含むリモートMCPサーバーの利用にもばっちり対応しています。

AIエージェント構築用のSDKは、グラフ構造が独特なLangGraph以外はどれも使用感が似ていますね。
（かくいうLangGraphも、シンプルなFunctional APIをリリースしています）

AWS ＆ Bedrockユーザーとしては、このStrands Agentsも流行ってほしいところです！


# おまけ

MCPの入門書を出版することになりました！ すでに予約可能です。

https://www.amazon.co.jp/dp/4798075736

![やさしいMCP入門.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633856/06b35473-06d7-4ec7-9fb4-e73f2b7de8fe.png)