Slide 1

Slide 1 text

2025/07/23 デモ実装で考える デモ実装で考える StrandsAgentsのいいところ StrandsAgentsのいいところ

Slide 2

Slide 2 text

Profile 名前: 横町直樹 好きなAWSサービス: AWSLambda X: yoko/@_cityside

Slide 3

Slide 3 text

・StrandsAgents、MCPの概要 ・デモの開発経緯 ・所感 話すこと 話すこと 話さないこと 話さないこと ・StrandsAgents、MCPの詳しい仕様 ・ソースコードの解説 ・AmazonBedrockAgentCore

Slide 4

Slide 4 text

Agenda やりたかったこと 構成図 実装 まとめ デモ StrandsAgentsのいいところ

Slide 5

Slide 5 text

やりたかったこと やりたかったこと →全部いっぺんにやろう!  ついでにあれとかこれもやりたいし…

Slide 6

Slide 6 text

デモの要件 ・CloudTrailのAPIをたたいて  ユーザーの⾏動履歴を調査するエージェント やりたかったこと やりたかったこと

Slide 7

Slide 7 text

例えばこんなとき・・・

Slide 8

Slide 8 text

やばい、なんかやらかして環境壊した とりあえず自分が何やってたか整理しよう

Slide 9

Slide 9 text

こんなときはCloudTrail でもこの手の調査大変だよな

Slide 10

Slide 10 text

なるほど、 君は今日〇時〇分にログインして、 このサービスのこの画面でこの作業してたんちゃう?(AI)

Slide 11

Slide 11 text

作ったもの 作ったもの

Slide 12

Slide 12 text

構成図 構成図 Strands Agents MCP Ser ver 全部CDKでデプロイ

Slide 13

Slide 13 text

MCP? MCP? 2025年上期バズワード 「MCP(ModelContextProtocol)」 アプリがLLMに対してコンテキストを与えるためのプロトコル 外部システムと連携する⽅法を標準化する Web検索したりGitHub操作をしたり、ローカルファイルを操作したり… →LLMが必要なタイミングでツールを実⾏ 標準化でアプリケーションを横断したエコシステムが作りやすくなった

Slide 14

Slide 14 text

MCP:実装 MCP:実装 機能 ・HTTPリクエストを受け付ける ・ツール実⾏のリクエストに応じてCloudTrailのAPIを実⾏して結果を返す ・必要なリソース以外にはアクセスしない

Slide 15

Slide 15 text

MCP:実装 MCP:実装 機能の実現 ・HTTPリクエストを受け付ける →LambdaWebAdapter+FunctionURLs ・ツール実⾏のリクエストに応じてCloudTrailのAPIを実⾏して結果を返す →FastMCP2.0 ・必要なリソース以外にはアクセスしない →IAMRole

Slide 16

Slide 16 text

MCP:実装 MCP:実装 Lambda関数 #FastMCPサーバーの初期化(ステートレスモード) mcp=FastMCP(stateless_http=True,json_response=True) #MCPツールの定義。実質CloudTrailのLookupEventsAPIをラップしただけ @mcp.tool deflookup_cloudtrail_events() #FastAPIアプリケーションを取得 app=mcp.http_app() Dockerfile #CopyAWSLambdaWebAdapter COPY--from=public.ecr.aws/awsguru/aws-lambda-adapter:0.9.1/lambda-adapter/opt/extensions/lambda-adapter

Slide 17

Slide 17 text

from strands import Agent agent = Agent( model=model, tools=tools, system_prompt=system_prompt ) Strands Agents? Strands Agents? オープンソースのエージェント開発フレームワーク 👆これだけでAIエージェントが定義できる

Slide 18

Slide 18 text

モデル駆動 推論・ツール使用 ・応答生成のサイクルを 最先端LLMの性能に委ねるアプローチ 他フレームワークの例:  ・LangGraph→Graph  ・Mastra→Workflow Strands Agents? Strands Agents? プ ロ ンプ ト と ツ ー ル 渡 す か ら 自 分 で 判 断 して タ ス ク して ね !

Slide 19

Slide 19 text

AgenticLoop プロンプト、コンテキスト、使⽤できるツールを渡しながらLLMを呼び出し、 LLMが動的に計画したステップの遂⾏を繰り返すStrandsAgentsのコア機能 StrandsAgents? StrandsAgents? 引⽤元:https://aws.amazon.com/jp/blogs/news/introducing-strands-agents-an-open-source-ai-agents-sdk/

Slide 20

Slide 20 text

StrandsAgents:実装 StrandsAgents:実装 機能 ・チャットベース ・東京リージョンのClaude3.5SonnetV2 ・ユーザーの要求に応じてMCPツールを実⾏

