1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Amazon Bedrock] Inline Agentを使って爆速でエージェントを開発しよう!

Posted at

こんにちは!
今回はBedrockのInline Agentについて、実際に利用する方法をソースコード交えて紹介していきたいと思います!

Bedrock Inline Agentとは

端的に言うと、素早くBedrock Agentsを実装することができる仕組みです。

InvokeInlineAgent API を使用して、実行時にインライン Amazon Bedrock エージェントを動的に設定して呼び出すことができます。インラインエージェントを使用すると、エージェントを呼び出すと同時に、基盤モデル、命令、アクショングループ、ガードレール、ナレッジベースなどのエージェント機能を柔軟に指定できます。エージェント機能を使用する前に事前定義する必要はありません。

Inline Agentを使いたいと思った背景

Bedrock Agentsを開発していると、Action GroupのLambdaの実装を弄る、エージェントのプロンプトを弄るを繰り返します。InlineではないBedrock AgentsだとLambdaの実装を変更するには、再度Lambdaをデプロイしなくてはいけないし、プロンプトを変更したらその度にビルドしなくてはいけません。これが地味に手間で、もう少しスピーディーにエージェントをこねくり回せないかと思っていました。

そこで見つけた機能がInline Agentでした。

自分のローカルでInline Agentを組み込んだプログラムさえ使えば、すぐにAction Groupの中身を変更したり、プロンプトを変更したり、FMモデルを変更したりすることができます。めちゃくちゃ快適になりました。

Bedrock Inline Agentをもう少し詳しく

2025年05月現在、GAされていません。

インラインエージェント機能の設定と呼び出しは、Amazon Bedrock のプレビューリリースであり、変更される可能性があります。

マネージメントコンソールからは利用不可です。

Action GroupをLambdaで作る必要がありません。

ちなみに、Inline AgentからだとMCP対応できたりします。
https://aws.amazon.com/jp/blogs/machine-learning/harness-the-power-of-mcp-servers-with-amazon-bedrock-agents/
(aws-samplesで提供しているInlineAgent SDKがラップされることにより、MCPクライアント機能を具備しています)

試してみる

pythonでinline agentを呼び出してみます。

Inline Agentですが、どうやら現状は専用のSDKなどはなく、boto3から呼び出すしかできないようです。

実装に関しては@moritalousさんのこちらの記事を大いに参考にさせていただきました!

(記事内のinvoke関数を個人で実装するのは骨が折れるので、この辺もSDKなどが出てきて簡単に実装できるようになると嬉しいですね)

ソースコードはGithubにて保存しています。
https://github.com/kskmats/bedrock-inline-agent-sample

エージェントの基底クラス(BaseAgent)をインライン呼び出しを用いるように実装します。
https://github.com/kskmats/bedrock-inline-agent-sample/blob/main/src/bedrock.py

アクショングループ用の簡単な関数も作成します。
https://github.com/kskmats/bedrock-inline-agent-sample/blob/main/src/utils.py

from datetime import datetime

def get_current_date():
    """
    get current date

    Returns:
        str: current date
    """
    return datetime.now().strftime("%Y-%m-%d")

BaseAgentを継承してSampleAgentクラスを定義します。

class SampleAgent(BaseAgent):
    """サンプルエージェント"""

    def __init__(self, foundation_model="anthropic.claude-3-sonnet-20240229-v1:0"):
        """
        SampleAgentのコンストラクタ

        Args:
            foundation_model: 使用する基盤モデル名
        """
        super().__init__(foundation_model)
        from utils import get_current_date
        self.action_groups = [get_current_date]

        self.instruction = """
        あなたは日常会話をするエージェントです。
        ユーザーからの入力に対して、適切な回答をしてください。

        本日の日付を取得する場合は、「get_current_date」を使用してください。
        """

あとはこのSampleAgentクラスを呼び出せるようにします。
https://github.com/kskmats/bedrock-inline-agent-sample/blob/main/src/call_sample_agent.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from bedrock import SampleAgent
def main():
    sample_agent = SampleAgent()
    print(sample_agent.invoke("本日の日付を教えてください!"))


if __name__ == "__main__":
    main()

ではこのcall_sample_agent.pyを実行してみます(dockerで実行するようにしています)。
※AWS Access Key / Secret Access Keyを.envに登録する必要があります。詳細はREADMEをご参照ください。

❯ docker build -t python-sample .

❯ docker run python-sample call_sample_agent.py
本日の日付は2025年5月17日です。

(日付なんてアクショングループなくても取れると思うかもしれませんが、LLMは現在時刻を取得する手段をデフォルトだと持っていません。Bedrock Agentsを利用する場合はCode Interpreterを利用することが多いですが、今回はアクショングループとして現在時刻を取得する手段を設けました)

最後に

このようにBaseAgentクラスさえ用意してしまえば、スピーディーにエージェントを実装することができます!
ただまだInline AgentはGAしていないので、本番ワークロードで利用というよりは検証/開発という用途なのかなと思います。

ぜひお試しください!

なんか出てきた。。

このブログを書き終わったあと、Strandsというエージェント構築SDKがAWSからリリースされました。。
まだちゃんと見てないですが、AIエージェント構築を簡単に実装できるようなSDKのようです。

「あれ、Inline Agentってお役御免になるの?」と心配してますが、ひとまずこのブログは公開します!
Strandsは今から調査します。。。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?