こんにちは!
今回は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は今から調査します。。。