Slide 21

Slide 21 text

StrandsAgents:実装 StrandsAgents:実装 機能の実現 ・チャットベース →Streamlit ・東京リージョンのClaude3.5SonnetV2 ・ユーザーの要求に応じてMCPツールを実⾏ →StrandsAgents

Slide 22

Slide 22 text

StrandsAgents:実装 StrandsAgents:実装 ソースコード(抜粋) #使⽤するモデルの定義 bedrock_model=BedrockModel(  model_id= apac.anthropic.claude-3-5-sonnet-20241022-v2:0 ,  region_name= ap-northeast-1 ,  temperature=0.7,  max_tokens=4000 ) #MCPクライアント、ツールの定義 MCP_URL=os.environ[ MCP_URL ] mcp_client=MCPClient(lambda:streamablehttp_client(MCP_URL)) mcp_tools=mcp_client.list_tools_sync() #エージェントの定義 agent=Agent(  model=bedrock_model,  tools=all_tools,  system_prompt=system_prompt ) #エージェントの応答をストリーミング loop=asyncio.new_event_loop() response=loop.run_until_complete(stream_agent_response(agent,prompt,st.container())) loop.close()

Slide 23

Slide 23 text

StrandsAgents:実装 StrandsAgents:実装 ファイル全部でこれだけ aws-detective-agent/ ├──app/#エージェントアプリ │├──main.py │├──requirements.txt │├──Dockerfile ├──lambda/#MCPサーバー │├──mcpserver/ ││└──main.py │├──Dockerfile │└──pyproject.toml ├──lib/       #CDK │├──config.ts │└──stack.ts ├──bin/        #CDK │└──app.ts └──cdk.json └──package.json

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

MCP:まとめ MCP:まとめ ・CDKによる実装例を作れたのはよかった。モノレポも使いやすい。 ・ProdではMCPサーバーの認証にAPIGatewayやCloudFrontが必要 ・MCPツールのアクセス範囲をIAMロールで定義できるのは体験がいい ・ノンエンジニアでもMCPツールが利⽤しやすい ※ローカルMCPだがLambda⽤MCPサーバーも公開されている  AWSLambdaMCPServer  https://awslabs.github.io/mcp/servers/lambda-tool-mcp-server/

Slide 26

Slide 26 text

・UI実装がStreamlit⼀強  →AG-UIのサポートを期待。⼀応ロードマップにはあり  →TypeScriptのサポートもロードマップにはあるが時期未定  ほかの選択肢  ・Gradio,Dash,Reflex,Chainlit,etc.  →どれも触ったことないのでおススメあれば教えてください!  そして今なら…         でロジック実装、任意の⾔語でUI実装も楽に? StrandsAgents:まとめ StrandsAgents:まとめ

Slide 27

Slide 27 text

・⼿軽  →MastraやLangGraphに⽐べて⼀番お⼿軽。  モデル駆動の影響が⼤きい?  今回の範囲は表層of表層  マルチモーダル、マルチエージェント、AWS統合など、公式ツールも沢⼭ StrandsAgents:まとめ StrandsAgents:まとめ

Slide 28

Slide 28 text

Agent Strands Agentsのいいところ Strands Agentsのいいところ

Slide 29

Slide 29 text

Agent Strands Agents Strands Agents Strands Agentsのいいところ Strands Agentsのいいところ

Slide 30

Slide 30 text

「エージェント実装を簡単にし、  ツールやプロンプト、あるいはRAGやメモリ管理…  即ちコンテキストエンジニアリングに時間をかけられる」  というのはStrandsAgentsの価値かもしれない。 StrandsAgentsのいいところ StrandsAgentsのいいところ 引⽤: https://x.com/JnBrymn/status/1946213071476646172

Slide 31

Slide 31 text

おしまい おしまい 参考 https://strandsagents.com/latest/ https://github.com/jlowin/fastmcp https://github.com/ag-ui-protocol/ag-ui https://github.com/strands-agents/sdk-python https://github.com/awslabs/mcp/blob/main/src/lambda-tool-mcp-server https://aws.amazon.com/jp/blogs/news/introducing-strands-agents-an-open-source-ai-agents-sdk/ https://qiita.com/minorun365/items/dd05a3e4938482ac6055 https://qiita.com/kyuko/items/cb75e8f0a50985ca2030 https://qiita.com/5enxia/items/0dfca327e8f14f0b9d86 https://www.ranthebuilder.cloud/post/mcp-server-on-aws-lambda https://memoribuka-lab.com/?p=4460#google_vignette https://dev.classmethod.jp/articles/aws-lambda-mpc-server/