チュートリアル

TwelveLabsとStrands Agentを活用し、AWS AgentCore上でエンタープライズ向けビデオ分析エージェントを構築する

ネイサン・チェ

このチュートリアルでは、AWS AgentCoreとStrands Agentを使用して、Twelve LabsのPegasusモデルとMarengoモデルを組み合わせた、ビデオ検索および分析を行うエンタープライズ向けビデオ分析エージェントの構築方法を解説します。このエージェントはSlackと連携し、CloudWatchによるオブザーバビリティを備えたクロスプラットフォームのElectronJSデスクトップアプリケーションとしてデプロイされます。

このチュートリアルでは、AWS AgentCoreとStrands Agentを使用して、Twelve LabsのPegasusモデルとMarengoモデルを組み合わせた、ビデオ検索および分析を行うエンタープライズ向けビデオ分析エージェントの構築方法を解説します。このエージェントはSlackと連携し、CloudWatchによるオブザーバビリティを備えたクロスプラットフォームのElectronJSデスクトップアプリケーションとしてデプロイされます。

この記事の内容

No headings found on page

ニュースレターに登録する

ニュースレターに登録する

ビデオ理解に関する最新の技術進歩、チュートリアル、業界の動向をお届けします

ビデオ理解に関する最新の技術進歩、チュートリアル、業界の動向をお届けします

AIを活用してビデオを検索、分析、探索します。

2025/12/28

15分

記事へのリンクをコピー

u306fu3058u3081u306bu3011

Zoomu3067u306eu30a8u30f3u30b8u30cbu30a2u306eu65e5u6b21u30b9u30bfu30f3u30c2u30a2u30c3u30d7u304bu3089u3001u6221u7528u6245u5f53u8005u306e1u65e5u306b5u56deu8c03u3059u308bu5019u88dcu8005u306eu9762u63a5u307eu3067u3001u50cdu304fu30d7u30edu30d5u30a7u30c3u30b7u30e7u30cau30ebu306au3089u3060u308cu3082u3001u65e5u5e38u696du52d9u306bu304au3044u3066u4f1au8b70u304cu3044u304bu306bu983bu7e41u3067u91cdu8981u304bu3092u77e5u3063u3066u3044u307eu3059u3002Zoom u306eu3088u3046u306au4e3bu8981u306au4f1au8b70u30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0u306bu3088u308bu3068u3001u5e73u5747u7684u306au5f93u696du54e1u306fu5e74u9593u3067u304au3088u305d 392u6642u9593u3092u4f1au8b70u306bu8cbbu3084u3057u3066u3044u307eu3059u3002u3053u308cu3089u306eu4f1au8b70u306eu30d3u30c7u30aau30a2u30fcu30abu30a4u30d6u3001u30e1u30e2u3001u305du3057u3066u5fd8u308cu304cu3061u306a ToDo u30eau30b9u30c8u304cu5927u91cfu306bu3042u308bu305fu3081u3001u5f93u696du54e1u3084u4f01u696du306fu3001u4f1au8b70u5f8cu306eu975eu751fu7523u7684u306au4efbu52d9u3084u30d3u30c7u30aau306eu65e5u5e38u306bu808cu305au6ed1u3089u3055u308cu306au304cu3089u3055u308cu3066u3044u307eu3059u3002

u3082u30571000u6642u9593u4ee5u4e0au306eu30d3u30c7u30aau30b3u30f3u30c6u30f3u30c4u304bu3089u7279u5b9au306eu77acu9593u3092u7c21u5358u306bu691cu7d22u3057u3001u4f1au8b70u30fbu30b3u30f3u30c6u30f3u30c4u306eu30d1u30fcu30bdu30cau30e9u30a4u30bau3055u308cu305fu56deu7b54 u3092u898bu3064u3051u308bu65b9u6cd5u304cu3042u3063u305fu3089u3069u3046u3067u3057u30e7u30a6uff1f u3055u3089u306bu305du308cu3060u3051u3067u306au304fu3001u3053u308cu3089u306eu6d1eu5bdfu3092 Slack u306eu3088u3046u306au4ebau6c17u306eu3042u308bu30b3u30dfu30e5u30cbu30b1u30fcu30b7u30e7u30f3u30d7u30e1u30fcu30d5u30a9u30fcu30e0u3092u4ecbu3057u3066u3001u4f01u696du5168u4f53u306bu3059u3050u306bu63d0u4f9bu3067u304du308bu3068u3057u305fu3089u3069u3046u3067u3057u30e7u30a6u304buff1f

TwelveLabs u3068 AWS Strands Agent u306eu6700u65b0u306eu7d71u5408u306eu304au304bu3052u3067u3001u3053u308cu306fu3082u306fu3084u5922u3067u306fu3042u308au307eu305bu3093u3002 u5b9fu969bu306bu3001u4ecau65e5u306eu30c1u30e5u30fcu30c8u30eau30a2u30ebu3067u306f AWS AgentCoreu3001TwelveLabsu3001u304au3088u3073 ElectronJS u3092u4f7fu7528u3057u3066u3053u306eu6a5fu80fdu3092u4e00u304bu3089u69cbu7bc9u3057u3066u3044u304du307eu3059u3002


u30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306eu30c7u30e2

u30b3u30fcu30c7u30a3u30f3u30b0u3092u59cbu3081u308bu524du306bu3001u69cbu7bc9u3059u308bu30a2u30d7u30eau3092u7c21u5358u306bu30d7u30ecu30d3u30e5u30fcu3057u3066u307fu307eu3057u30e7u30a6u3002

u3054u81eau8eabu306e MacOS u307eu305fu306f Windows u30c7u30d0u30a5u30b9u3067u304au8a66u3057u306bu306au308au305fu3044u5834u5408u306fu3001u6700u65b0u306eu30eau30eau30fcu30b9u3092u30c0u30a6u30f3u30edu30fcu30c9u3059u308bu304bu3001u4ee5u4e0bu306eu30b3u30fcu30c9u30d9u30fcu30b9u3092u30d7u30ecu30d3u30e5u30fcu3057u3066u304fu3060u3055u3044u3002

u4f5cu6210u3059u308bu3082u306eu304cu5206u304bu3063u305fu3068u3053u308du3067u3001u3055u3063u305du304fu4f5cu6210u306bu53d6u308au639bu304bu308au307eu3059u263aufe0f!


u5b66u7fd2u76eeu6a19

u3053u306eu30c1u30e5u30fcu30c8u30eau30a2u30ebu3067u306fu4ee5u4e0bu3092u884cu3044u307eu3059u3002

  • AWS AgentCore u306bu30d7u30edu30c0u30afu30b7u30e7u30f3u5229u7528u306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3092u30c7u30d7u30edu30a4u3057u3001AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u5185u306e Bedrocku3001OpenAIu3001Ollama u306au3069u306eu3055u307eu3056u307eu306a LLM u30d7u30edu30d0u30a4u30c0u30fcu3092u6d3bu7528u3059u308bu3002

  • Strands Tools u4ee5u5916u306eu5916u90e8u30b5u30fcu30d3u30b3u3068u3082u4ea4u4fe1u3067u304du308bu3088u3046u306bu3001u30abu30b9u30bfu30e0u30c4u30fcu30ebu3092u958bu767au3059u308bu3002

  • u4e8bu524du306bu7d44u307fu8fbcu307eu308cu305fu30c4u30fcu30ebu3092u4f7fu3063u3066u3001u5916u90e8u306e Slack u3084 TwelveLabs u3092 AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu7d71u5408u3059u308bu3002

  • AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u3068 CloudWatch u306eu3085u306au30b5u30fcu30d3u30b3u3092u5229u7528u3057u3001AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu89b3u6e2cu53efu80fdu6027u3092u8ffdu52a0u3057u3001u7cbeu78bau306au30b3u30b9u30c8u898bu7c4du308au3084u30c7u30d0u30c3u30b0 u30edu30b0u3092u5f97u3089u308cu308bu3088u3046u306bu3059u308bu3002 

  • ElectronJS u3092u4f7fu7528u3057u3066u3001u81eau8eabu306eu30afu30edu30b9u30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0 Desktop u30a2u30d7u30eau200bu3092u30b3u30f3u30d1u30a4u30ebu3059u308bu3002


u524du63d0u6761u4ef6


Strands Agent u3067u30a8u30fcu30b8u30a7u30f3u30c8u3092u69cbu7bc9u3059u308b

Slackbot u3084 TwelveLab u306eu30d3u30c7u30aa u30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9 u30e2u30c7u30eb u306eu3088u3046u306au6a5fu80fdu3092u7d71u5408u3059u308bu524du306bu3001AI u30a8u30fcu30b8u30a7u30f3u30c8 u306bu3042u308bu6839u5e95u306eu30e1u30abu30cbu30bau30e0u3092u7406u89e3u3059u308bu3053u3068u304cu91cdu8981u3067u3059u3002 Strands Agent u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3 u306bu3088u308bu306tu3001AI u30a8u30fcu30b8u30a7u30f3u30c8 u306fu4e3bu306bu8ffdu52a0u306eu30aau30fcu30b1u30b9u30c8u30ecu30fcu30b7u30e7u30f3 u30ecu30a4u30e4u30fcu3092u5099u3048u305f LLM u3067u3059u3002 u3053u306eu30aau30fcu30b1u30b9u30c8u30ecu30fcu30b7u30e7u30f3 u30ecu30a4u30e4u30fcu306bu3088u308au3001LLM u306fu60c5u5831u691cu7d22u3001u30c7u30fcu30bfu30d9u30fcu30b9u7167u4f1au3001u30b3u30fcu30c9u5b9fu884cu306au3069u3001u3055u307eu3056u307eu306au7406u7531u3067u884cu52d5u3092u8d77u3053u3059u3053u3068u304cu3067u304du307eu3059u3002

ud83dudca1 u3053u306eu30aau30fcu30b1u30b9u30c8u30ecu30fcu30b7u30e7u30f3 u30ecu30a4u30e4u30fcu5168u4f53u306fu3001u30a8u30fcu30b8u30a7u30f3u30c8 u30ebu30fcu30d7 (Agent Loop) u3068u3057u3066u77e5u3089u308cu3066u3044u307eu3059u3002

u56f31: AWS Strands u304bu3089u306eu30a8u30fcu30b8u30a7u30f3u30c8 u30ebu30fcu30d7u306eu5185u5bb9

ud83dudca1 u30c4u30fcu30eb (Tool): u5165u529bu3068u30b3u30f3u30c6u30adu30b9u30c8u306bu57fau3065u3044u3066u3001u63a8u8ad6 LLM u304cu7279u5b9au306eu30a2u30afu30b7u30e7u30f3u306bu30a2u30afu30bbu30b9u3055u305bu308bu3088u3046u306bu30d5u30a9u30fcu30deu30c3u30c8u3055u308cu305fu3001u76f4u63a5u95a2u6570u547cu3073u51fau3057u307eu305fu306f APIu3002

u4e0au306eu56f3u3067u306fu3001u4e2du592eu306bu3001u30c4u30fcu30ebu5b9fu884cu3001u30c4u30fcu30ebu9078u629eu3001u304au308fu3073u63a8u8ad6 (LLM) u3092u542bu3080u8ffdu52a0u306eu30dcu30c3u30afu30b9u304cu3042u308bu306eu304cu898bu3048u307eu3059u3002 u3053u308cu3089u306eu30b9u30c6u30c3u30d7u306fu3001u3059u3079u3066u6700u3082u91cdu8981u306au76eeu7684u3092u679cu305fu3057u3066u3044u307eu3059u3002

  1. u63a8u8ad6 (LLM) u2014 u4e0eu3048u3089u308cu305fu5165u529bu306bu5bfeu3057u3066u3001u6b63u3057u3044u30c4u30fcu30ebu3001u307eu305fu306fu30cbu30fcu30c9u306bu5d50u3058u305fu30c4u30fcu30ebu306eu547cu3073u51fau3057u304cu5fc5u8981u304bu3069u3046u304bu3092u8131u51fau3057u307eu3059u3002

  2. u30c4u30fcu30ebu9078u629e u2014 u30a8u30fcu30b8u30a7u30f3u30c8u306eu8a2du5b9au306bu57fau3065u3044u3066u3001u8981u6c42u3055u308cu305fu30c4u30fcu30ebu3092u691cu7d22u3057u307eu3059u3002

  3. u30c4u30fcu30ebu5b9fu884c u2014 u30c4u30fcu30ebu3092u5b9fu884cu3057u3001u7d50u679cu3092u63a8u8ad6 LLM u306bu623bu3057u3066u6b21u306eu30b9u30c6u30c3u30d7u3092u8131u51fau3057u307eu3059u3002 

u3053u306eu3088u3046u306au30d5u30ecu30fcu30e0u30efu30fcu30afu3092u69cbu7bc9u3059u308bu306eu306fu3069u306eu304fu3089u3044u96e3u3057u3044u306eu304bu3068u601du308fu308cu308bu304bu3082u3057u308cu307eu305bu3093u3002 u63a8u8ad6 LLM u304cu30c4u30fcu30ebu3092u8a8du8b58u3057u3001u3055u3089u306bu30aau30f3u30c7u30deu30f3u30c9u3067u30c4u30fcu30ebu3092u547cu3073u51fau3059u306bu306fu3069u3046u3059u308cu307eu3088u3044u306eu3067u3057u30e7u30a6u304buff1f LLM u304cu89e3u91c8u3059u308bu305fu3081u306bu3001u3069u306eu3088u3046u306bu30c4u30fcu30ebu3092u9069u5207u306bu8aacu660eu3057u3066u610fu5473u3092u4e0eu3048u3089u308cu308bu306eu3067u3057u30e7u30a6u304buff1f u3053u308cu3089u306fu3059u3079u3066u96e3u3057u304fu8907u96d1u306au5c0fu30c6u30fcu30deu3067u3059u304cu3001u5e78u3044u306bu3082 AWS Strands Agent u304cu3059u3067u306bu4f5cu3063u3066u304fu308cu3066u3044u307eu3059u3002 

