メインコンテンツへスキップ
見出し画像
Photo byteruki1

AIエージェントを構築するStrands Agents SDKを使ってMCPホストを動かす

    はじめに

    AWSが2025年5月16日に発表したStrands Agents SDKを使ってMCPホストアプリケーションを動かしてみました。元ネタは、みのるんさんのこの記事です。

    この記事にあるGitHubのコードをもとにちょっといじってみたので、その感触を紹介します。

    Strands Agents SDKとは

    Strands Agents SDKとは、数行のコードでAIエージェントの実装を実現するSDKです。AWSブログに以下のように紹介されています。

    Strands Agents は、わずか数行のコードで AI エージェントを構築・実行するモデル駆動型アプローチを採用したオープンソース SDK です。Strands は、シンプルなエージェントのユースケースから複雑なものまで、そしてローカル開発から本番環境でのデプロイまで対応します。

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

    「わずか数行」とあるとおり、4行で質問に答えるAIエージェントが実装できました。

    from strands import Agent
    from strands.models import BedrockModel
    
    agent = Agent(BedrockModel())
    agent("こんにちは。あなたは誰ですか?")
    $ python ./sample.py
    
    こんにちは!私はAIアシスタントです。質問に答えたり、情報提供をしたり、会話をしたりするためにここにいます。何かお手伝いできることはありますか?

    モデル名やリージョンを指定していませんが、省略するとus-west-2 の Anthropic Claude 3.7 Sonnetを実行するようです。省略せずに書くと、このような感じでしょうか。

    from strands import Agent
    from strands.models import BedrockModel
    
    bedrock_model = BedrockModel(
        model_id="us.anthropic.claude-3-7-sonnet-20250219-v1:0",
        region_name='us-west-2',
    )
    
    agent = Agent(model=bedrock_model)
    
    agent = Agent(BedrockModel())
    agent("こんにちは。あなたは誰ですか?")

    動かしてみる

    元記事との違いは、使用するAWSリージョンと通知先のSlackチャンネル名を入力する欄、AWSやSlackの認証情報に関する環境情報のチェックがある点です。
    Slack MCPサーバーを設定していて、AIエージェントは回答を生成したのちに指定したSlackチャンネルに送信、回答を画面に出力します。

    画像
    MCPホストでAWS Documentation MCPサーバーを実行したところ。

    以下のようなシステムプロンプトを設定することで、出力フォーマットを整形しています。

    NAMING_SYSTEM_PROMPT = """
    あなたはユーザーの質問を理解し、最適なMCPサーバーを選択して回答するアシスタントです。
    
    最適なMCPサーバーを選択し、それが提供するツールをひとつもしくは複数利用して、情報を収集してください。
    情報を収集後、情報を適切な粒度に整理し、Markdown形式で回答を作成してください。
    適切な粒度とは、見出しや段落、箇条書き、コードブロックなどを使って情報の概要がおおよそ理解できる程度であることを示します。
    詳細な情報が引用元のURLに記載されていることを示すため、回答の末尾に引用元のURLを記載してください。回答および引用元のURLは以下のフォーマットに従います。
    
    <回答のフォーマット>
    # 見出し
    ## 見出し
    ### 見出し
    - 箇条書き
    - 箇条書き
    - 箇条書き\
    ## 参考情報
    - [引用元のURL](https://example.com)
    - [引用元のURL](https://example.com)
    </回答のフォーマット>
    
    回答内容は、画面に出力するとともにユーザーが指定するSlackチャンネルにも同じ内容をポストしてください。これは、ユーザーが回答内容を確認するために訳に立ちます。
    ユーザーが入力したチャンネル名をもとに、Slack MCPサーバーが提供するSlackのチャンネル一覧を取得するツール(slack_list_channels)を利用してchannel_idを取得してください。
    もし、Slackチャンネル名が空の場合は、Slackへの投稿は行わないでください。
    
    アシスタントのキャラクター:
    - 質問に対する情報の検索や回答の整理に全力で取り組む。
    - 絵文字: ほどほどに使う。
    """

    その結果、以下のように整った出力を得ることができました。

    画像
    システムプロンプトで出力フォーマットを指定した結果

    まとめ

    Strands Agents SDKを使って複数のMCPサーバーの連携やAIエージェントの呼び出し、プロンプトによる制御が簡単に実装できました。複数のMCPサーバーを組み合わせることで、様々なAIエージェントを容易に構築できそうです。
    ここで紹介した内容は、コードや構築方法をQiitaに掲載する予定です。


    あなたへのおすすめ