u3053u3053u3067u500bu3005u306eu698bu5ff5u3092u3059u3079u3066u8aacu660eu3059u308bu306eu306fu3053u306eu30d6u30edu30b0u306eu7bc4u56f2u5916u3067u3059u304cu3001Strands Agent u306eu30b3u30fcu30c9u30d9u30fcu30b9 (https://github.com/strands-agents) u3092u901au3058u3066u3001u3053u308cu3089u306eu8907u96d1u306au30e1u30abu30cbu30bau30e0u3092u6df1u304fu5b66u3076u3053u3068u3092u5f37u304fu304au52e7u3081u3057u307eu3059u3002 

u3053u306eu30d5u30ecu30fcu30e0u30efu30fcu30afu3092u4f7fu3046u3068u3001u30a8u30fcu30b8u30a7u30f3u30c8u306eu4f5cu6210u306fu4ee5u4e0bu306eu6570u884cu3067u6e08u307fu307eu3059u3002

from bedrock_agentcore.runtime import BedrockAgentCoreApp
from strands import Agent


app = BedrockAgentCoreApp()
agent = Agent()


@app.entrypoint
def invoke(payload):
    """Process user input and return a response"""
    user_message = payload.get("prompt", "Hello")
    result = agent(user_message)
    return {"result": result.message}


if __name__ == "__main__":
    app.run()

u3053u308cu3089u306eu30b8u30f3u30d7u30ebu306au6570u884cu3067u3001AI u30a8u30fcu30b8u30a7u30f3u30c8 u304cu4f5cu6210u3067u304du307eu3057u305fuff01 u305fu3060u3057u3001u307eu3060u30c4u30fcu30ebu3092u30d7u30edu30d3u30b8u30e7u30cbu30f3u30b0u3057u3066u3044u306au3044u305fu3081u3001u6a19u6e96u7684u306a LLM u306eu3088u3046u306bu52d5u4f5cu3057u3001u8ceau554f u3068 u56deu7b54 u306eu30bfu30b9u30afu306eu307fu3092u51e6u7406u3057u307eu3059u3002


TwelveLabs u3092 Strands Agent u306eu8ffdu52a0

u3059u3070u3089u3057u3044u3001u3053u308cu3067u5165u529bu3068u30b3u30f3u30c6u30adu30b9u30c8u304bu3089u8ceau554fu306bu7b54u3048u308bu3053u3068u306bu305fu3051u305f AI u30a8u30fcu30b8u30a7u30f3u30c8u304fu30d5u30ebu3067u52d5u4f5cu3059u308bu3088u3046u306bu306au308au307eu3057u305fu3002 u305fu3060u3057u3001u66f4u306bu30c6u30b9u30c8u3092u9032u3081u308bu3068u3001u3044u304fu3064u304bu306eu5236u9650u304cu898bu3064u304bu308au307eu3059uff1a

  1. u30d3u30c7u30aa u30c7u30fcu30bfu3001u307eu305fu306fu6587u5b57u5217u4ee5u5916u306eu30c7u30fcu30bf u30d5u30a9u30fcu30deu30c3u30c8u3092u9069u5207u306bu51e6u7406u3067u304du306au3044u3002

  2. u8ceau554fu3068u56deu7b54u306eu30bfu30b9u30afu306bu9650u5b9au3055u308cu3066u3044u3002

  3. u63a8u8ad6 LLM u304cu3069u306eu3085u306bu8003u3048u3001u3069u306eu3088u3046u306bu6c7au5b9au3059u308bu304bu306eu89b3u6e2cu53efu80fdu6027u304cu4e0du8db3u3057u3066u304au308au3001u30d7u30edu30c0u30afu30b7u30e7u30f3u306bu304au3051u308b AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu30c7u30d0u30c3u30b0u304cu304au305du307eu3064u306bu306au308au307eu3059 ( u5b9fu969bu306bu4f55u304cu8d77u3053u3063u3066u3044u308bu306eu304bu5206u304bu308au307eu305bu3093 ud83dude32)

AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu6a5fu80fdu3092u62e1u5f35u3059u308bu305fu3081u306bu3001u30b3u30fcu30c9u306bu30c4u30fcu30ebu3092u5c0eu5165u3059u308bu5fc5u8981u304cu3042u308au307eu3059uff01 u524du8ff0u306eu3068u304au308au3001u30c4u30fcu30ebu306f LLM u304cu76f4u63a5u30a2u30afu30bbu30b9u3067u304du308bu76f4u63a5u5f15u6570u307eu305fu306f API u547cu3073u51fau3057u306bu306au308bu5012u5411u304cu3042u308au307eu3059u3002 Strands Agent u3067u306fu3001u3053u308cu3089u306f2u3064u306eu65b9u6cd5u3067 AI u30a8u30fcu30b8u30a7u30f3u30c8 u306bu63d0u4f9bu3067u304du307eu3059uff1a


1 - strands_tools Python u30d1u30c3u30b1u30fcu30b8u304cu63d0u4f9bu3059u308bu30c7u30d5u30a2u30ebu30c8u30c4u30fcu30ebuff1a

u56f32: Strands Agent Tools u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3

Strands Agent u306fu3001AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu8ffdu52a0u3067u304du308bu30c7u30d5u30a2u30ebu30c8u306eu30c4u30fcu30ebu3092 20+ u4ee5u4e0au63d0u4f9bu3057u3066u3044u307eu3059u3002 u3053u308cu3089u306eu30c4u30fcu30ebu306fu3001u30b7u30a7u30ebu3067u306eu30b8u30f3u30d7u30ebu306au30d5u30a1u30a4u30ebu64cdu4f5cu304bu3089u3001Slacku3001TwelveLabsu3001AWS u3078u306eu76f4u63a5u306eu30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0u7d71u5408u307eu3067u591au5c90u306bu308fu305fu308au307eu3059u3002

u3053u306eu30d7u30edu30b8u30a7u30afu30c8u3067u306fu3001u4ee5u4e0bu306eu30c4u30fcu30ebu3092u4f7fu7528u3057u307eu3059uff1a

  1. TwelveLabs u2014 Pegasus u3068u65b0u3057u3044 Marengo 3.0 u30e2u30c7u30eb u306bu3088u308bu30d9u30fcu30b9u306eu30d3u30c7u30aau30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9u3092u63d0u4f9bu3057u307eu3059u3002

  2. Slack u2014 SlackBot u3067u4f01u696du3068u76f4u63a5u4ea4u4fe1u3067u304du308bu3088u3046u306bu3057u307eu3059u3002

    1. u6ce8: u8a8du8a3cu60c5u5831u306f Slack u30dcu30c3u30c8 u3068 Slack App u30c8u30fcu30afu30f3 u3092u4ecbu3057u3066u63d0u4f9bu3059u308bu5df1u5fc5u8981u304cu3042u308au307eu3059u3002

  3. Environment u2014 u74b0u5883u5909u6570u3092u8a2du5b9au3059u308bu30b8u30f3u30d7u30ebu306eu30c4u30fcu30ebu3001AgentCore u30bbu30c3u30b7u30e7u30f3u51e6u7406u306eu59d4u30cdu306bu306au308au307eu3059u3002

u3053u308cu3089u306eu30c4u30fcu30ebu306eu8ffdu52a0u306fu3001u30a8u30fcu30b8u30a7u30f3u30c8u306eu4f5cu6210u3068u540cu69d8u306bu3001u6570u884cu306eu30b3u30fcu30c9u3067u7c21u5358u306bu884cu3048u307eu3059uff1a

from strands import Agent
from strands_tools import calculator, file_read, shell


# Add tools to our agent
agent = Agent(
    tools=[calculator, file_read, shell]
)


# Agent will automatically determine when to use the calculator tool
agent("What is 42 ^ 9")


print("\n\n")  # Print new lines


# Agent will use the shell and file reader tool when appropriate
agent("Show me the contents of a single file in this directory")

u4e0au306eu30b3u30fcu30c9 u30b9u30cbu30dau30c3u30c8u3067u304au6c17u3065u304du306eu3068u304au308au3001u5358u306b strands_tools u3092u4f7fu7528u3057u3066u5fc5u8981u306au30c4u30fcu30ebu3092u30a4u30f3u30ddu30fcu30c8u3057u3001u3053u308cu3089u306eu30c4u30fcu30ebu3092 Agent() u5185u306eu8ffdu52a0u30d1u30e9u30e1u30fcu30bfu30fcu3068u3057u3066u30d7u30e9u30b0u30a4u30f3u3059u308bu3060u3051u3067u3059u3002 u3053u308cu3060u3051u3067u3001u30a8u30fcu30b8u30a7u30f3u30c8 u306eu6a5fu80fdu304cu518du3073u62e1u5f35u3055u308cu3001u30a2u30afu30b7u30e7u30f3 u200bu3092u8d77u3053u3059u3053u3068u304cu3067u304du308bu3088u3046u306bu306au308au307eu3059uff01 u4e0au8a18u3067u8aacu660eu3057u305f u30a8u30fcu30b8u30a7u30f3u30c8 u30ebu30fcu30d7 u5168u4f53u304cu30d0u30c3u30afu30b0u30e9u30a6u30f3u30c9u3067u5b9fu884cu3055u308cu307eu3059u304fu3001u5fc5u8981u306bu5f5cu3058u3066u96fbu5353u3001u30d5u30a1u30a4u30ebu30aau30fcu30d7u30f3u3001u30cau30a7u30eb u306eu30c4u30fcu30eb u3092u547cu3073u51fau3059u3053u3068u304cu3067u304du308bu3088u3046u306bu306au308au307eu3059uff01


2 - Strands Agent u3092u4f7fu3063u3066 Python u3067u69cbu7bc9u3055u308cu305fu30abu30b9u30bfu30e0u30c4u30fcu30ebuff1a

u30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306bu30abu30b9u30bfu30e0 u30c4u30fcu30eb u3092u4f5cu6210u3059u308bu5fc5u8981u306fu3042u308au307eu305bu3093u304cu3001Strands Agent u306fu3001u5168u4f53u306eu95a2u6570u306eu307fu306au3089u305au3001u9069u5207u306bu53c2u7167u3067u304du308bu3088u3046u306bu95a2u6570u306bu95a2u9023u4ed8u3051u3089u308cu305fu30e1u30bfu30c7u30fcu30bf u3092u5b9au7fa9u3059u308bu3053u3068u3067u3001u30abu30b9u30bfu30e0 u30c4u30fcu30eb u3092u4f5cu6210u3059u308bu305fu3081u306eu4fbfu5229u306au30d5u30ecu30fcu30e0u30efu30fcu30af u3092u63d0u4f9bu3057u3066u3044u307eu3059u3002

from strands import tool


@tool
def weather_forecast(city: str, days: int = 3) -> str:
    """Get weather forecast for a city.


    Args:
        city: The name of the city
        days: Number of days for the forecast
    """
    return f"Weather forecast for {city} for the next {days} days..."

u4e0au306eu30b3u30fcu30c9 u30b9u30cbu30dau30c3u30c8u306b u3042u308bu3088u3046u306bu3001u95a2u6570u306eu4e0au306b @tool u30c7u30b3u30ecu30fcu30bfu30fcu3092u8ffdu52a0u3059u308bu3053u3068u3067uff0cu65e2u5b58u306eu95a2u6570u304bu3089u30c4u30fcu30ebu3092u4f5cu6210u3067u304du307eu3059u3002 docstring u306fu3001u30c4u30fcu30eb u63a8u8ad6u3067u63a8u8ad6 LLM u304cu89e3u91c8u3059u308bu30e1u30bfu30c7u30fcu30bfu3068u3057u3066u4f7fu7528u3055u308cu307eu3059u3002

u3053u308cu30892u3064u306eu30e1u30bdu30c3u30c9u3092u982du306bu5165u308cu3066u3001u81eau8eabu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu4ee5u4e0bu306eu30c4u30fcu30ebu3092u5b9fu88c5u3057u3066u307fu307eu3057u30e7u30a6uff01

import json
import os
import asyncio
from dotenv import load_dotenv


load_dotenv()


from bedrock_agentcore.runtime import BedrockAgentCoreApp
from strands import Agent
from strands_tools import environment
from custom_tools import chat_video, search_video, get_slack_channel_ids, get_video_index, slack, fetch_video_url


os.environ["BYPASS_TOOL_CONSENT"] = "true"
os.environ["STRANDS_SLACK_AUTO_REPLY"] = "true"
os.environ["STRANDS_SLACK_LISTEN_ONLY_TAG"] = ""


def get_tools():
    return [slack, environment, chat_video, search_video, get_slack_channel_ids, get_video_index, fetch_video_url]


app = BedrockAgentCoreApp()
agent = Agent(
    tools=get_tools()
)


# Track if socket mode has been started to avoid multiple starts
_socket_mode_started = False


@app.entrypoint
async def invoke(payload):
    """
    Process system request directly and ONLY from Electron app.
    """
    global _socket_mode_started


    system_message = payload.get("prompt")
   
    # Process the agent stream (independent of socket mode)
    stream = agent.stream_async(system_message)


    async for event in stream:
        if "data" in event:
            yield event['data']
   
if __name__ == '__main__':
    app.run()

u4e0au306eu30b3u30fcu30c9 u30b9u30cbu30dau30c3u30c8u3067u306fu3001u7279u306b strands_tools u304bu308bu30c4u30fcu30eb u3092u30edu30fcu30c9u3057u307eu3057u305fuff1a

  1. TwelveLabs: chat_video, search_video

  2. Slack: slack, get_slack_channel_ids

ud83dudca1u3053u308cu308au306eu30c4u30fcu30ebu306fu305du308cu305eu308cu306eu30c1u30fcu30e0u304bu3089u306eu516cu5f0fu306eu7d71u5408u3067u3059u304au3001AI u30a8u30fcu30b8u30a7u30f3u30c8u5411u3051u306eu30d7u30edu30c0u30afu30b7u30e7u30f3 u30ecu30d9u30ebu306eu30c4u30fcu30ebu304cu3069u306eu3088u3046u306bu66f8u304bu308cu3066u3044u308bu304bu3092u898bu308bu306bu306fu3001Strands Tools u30eau30ddu30b8u30c8u30ea u3092u3055u3089u306bu6df1u304fu30c0u30a4u30d6u3059u308bu3053u3068u3092u5f37u304fu304au52e7u3081u3057u307eu3059uff01

u3055u3089u306bu91cdu8981u306au306eu306fu3001TwelveLabs u3078u306eu6700u65b0u306eu7d71u5408u306eu304au304bu3052u3067u3001u30d3u30c7u30aa u30c7u30fcu30bfu3068u30a4u30f3u30bfu30e9u30afu30c8u3059u308bu30d7u30edu30c0u30afu30b7u30e7u30f3 u30ecu30d9u30ebu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3092 1u884cu306eu30b3u30fcu30c9u306bu30c7u30d0u30c3u30b0u3067u304du308bu3088u3046u306bu306au308au307eu3057u305fu3002 u8eabu8fd1u306au7d71u5408u306bu95a2u3059u308bu8a73u7d30u306fu3001u3053u306eu30d6u30edu30b0u306bu3042u308au307eu3059u3002


AWS AgentCore u306bu30c7u30d7u30edu30a4u3059u308b

u3053u308cu3067u30edu30fcu30abu30eb u30deu30b7u30f3u3067u52d5u4f5cu3059u308b AI u30a8u30fcu30b8u30a7u30f3u30c8u304cu3067u304du305fu306eu3067u3001u30a8u30f3u30c9u30e6u30fcu30b6u30fcu3082u3053u308cu3089u306eu7d20u6674u3089u3057u3044u30c4u30fcu30eb u3084 u30a8u30fcu30b8u30a7u30f3u30c8 u306bu30a2u30afu30bbu30b9u3067u304du308bu3088u3046u306bu30d7u30edu30c0u30afu30b7u30e7u30f3u306bu3082u3064u3066u3044u304fu5fc5u8981u304cu3042u308au307eu3059uff01 u5e78u3044u306au3053u3068u306bu3001Strands Agent u3092u4f7fu3046u3068u30011u3064u306eu30b3u30deu30f3u30c9u3067 AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u306bu30c7u30d7u30edu30a4u3067u304du307eu3059u3002

# Deploy to AWS

u3053u306eu30b3u30deu30f3u30c9u3092u5b9fu884cu3059u308bu3068u3001u30edu30fcu30abu30ebu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu5bfeu3057u3066u3044u304fu306au3053u3068u304cu8d77u3053u308au307eu3059uff1a

  1. u30d7u30edu30b8u30a7u30afu30c8u306f Dockeru3001Finchu3001u307eu305fu306f Podman u3067u30b3u30f3u30c6u30cau5316u3055u308cu3001u30b3u30fcu30c9u3001u30edu30b8u30c3u30afu3001u304au3088u3073u30bcu30fcu30d3u30b9u306eu30abu30b9u30bfu30e0u30c4u30fcu30eb(u3042u308cu3070)u3092u4fddu6301u3059u308bu305fu3081u306bu3001AWS Elastic Container Registry u306bu30a2u30c3u30d7u30edu30fcu30c9u3055u308cu307eu3059u3002

u8d77u52d5u6642u306eu540du524du306bu5f5cu3058u3066 u30e6u30cbu30fcu30afu306au30eau30ddu30b8u30c8u30ea URI u304cu5272u308au5f53u3066u3089u308cu3001ECR u30c0u30c3u30b7u30e5u30dcu30fcu30c9u5185u3067u8868u793au53efu80fdu306bu306au308au307eu3059u3002

  1. Docker u30d5u30a1u30a4u30ebu304cu81eau52d5u751fu6210u3055u308cu3001u5fc5u8981u306au4f9du5b58u95a2u4fc2u3092u30a4u30f3u30b9u30c8u30fcu30ebu3057u3001u30ddu30fcu30c8u3092u8ee2u9001u3057uff08AI u30a8u30fcu30b8u30a7u30f3u30c8u304c API u306eu3088u3046u306bu547cu3073u51fau305bu308bu3088u3046u306bu3059u308bu305fu3081uff09u3001u7279u5b9au306eu30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3092u5b9fu884cu3059u308bu3088u3046u306bu3057u307eu3059u3002

FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim
WORKDIR /app


# All environment variables in one layer
ENV UV_SYSTEM_PYTHON=1 \
    UV_COMPILE_BYTECODE=1 \
    UV_NO_PROGRESS=1 \
    PYTHONUNBUFFERED=1 \
    DOCKER_CONTAINER=1 \
    AWS_REGION=us-east-1 \
    AWS_DEFAULT_REGION=us-east-1


COPY requirements.txt requirements.txt


# Install from requirements file
RUN uv pip install -r requirements.txt


# Install FFmpeg
RUN apt-get update && \
    apt-get install -y ffmpeg && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*


RUN uv pip install aws-opentelemetry-distro==0.12.2


# Signal that this is running in Docker for host binding logic
ENV DOCKER_CONTAINER=1


# Create non-root user
RUN useradd -m -u 1000 bedrock_agentcore
USER bedrock_agentcore


EXPOSE 9000
EXPOSE 8000
EXPOSE 8080


# Copy entire project (respecting .dockerignore)
COPY . .


# Use the full module path


CMD ["opentelemetry-instrument", "python", "-m", "agent"

u3053u306eu30b8u30f3u30d7u30ebu306au30d5u30a1u30a4u30eb u304c ECR u5185u306eu30b3u30f3u30c6u30cau306bu6e21u3055u308cu3001AWS AgentCore u304cu30a8u30fcu30b8u30a7u30f3u30c8u3092u30dbu30b9u30c8u3057u3088u3046u3068u3059u308bu6642u306bu3001u4f9du5b58u95a2u4fc2u3001u30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3001u304au3088u3073 API u3092u516cu958bu3059u308bu30ddu30fcu30c8 u304cu5206u304bu308bu3088u3046u306bu3057u307eu3059u3002

  1. AWS AgentCore u306fu7279u5b9au306eu30ddu30fcu30c8u3067 ECR u30b3u30f3u30c6u30cau3092u8d77u52d5u305cu3057u3001REST API u3068u3057u3066u52d5u4f5cu3057u307eu3059u3002

u3053u3053u3067u3001u30d0u30fcu30b8u30e7u30f3u5c65u6b74u3001u30e9u30f3u30bfu30a4u30e0u30bbu30c3u30b7u30e7u30f3u3001u30a8u30e9u30fcu7387u306au3069u3001AI u30c7u30d7u30edu30a4u30d5u30a1u30a4u30e9u30a4u30bau306bu95a2u3059u308bu30eau30a2u30ebu30bfu30a4u30e0 u30a2u30c3u30d7u30c7u30fcu30c8 u3084 u91cdu8981u306au30b9u30bfu30c3u30c8 u3092u78bau8a8du3067u304bu307eu3059uff01

ud83dudca1 u30b8u30f3u30d7u30ebu306au30c4u30fcu30ebu306eu30c0u30c3u30b7u30e5u30dcu30fcu30c9u306eu3088u3046u306bu898bu3048u307eu3059u304cu3001u89b3u6e2cu53efu80fdu6027u306fu30d7u30edu30c0u30afu30b7u30e7u30f3u5411u3051u306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3092u4f5cu6210u3059u308bu9645u306eu6700u3082u91cdu8981u306au8981u7d20u306e 1u3064u3067u3059u3002 u3053u308cu3089u306eu30b9u30bfu30c3u30c8u306bu3088u308au3001u6b63u78bau306au4fa1u683cu898bu7c4du308au3092u7b97u51fau3057u3001u30b3u30fcu30c9u304cu3069u3053u3067u5931u6557u3057u3066u3044u308bu304bu3001u307eu305fu30a2u30afu30c3u30c6u30a3u30d6u306au30c1u30e3u30c3u30c8u30bbu30c3u30b7u30e7u30f3u306eu6570u3092u78bau8a8du3067u304du307eu3059u3002

  1. Agentcore u30e9u30f3u30bfu30a4u30e0u306e CloudWatch u3078u306eu30eau30f3u30afu306bu3088u308au3001u30b3u30fcu30c9 u30ecu30d9u30ebu306eu89b3u6e2cu53efu80fdu6027u304cu8ffdu52a0u3055u308cu307eu3059u3002

AgentCore u30c0u30c3u30b7u30e5u30dcu30fcu30c9u3068u4e26u3093u3067u3001CloudWatch u30edu30b0u306fu3001u30b3u30fcu30c9 u30ecu30d9u30ebu306eu30a8u30e9u30fcu3068u3001u30d7u30edu30c0u30afu30b7u30e7u30f3u4e0au306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3068 u3053u308cu307eu3067u306bu884cu308fu308cu305fu500bu3005u306eu30c1u30e3u30c3u30c8 u30bbu30c3u30b7u30e7u30f3u3054u3068 u306bu30fcu30ddu30fcu30c8u3092u63d0u4f9bu3057u307eu3059u3002 u3053u308cu3082u3001u30c7u30d0u30c3u30b0u306eu65b9u6cd5u306bu3064u3044u3066u306eu8cb4u91cdu306au9053u3057u308bu3079u3092u63d0u4f9bu3057u3066u304fu308cu307eu3059u3002

u3053u308cu3067u3001Strands Agent u3092u4f7fu3063u305f TwelveLabs u3068 Slack API u306bu30a2u30afu30bbu30b9u3057u305f AI u30a8u30fcu30b8u30a7u30f3u30c8 u304fu5b8cu5168u306bu30c7u30d7u30edu30a4u3055u308cu307eu3057u305fuff01 ud83cudf89


u30a8u30fcu30b8u30a7u30f3u30c8u306eu6280u8853u7684u306au30a2u30fcu30adu30c6u30afu30c1u30e3

u30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306eu30d5u30edu30f3u30c8u30a8u30f3u30c9u306eu69cbu7bc9u306bu3046u3064u308bu524du306bu3001u30d0u30c3u30afu30a8u30f3u30c9u3092u3053u306eu3088u3046u306bu4f5cu6210u3057u305fu4e3bu8981u306eu8981u56e0u3092u6df1u304fu7406u89e3u3057u3066u304au304fu3053u3068u304cu91cdu8981u306eu304au3067u3059u3002 u4ee5u4e0bu306f LucidCharts u3067u66f8u304bu308cu305fu6280u8853u7684u306eu30a2u30fcu30adu30c6u30afu30c1u30e3 u3067u3001u30d0u30c3u30afu30a8u30f3u30c9u5185u3067u30c7u30fcu30bf u30eau30d5u30a1u30ecu30f3u30b9 u304cu3069u306eu3088u3046u306bu6d41u308cu308bu304bu3092u8a73u3057u304fu793au3057u3066u3044u307eu3059u3002

u4e0au306eu30a2u30fcu30adu30c6u30afu30c1u30e3u304bu3089u5206u304bu308bu3088u3046u306bu3001Strands Agent u306fu81eau8eabu306e AI u30a8u30fcu30b8u30a7u30f3u30c8 u306eu57fau790eu30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3068u3057u3066u6a5fu80fdu3057u3001u30a8u30fcu30b8u30a7u30f3u30c8u30ebu30fcu30d7u306eu30c4u30fcu30ebu3092u6c7au5b9au3057u3001u3053u306eu5ea6u306fSlacku3001TwelveLabsu3001u307eu305fu306fu30d3u30c7u30aa u524du51e6u7406u306eu305fu3081u306e FFmpeg u306eu3044u305au308cu304b 3u3064u306eu30c4u30fcu30ebu304bu3089u9078u3076u30aau30d7u30b7u30e7u30f3u3092u5099u3048u3066u3044u307eu3059u3002

u7279u7b46u3059u3079u304du306fu3001AgentCore u3067 AWS EC2 u30b9u30ddu30c3u30c8u30a4u30f3u30b9u30bfu30f3u30b9u3092u4f7fu7528u3057u3066u3044u308bu306eu305fu3081u3002 u3053u306eu30afu30e9u30a6u30c9u30b5u30fcu30d0u30fcu306fu3001AgentCore u306eu30c7u30d5u30a2u30ebu30c8u30b5u30fcu30d0u30fcu3068u3057u3066u81eau52d5u7684u306bu30d7u30edu30d3u30b8u30e7u30cbu30f3u30b0u3055u308cu307eu3059u3002 u306au305cu3060u304bu5206u304bu308au307eu3059u304buff1f

ud83dudca1u5b66u7fd2u306eu6a5fu4f1a: u30b9u30ddu30c3u30c8 u30a4u30f3u30b9u30bfu30f3u30b9u306fu3001AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u5185u3067u4f7fu7528u3055u308cu3066u3044u306au3044 EC2 u30a2u30a2u30a6u30a4u30f3u30bfu30f3u30b9 u3067u3059u3002 u3053u308cu306fu3001u30afu30e9u30a6u30c9u30eau30bdu30fcu30b9u306eu4e00u8cabu3057u305fu9577u671fu7684u306au4e88u7d04u3092u5fc5u8981u3068u3057u306au3044u5834u5408u3002 u30aau30a2u30afu30e9u30a6u30c9u30b3u30f3u30d4u30e5u30fcu30c6u30a3u30f3u30dcu30b3u30b9u30c8u306eu5bc4u4e0eu304cu5927u304du304fu524au6e1bu3067u304du308bu306eu3060u3051u306eu30a4u30f3u30b9u30bfu30f3u30b9u3067u3059u3002 AgentCore u306bu3068u3063u3066u3001u30afu30e9u30a6u30c9u8a08u7b97u306fu30d7u30edu30f3u30d7u30c8 u3054u3068u306bu5b9au671fu7684u306bu3057u304bu5fc5u8981u3067u306fu306au3044u306eu3067u3001u3053u308cu306fu307eu3063u305fu304fu554fu984cu3042u308au307eu305bu3093uff01

u30d0u30c3u30afu30a8u30f3u30c9u306bu306fu3001u30a8u30fcu30b8u30a7u30f3u30c8u30e1u30e2u30e3u30a8u3001u30cfu30fcu30c8u30d3u30fcu30c8/ack POST u30eau30afu30a8u30b9u30c8u3092u4ecbu3057u305fu30bbu30c3u30b7u30e7u30f3 u7dadu6301u30e1u30abu30cbu30bau30e0u306au3069u3001u9762u767du3044u6280u8853u7684u306au8a73u7d30u304cu3044u304fu3064u304bu3042u308au307eu3059u3002u305fu3060u3001u3053u308cu3089u3082u3053u306eu30d6u30edu30b0u306eu7bc4u56f2u3092u8d85u3048u3066u30b7u30f3u30d7u30ebu306au3082u306eu306au306eu3067u3001u8a73u3057u304fu77e5u308au305fu3044u65b9u306fu3001u3053u306eu30bdu30d5u30c8u30a6u30a7u30a2u306e u516cu5f0f GitHub u30eau30ddu30b8u30c8u30ea u3092u30c1u30a7u30c3u30afu3059u308bu3053u3068u3092u304au3059u3059u3051u3057u307eu3059u3002


u30afu30edu30b9u30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0u306e Desktop u30a2u30d7u30eau3092u4f5cu6210u3059u308b 

u3053u3053u307eu3067u3001AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu80ccu5f8cu306bu3042u308bu30e1u30abu30cbu30bau30e0u3060u3051u3067u306au304fu3001u3053u306eu6700u65b0u306e Strands Agent u306eu7d71u5408u306bu3088u308au3001u81eau8eabu306eu30a8u30fcu30b8u30a7u30f3u30c8u578b AI u30e2u30c7u30ebu306bu9ad8u5ea6u306eu30d3u30c7u30aa u30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9u30aau30d7u30b7u30e7u30f3u3092u3044u304bu306bu7c21u5358u306bu5b9fu88c5u3067u304du308bu3088u3046u306bu306au3063u305fu304bu3092u7406u89e3u3057u3066u3044u305fu3060u3051u305fu3068u601du3044u307eu3059u3002 

u3053u308cu3089u3092u982du306bu5165u308cu3066u3001u3088u3046u3084u304fu30d5u30edu30f3u30c8u30a8u30f3u30c8 Desktop u30a2u30d7u30eau306eu958bu767au3092u59cbu3081u3089u308cu307eu3059u3002 u3053u306eu30a2u30d7u30eau306eu516cu5f0f u30c6u30c3u30af u30b9u30bfu30c3u30afu306f ElectronJS u304au3088u3073 NodeJS u306au306eu3067u3001u30eau30ddu30b8u30c8u30eau304bu3089u30b3u30fcu30c9u3092u30d7u30ebu3059u308bu524du306bu305du308cu3089u304fu30a4u30f3u30b9u30c8u30fcu30ebu3055u308cu3066u3044u308bu3053u3068u3092u78bau8a8du3057u3066u304fu3060u3055u3044uff01

u307eu305au306fu3001u30d5u30a1u30a4u30eb u69cbu9020u3092u30cdu30c4u30afu3057u305fu3044u3068u601du3044u307eu3059u3002

u30d5u30edu30f3u30c8u30a8u30f3u30c8u306eu958bu767au306bu3064u3044u3066u306fu3001u3053u306eu30d6u30edu30b0u306f AgentCore u3068 TwelveLabs u306bu30d5u30a9u30fcu30abu30b9u3059u308bu305fu3081u8a73u3057u304fu306fu66f8u304du307eu305bu3093u304cu3001u3053u306e Desktop u30a2u30d7u30eau306eu4f5cu6210u306fu3001ReactJS Web u30b5u30a4u30c8u306eu30aau30a2u4f5cu6210u3068u307eu3063u305fu304fu540cu3058u3067u3059u3002 u7279u306bu3001u3053u306eu30d5u30edu30f3u30c8u30a8u30f3u30c8 Desktop u30a2u30d7u30eau306fu9ad8u3044u30e2u30b8u30e5u30fcu30ebu6027u3092u5099u3048u3001u30d5u30edu30f3u30c8u30a8u30f3u30c8u306eu30b3u30f3u30ddu30fcu30cdu30f3u30c8u3001u30b3u30f3u30c6u30adu30b9u30c8u3001u304au3088u3073 main.js u306bu57fau3065u304fu30edu30b8u30c3u30afu306bu5206u304bu308cu3066u3044u307eu3059u3002

u4e0au306fu516cu5f0fu306eu6280u8853u7684u30a2u30fcu30adu30c6u30afu30c1u30e3u3067u3059u3002u3053u306e Desktop u30a2u30d7u30ea u304cu6b8bu308au306eu30bdu30d5u30c8u30a6u30a7u30a2 u306bu3069u306eu3088u3046u306bu30d5u30a3u30c3u30c8u3059u308bu304bu3092u6b63u78bau306bu793au3057u3066u3044u307eu3059u3002 u6240u8208u3059u308bu3068u3001u30ecu30eau30fcu30b9u304bu3089 MacOS u3068 Windows u306eu4e21u65b9u306eu30bfu30fcu30b2u30c3u30c8u3092u30d3u30ebu30c9u3059u308bu30bfu30e0u306b GitHub Actions u3092 CI/CD u30d4u30d7u30e9u30a4u30f3u3068u3057u3066u4f7fu7528u3057uff08u3053u3053u306eu30eau30eau30fcu30b9u304bu3089u30c0u30a6u30f3u30edu30fcu30c9u3067u304du307eu3059uff09u3001FFmpeg u3068 NodeJS u3092u4f7fu3063u3066u30d3u30c7u30aa u306eu524du51e6u7406 u3092u884cu3044u307eu3059u3002 u6700u5f8cu306b NodeJS u304c AWS AgentCore u304bu3089u30dbu30b9u30c8u3055u308cu3066u3044u308b API u30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3092u76f4u63a5u547cu3073u51fau3057u3001u81eau8eabu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu30a2u30afu30bbu30b9u3057u307eu3059u3002

u3053u306eu8a73u7d30u306au30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3u3053u3061u3089u3067u3001u4e3bu8981u306eu6c7au5b9au3084u6280u8853u7684u30a2u30fcu30adu30c6u30afu30c1u30e3u306bu3064u3044u3066u66f4u306bu5b66u3076u3053u3068u3092u5f37u304fu304au3059u3059u3081u3057u307eu3059u3002


u304au308fu308au306b

u304au3081u3067u3068u3046u3054u3056u3044u307eu3059uff01 ududf89 u3053u306eu30c1u30e5u30fcu30c8u30eau30a2u30ebu3092u30cdu30c4u30afu3057u3001Strands Agent u30d5u30ecu30fcu30e0u30efu30fcu30afu304bu3089 AWS AgentCore u30a8u30fcu30b8u30a7u30f3u30c8u3092u4f5cu6210u3059u308bu65b9u6cd5u3060u3051u3067u306au304fu3001u30a8u30fcu30b8u30a7u30f3u30c8u578b AI u306bu95a2u3059u308bu65e5u5e38u306eu698bu5ff5u3092u591au304fu5b66u3076u3053u3068u304fu3067u304du307eu3057u305fu3002 u3055u3089u306bu3001TwelveLabs u306eu3088u3046u306au9ad8u5ea6u306eu30d3u30c7u30aa u30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9 u30c6u30afu30ceu30edu30b8u30fc u3092u81eau8eabu306eu30a8u30fcu30b8u30a7u30f3u30c8u578b AI u306bu7d71u5408u3059u308bu306eu304cu3044u304bu306bu7c21u5358u304bu3092u5b66u3076u3053u3068u304cu3067u304du307eu3057u305fu3002

u66f4u306au308bu8a73u7d30u306au30eau30bdu30fcu30b9u306fu3053u3061u3089u306bu3042u308au307eu3059uff1a

  1. u516cu5f0f GitHub u30eau30ddu30b8u30c8u30ea: https://github.com/nathanchess/twelvelabs-agentcore-demo 

  2. u6280u8853u30a2u30fcu30adu30c6u30afu30c1u30e3u30c0u30a4u30a2u30b0u30e9u30e0 (LucidChart): https://lucid.app/lucidchart/40b7aa79-6da6-4bed-bd63-5f34e3955685/edit?viewport_loc=424%2C-502%2C4025%2C1778%2C0_0&invitationId=inv_ba388ce0-6ad8-4f77-9ac1-c8a4edc405db 

  3. u3053u306eu30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306eu516cu5f0fu30eau30eau30fcu30b9: https://github.com/nathanchess/twelvelabs-agentcore-demo/releases/tag/v1.0.0 

  4. Strands Agent u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3: https://strandsagents.com/latest/ 

  5. AgentCore u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3: https://aws.amazon.com/bedrock/agentcore/

u306fu3058u3081u306bu3011

Zoomu3067u306eu30a8u30f3u30b8u30cbu30a2u306eu65e5u6b21u30b9u30bfu30f3u30c2u30a2u30c3u30d7u304bu3089u3001u6221u7528u6245u5f53u8005u306e1u65e5u306b5u56deu8c03u3059u308bu5019u88dcu8005u306eu9762u63a5u307eu3067u3001u50cdu304fu30d7u30edu30d5u30a7u30c3u30b7u30e7u30cau30ebu306au3089u3060u308cu3082u3001u65e5u5e38u696du52d9u306bu304au3044u3066u4f1au8b70u304cu3044u304bu306bu983bu7e41u3067u91cdu8981u304bu3092u77e5u3063u3066u3044u307eu3059u3002Zoom u306eu3088u3046u306au4e3bu8981u306au4f1au8b70u30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0u306bu3088u308bu3068u3001u5e73u5747u7684u306au5f93u696du54e1u306fu5e74u9593u3067u304au3088u305d 392u6642u9593u3092u4f1au8b70u306bu8cbbu3084u3057u3066u3044u307eu3059u3002u3053u308cu3089u306eu4f1au8b70u306eu30d3u30c7u30aau30a2u30fcu30abu30a4u30d6u3001u30e1u30e2u3001u305du3057u3066u5fd8u308cu304cu3061u306a ToDo u30eau30b9u30c8u304cu5927u91cfu306bu3042u308bu305fu3081u3001u5f93u696du54e1u3084u4f01u696du306fu3001u4f1au8b70u5f8cu306eu975eu751fu7523u7684u306au4efbu52d9u3084u30d3u30c7u30aau306eu65e5u5e38u306bu808cu305au6ed1u3089u3055u308cu306au304cu3089u3055u308cu3066u3044u307eu3059u3002

u3082u30571000u6642u9593u4ee5u4e0au306eu30d3u30c7u30aau30b3u30f3u30c6u30f3u30c4u304bu3089u7279u5b9au306eu77acu9593u3092u7c21u5358u306bu691cu7d22u3057u3001u4f1au8b70u30fbu30b3u30f3u30c6u30f3u30c4u306eu30d1u30fcu30bdu30cau30e9u30a4u30bau3055u308cu305fu56deu7b54 u3092u898bu3064u3051u308bu65b9u6cd5u304cu3042u3063u305fu3089u3069u3046u3067u3057u30e7u30a6uff1f u3055u3089u306bu305du308cu3060u3051u3067u306au304fu3001u3053u308cu3089u306eu6d1eu5bdfu3092 Slack u306eu3088u3046u306au4ebau6c17u306eu3042u308bu30b3u30dfu30e5u30cbu30b1u30fcu30b7u30e7u30f3u30d7u30e1u30fcu30d5u30a9u30fcu30e0u3092u4ecbu3057u3066u3001u4f01u696du5168u4f53u306bu3059u3050u306bu63d0u4f9bu3067u304du308bu3068u3057u305fu3089u3069u3046u3067u3057u30e7u30a6u304buff1f

TwelveLabs u3068 AWS Strands Agent u306eu6700u65b0u306eu7d71u5408u306eu304au304bu3052u3067u3001u3053u308cu306fu3082u306fu3084u5922u3067u306fu3042u308au307eu305bu3093u3002 u5b9fu969bu306bu3001u4ecau65e5u306eu30c1u30e5u30fcu30c8u30eau30a2u30ebu3067u306f AWS AgentCoreu3001TwelveLabsu3001u304au3088u3073 ElectronJS u3092u4f7fu7528u3057u3066u3053u306eu6a5fu80fdu3092u4e00u304bu3089u69cbu7bc9u3057u3066u3044u304du307eu3059u3002


u30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306eu30c7u30e2

u30b3u30fcu30c7u30a3u30f3u30b0u3092u59cbu3081u308bu524du306bu3001u69cbu7bc9u3059u308bu30a2u30d7u30eau3092u7c21u5358u306bu30d7u30ecu30d3u30e5u30fcu3057u3066u307fu307eu3057u30e7u30a6u3002

u3054u81eau8eabu306e MacOS u307eu305fu306f Windows u30c7u30d0u30a5u30b9u3067u304au8a66u3057u306bu306au308au305fu3044u5834u5408u306fu3001u6700u65b0u306eu30eau30eau30fcu30b9u3092u30c0u30a6u30f3u30edu30fcu30c9u3059u308bu304bu3001u4ee5u4e0bu306eu30b3u30fcu30c9u30d9u30fcu30b9u3092u30d7u30ecu30d3u30e5u30fcu3057u3066u304fu3060u3055u3044u3002

u4f5cu6210u3059u308bu3082u306eu304cu5206u304bu3063u305fu3068u3053u308du3067u3001u3055u3063u305du304fu4f5cu6210u306bu53d6u308au639bu304bu308au307eu3059u263aufe0f!


u5b66u7fd2u76eeu6a19

u3053u306eu30c1u30e5u30fcu30c8u30eau30a2u30ebu3067u306fu4ee5u4e0bu3092u884cu3044u307eu3059u3002

  • AWS AgentCore u306bu30d7u30edu30c0u30afu30b7u30e7u30f3u5229u7528u306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3092u30c7u30d7u30edu30a4u3057u3001AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u5185u306e Bedrocku3001OpenAIu3001Ollama u306au3069u306eu3055u307eu3056u307eu306a LLM u30d7u30edu30d0u30a4u30c0u30fcu3092u6d3bu7528u3059u308bu3002

  • Strands Tools u4ee5u5916u306eu5916u90e8u30b5u30fcu30d3u30b3u3068u3082u4ea4u4fe1u3067u304du308bu3088u3046u306bu3001u30abu30b9u30bfu30e0u30c4u30fcu30ebu3092u958bu767au3059u308bu3002

  • u4e8bu524du306bu7d44u307fu8fbcu307eu308cu305fu30c4u30fcu30ebu3092u4f7fu3063u3066u3001u5916u90e8u306e Slack u3084 TwelveLabs u3092 AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu7d71u5408u3059u308bu3002

  • AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u3068 CloudWatch u306eu3085u306au30b5u30fcu30d3u30b3u3092u5229u7528u3057u3001AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu89b3u6e2cu53efu80fdu6027u3092u8ffdu52a0u3057u3001u7cbeu78bau306au30b3u30b9u30c8u898bu7c4du308au3084u30c7u30d0u30c3u30b0 u30edu30b0u3092u5f97u3089u308cu308bu3088u3046u306bu3059u308bu3002 

  • ElectronJS u3092u4f7fu7528u3057u3066u3001u81eau8eabu306eu30afu30edu30b9u30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0 Desktop u30a2u30d7u30eau200bu3092u30b3u30f3u30d1u30a4u30ebu3059u308bu3002


u524du63d0u6761u4ef6


Strands Agent u3067u30a8u30fcu30b8u30a7u30f3u30c8u3092u69cbu7bc9u3059u308b

Slackbot u3084 TwelveLab u306eu30d3u30c7u30aa u30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9 u30e2u30c7u30eb u306eu3088u3046u306au6a5fu80fdu3092u7d71u5408u3059u308bu524du306bu3001AI u30a8u30fcu30b8u30a7u30f3u30c8 u306bu3042u308bu6839u5e95u306eu30e1u30abu30cbu30bau30e0u3092u7406u89e3u3059u308bu3053u3068u304cu91cdu8981u3067u3059u3002 Strands Agent u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3 u306bu3088u308bu306tu3001AI u30a8u30fcu30b8u30a7u30f3u30c8 u306fu4e3bu306bu8ffdu52a0u306eu30aau30fcu30b1u30b9u30c8u30ecu30fcu30b7u30e7u30f3 u30ecu30a4u30e4u30fcu3092u5099u3048u305f LLM u3067u3059u3002 u3053u306eu30aau30fcu30b1u30b9u30c8u30ecu30fcu30b7u30e7u30f3 u30ecu30a4u30e4u30fcu306bu3088u308au3001LLM u306fu60c5u5831u691cu7d22u3001u30c7u30fcu30bfu30d9u30fcu30b9u7167u4f1au3001u30b3u30fcu30c9u5b9fu884cu306au3069u3001u3055u307eu3056u307eu306au7406u7531u3067u884cu52d5u3092u8d77u3053u3059u3053u3068u304cu3067u304du307eu3059u3002

ud83dudca1 u3053u306eu30aau30fcu30b1u30b9u30c8u30ecu30fcu30b7u30e7u30f3 u30ecu30a4u30e4u30fcu5168u4f53u306fu3001u30a8u30fcu30b8u30a7u30f3u30c8 u30ebu30fcu30d7 (Agent Loop) u3068u3057u3066u77e5u3089u308cu3066u3044u307eu3059u3002

u56f31: AWS Strands u304bu3089u306eu30a8u30fcu30b8u30a7u30f3u30c8 u30ebu30fcu30d7u306eu5185u5bb9

ud83dudca1 u30c4u30fcu30eb (Tool): u5165u529bu3068u30b3u30f3u30c6u30adu30b9u30c8u306bu57fau3065u3044u3066u3001u63a8u8ad6 LLM u304cu7279u5b9au306eu30a2u30afu30b7u30e7u30f3u306bu30a2u30afu30bbu30b9u3055u305bu308bu3088u3046u306bu30d5u30a9u30fcu30deu30c3u30c8u3055u308cu305fu3001u76f4u63a5u95a2u6570u547cu3073u51fau3057u307eu305fu306f APIu3002

u4e0au306eu56f3u3067u306fu3001u4e2du592eu306bu3001u30c4u30fcu30ebu5b9fu884cu3001u30c4u30fcu30ebu9078u629eu3001u304au308fu3073u63a8u8ad6 (LLM) u3092u542bu3080u8ffdu52a0u306eu30dcu30c3u30afu30b9u304cu3042u308bu306eu304cu898bu3048u307eu3059u3002 u3053u308cu3089u306eu30b9u30c6u30c3u30d7u306fu3001u3059u3079u3066u6700u3082u91cdu8981u306au76eeu7684u3092u679cu305fu3057u3066u3044u307eu3059u3002

  1. u63a8u8ad6 (LLM) u2014 u4e0eu3048u3089u308cu305fu5165u529bu306bu5bfeu3057u3066u3001u6b63u3057u3044u30c4u30fcu30ebu3001u307eu305fu306fu30cbu30fcu30c9u306bu5d50u3058u305fu30c4u30fcu30ebu306eu547cu3073u51fau3057u304cu5fc5u8981u304bu3069u3046u304bu3092u8131u51fau3057u307eu3059u3002

  2. u30c4u30fcu30ebu9078u629e u2014 u30a8u30fcu30b8u30a7u30f3u30c8u306eu8a2du5b9au306bu57fau3065u3044u3066u3001u8981u6c42u3055u308cu305fu30c4u30fcu30ebu3092u691cu7d22u3057u307eu3059u3002

  3. u30c4u30fcu30ebu5b9fu884c u2014 u30c4u30fcu30ebu3092u5b9fu884cu3057u3001u7d50u679cu3092u63a8u8ad6 LLM u306bu623bu3057u3066u6b21u306eu30b9u30c6u30c3u30d7u3092u8131u51fau3057u307eu3059u3002 

u3053u306eu3088u3046u306au30d5u30ecu30fcu30e0u30efu30fcu30afu3092u69cbu7bc9u3059u308bu306eu306fu3069u306eu304fu3089u3044u96e3u3057u3044u306eu304bu3068u601du308fu308cu308bu304bu3082u3057u308cu307eu305bu3093u3002 u63a8u8ad6 LLM u304cu30c4u30fcu30ebu3092u8a8du8b58u3057u3001u3055u3089u306bu30aau30f3u30c7u30deu30f3u30c9u3067u30c4u30fcu30ebu3092u547cu3073u51fau3059u306bu306fu3069u3046u3059u308cu307eu3088u3044u306eu3067u3057u30e7u30a6u304buff1f LLM u304cu89e3u91c8u3059u308bu305fu3081u306bu3001u3069u306eu3088u3046u306bu30c4u30fcu30ebu3092u9069u5207u306bu8aacu660eu3057u3066u610fu5473u3092u4e0eu3048u3089u308cu308bu306eu3067u3057u30e7u30a6u304buff1f u3053u308cu3089u306fu3059u3079u3066u96e3u3057u304fu8907u96d1u306au5c0fu30c6u30fcu30deu3067u3059u304cu3001u5e78u3044u306bu3082 AWS Strands Agent u304cu3059u3067u306bu4f5cu3063u3066u304fu308cu3066u3044u307eu3059u3002 

u3053u3053u3067u500bu3005u306eu698bu5ff5u3092u3059u3079u3066u8aacu660eu3059u308bu306eu306fu3053u306eu30d6u30edu30b0u306eu7bc4u56f2u5916u3067u3059u304cu3001Strands Agent u306eu30b3u30fcu30c9u30d9u30fcu30b9 (https://github.com/strands-agents) u3092u901au3058u3066u3001u3053u308cu3089u306eu8907u96d1u306au30e1u30abu30cbu30bau30e0u3092u6df1u304fu5b66u3076u3053u3068u3092u5f37u304fu304au52e7u3081u3057u307eu3059u3002 

u3053u306eu30d5u30ecu30fcu30e0u30efu30fcu30afu3092u4f7fu3046u3068u3001u30a8u30fcu30b8u30a7u30f3u30c8u306eu4f5cu6210u306fu4ee5u4e0bu306eu6570u884cu3067u6e08u307fu307eu3059u3002

from bedrock_agentcore.runtime import BedrockAgentCoreApp
from strands import Agent


app = BedrockAgentCoreApp()
agent = Agent()


@app.entrypoint
def invoke(payload):
    """Process user input and return a response"""
    user_message = payload.get("prompt", "Hello")
    result = agent(user_message)
    return {"result": result.message}


if __name__ == "__main__":
    app.run()

u3053u308cu3089u306eu30b8u30f3u30d7u30ebu306au6570u884cu3067u3001AI u30a8u30fcu30b8u30a7u30f3u30c8 u304cu4f5cu6210u3067u304du307eu3057u305fuff01 u305fu3060u3057u3001u307eu3060u30c4u30fcu30ebu3092u30d7u30edu30d3u30b8u30e7u30cbu30f3u30b0u3057u3066u3044u306au3044u305fu3081u3001u6a19u6e96u7684u306a LLM u306eu3088u3046u306bu52d5u4f5cu3057u3001u8ceau554f u3068 u56deu7b54 u306eu30bfu30b9u30afu306eu307fu3092u51e6u7406u3057u307eu3059u3002


TwelveLabs u3092 Strands Agent u306eu8ffdu52a0

u3059u3070u3089u3057u3044u3001u3053u308cu3067u5165u529bu3068u30b3u30f3u30c6u30adu30b9u30c8u304bu3089u8ceau554fu306bu7b54u3048u308bu3053u3068u306bu305fu3051u305f AI u30a8u30fcu30b8u30a7u30f3u30c8u304fu30d5u30ebu3067u52d5u4f5cu3059u308bu3088u3046u306bu306au308au307eu3057u305fu3002 u305fu3060u3057u3001u66f4u306bu30c6u30b9u30c8u3092u9032u3081u308bu3068u3001u3044u304fu3064u304bu306eu5236u9650u304cu898bu3064u304bu308au307eu3059uff1a

  1. u30d3u30c7u30aa u30c7u30fcu30bfu3001u307eu305fu306fu6587u5b57u5217u4ee5u5916u306eu30c7u30fcu30bf u30d5u30a9u30fcu30deu30c3u30c8u3092u9069u5207u306bu51e6u7406u3067u304du306au3044u3002

  2. u8ceau554fu3068u56deu7b54u306eu30bfu30b9u30afu306bu9650u5b9au3055u308cu3066u3044u3002

  3. u63a8u8ad6 LLM u304cu3069u306eu3085u306bu8003u3048u3001u3069u306eu3088u3046u306bu6c7au5b9au3059u308bu304bu306eu89b3u6e2cu53efu80fdu6027u304cu4e0du8db3u3057u3066u304au308au3001u30d7u30edu30c0u30afu30b7u30e7u30f3u306bu304au3051u308b AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu30c7u30d0u30c3u30b0u304cu304au305du307eu3064u306bu306au308au307eu3059 ( u5b9fu969bu306bu4f55u304cu8d77u3053u3063u3066u3044u308bu306eu304bu5206u304bu308au307eu305bu3093 ud83dude32)

AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu6a5fu80fdu3092u62e1u5f35u3059u308bu305fu3081u306bu3001u30b3u30fcu30c9u306bu30c4u30fcu30ebu3092u5c0eu5165u3059u308bu5fc5u8981u304cu3042u308au307eu3059uff01 u524du8ff0u306eu3068u304au308au3001u30c4u30fcu30ebu306f LLM u304cu76f4u63a5u30a2u30afu30bbu30b9u3067u304du308bu76f4u63a5u5f15u6570u307eu305fu306f API u547cu3073u51fau3057u306bu306au308bu5012u5411u304cu3042u308au307eu3059u3002 Strands Agent u3067u306fu3001u3053u308cu3089u306f2u3064u306eu65b9u6cd5u3067 AI u30a8u30fcu30b8u30a7u30f3u30c8 u306bu63d0u4f9bu3067u304du307eu3059uff1a


1 - strands_tools Python u30d1u30c3u30b1u30fcu30b8u304cu63d0u4f9bu3059u308bu30c7u30d5u30a2u30ebu30c8u30c4u30fcu30ebuff1a

u56f32: Strands Agent Tools u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3

Strands Agent u306fu3001AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu8ffdu52a0u3067u304du308bu30c7u30d5u30a2u30ebu30c8u306eu30c4u30fcu30ebu3092 20+ u4ee5u4e0au63d0u4f9bu3057u3066u3044u307eu3059u3002 u3053u308cu3089u306eu30c4u30fcu30ebu306fu3001u30b7u30a7u30ebu3067u306eu30b8u30f3u30d7u30ebu306au30d5u30a1u30a4u30ebu64cdu4f5cu304bu3089u3001Slacku3001TwelveLabsu3001AWS u3078u306eu76f4u63a5u306eu30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0u7d71u5408u307eu3067u591au5c90u306bu308fu305fu308au307eu3059u3002

u3053u306eu30d7u30edu30b8u30a7u30afu30c8u3067u306fu3001u4ee5u4e0bu306eu30c4u30fcu30ebu3092u4f7fu7528u3057u307eu3059uff1a

  1. TwelveLabs u2014 Pegasus u3068u65b0u3057u3044 Marengo 3.0 u30e2u30c7u30eb u306bu3088u308bu30d9u30fcu30b9u306eu30d3u30c7u30aau30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9u3092u63d0u4f9bu3057u307eu3059u3002

  2. Slack u2014 SlackBot u3067u4f01u696du3068u76f4u63a5u4ea4u4fe1u3067u304du308bu3088u3046u306bu3057u307eu3059u3002

    1. u6ce8: u8a8du8a3cu60c5u5831u306f Slack u30dcu30c3u30c8 u3068 Slack App u30c8u30fcu30afu30f3 u3092u4ecbu3057u3066u63d0u4f9bu3059u308bu5df1u5fc5u8981u304cu3042u308au307eu3059u3002

  3. Environment u2014 u74b0u5883u5909u6570u3092u8a2du5b9au3059u308bu30b8u30f3u30d7u30ebu306eu30c4u30fcu30ebu3001AgentCore u30bbu30c3u30b7u30e7u30f3u51e6u7406u306eu59d4u30cdu306bu306au308au307eu3059u3002

u3053u308cu3089u306eu30c4u30fcu30ebu306eu8ffdu52a0u306fu3001u30a8u30fcu30b8u30a7u30f3u30c8u306eu4f5cu6210u3068u540cu69d8u306bu3001u6570u884cu306eu30b3u30fcu30c9u3067u7c21u5358u306bu884cu3048u307eu3059uff1a

from strands import Agent
from strands_tools import calculator, file_read, shell


# Add tools to our agent
agent = Agent(
    tools=[calculator, file_read, shell]
)


# Agent will automatically determine when to use the calculator tool
agent("What is 42 ^ 9")


print("\n\n")  # Print new lines


# Agent will use the shell and file reader tool when appropriate
agent("Show me the contents of a single file in this directory")

u4e0au306eu30b3u30fcu30c9 u30b9u30cbu30dau30c3u30c8u3067u304au6c17u3065u304du306eu3068u304au308au3001u5358u306b strands_tools u3092u4f7fu7528u3057u3066u5fc5u8981u306au30c4u30fcu30ebu3092u30a4u30f3u30ddu30fcu30c8u3057u3001u3053u308cu3089u306eu30c4u30fcu30ebu3092 Agent() u5185u306eu8ffdu52a0u30d1u30e9u30e1u30fcu30bfu30fcu3068u3057u3066u30d7u30e9u30b0u30a4u30f3u3059u308bu3060u3051u3067u3059u3002 u3053u308cu3060u3051u3067u3001u30a8u30fcu30b8u30a7u30f3u30c8 u306eu6a5fu80fdu304cu518du3073u62e1u5f35u3055u308cu3001u30a2u30afu30b7u30e7u30f3 u200bu3092u8d77u3053u3059u3053u3068u304cu3067u304du308bu3088u3046u306bu306au308au307eu3059uff01 u4e0au8a18u3067u8aacu660eu3057u305f u30a8u30fcu30b8u30a7u30f3u30c8 u30ebu30fcu30d7 u5168u4f53u304cu30d0u30c3u30afu30b0u30e9u30a6u30f3u30c9u3067u5b9fu884cu3055u308cu307eu3059u304fu3001u5fc5u8981u306bu5f5cu3058u3066u96fbu5353u3001u30d5u30a1u30a4u30ebu30aau30fcu30d7u30f3u3001u30cau30a7u30eb u306eu30c4u30fcu30eb u3092u547cu3073u51fau3059u3053u3068u304cu3067u304du308bu3088u3046u306bu306au308au307eu3059uff01


2 - Strands Agent u3092u4f7fu3063u3066 Python u3067u69cbu7bc9u3055u308cu305fu30abu30b9u30bfu30e0u30c4u30fcu30ebuff1a

u30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306bu30abu30b9u30bfu30e0 u30c4u30fcu30eb u3092u4f5cu6210u3059u308bu5fc5u8981u306fu3042u308au307eu305bu3093u304cu3001Strands Agent u306fu3001u5168u4f53u306eu95a2u6570u306eu307fu306au3089u305au3001u9069u5207u306bu53c2u7167u3067u304du308bu3088u3046u306bu95a2u6570u306bu95a2u9023u4ed8u3051u3089u308cu305fu30e1u30bfu30c7u30fcu30bf u3092u5b9au7fa9u3059u308bu3053u3068u3067u3001u30abu30b9u30bfu30e0 u30c4u30fcu30eb u3092u4f5cu6210u3059u308bu305fu3081u306eu4fbfu5229u306au30d5u30ecu30fcu30e0u30efu30fcu30af u3092u63d0u4f9bu3057u3066u3044u307eu3059u3002

from strands import tool


@tool
def weather_forecast(city: str, days: int = 3) -> str:
    """Get weather forecast for a city.


    Args:
        city: The name of the city
        days: Number of days for the forecast
    """
    return f"Weather forecast for {city} for the next {days} days..."

u4e0au306eu30b3u30fcu30c9 u30b9u30cbu30dau30c3u30c8u306b u3042u308bu3088u3046u306bu3001u95a2u6570u306eu4e0au306b @tool u30c7u30b3u30ecu30fcu30bfu30fcu3092u8ffdu52a0u3059u308bu3053u3068u3067uff0cu65e2u5b58u306eu95a2u6570u304bu3089u30c4u30fcu30ebu3092u4f5cu6210u3067u304du307eu3059u3002 docstring u306fu3001u30c4u30fcu30eb u63a8u8ad6u3067u63a8u8ad6 LLM u304cu89e3u91c8u3059u308bu30e1u30bfu30c7u30fcu30bfu3068u3057u3066u4f7fu7528u3055u308cu307eu3059u3002

u3053u308cu30892u3064u306eu30e1u30bdu30c3u30c9u3092u982du306bu5165u308cu3066u3001u81eau8eabu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu4ee5u4e0bu306eu30c4u30fcu30ebu3092u5b9fu88c5u3057u3066u307fu307eu3057u30e7u30a6uff01

import json
import os
import asyncio
from dotenv import load_dotenv


load_dotenv()


from bedrock_agentcore.runtime import BedrockAgentCoreApp
from strands import Agent
from strands_tools import environment
from custom_tools import chat_video, search_video, get_slack_channel_ids, get_video_index, slack, fetch_video_url


os.environ["BYPASS_TOOL_CONSENT"] = "true"
os.environ["STRANDS_SLACK_AUTO_REPLY"] = "true"
os.environ["STRANDS_SLACK_LISTEN_ONLY_TAG"] = ""


def get_tools():
    return [slack, environment, chat_video, search_video, get_slack_channel_ids, get_video_index, fetch_video_url]


app = BedrockAgentCoreApp()
agent = Agent(
    tools=get_tools()
)


# Track if socket mode has been started to avoid multiple starts
_socket_mode_started = False


@app.entrypoint
async def invoke(payload):
    """
    Process system request directly and ONLY from Electron app.
    """
    global _socket_mode_started


    system_message = payload.get("prompt")
   
    # Process the agent stream (independent of socket mode)
    stream = agent.stream_async(system_message)


    async for event in stream:
        if "data" in event:
            yield event['data']
   
if __name__ == '__main__':
    app.run()

u4e0au306eu30b3u30fcu30c9 u30b9u30cbu30dau30c3u30c8u3067u306fu3001u7279u306b strands_tools u304bu308bu30c4u30fcu30eb u3092u30edu30fcu30c9u3057u307eu3057u305fuff1a

  1. TwelveLabs: chat_video, search_video

  2. Slack: slack, get_slack_channel_ids

ud83dudca1u3053u308cu308au306eu30c4u30fcu30ebu306fu305du308cu305eu308cu306eu30c1u30fcu30e0u304bu3089u306eu516cu5f0fu306eu7d71u5408u3067u3059u304au3001AI u30a8u30fcu30b8u30a7u30f3u30c8u5411u3051u306eu30d7u30edu30c0u30afu30b7u30e7u30f3 u30ecu30d9u30ebu306eu30c4u30fcu30ebu304cu3069u306eu3088u3046u306bu66f8u304bu308cu3066u3044u308bu304bu3092u898bu308bu306bu306fu3001Strands Tools u30eau30ddu30b8u30c8u30ea u3092u3055u3089u306bu6df1u304fu30c0u30a4u30d6u3059u308bu3053u3068u3092u5f37u304fu304au52e7u3081u3057u307eu3059uff01

u3055u3089u306bu91cdu8981u306au306eu306fu3001TwelveLabs u3078u306eu6700u65b0u306eu7d71u5408u306eu304au304bu3052u3067u3001u30d3u30c7u30aa u30c7u30fcu30bfu3068u30a4u30f3u30bfu30e9u30afu30c8u3059u308bu30d7u30edu30c0u30afu30b7u30e7u30f3 u30ecu30d9u30ebu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3092 1u884cu306eu30b3u30fcu30c9u306bu30c7u30d0u30c3u30b0u3067u304du308bu3088u3046u306bu306au308au307eu3057u305fu3002 u8eabu8fd1u306au7d71u5408u306bu95a2u3059u308bu8a73u7d30u306fu3001u3053u306eu30d6u30edu30b0u306bu3042u308au307eu3059u3002


AWS AgentCore u306bu30c7u30d7u30edu30a4u3059u308b

u3053u308cu3067u30edu30fcu30abu30eb u30deu30b7u30f3u3067u52d5u4f5cu3059u308b AI u30a8u30fcu30b8u30a7u30f3u30c8u304cu3067u304du305fu306eu3067u3001u30a8u30f3u30c9u30e6u30fcu30b6u30fcu3082u3053u308cu3089u306eu7d20u6674u3089u3057u3044u30c4u30fcu30eb u3084 u30a8u30fcu30b8u30a7u30f3u30c8 u306bu30a2u30afu30bbu30b9u3067u304du308bu3088u3046u306bu30d7u30edu30c0u30afu30b7u30e7u30f3u306bu3082u3064u3066u3044u304fu5fc5u8981u304cu3042u308au307eu3059uff01 u5e78u3044u306au3053u3068u306bu3001Strands Agent u3092u4f7fu3046u3068u30011u3064u306eu30b3u30deu30f3u30c9u3067 AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u306bu30c7u30d7u30edu30a4u3067u304du307eu3059u3002

# Deploy to AWS

u3053u306eu30b3u30deu30f3u30c9u3092u5b9fu884cu3059u308bu3068u3001u30edu30fcu30abu30ebu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu5bfeu3057u3066u3044u304fu306au3053u3068u304cu8d77u3053u308au307eu3059uff1a

  1. u30d7u30edu30b8u30a7u30afu30c8u306f Dockeru3001Finchu3001u307eu305fu306f Podman u3067u30b3u30f3u30c6u30cau5316u3055u308cu3001u30b3u30fcu30c9u3001u30edu30b8u30c3u30afu3001u304au3088u3073u30bcu30fcu30d3u30b9u306eu30abu30b9u30bfu30e0u30c4u30fcu30eb(u3042u308cu3070)u3092u4fddu6301u3059u308bu305fu3081u306bu3001AWS Elastic Container Registry u306bu30a2u30c3u30d7u30edu30fcu30c9u3055u308cu307eu3059u3002

u8d77u52d5u6642u306eu540du524du306bu5f5cu3058u3066 u30e6u30cbu30fcu30afu306au30eau30ddu30b8u30c8u30ea URI u304cu5272u308au5f53u3066u3089u308cu3001ECR u30c0u30c3u30b7u30e5u30dcu30fcu30c9u5185u3067u8868u793au53efu80fdu306bu306au308au307eu3059u3002

  1. Docker u30d5u30a1u30a4u30ebu304cu81eau52d5u751fu6210u3055u308cu3001u5fc5u8981u306au4f9du5b58u95a2u4fc2u3092u30a4u30f3u30b9u30c8u30fcu30ebu3057u3001u30ddu30fcu30c8u3092u8ee2u9001u3057uff08AI u30a8u30fcu30b8u30a7u30f3u30c8u304c API u306eu3088u3046u306bu547cu3073u51fau305bu308bu3088u3046u306bu3059u308bu305fu3081uff09u3001u7279u5b9au306eu30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3092u5b9fu884cu3059u308bu3088u3046u306bu3057u307eu3059u3002

FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim
WORKDIR /app


# All environment variables in one layer
ENV UV_SYSTEM_PYTHON=1 \
    UV_COMPILE_BYTECODE=1 \
    UV_NO_PROGRESS=1 \
    PYTHONUNBUFFERED=1 \
    DOCKER_CONTAINER=1 \
    AWS_REGION=us-east-1 \
    AWS_DEFAULT_REGION=us-east-1


COPY requirements.txt requirements.txt


# Install from requirements file
RUN uv pip install -r requirements.txt


# Install FFmpeg
RUN apt-get update && \
    apt-get install -y ffmpeg && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*


RUN uv pip install aws-opentelemetry-distro==0.12.2


# Signal that this is running in Docker for host binding logic
ENV DOCKER_CONTAINER=1


# Create non-root user
RUN useradd -m -u 1000 bedrock_agentcore
USER bedrock_agentcore


EXPOSE 9000
EXPOSE 8000
EXPOSE 8080


# Copy entire project (respecting .dockerignore)
COPY . .


# Use the full module path


CMD ["opentelemetry-instrument", "python", "-m", "agent"

u3053u306eu30b8u30f3u30d7u30ebu306au30d5u30a1u30a4u30eb u304c ECR u5185u306eu30b3u30f3u30c6u30cau306bu6e21u3055u308cu3001AWS AgentCore u304cu30a8u30fcu30b8u30a7u30f3u30c8u3092u30dbu30b9u30c8u3057u3088u3046u3068u3059u308bu6642u306bu3001u4f9du5b58u95a2u4fc2u3001u30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3001u304au3088u3073 API u3092u516cu958bu3059u308bu30ddu30fcu30c8 u304cu5206u304bu308bu3088u3046u306bu3057u307eu3059u3002

  1. AWS AgentCore u306fu7279u5b9au306eu30ddu30fcu30c8u3067 ECR u30b3u30f3u30c6u30cau3092u8d77u52d5u305cu3057u3001REST API u3068u3057u3066u52d5u4f5cu3057u307eu3059u3002

u3053u3053u3067u3001u30d0u30fcu30b8u30e7u30f3u5c65u6b74u3001u30e9u30f3u30bfu30a4u30e0u30bbu30c3u30b7u30e7u30f3u3001u30a8u30e9u30fcu7387u306au3069u3001AI u30c7u30d7u30edu30a4u30d5u30a1u30a4u30e9u30a4u30bau306bu95a2u3059u308bu30eau30a2u30ebu30bfu30a4u30e0 u30a2u30c3u30d7u30c7u30fcu30c8 u3084 u91cdu8981u306au30b9u30bfu30c3u30c8 u3092u78bau8a8du3067u304bu307eu3059uff01

ud83dudca1 u30b8u30f3u30d7u30ebu306au30c4u30fcu30ebu306eu30c0u30c3u30b7u30e5u30dcu30fcu30c9u306eu3088u3046u306bu898bu3048u307eu3059u304cu3001u89b3u6e2cu53efu80fdu6027u306fu30d7u30edu30c0u30afu30b7u30e7u30f3u5411u3051u306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3092u4f5cu6210u3059u308bu9645u306eu6700u3082u91cdu8981u306au8981u7d20u306e 1u3064u3067u3059u3002 u3053u308cu3089u306eu30b9u30bfu30c3u30c8u306bu3088u308au3001u6b63u78bau306au4fa1u683cu898bu7c4du308au3092u7b97u51fau3057u3001u30b3u30fcu30c9u304cu3069u3053u3067u5931u6557u3057u3066u3044u308bu304bu3001u307eu305fu30a2u30afu30c3u30c6u30a3u30d6u306au30c1u30e3u30c3u30c8u30bbu30c3u30b7u30e7u30f3u306eu6570u3092u78bau8a8du3067u304du307eu3059u3002

  1. Agentcore u30e9u30f3u30bfu30a4u30e0u306e CloudWatch u3078u306eu30eau30f3u30afu306bu3088u308au3001u30b3u30fcu30c9 u30ecu30d9u30ebu306eu89b3u6e2cu53efu80fdu6027u304cu8ffdu52a0u3055u308cu307eu3059u3002

AgentCore u30c0u30c3u30b7u30e5u30dcu30fcu30c9u3068u4e26u3093u3067u3001CloudWatch u30edu30b0u306fu3001u30b3u30fcu30c9 u30ecu30d9u30ebu306eu30a8u30e9u30fcu3068u3001u30d7u30edu30c0u30afu30b7u30e7u30f3u4e0au306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3068 u3053u308cu307eu3067u306bu884cu308fu308cu305fu500bu3005u306eu30c1u30e3u30c3u30c8 u30bbu30c3u30b7u30e7u30f3u3054u3068 u306bu30fcu30ddu30fcu30c8u3092u63d0u4f9bu3057u307eu3059u3002 u3053u308cu3082u3001u30c7u30d0u30c3u30b0u306eu65b9u6cd5u306bu3064u3044u3066u306eu8cb4u91cdu306au9053u3057u308bu3079u3092u63d0u4f9bu3057u3066u304fu308cu307eu3059u3002

u3053u308cu3067u3001Strands Agent u3092u4f7fu3063u305f TwelveLabs u3068 Slack API u306bu30a2u30afu30bbu30b9u3057u305f AI u30a8u30fcu30b8u30a7u30f3u30c8 u304fu5b8cu5168u306bu30c7u30d7u30edu30a4u3055u308cu307eu3057u305fuff01 ud83cudf89


u30a8u30fcu30b8u30a7u30f3u30c8u306eu6280u8853u7684u306au30a2u30fcu30adu30c6u30afu30c1u30e3

u30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306eu30d5u30edu30f3u30c8u30a8u30f3u30c9u306eu69cbu7bc9u306bu3046u3064u308bu524du306bu3001u30d0u30c3u30afu30a8u30f3u30c9u3092u3053u306eu3088u3046u306bu4f5cu6210u3057u305fu4e3bu8981u306eu8981u56e0u3092u6df1u304fu7406u89e3u3057u3066u304au304fu3053u3068u304cu91cdu8981u306eu304au3067u3059u3002 u4ee5u4e0bu306f LucidCharts u3067u66f8u304bu308cu305fu6280u8853u7684u306eu30a2u30fcu30adu30c6u30afu30c1u30e3 u3067u3001u30d0u30c3u30afu30a8u30f3u30c9u5185u3067u30c7u30fcu30bf u30eau30d5u30a1u30ecu30f3u30b9 u304cu3069u306eu3088u3046u306bu6d41u308cu308bu304bu3092u8a73u3057u304fu793au3057u3066u3044u307eu3059u3002

u4e0au306eu30a2u30fcu30adu30c6u30afu30c1u30e3u304bu3089u5206u304bu308bu3088u3046u306bu3001Strands Agent u306fu81eau8eabu306e AI u30a8u30fcu30b8u30a7u30f3u30c8 u306eu57fau790eu30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3068u3057u3066u6a5fu80fdu3057u3001u30a8u30fcu30b8u30a7u30f3u30c8u30ebu30fcu30d7u306eu30c4u30fcu30ebu3092u6c7au5b9au3057u3001u3053u306eu5ea6u306fSlacku3001TwelveLabsu3001u307eu305fu306fu30d3u30c7u30aa u524du51e6u7406u306eu305fu3081u306e FFmpeg u306eu3044u305au308cu304b 3u3064u306eu30c4u30fcu30ebu304bu3089u9078u3076u30aau30d7u30b7u30e7u30f3u3092u5099u3048u3066u3044u307eu3059u3002

u7279u7b46u3059u3079u304du306fu3001AgentCore u3067 AWS EC2 u30b9u30ddu30c3u30c8u30a4u30f3u30b9u30bfu30f3u30b9u3092u4f7fu7528u3057u3066u3044u308bu306eu305fu3081u3002 u3053u306eu30afu30e9u30a6u30c9u30b5u30fcu30d0u30fcu306fu3001AgentCore u306eu30c7u30d5u30a2u30ebu30c8u30b5u30fcu30d0u30fcu3068u3057u3066u81eau52d5u7684u306bu30d7u30edu30d3u30b8u30e7u30cbu30f3u30b0u3055u308cu307eu3059u3002 u306au305cu3060u304bu5206u304bu308au307eu3059u304buff1f

ud83dudca1u5b66u7fd2u306eu6a5fu4f1a: u30b9u30ddu30c3u30c8 u30a4u30f3u30b9u30bfu30f3u30b9u306fu3001AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u5185u3067u4f7fu7528u3055u308cu3066u3044u306au3044 EC2 u30a2u30a2u30a6u30a4u30f3u30bfu30f3u30b9 u3067u3059u3002 u3053u308cu306fu3001u30afu30e9u30a6u30c9u30eau30bdu30fcu30b9u306eu4e00u8cabu3057u305fu9577u671fu7684u306au4e88u7d04u3092u5fc5u8981u3068u3057u306au3044u5834u5408u3002 u30aau30a2u30afu30e9u30a6u30c9u30b3u30f3u30d4u30e5u30fcu30c6u30a3u30f3u30dcu30b3u30b9u30c8u306eu5bc4u4e0eu304cu5927u304du304fu524au6e1bu3067u304du308bu306eu3060u3051u306eu30a4u30f3u30b9u30bfu30f3u30b9u3067u3059u3002 AgentCore u306bu3068u3063u3066u3001u30afu30e9u30a6u30c9u8a08u7b97u306fu30d7u30edu30f3u30d7u30c8 u3054u3068u306bu5b9au671fu7684u306bu3057u304bu5fc5u8981u3067u306fu306au3044u306eu3067u3001u3053u308cu306fu307eu3063u305fu304fu554fu984cu3042u308au307eu305bu3093uff01

u30d0u30c3u30afu30a8u30f3u30c9u306bu306fu3001u30a8u30fcu30b8u30a7u30f3u30c8u30e1u30e2u30e3u30a8u3001u30cfu30fcu30c8u30d3u30fcu30c8/ack POST u30eau30afu30a8u30b9u30c8u3092u4ecbu3057u305fu30bbu30c3u30b7u30e7u30f3 u7dadu6301u30e1u30abu30cbu30bau30e0u306au3069u3001u9762u767du3044u6280u8853u7684u306au8a73u7d30u304cu3044u304fu3064u304bu3042u308au307eu3059u3002u305fu3060u3001u3053u308cu3089u3082u3053u306eu30d6u30edu30b0u306eu7bc4u56f2u3092u8d85u3048u3066u30b7u30f3u30d7u30ebu306au3082u306eu306au306eu3067u3001u8a73u3057u304fu77e5u308au305fu3044u65b9u306fu3001u3053u306eu30bdu30d5u30c8u30a6u30a7u30a2u306e u516cu5f0f GitHub u30eau30ddu30b8u30c8u30ea u3092u30c1u30a7u30c3u30afu3059u308bu3053u3068u3092u304au3059u3059u3051u3057u307eu3059u3002


u30afu30edu30b9u30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0u306e Desktop u30a2u30d7u30eau3092u4f5cu6210u3059u308b 

u3053u3053u307eu3067u3001AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu80ccu5f8cu306bu3042u308bu30e1u30abu30cbu30bau30e0u3060u3051u3067u306au304fu3001u3053u306eu6700u65b0u306e Strands Agent u306eu7d71u5408u306bu3088u308au3001u81eau8eabu306eu30a8u30fcu30b8u30a7u30f3u30c8u578b AI u30e2u30c7u30ebu306bu9ad8u5ea6u306eu30d3u30c7u30aa u30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9u30aau30d7u30b7u30e7u30f3u3092u3044u304bu306bu7c21u5358u306bu5b9fu88c5u3067u304du308bu3088u3046u306bu306au3063u305fu304bu3092u7406u89e3u3057u3066u3044u305fu3060u3051u305fu3068u601du3044u307eu3059u3002 

u3053u308cu3089u3092u982du306bu5165u308cu3066u3001u3088u3046u3084u304fu30d5u30edu30f3u30c8u30a8u30f3u30c8 Desktop u30a2u30d7u30eau306eu958bu767au3092u59cbu3081u3089u308cu307eu3059u3002 u3053u306eu30a2u30d7u30eau306eu516cu5f0f u30c6u30c3u30af u30b9u30bfu30c3u30afu306f ElectronJS u304au3088u3073 NodeJS u306au306eu3067u3001u30eau30ddu30b8u30c8u30eau304bu3089u30b3u30fcu30c9u3092u30d7u30ebu3059u308bu524du306bu305du308cu3089u304fu30a4u30f3u30b9u30c8u30fcu30ebu3055u308cu3066u3044u308bu3053u3068u3092u78bau8a8du3057u3066u304fu3060u3055u3044uff01

u307eu305au306fu3001u30d5u30a1u30a4u30eb u69cbu9020u3092u30cdu30c4u30afu3057u305fu3044u3068u601du3044u307eu3059u3002

u30d5u30edu30f3u30c8u30a8u30f3u30c8u306eu958bu767au306bu3064u3044u3066u306fu3001u3053u306eu30d6u30edu30b0u306f AgentCore u3068 TwelveLabs u306bu30d5u30a9u30fcu30abu30b9u3059u308bu305fu3081u8a73u3057u304fu306fu66f8u304du307eu305bu3093u304cu3001u3053u306e Desktop u30a2u30d7u30eau306eu4f5cu6210u306fu3001ReactJS Web u30b5u30a4u30c8u306eu30aau30a2u4f5cu6210u3068u307eu3063u305fu304fu540cu3058u3067u3059u3002 u7279u306bu3001u3053u306eu30d5u30edu30f3u30c8u30a8u30f3u30c8 Desktop u30a2u30d7u30eau306fu9ad8u3044u30e2u30b8u30e5u30fcu30ebu6027u3092u5099u3048u3001u30d5u30edu30f3u30c8u30a8u30f3u30c8u306eu30b3u30f3u30ddu30fcu30cdu30f3u30c8u3001u30b3u30f3u30c6u30adu30b9u30c8u3001u304au3088u3073 main.js u306bu57fau3065u304fu30edu30b8u30c3u30afu306bu5206u304bu308cu3066u3044u307eu3059u3002

u4e0au306fu516cu5f0fu306eu6280u8853u7684u30a2u30fcu30adu30c6u30afu30c1u30e3u3067u3059u3002u3053u306e Desktop u30a2u30d7u30ea u304cu6b8bu308au306eu30bdu30d5u30c8u30a6u30a7u30a2 u306bu3069u306eu3088u3046u306bu30d5u30a3u30c3u30c8u3059u308bu304bu3092u6b63u78bau306bu793au3057u3066u3044u307eu3059u3002 u6240u8208u3059u308bu3068u3001u30ecu30eau30fcu30b9u304bu3089 MacOS u3068 Windows u306eu4e21u65b9u306eu30bfu30fcu30b2u30c3u30c8u3092u30d3u30ebu30c9u3059u308bu30bfu30e0u306b GitHub Actions u3092 CI/CD u30d4u30d7u30e9u30a4u30f3u3068u3057u3066u4f7fu7528u3057uff08u3053u3053u306eu30eau30eau30fcu30b9u304bu3089u30c0u30a6u30f3u30edu30fcu30c9u3067u304du307eu3059uff09u3001FFmpeg u3068 NodeJS u3092u4f7fu3063u3066u30d3u30c7u30aa u306eu524du51e6u7406 u3092u884cu3044u307eu3059u3002 u6700u5f8cu306b NodeJS u304c AWS AgentCore u304bu3089u30dbu30b9u30c8u3055u308cu3066u3044u308b API u30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3092u76f4u63a5u547cu3073u51fau3057u3001u81eau8eabu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu30a2u30afu30bbu30b9u3057u307eu3059u3002

u3053u306eu8a73u7d30u306au30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3u3053u3061u3089u3067u3001u4e3bu8981u306eu6c7au5b9au3084u6280u8853u7684u30a2u30fcu30adu30c6u30afu30c1u30e3u306bu3064u3044u3066u66f4u306bu5b66u3076u3053u3068u3092u5f37u304fu304au3059u3059u3081u3057u307eu3059u3002


u304au308fu308au306b

u304au3081u3067u3068u3046u3054u3056u3044u307eu3059uff01 ududf89 u3053u306eu30c1u30e5u30fcu30c8u30eau30a2u30ebu3092u30cdu30c4u30afu3057u3001Strands Agent u30d5u30ecu30fcu30e0u30efu30fcu30afu304bu3089 AWS AgentCore u30a8u30fcu30b8u30a7u30f3u30c8u3092u4f5cu6210u3059u308bu65b9u6cd5u3060u3051u3067u306au304fu3001u30a8u30fcu30b8u30a7u30f3u30c8u578b AI u306bu95a2u3059u308bu65e5u5e38u306eu698bu5ff5u3092u591au304fu5b66u3076u3053u3068u304fu3067u304du307eu3057u305fu3002 u3055u3089u306bu3001TwelveLabs u306eu3088u3046u306au9ad8u5ea6u306eu30d3u30c7u30aa u30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9 u30c6u30afu30ceu30edu30b8u30fc u3092u81eau8eabu306eu30a8u30fcu30b8u30a7u30f3u30c8u578b AI u306bu7d71u5408u3059u308bu306eu304cu3044u304bu306bu7c21u5358u304bu3092u5b66u3076u3053u3068u304cu3067u304du307eu3057u305fu3002

u66f4u306au308bu8a73u7d30u306au30eau30bdu30fcu30b9u306fu3053u3061u3089u306bu3042u308au307eu3059uff1a

  1. u516cu5f0f GitHub u30eau30ddu30b8u30c8u30ea: https://github.com/nathanchess/twelvelabs-agentcore-demo 

  2. u6280u8853u30a2u30fcu30adu30c6u30afu30c1u30e3u30c0u30a4u30a2u30b0u30e9u30e0 (LucidChart): https://lucid.app/lucidchart/40b7aa79-6da6-4bed-bd63-5f34e3955685/edit?viewport_loc=424%2C-502%2C4025%2C1778%2C0_0&invitationId=inv_ba388ce0-6ad8-4f77-9ac1-c8a4edc405db 

  3. u3053u306eu30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306eu516cu5f0fu30eau30eau30fcu30b9: https://github.com/nathanchess/twelvelabs-agentcore-demo/releases/tag/v1.0.0 

  4. Strands Agent u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3: https://strandsagents.com/latest/ 

  5. AgentCore u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3: https://aws.amazon.com/bedrock/agentcore/

u306fu3058u3081u306bu3011

Zoomu3067u306eu30a8u30f3u30b8u30cbu30a2u306eu65e5u6b21u30b9u30bfu30f3u30c2u30a2u30c3u30d7u304bu3089u3001u6221u7528u6245u5f53u8005u306e1u65e5u306b5u56deu8c03u3059u308bu5019u88dcu8005u306eu9762u63a5u307eu3067u3001u50cdu304fu30d7u30edu30d5u30a7u30c3u30b7u30e7u30cau30ebu306au3089u3060u308cu3082u3001u65e5u5e38u696du52d9u306bu304au3044u3066u4f1au8b70u304cu3044u304bu306bu983bu7e41u3067u91cdu8981u304bu3092u77e5u3063u3066u3044u307eu3059u3002Zoom u306eu3088u3046u306au4e3bu8981u306au4f1au8b70u30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0u306bu3088u308bu3068u3001u5e73u5747u7684u306au5f93u696du54e1u306fu5e74u9593u3067u304au3088u305d 392u6642u9593u3092u4f1au8b70u306bu8cbbu3084u3057u3066u3044u307eu3059u3002u3053u308cu3089u306eu4f1au8b70u306eu30d3u30c7u30aau30a2u30fcu30abu30a4u30d6u3001u30e1u30e2u3001u305du3057u3066u5fd8u308cu304cu3061u306a ToDo u30eau30b9u30c8u304cu5927u91cfu306bu3042u308bu305fu3081u3001u5f93u696du54e1u3084u4f01u696du306fu3001u4f1au8b70u5f8cu306eu975eu751fu7523u7684u306au4efbu52d9u3084u30d3u30c7u30aau306eu65e5u5e38u306bu808cu305au6ed1u3089u3055u308cu306au304cu3089u3055u308cu3066u3044u307eu3059u3002

u3082u30571000u6642u9593u4ee5u4e0au306eu30d3u30c7u30aau30b3u30f3u30c6u30f3u30c4u304bu3089u7279u5b9au306eu77acu9593u3092u7c21u5358u306bu691cu7d22u3057u3001u4f1au8b70u30fbu30b3u30f3u30c6u30f3u30c4u306eu30d1u30fcu30bdu30cau30e9u30a4u30bau3055u308cu305fu56deu7b54 u3092u898bu3064u3051u308bu65b9u6cd5u304cu3042u3063u305fu3089u3069u3046u3067u3057u30e7u30a6uff1f u3055u3089u306bu305du308cu3060u3051u3067u306au304fu3001u3053u308cu3089u306eu6d1eu5bdfu3092 Slack u306eu3088u3046u306au4ebau6c17u306eu3042u308bu30b3u30dfu30e5u30cbu30b1u30fcu30b7u30e7u30f3u30d7u30e1u30fcu30d5u30a9u30fcu30e0u3092u4ecbu3057u3066u3001u4f01u696du5168u4f53u306bu3059u3050u306bu63d0u4f9bu3067u304du308bu3068u3057u305fu3089u3069u3046u3067u3057u30e7u30a6u304buff1f

TwelveLabs u3068 AWS Strands Agent u306eu6700u65b0u306eu7d71u5408u306eu304au304bu3052u3067u3001u3053u308cu306fu3082u306fu3084u5922u3067u306fu3042u308au307eu305bu3093u3002 u5b9fu969bu306bu3001u4ecau65e5u306eu30c1u30e5u30fcu30c8u30eau30a2u30ebu3067u306f AWS AgentCoreu3001TwelveLabsu3001u304au3088u3073 ElectronJS u3092u4f7fu7528u3057u3066u3053u306eu6a5fu80fdu3092u4e00u304bu3089u69cbu7bc9u3057u3066u3044u304du307eu3059u3002


u30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306eu30c7u30e2

u30b3u30fcu30c7u30a3u30f3u30b0u3092u59cbu3081u308bu524du306bu3001u69cbu7bc9u3059u308bu30a2u30d7u30eau3092u7c21u5358u306bu30d7u30ecu30d3u30e5u30fcu3057u3066u307fu307eu3057u30e7u30a6u3002

u3054u81eau8eabu306e MacOS u307eu305fu306f Windows u30c7u30d0u30a5u30b9u3067u304au8a66u3057u306bu306au308au305fu3044u5834u5408u306fu3001u6700u65b0u306eu30eau30eau30fcu30b9u3092u30c0u30a6u30f3u30edu30fcu30c9u3059u308bu304bu3001u4ee5u4e0bu306eu30b3u30fcu30c9u30d9u30fcu30b9u3092u30d7u30ecu30d3u30e5u30fcu3057u3066u304fu3060u3055u3044u3002

u4f5cu6210u3059u308bu3082u306eu304cu5206u304bu3063u305fu3068u3053u308du3067u3001u3055u3063u305du304fu4f5cu6210u306bu53d6u308au639bu304bu308au307eu3059u263aufe0f!


u5b66u7fd2u76eeu6a19

u3053u306eu30c1u30e5u30fcu30c8u30eau30a2u30ebu3067u306fu4ee5u4e0bu3092u884cu3044u307eu3059u3002

  • AWS AgentCore u306bu30d7u30edu30c0u30afu30b7u30e7u30f3u5229u7528u306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3092u30c7u30d7u30edu30a4u3057u3001AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u5185u306e Bedrocku3001OpenAIu3001Ollama u306au3069u306eu3055u307eu3056u307eu306a LLM u30d7u30edu30d0u30a4u30c0u30fcu3092u6d3bu7528u3059u308bu3002

  • Strands Tools u4ee5u5916u306eu5916u90e8u30b5u30fcu30d3u30b3u3068u3082u4ea4u4fe1u3067u304du308bu3088u3046u306bu3001u30abu30b9u30bfu30e0u30c4u30fcu30ebu3092u958bu767au3059u308bu3002

  • u4e8bu524du306bu7d44u307fu8fbcu307eu308cu305fu30c4u30fcu30ebu3092u4f7fu3063u3066u3001u5916u90e8u306e Slack u3084 TwelveLabs u3092 AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu7d71u5408u3059u308bu3002

  • AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u3068 CloudWatch u306eu3085u306au30b5u30fcu30d3u30b3u3092u5229u7528u3057u3001AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu89b3u6e2cu53efu80fdu6027u3092u8ffdu52a0u3057u3001u7cbeu78bau306au30b3u30b9u30c8u898bu7c4du308au3084u30c7u30d0u30c3u30b0 u30edu30b0u3092u5f97u3089u308cu308bu3088u3046u306bu3059u308bu3002 

  • ElectronJS u3092u4f7fu7528u3057u3066u3001u81eau8eabu306eu30afu30edu30b9u30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0 Desktop u30a2u30d7u30eau200bu3092u30b3u30f3u30d1u30a4u30ebu3059u308bu3002


u524du63d0u6761u4ef6


Strands Agent u3067u30a8u30fcu30b8u30a7u30f3u30c8u3092u69cbu7bc9u3059u308b

Slackbot u3084 TwelveLab u306eu30d3u30c7u30aa u30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9 u30e2u30c7u30eb u306eu3088u3046u306au6a5fu80fdu3092u7d71u5408u3059u308bu524du306bu3001AI u30a8u30fcu30b8u30a7u30f3u30c8 u306bu3042u308bu6839u5e95u306eu30e1u30abu30cbu30bau30e0u3092u7406u89e3u3059u308bu3053u3068u304cu91cdu8981u3067u3059u3002 Strands Agent u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3 u306bu3088u308bu306tu3001AI u30a8u30fcu30b8u30a7u30f3u30c8 u306fu4e3bu306bu8ffdu52a0u306eu30aau30fcu30b1u30b9u30c8u30ecu30fcu30b7u30e7u30f3 u30ecu30a4u30e4u30fcu3092u5099u3048u305f LLM u3067u3059u3002 u3053u306eu30aau30fcu30b1u30b9u30c8u30ecu30fcu30b7u30e7u30f3 u30ecu30a4u30e4u30fcu306bu3088u308au3001LLM u306fu60c5u5831u691cu7d22u3001u30c7u30fcu30bfu30d9u30fcu30b9u7167u4f1au3001u30b3u30fcu30c9u5b9fu884cu306au3069u3001u3055u307eu3056u307eu306au7406u7531u3067u884cu52d5u3092u8d77u3053u3059u3053u3068u304cu3067u304du307eu3059u3002

ud83dudca1 u3053u306eu30aau30fcu30b1u30b9u30c8u30ecu30fcu30b7u30e7u30f3 u30ecu30a4u30e4u30fcu5168u4f53u306fu3001u30a8u30fcu30b8u30a7u30f3u30c8 u30ebu30fcu30d7 (Agent Loop) u3068u3057u3066u77e5u3089u308cu3066u3044u307eu3059u3002

u56f31: AWS Strands u304bu3089u306eu30a8u30fcu30b8u30a7u30f3u30c8 u30ebu30fcu30d7u306eu5185u5bb9

ud83dudca1 u30c4u30fcu30eb (Tool): u5165u529bu3068u30b3u30f3u30c6u30adu30b9u30c8u306bu57fau3065u3044u3066u3001u63a8u8ad6 LLM u304cu7279u5b9au306eu30a2u30afu30b7u30e7u30f3u306bu30a2u30afu30bbu30b9u3055u305bu308bu3088u3046u306bu30d5u30a9u30fcu30deu30c3u30c8u3055u308cu305fu3001u76f4u63a5u95a2u6570u547cu3073u51fau3057u307eu305fu306f APIu3002

u4e0au306eu56f3u3067u306fu3001u4e2du592eu306bu3001u30c4u30fcu30ebu5b9fu884cu3001u30c4u30fcu30ebu9078u629eu3001u304au308fu3073u63a8u8ad6 (LLM) u3092u542bu3080u8ffdu52a0u306eu30dcu30c3u30afu30b9u304cu3042u308bu306eu304cu898bu3048u307eu3059u3002 u3053u308cu3089u306eu30b9u30c6u30c3u30d7u306fu3001u3059u3079u3066u6700u3082u91cdu8981u306au76eeu7684u3092u679cu305fu3057u3066u3044u307eu3059u3002

  1. u63a8u8ad6 (LLM) u2014 u4e0eu3048u3089u308cu305fu5165u529bu306bu5bfeu3057u3066u3001u6b63u3057u3044u30c4u30fcu30ebu3001u307eu305fu306fu30cbu30fcu30c9u306bu5d50u3058u305fu30c4u30fcu30ebu306eu547cu3073u51fau3057u304cu5fc5u8981u304bu3069u3046u304bu3092u8131u51fau3057u307eu3059u3002

  2. u30c4u30fcu30ebu9078u629e u2014 u30a8u30fcu30b8u30a7u30f3u30c8u306eu8a2du5b9au306bu57fau3065u3044u3066u3001u8981u6c42u3055u308cu305fu30c4u30fcu30ebu3092u691cu7d22u3057u307eu3059u3002

  3. u30c4u30fcu30ebu5b9fu884c u2014 u30c4u30fcu30ebu3092u5b9fu884cu3057u3001u7d50u679cu3092u63a8u8ad6 LLM u306bu623bu3057u3066u6b21u306eu30b9u30c6u30c3u30d7u3092u8131u51fau3057u307eu3059u3002 

u3053u306eu3088u3046u306au30d5u30ecu30fcu30e0u30efu30fcu30afu3092u69cbu7bc9u3059u308bu306eu306fu3069u306eu304fu3089u3044u96e3u3057u3044u306eu304bu3068u601du308fu308cu308bu304bu3082u3057u308cu307eu305bu3093u3002 u63a8u8ad6 LLM u304cu30c4u30fcu30ebu3092u8a8du8b58u3057u3001u3055u3089u306bu30aau30f3u30c7u30deu30f3u30c9u3067u30c4u30fcu30ebu3092u547cu3073u51fau3059u306bu306fu3069u3046u3059u308cu307eu3088u3044u306eu3067u3057u30e7u30a6u304buff1f LLM u304cu89e3u91c8u3059u308bu305fu3081u306bu3001u3069u306eu3088u3046u306bu30c4u30fcu30ebu3092u9069u5207u306bu8aacu660eu3057u3066u610fu5473u3092u4e0eu3048u3089u308cu308bu306eu3067u3057u30e7u30a6u304buff1f u3053u308cu3089u306fu3059u3079u3066u96e3u3057u304fu8907u96d1u306au5c0fu30c6u30fcu30deu3067u3059u304cu3001u5e78u3044u306bu3082 AWS Strands Agent u304cu3059u3067u306bu4f5cu3063u3066u304fu308cu3066u3044u307eu3059u3002 

u3053u3053u3067u500bu3005u306eu698bu5ff5u3092u3059u3079u3066u8aacu660eu3059u308bu306eu306fu3053u306eu30d6u30edu30b0u306eu7bc4u56f2u5916u3067u3059u304cu3001Strands Agent u306eu30b3u30fcu30c9u30d9u30fcu30b9 (https://github.com/strands-agents) u3092u901au3058u3066u3001u3053u308cu3089u306eu8907u96d1u306au30e1u30abu30cbu30bau30e0u3092u6df1u304fu5b66u3076u3053u3068u3092u5f37u304fu304au52e7u3081u3057u307eu3059u3002 

u3053u306eu30d5u30ecu30fcu30e0u30efu30fcu30afu3092u4f7fu3046u3068u3001u30a8u30fcu30b8u30a7u30f3u30c8u306eu4f5cu6210u306fu4ee5u4e0bu306eu6570u884cu3067u6e08u307fu307eu3059u3002

from bedrock_agentcore.runtime import BedrockAgentCoreApp
from strands import Agent


app = BedrockAgentCoreApp()
agent = Agent()


@app.entrypoint
def invoke(payload):
    """Process user input and return a response"""
    user_message = payload.get("prompt", "Hello")
    result = agent(user_message)
    return {"result": result.message}


if __name__ == "__main__":
    app.run()

u3053u308cu3089u306eu30b8u30f3u30d7u30ebu306au6570u884cu3067u3001AI u30a8u30fcu30b8u30a7u30f3u30c8 u304cu4f5cu6210u3067u304du307eu3057u305fuff01 u305fu3060u3057u3001u307eu3060u30c4u30fcu30ebu3092u30d7u30edu30d3u30b8u30e7u30cbu30f3u30b0u3057u3066u3044u306au3044u305fu3081u3001u6a19u6e96u7684u306a LLM u306eu3088u3046u306bu52d5u4f5cu3057u3001u8ceau554f u3068 u56deu7b54 u306eu30bfu30b9u30afu306eu307fu3092u51e6u7406u3057u307eu3059u3002


TwelveLabs u3092 Strands Agent u306eu8ffdu52a0

u3059u3070u3089u3057u3044u3001u3053u308cu3067u5165u529bu3068u30b3u30f3u30c6u30adu30b9u30c8u304bu3089u8ceau554fu306bu7b54u3048u308bu3053u3068u306bu305fu3051u305f AI u30a8u30fcu30b8u30a7u30f3u30c8u304fu30d5u30ebu3067u52d5u4f5cu3059u308bu3088u3046u306bu306au308au307eu3057u305fu3002 u305fu3060u3057u3001u66f4u306bu30c6u30b9u30c8u3092u9032u3081u308bu3068u3001u3044u304fu3064u304bu306eu5236u9650u304cu898bu3064u304bu308au307eu3059uff1a

  1. u30d3u30c7u30aa u30c7u30fcu30bfu3001u307eu305fu306fu6587u5b57u5217u4ee5u5916u306eu30c7u30fcu30bf u30d5u30a9u30fcu30deu30c3u30c8u3092u9069u5207u306bu51e6u7406u3067u304du306au3044u3002

  2. u8ceau554fu3068u56deu7b54u306eu30bfu30b9u30afu306bu9650u5b9au3055u308cu3066u3044u3002

  3. u63a8u8ad6 LLM u304cu3069u306eu3085u306bu8003u3048u3001u3069u306eu3088u3046u306bu6c7au5b9au3059u308bu304bu306eu89b3u6e2cu53efu80fdu6027u304cu4e0du8db3u3057u3066u304au308au3001u30d7u30edu30c0u30afu30b7u30e7u30f3u306bu304au3051u308b AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu30c7u30d0u30c3u30b0u304cu304au305du307eu3064u306bu306au308au307eu3059 ( u5b9fu969bu306bu4f55u304cu8d77u3053u3063u3066u3044u308bu306eu304bu5206u304bu308au307eu305bu3093 ud83dude32)

AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu6a5fu80fdu3092u62e1u5f35u3059u308bu305fu3081u306bu3001u30b3u30fcu30c9u306bu30c4u30fcu30ebu3092u5c0eu5165u3059u308bu5fc5u8981u304cu3042u308au307eu3059uff01 u524du8ff0u306eu3068u304au308au3001u30c4u30fcu30ebu306f LLM u304cu76f4u63a5u30a2u30afu30bbu30b9u3067u304du308bu76f4u63a5u5f15u6570u307eu305fu306f API u547cu3073u51fau3057u306bu306au308bu5012u5411u304cu3042u308au307eu3059u3002 Strands Agent u3067u306fu3001u3053u308cu3089u306f2u3064u306eu65b9u6cd5u3067 AI u30a8u30fcu30b8u30a7u30f3u30c8 u306bu63d0u4f9bu3067u304du307eu3059uff1a


1 - strands_tools Python u30d1u30c3u30b1u30fcu30b8u304cu63d0u4f9bu3059u308bu30c7u30d5u30a2u30ebu30c8u30c4u30fcu30ebuff1a

u56f32: Strands Agent Tools u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3

Strands Agent u306fu3001AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu8ffdu52a0u3067u304du308bu30c7u30d5u30a2u30ebu30c8u306eu30c4u30fcu30ebu3092 20+ u4ee5u4e0au63d0u4f9bu3057u3066u3044u307eu3059u3002 u3053u308cu3089u306eu30c4u30fcu30ebu306fu3001u30b7u30a7u30ebu3067u306eu30b8u30f3u30d7u30ebu306au30d5u30a1u30a4u30ebu64cdu4f5cu304bu3089u3001Slacku3001TwelveLabsu3001AWS u3078u306eu76f4u63a5u306eu30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0u7d71u5408u307eu3067u591au5c90u306bu308fu305fu308au307eu3059u3002

u3053u306eu30d7u30edu30b8u30a7u30afu30c8u3067u306fu3001u4ee5u4e0bu306eu30c4u30fcu30ebu3092u4f7fu7528u3057u307eu3059uff1a

  1. TwelveLabs u2014 Pegasus u3068u65b0u3057u3044 Marengo 3.0 u30e2u30c7u30eb u306bu3088u308bu30d9u30fcu30b9u306eu30d3u30c7u30aau30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9u3092u63d0u4f9bu3057u307eu3059u3002

  2. Slack u2014 SlackBot u3067u4f01u696du3068u76f4u63a5u4ea4u4fe1u3067u304du308bu3088u3046u306bu3057u307eu3059u3002

    1. u6ce8: u8a8du8a3cu60c5u5831u306f Slack u30dcu30c3u30c8 u3068 Slack App u30c8u30fcu30afu30f3 u3092u4ecbu3057u3066u63d0u4f9bu3059u308bu5df1u5fc5u8981u304cu3042u308au307eu3059u3002

  3. Environment u2014 u74b0u5883u5909u6570u3092u8a2du5b9au3059u308bu30b8u30f3u30d7u30ebu306eu30c4u30fcu30ebu3001AgentCore u30bbu30c3u30b7u30e7u30f3u51e6u7406u306eu59d4u30cdu306bu306au308au307eu3059u3002

u3053u308cu3089u306eu30c4u30fcu30ebu306eu8ffdu52a0u306fu3001u30a8u30fcu30b8u30a7u30f3u30c8u306eu4f5cu6210u3068u540cu69d8u306bu3001u6570u884cu306eu30b3u30fcu30c9u3067u7c21u5358u306bu884cu3048u307eu3059uff1a

from strands import Agent
from strands_tools import calculator, file_read, shell


# Add tools to our agent
agent = Agent(
    tools=[calculator, file_read, shell]
)


# Agent will automatically determine when to use the calculator tool
agent("What is 42 ^ 9")


print("\n\n")  # Print new lines


# Agent will use the shell and file reader tool when appropriate
agent("Show me the contents of a single file in this directory")

u4e0au306eu30b3u30fcu30c9 u30b9u30cbu30dau30c3u30c8u3067u304au6c17u3065u304du306eu3068u304au308au3001u5358u306b strands_tools u3092u4f7fu7528u3057u3066u5fc5u8981u306au30c4u30fcu30ebu3092u30a4u30f3u30ddu30fcu30c8u3057u3001u3053u308cu3089u306eu30c4u30fcu30ebu3092 Agent() u5185u306eu8ffdu52a0u30d1u30e9u30e1u30fcu30bfu30fcu3068u3057u3066u30d7u30e9u30b0u30a4u30f3u3059u308bu3060u3051u3067u3059u3002 u3053u308cu3060u3051u3067u3001u30a8u30fcu30b8u30a7u30f3u30c8 u306eu6a5fu80fdu304cu518du3073u62e1u5f35u3055u308cu3001u30a2u30afu30b7u30e7u30f3 u200bu3092u8d77u3053u3059u3053u3068u304cu3067u304du308bu3088u3046u306bu306au308au307eu3059uff01 u4e0au8a18u3067u8aacu660eu3057u305f u30a8u30fcu30b8u30a7u30f3u30c8 u30ebu30fcu30d7 u5168u4f53u304cu30d0u30c3u30afu30b0u30e9u30a6u30f3u30c9u3067u5b9fu884cu3055u308cu307eu3059u304fu3001u5fc5u8981u306bu5f5cu3058u3066u96fbu5353u3001u30d5u30a1u30a4u30ebu30aau30fcu30d7u30f3u3001u30cau30a7u30eb u306eu30c4u30fcu30eb u3092u547cu3073u51fau3059u3053u3068u304cu3067u304du308bu3088u3046u306bu306au308au307eu3059uff01


2 - Strands Agent u3092u4f7fu3063u3066 Python u3067u69cbu7bc9u3055u308cu305fu30abu30b9u30bfu30e0u30c4u30fcu30ebuff1a

u30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306bu30abu30b9u30bfu30e0 u30c4u30fcu30eb u3092u4f5cu6210u3059u308bu5fc5u8981u306fu3042u308au307eu305bu3093u304cu3001Strands Agent u306fu3001u5168u4f53u306eu95a2u6570u306eu307fu306au3089u305au3001u9069u5207u306bu53c2u7167u3067u304du308bu3088u3046u306bu95a2u6570u306bu95a2u9023u4ed8u3051u3089u308cu305fu30e1u30bfu30c7u30fcu30bf u3092u5b9au7fa9u3059u308bu3053u3068u3067u3001u30abu30b9u30bfu30e0 u30c4u30fcu30eb u3092u4f5cu6210u3059u308bu305fu3081u306eu4fbfu5229u306au30d5u30ecu30fcu30e0u30efu30fcu30af u3092u63d0u4f9bu3057u3066u3044u307eu3059u3002

from strands import tool


@tool
def weather_forecast(city: str, days: int = 3) -> str:
    """Get weather forecast for a city.


    Args:
        city: The name of the city
        days: Number of days for the forecast
    """
    return f"Weather forecast for {city} for the next {days} days..."

u4e0au306eu30b3u30fcu30c9 u30b9u30cbu30dau30c3u30c8u306b u3042u308bu3088u3046u306bu3001u95a2u6570u306eu4e0au306b @tool u30c7u30b3u30ecu30fcu30bfu30fcu3092u8ffdu52a0u3059u308bu3053u3068u3067uff0cu65e2u5b58u306eu95a2u6570u304bu3089u30c4u30fcu30ebu3092u4f5cu6210u3067u304du307eu3059u3002 docstring u306fu3001u30c4u30fcu30eb u63a8u8ad6u3067u63a8u8ad6 LLM u304cu89e3u91c8u3059u308bu30e1u30bfu30c7u30fcu30bfu3068u3057u3066u4f7fu7528u3055u308cu307eu3059u3002

u3053u308cu30892u3064u306eu30e1u30bdu30c3u30c9u3092u982du306bu5165u308cu3066u3001u81eau8eabu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu4ee5u4e0bu306eu30c4u30fcu30ebu3092u5b9fu88c5u3057u3066u307fu307eu3057u30e7u30a6uff01

import json
import os
import asyncio
from dotenv import load_dotenv


load_dotenv()


from bedrock_agentcore.runtime import BedrockAgentCoreApp
from strands import Agent
from strands_tools import environment
from custom_tools import chat_video, search_video, get_slack_channel_ids, get_video_index, slack, fetch_video_url


os.environ["BYPASS_TOOL_CONSENT"] = "true"
os.environ["STRANDS_SLACK_AUTO_REPLY"] = "true"
os.environ["STRANDS_SLACK_LISTEN_ONLY_TAG"] = ""


def get_tools():
    return [slack, environment, chat_video, search_video, get_slack_channel_ids, get_video_index, fetch_video_url]


app = BedrockAgentCoreApp()
agent = Agent(
    tools=get_tools()
)


# Track if socket mode has been started to avoid multiple starts
_socket_mode_started = False


@app.entrypoint
async def invoke(payload):
    """
    Process system request directly and ONLY from Electron app.
    """
    global _socket_mode_started


    system_message = payload.get("prompt")
   
    # Process the agent stream (independent of socket mode)
    stream = agent.stream_async(system_message)


    async for event in stream:
        if "data" in event:
            yield event['data']
   
if __name__ == '__main__':
    app.run()

u4e0au306eu30b3u30fcu30c9 u30b9u30cbu30dau30c3u30c8u3067u306fu3001u7279u306b strands_tools u304bu308bu30c4u30fcu30eb u3092u30edu30fcu30c9u3057u307eu3057u305fuff1a

  1. TwelveLabs: chat_video, search_video

  2. Slack: slack, get_slack_channel_ids

ud83dudca1u3053u308cu308au306eu30c4u30fcu30ebu306fu305du308cu305eu308cu306eu30c1u30fcu30e0u304bu3089u306eu516cu5f0fu306eu7d71u5408u3067u3059u304au3001AI u30a8u30fcu30b8u30a7u30f3u30c8u5411u3051u306eu30d7u30edu30c0u30afu30b7u30e7u30f3 u30ecu30d9u30ebu306eu30c4u30fcu30ebu304cu3069u306eu3088u3046u306bu66f8u304bu308cu3066u3044u308bu304bu3092u898bu308bu306bu306fu3001Strands Tools u30eau30ddu30b8u30c8u30ea u3092u3055u3089u306bu6df1u304fu30c0u30a4u30d6u3059u308bu3053u3068u3092u5f37u304fu304au52e7u3081u3057u307eu3059uff01

u3055u3089u306bu91cdu8981u306au306eu306fu3001TwelveLabs u3078u306eu6700u65b0u306eu7d71u5408u306eu304au304bu3052u3067u3001u30d3u30c7u30aa u30c7u30fcu30bfu3068u30a4u30f3u30bfu30e9u30afu30c8u3059u308bu30d7u30edu30c0u30afu30b7u30e7u30f3 u30ecu30d9u30ebu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3092 1u884cu306eu30b3u30fcu30c9u306bu30c7u30d0u30c3u30b0u3067u304du308bu3088u3046u306bu306au308au307eu3057u305fu3002 u8eabu8fd1u306au7d71u5408u306bu95a2u3059u308bu8a73u7d30u306fu3001u3053u306eu30d6u30edu30b0u306bu3042u308au307eu3059u3002


AWS AgentCore u306bu30c7u30d7u30edu30a4u3059u308b

u3053u308cu3067u30edu30fcu30abu30eb u30deu30b7u30f3u3067u52d5u4f5cu3059u308b AI u30a8u30fcu30b8u30a7u30f3u30c8u304cu3067u304du305fu306eu3067u3001u30a8u30f3u30c9u30e6u30fcu30b6u30fcu3082u3053u308cu3089u306eu7d20u6674u3089u3057u3044u30c4u30fcu30eb u3084 u30a8u30fcu30b8u30a7u30f3u30c8 u306bu30a2u30afu30bbu30b9u3067u304du308bu3088u3046u306bu30d7u30edu30c0u30afu30b7u30e7u30f3u306bu3082u3064u3066u3044u304fu5fc5u8981u304cu3042u308au307eu3059uff01 u5e78u3044u306au3053u3068u306bu3001Strands Agent u3092u4f7fu3046u3068u30011u3064u306eu30b3u30deu30f3u30c9u3067 AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u306bu30c7u30d7u30edu30a4u3067u304du307eu3059u3002

# Deploy to AWS

u3053u306eu30b3u30deu30f3u30c9u3092u5b9fu884cu3059u308bu3068u3001u30edu30fcu30abu30ebu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u306bu5bfeu3057u3066u3044u304fu306au3053u3068u304cu8d77u3053u308au307eu3059uff1a

  1. u30d7u30edu30b8u30a7u30afu30c8u306f Dockeru3001Finchu3001u307eu305fu306f Podman u3067u30b3u30f3u30c6u30cau5316u3055u308cu3001u30b3u30fcu30c9u3001u30edu30b8u30c3u30afu3001u304au3088u3073u30bcu30fcu30d3u30b9u306eu30abu30b9u30bfu30e0u30c4u30fcu30eb(u3042u308cu3070)u3092u4fddu6301u3059u308bu305fu3081u306bu3001AWS Elastic Container Registry u306bu30a2u30c3u30d7u30edu30fcu30c9u3055u308cu307eu3059u3002

u8d77u52d5u6642u306eu540du524du306bu5f5cu3058u3066 u30e6u30cbu30fcu30afu306au30eau30ddu30b8u30c8u30ea URI u304cu5272u308au5f53u3066u3089u308cu3001ECR u30c0u30c3u30b7u30e5u30dcu30fcu30c9u5185u3067u8868u793au53efu80fdu306bu306au308au307eu3059u3002

  1. Docker u30d5u30a1u30a4u30ebu304cu81eau52d5u751fu6210u3055u308cu3001u5fc5u8981u306au4f9du5b58u95a2u4fc2u3092u30a4u30f3u30b9u30c8u30fcu30ebu3057u3001u30ddu30fcu30c8u3092u8ee2u9001u3057uff08AI u30a8u30fcu30b8u30a7u30f3u30c8u304c API u306eu3088u3046u306bu547cu3073u51fau305bu308bu3088u3046u306bu3059u308bu305fu3081uff09u3001u7279u5b9au306eu30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3092u5b9fu884cu3059u308bu3088u3046u306bu3057u307eu3059u3002

FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim
WORKDIR /app


# All environment variables in one layer
ENV UV_SYSTEM_PYTHON=1 \
    UV_COMPILE_BYTECODE=1 \
    UV_NO_PROGRESS=1 \
    PYTHONUNBUFFERED=1 \
    DOCKER_CONTAINER=1 \
    AWS_REGION=us-east-1 \
    AWS_DEFAULT_REGION=us-east-1


COPY requirements.txt requirements.txt


# Install from requirements file
RUN uv pip install -r requirements.txt


# Install FFmpeg
RUN apt-get update && \
    apt-get install -y ffmpeg && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*


RUN uv pip install aws-opentelemetry-distro==0.12.2


# Signal that this is running in Docker for host binding logic
ENV DOCKER_CONTAINER=1


# Create non-root user
RUN useradd -m -u 1000 bedrock_agentcore
USER bedrock_agentcore


EXPOSE 9000
EXPOSE 8000
EXPOSE 8080


# Copy entire project (respecting .dockerignore)
COPY . .


# Use the full module path


CMD ["opentelemetry-instrument", "python", "-m", "agent"

u3053u306eu30b8u30f3u30d7u30ebu306au30d5u30a1u30a4u30eb u304c ECR u5185u306eu30b3u30f3u30c6u30cau306bu6e21u3055u308cu3001AWS AgentCore u304cu30a8u30fcu30b8u30a7u30f3u30c8u3092u30dbu30b9u30c8u3057u3088u3046u3068u3059u308bu6642u306bu3001u4f9du5b58u95a2u4fc2u3001u30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3001u304au3088u3073 API u3092u516cu958bu3059u308bu30ddu30fcu30c8 u304cu5206u304bu308bu3088u3046u306bu3057u307eu3059u3002

  1. AWS AgentCore u306fu7279u5b9au306eu30ddu30fcu30c8u3067 ECR u30b3u30f3u30c6u30cau3092u8d77u52d5u305cu3057u3001REST API u3068u3057u3066u52d5u4f5cu3057u307eu3059u3002

u3053u3053u3067u3001u30d0u30fcu30b8u30e7u30f3u5c65u6b74u3001u30e9u30f3u30bfu30a4u30e0u30bbu30c3u30b7u30e7u30f3u3001u30a8u30e9u30fcu7387u306au3069u3001AI u30c7u30d7u30edu30a4u30d5u30a1u30a4u30e9u30a4u30bau306bu95a2u3059u308bu30eau30a2u30ebu30bfu30a4u30e0 u30a2u30c3u30d7u30c7u30fcu30c8 u3084 u91cdu8981u306au30b9u30bfu30c3u30c8 u3092u78bau8a8du3067u304bu307eu3059uff01

ud83dudca1 u30b8u30f3u30d7u30ebu306au30c4u30fcu30ebu306eu30c0u30c3u30b7u30e5u30dcu30fcu30c9u306eu3088u3046u306bu898bu3048u307eu3059u304cu3001u89b3u6e2cu53efu80fdu6027u306fu30d7u30edu30c0u30afu30b7u30e7u30f3u5411u3051u306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3092u4f5cu6210u3059u308bu9645u306eu6700u3082u91cdu8981u306au8981u7d20u306e 1u3064u3067u3059u3002 u3053u308cu3089u306eu30b9u30bfu30c3u30c8u306bu3088u308au3001u6b63u78bau306au4fa1u683cu898bu7c4du308au3092u7b97u51fau3057u3001u30b3u30fcu30c9u304cu3069u3053u3067u5931u6557u3057u3066u3044u308bu304bu3001u307eu305fu30a2u30afu30c3u30c6u30a3u30d6u306au30c1u30e3u30c3u30c8u30bbu30c3u30b7u30e7u30f3u306eu6570u3092u78bau8a8du3067u304du307eu3059u3002

  1. Agentcore u30e9u30f3u30bfu30a4u30e0u306e CloudWatch u3078u306eu30eau30f3u30afu306bu3088u308au3001u30b3u30fcu30c9 u30ecu30d9u30ebu306eu89b3u6e2cu53efu80fdu6027u304cu8ffdu52a0u3055u308cu307eu3059u3002

AgentCore u30c0u30c3u30b7u30e5u30dcu30fcu30c9u3068u4e26u3093u3067u3001CloudWatch u30edu30b0u306fu3001u30b3u30fcu30c9 u30ecu30d9u30ebu306eu30a8u30e9u30fcu3068u3001u30d7u30edu30c0u30afu30b7u30e7u30f3u4e0au306e AI u30a8u30fcu30b8u30a7u30f3u30c8u3068 u3053u308cu307eu3067u306bu884cu308fu308cu305fu500bu3005u306eu30c1u30e3u30c3u30c8 u30bbu30c3u30b7u30e7u30f3u3054u3068 u306bu30fcu30ddu30fcu30c8u3092u63d0u4f9bu3057u307eu3059u3002 u3053u308cu3082u3001u30c7u30d0u30c3u30b0u306eu65b9u6cd5u306bu3064u3044u3066u306eu8cb4u91cdu306au9053u3057u308bu3079u3092u63d0u4f9bu3057u3066u304fu308cu307eu3059u3002

u3053u308cu3067u3001Strands Agent u3092u4f7fu3063u305f TwelveLabs u3068 Slack API u306bu30a2u30afu30bbu30b9u3057u305f AI u30a8u30fcu30b8u30a7u30f3u30c8 u304fu5b8cu5168u306bu30c7u30d7u30edu30a4u3055u308cu307eu3057u305fuff01 ud83cudf89


u30a8u30fcu30b8u30a7u30f3u30c8u306eu6280u8853u7684u306au30a2u30fcu30adu30c6u30afu30c1u30e3

u30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306eu30d5u30edu30f3u30c8u30a8u30f3u30c9u306eu69cbu7bc9u306bu3046u3064u308bu524du306bu3001u30d0u30c3u30afu30a8u30f3u30c9u3092u3053u306eu3088u3046u306bu4f5cu6210u3057u305fu4e3bu8981u306eu8981u56e0u3092u6df1u304fu7406u89e3u3057u3066u304au304fu3053u3068u304cu91cdu8981u306eu304au3067u3059u3002 u4ee5u4e0bu306f LucidCharts u3067u66f8u304bu308cu305fu6280u8853u7684u306eu30a2u30fcu30adu30c6u30afu30c1u30e3 u3067u3001u30d0u30c3u30afu30a8u30f3u30c9u5185u3067u30c7u30fcu30bf u30eau30d5u30a1u30ecu30f3u30b9 u304cu3069u306eu3088u3046u306bu6d41u308cu308bu304bu3092u8a73u3057u304fu793au3057u3066u3044u307eu3059u3002

u4e0au306eu30a2u30fcu30adu30c6u30afu30c1u30e3u304bu3089u5206u304bu308bu3088u3046u306bu3001Strands Agent u306fu81eau8eabu306e AI u30a8u30fcu30b8u30a7u30f3u30c8 u306eu57fau790eu30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3068u3057u3066u6a5fu80fdu3057u3001u30a8u30fcu30b8u30a7u30f3u30c8u30ebu30fcu30d7u306eu30c4u30fcu30ebu3092u6c7au5b9au3057u3001u3053u306eu5ea6u306fSlacku3001TwelveLabsu3001u307eu305fu306fu30d3u30c7u30aa u524du51e6u7406u306eu305fu3081u306e FFmpeg u306eu3044u305au308cu304b 3u3064u306eu30c4u30fcu30ebu304bu3089u9078u3076u30aau30d7u30b7u30e7u30f3u3092u5099u3048u3066u3044u307eu3059u3002

u7279u7b46u3059u3079u304du306fu3001AgentCore u3067 AWS EC2 u30b9u30ddu30c3u30c8u30a4u30f3u30b9u30bfu30f3u30b9u3092u4f7fu7528u3057u3066u3044u308bu306eu305fu3081u3002 u3053u306eu30afu30e9u30a6u30c9u30b5u30fcu30d0u30fcu306fu3001AgentCore u306eu30c7u30d5u30a2u30ebu30c8u30b5u30fcu30d0u30fcu3068u3057u3066u81eau52d5u7684u306bu30d7u30edu30d3u30b8u30e7u30cbu30f3u30b0u3055u308cu307eu3059u3002 u306au305cu3060u304bu5206u304bu308au307eu3059u304buff1f

ud83dudca1u5b66u7fd2u306eu6a5fu4f1a: u30b9u30ddu30c3u30c8 u30a4u30f3u30b9u30bfu30f3u30b9u306fu3001AWS u30a8u30b3u30b7u30b9u30c6u30e5u30e0u5185u3067u4f7fu7528u3055u308cu3066u3044u306au3044 EC2 u30a2u30a2u30a6u30a4u30f3u30bfu30f3u30b9 u3067u3059u3002 u3053u308cu306fu3001u30afu30e9u30a6u30c9u30eau30bdu30fcu30b9u306eu4e00u8cabu3057u305fu9577u671fu7684u306au4e88u7d04u3092u5fc5u8981u3068u3057u306au3044u5834u5408u3002 u30aau30a2u30afu30e9u30a6u30c9u30b3u30f3u30d4u30e5u30fcu30c6u30a3u30f3u30dcu30b3u30b9u30c8u306eu5bc4u4e0eu304cu5927u304du304fu524au6e1bu3067u304du308bu306eu3060u3051u306eu30a4u30f3u30b9u30bfu30f3u30b9u3067u3059u3002 AgentCore u306bu3068u3063u3066u3001u30afu30e9u30a6u30c9u8a08u7b97u306fu30d7u30edu30f3u30d7u30c8 u3054u3068u306bu5b9au671fu7684u306bu3057u304bu5fc5u8981u3067u306fu306au3044u306eu3067u3001u3053u308cu306fu307eu3063u305fu304fu554fu984cu3042u308au307eu305bu3093uff01

u30d0u30c3u30afu30a8u30f3u30c9u306bu306fu3001u30a8u30fcu30b8u30a7u30f3u30c8u30e1u30e2u30e3u30a8u3001u30cfu30fcu30c8u30d3u30fcu30c8/ack POST u30eau30afu30a8u30b9u30c8u3092u4ecbu3057u305fu30bbu30c3u30b7u30e7u30f3 u7dadu6301u30e1u30abu30cbu30bau30e0u306au3069u3001u9762u767du3044u6280u8853u7684u306au8a73u7d30u304cu3044u304fu3064u304bu3042u308au307eu3059u3002u305fu3060u3001u3053u308cu3089u3082u3053u306eu30d6u30edu30b0u306eu7bc4u56f2u3092u8d85u3048u3066u30b7u30f3u30d7u30ebu306au3082u306eu306au306eu3067u3001u8a73u3057u304fu77e5u308au305fu3044u65b9u306fu3001u3053u306eu30bdu30d5u30c8u30a6u30a7u30a2u306e u516cu5f0f GitHub u30eau30ddu30b8u30c8u30ea u3092u30c1u30a7u30c3u30afu3059u308bu3053u3068u3092u304au3059u3059u3051u3057u307eu3059u3002


u30afu30edu30b9u30d7u30e9u30c3u30c8u30d5u30a9u30fcu30e0u306e Desktop u30a2u30d7u30eau3092u4f5cu6210u3059u308b 

u3053u3053u307eu3067u3001AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu80ccu5f8cu306bu3042u308bu30e1u30abu30cbu30bau30e0u3060u3051u3067u306au304fu3001u3053u306eu6700u65b0u306e Strands Agent u306eu7d71u5408u306bu3088u308au3001u81eau8eabu306eu30a8u30fcu30b8u30a7u30f3u30c8u578b AI u30e2u30c7u30ebu306bu9ad8u5ea6u306eu30d3u30c7u30aa u30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9u30aau30d7u30b7u30e7u30f3u3092u3044u304bu306bu7c21u5358u306bu5b9fu88c5u3067u304du308bu3088u3046u306bu306au3063u305fu304bu3092u7406u89e3u3057u3066u3044u305fu3060u3051u305fu3068u601du3044u307eu3059u3002 

u3053u308cu3089u3092u982du306bu5165u308cu3066u3001u3088u3046u3084u304fu30d5u30edu30f3u30c8u30a8u30f3u30c8 Desktop u30a2u30d7u30eau306eu958bu767au3092u59cbu3081u3089u308cu307eu3059u3002 u3053u306eu30a2u30d7u30eau306eu516cu5f0f u30c6u30c3u30af u30b9u30bfu30c3u30afu306f ElectronJS u304au3088u3073 NodeJS u306au306eu3067u3001u30eau30ddu30b8u30c8u30eau304bu3089u30b3u30fcu30c9u3092u30d7u30ebu3059u308bu524du306bu305du308cu3089u304fu30a4u30f3u30b9u30c8u30fcu30ebu3055u308cu3066u3044u308bu3053u3068u3092u78bau8a8du3057u3066u304fu3060u3055u3044uff01

u307eu305au306fu3001u30d5u30a1u30a4u30eb u69cbu9020u3092u30cdu30c4u30afu3057u305fu3044u3068u601du3044u307eu3059u3002

u30d5u30edu30f3u30c8u30a8u30f3u30c8u306eu958bu767au306bu3064u3044u3066u306fu3001u3053u306eu30d6u30edu30b0u306f AgentCore u3068 TwelveLabs u306bu30d5u30a9u30fcu30abu30b9u3059u308bu305fu3081u8a73u3057u304fu306fu66f8u304du307eu305bu3093u304cu3001u3053u306e Desktop u30a2u30d7u30eau306eu4f5cu6210u306fu3001ReactJS Web u30b5u30a4u30c8u306eu30aau30a2u4f5cu6210u3068u307eu3063u305fu304fu540cu3058u3067u3059u3002 u7279u306bu3001u3053u306eu30d5u30edu30f3u30c8u30a8u30f3u30c8 Desktop u30a2u30d7u30eau306fu9ad8u3044u30e2u30b8u30e5u30fcu30ebu6027u3092u5099u3048u3001u30d5u30edu30f3u30c8u30a8u30f3u30c8u306eu30b3u30f3u30ddu30fcu30cdu30f3u30c8u3001u30b3u30f3u30c6u30adu30b9u30c8u3001u304au3088u3073 main.js u306bu57fau3065u304fu30edu30b8u30c3u30afu306bu5206u304bu308cu3066u3044u307eu3059u3002

u4e0au306fu516cu5f0fu306eu6280u8853u7684u30a2u30fcu30adu30c6u30afu30c1u30e3u3067u3059u3002u3053u306e Desktop u30a2u30d7u30ea u304cu6b8bu308au306eu30bdu30d5u30c8u30a6u30a7u30a2 u306bu3069u306eu3088u3046u306bu30d5u30a3u30c3u30c8u3059u308bu304bu3092u6b63u78bau306bu793au3057u3066u3044u307eu3059u3002 u6240u8208u3059u308bu3068u3001u30ecu30eau30fcu30b9u304bu3089 MacOS u3068 Windows u306eu4e21u65b9u306eu30bfu30fcu30b2u30c3u30c8u3092u30d3u30ebu30c9u3059u308bu30bfu30e0u306b GitHub Actions u3092 CI/CD u30d4u30d7u30e9u30a4u30f3u3068u3057u3066u4f7fu7528u3057uff08u3053u3053u306eu30eau30eau30fcu30b9u304bu3089u30c0u30a6u30f3u30edu30fcu30c9u3067u304du307eu3059uff09u3001FFmpeg u3068 NodeJS u3092u4f7fu3063u3066u30d3u30c7u30aa u306eu524du51e6u7406 u3092u884cu3044u307eu3059u3002 u6700u5f8cu306b NodeJS u304c AWS AgentCore u304bu3089u30dbu30b9u30c8u3055u308cu3066u3044u308b API u30a8u30f3u30c8u30eau30ddu30a4u30f3u30c8u3092u76f4u63a5u547cu3073u51fau3057u3001u81eau8eabu306e AI u30a8u30fcu30b8u30a7u30f3u30c8u306eu30a2u30afu30bbu30b9u3057u307eu3059u3002

u3053u306eu8a73u7d30u306au30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3u3053u3061u3089u3067u3001u4e3bu8981u306eu6c7au5b9au3084u6280u8853u7684u30a2u30fcu30adu30c6u30afu30c1u30e3u306bu3064u3044u3066u66f4u306bu5b66u3076u3053u3068u3092u5f37u304fu304au3059u3059u3081u3057u307eu3059u3002


u304au308fu308au306b

u304au3081u3067u3068u3046u3054u3056u3044u307eu3059uff01 ududf89 u3053u306eu30c1u30e5u30fcu30c8u30eau30a2u30ebu3092u30cdu30c4u30afu3057u3001Strands Agent u30d5u30ecu30fcu30e0u30efu30fcu30afu304bu3089 AWS AgentCore u30a8u30fcu30b8u30a7u30f3u30c8u3092u4f5cu6210u3059u308bu65b9u6cd5u3060u3051u3067u306au304fu3001u30a8u30fcu30b8u30a7u30f3u30c8u578b AI u306bu95a2u3059u308bu65e5u5e38u306eu698bu5ff5u3092u591au304fu5b66u3076u3053u3068u304fu3067u304du307eu3057u305fu3002 u3055u3089u306bu3001TwelveLabs u306eu3088u3046u306au9ad8u5ea6u306eu30d3u30c7u30aa u30a4u30f3u30c6u30eau30b8u30a7u30f3u30b9 u30c6u30afu30ceu30edu30b8u30fc u3092u81eau8eabu306eu30a8u30fcu30b8u30a7u30f3u30c8u578b AI u306bu7d71u5408u3059u308bu306eu304cu3044u304bu306bu7c21u5358u304bu3092u5b66u3076u3053u3068u304cu3067u304du307eu3057u305fu3002

u66f4u306au308bu8a73u7d30u306au30eau30bdu30fcu30b9u306fu3053u3061u3089u306bu3042u308au307eu3059uff1a

  1. u516cu5f0f GitHub u30eau30ddu30b8u30c8u30ea: https://github.com/nathanchess/twelvelabs-agentcore-demo 

  2. u6280u8853u30a2u30fcu30adu30c6u30afu30c1u30e3u30c0u30a4u30a2u30b0u30e9u30e0 (LucidChart): https://lucid.app/lucidchart/40b7aa79-6da6-4bed-bd63-5f34e3955685/edit?viewport_loc=424%2C-502%2C4025%2C1778%2C0_0&invitationId=inv_ba388ce0-6ad8-4f77-9ac1-c8a4edc405db 

  3. u3053u306eu30a2u30d7u30eau30b1u30fcu30b7u30e7u30f3u306eu516cu5f0fu30eau30eau30fcu30b9: https://github.com/nathanchess/twelvelabs-agentcore-demo/releases/tag/v1.0.0 

  4. Strands Agent u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3: https://strandsagents.com/latest/ 

  5. AgentCore u30c3u30afu30e1u30f3u30c6u30fcu30b7u30e7u30f3: https://aws.amazon.com/bedrock/agentcore/