BedrockとMCPでつくるビジョンAIとは
Amazon BedrockとModel Context Protocol(MCP)を組み合わせると、画像・動画の説明、物体検出、切り抜き、意味検索などを、AIエージェントが共通のツールとして選び分ける構成を作れます。AWS公式サンプルは、Strands Agents、Amazon Bedrock、Amazon Rekognition、Amazon S3、Amazon OpenSearchを2つのMCPサーバーで接続しています。
最初に役割を分けておくことが重要です。MCPは画像認識エンジンではないため、画像を理解したり物体を検出したりはしません。MCPはツールの発見と呼び出しを標準化し、Bedrockのマルチモーダルモデル、Rekognition、OpenSearchなどが実際のビジョン処理を担当します。
5つの構成要素と役割
| 構成要素 | 担当すること | 担当しないこと |
|---|---|---|
| UI/クライアント | 画像・動画の受付、質問、結果表示 | モデル判断や認可の代替 |
| Strandsエージェント | 依頼の解釈、ツール選択、複数手順の調整 | 画像解析APIそのもの |
| MCPサーバー | ツール定義、入力schema、呼び出し窓口 | 接続先サービスを越えた自動的な安全保証 |
| Bedrock/Rekognition | 画像・動画の説明、ラベル、bounding boxなどの推論 | 業務上の最終判断 |
| S3/OpenSearch | media保管、説明・embedding・metadataのindexと検索 | 保存目的・retention・閲覧権限の決定 |
AWS公式構成では、IAM roleを権限の入口にし、クライアントへ長期credentialを埋め込まない形を取ります。本番でremote MCPを集約するなら、AgentCore Gatewayでinbound authと接続先へのoutbound authを分ける方法もあります。ただし、認証済みであることと、その利用者が操作を許可されていることは別です。
処理の7段階
- 受付:拡張子だけでなくmagic bytes、MIME、file size、画像寸法を検査する
- 保管:mediaをS3へ置き、bucket名とobject keyを処理対象として受け渡す
- 意図判断:エージェントが「説明」「物体検出」「crop」「検索」など目的を分類する
- ツール選択:MCPのtool catalogから許可済みツールを選び、schemaに沿う引数を作る
- ビジョン処理:BedrockのマルチモーダルモデルやRekognitionが画像・動画を解析する
- 追加処理:必要に応じてcrop、背景除去、embedding生成、OpenSearchへのindex・検索を行う
- 応答:結果、confidence、根拠となるobject key、失敗理由を整理して利用者へ返す
Bedrock Converse APIは、対応モデルへ画像bytesまたはS3 URIを含むmessageを直接送れます。画像1枚を説明するだけなら、MCPを置かずConverseを直接呼ぶ方が単純です。複数サービスの選択・連携が必要になったときにMCPの価値が高まります。
直接呼び出しとMCP、固定workflowの選び方
| 方式 | 向くケース | 判断の目安 |
|---|---|---|
| Bedrockを直接呼ぶ | 画像1枚への質問、説明生成、固定された少数処理 | 使うmodelと処理が決まり、tool discoveryが不要 |
| MCP+エージェント | 説明、検出、crop、動画、検索を依頼ごとに選択・連携 | 複数ツールを共通interfaceで再利用したい |
| 固定workflow | 検品判定、登録・削除、通知など失敗時の影響が大きい処理 | 順序、承認、再実行、監査を決定論的に管理したい |
公式サンプルで使える主な機能
| 領域 | ツール例 | 実処理 |
|---|---|---|
| 画像理解 | describe_ | Bedrockのマルチモーダルmodelで説明 |
| 動画理解 | analyze_ | Amazon Novaで動画を分析 |
| 物体検出 | detect_ | Rekognitionでlabel、confidence、bounding boxを取得 |
| 画像加工 | crop_ | 検出座標を使って対象部分を切り出す |
| 背景除去・segment | remove_など | rembgやSAMを使う。AWS管理サービスではない |
| 画像catalog | description、embedding、ingest | BedrockとOpenSearchで説明・vector・metadataをindex |
| 意味検索 | text/image query | 文章または画像から類似画像を検索 |
元のブログにあるPNG、JPG、JPEG、GIF、WEBP、各種動画、最大200MBという記述は掲載されたStreamlitサンプルUIの受付条件です。Bedrock、Rekognition、各modelに共通する上限ではありません。実装時は利用するAPI、model、Regionの現行quotaとformatを個別に確認します。
3つの実務例
- 商品画像catalog:画像説明とmultimodal embeddingを作り、「白背景の青いマグ」などの自然文や類似画像から素材を探す
- 設備・現場の確認支援:対象物を検出して切り出し、担当者が確認すべき候補とconfidenceを返す。自動確定ではなく人の判定を残す
- visual memory:時刻、場所、object key、説明、embeddingを関連付けて過去sceneを検索する。人物追跡や監視へ使う場合は、目的、法的根拠、通知、保存期間、アクセス権を先に決める
導入の8ステップ
- 目的を1つに絞る:画像説明、検出、catalog検索など、正解を評価できるtaskから始める
- 評価setを作る:通常例、暗所・blur・小物体、未対応format、攻撃的入力を含む代表dataを用意する
- データ境界を決める:個人情報、機密区分、保存場所、retention、削除、学習利用可否を文書化する
- 処理方式を選ぶ:Bedrock直接、MCP+agent、固定workflowを複雑さと影響度で選ぶ
- tool contractを定義する:input schema、出力、timeout、上限、権限、side effect、errorを固定する
- 認証・認可を実装する:IAM最小権限、inbound/outbound auth、tool allowlist、利用者単位の認可を設ける
- 品質・安全・費用を比較する:task成功率、誤検出、tool選択、遅延、task単価、拒否率をdirect方式と比較する
- 段階公開する:read-only、小規模利用、人の確認から始め、監査logと失敗例を見て対象を広げる
本番導入前の注意点
- MCPを安全境界にしない:tool description、annotation、system promptだけで認可せず、server側で利用者、tool、引数、resourceを検証する
- 認証と認可を分ける:AgentCore Gatewayの
AUTHENTICATE_は本人確認であり操作許可ではない。policyまたは接続先で認可するONLY - no-authを本番へ置かない:remote MCPにはJWTやIAMなどのinbound authと、接続先ごとのoutbound credentialを設ける
- uploadを信用しない:拡張子、MIME、magic bytes、size、解像度、圧縮bomb、malwareを検査し、EXIFなど不要metadataを除く
- URL取得を制限する:許可domain、DNS再解決、redirect、private/loopback/link-local addressを検証してSSRFを防ぐ
- 画像内の命令を信用しない:画像、OCR text、tool resultに含まれる指示を命令として扱わず、許可された業務目的へ固定する
- 最小権限にする:IAM action、bucket prefix、model、Region、OpenSearch collectionを絞り、長期access keyをclientへ埋め込まない
- 保存を最小化する:S3暗号化、public access block、短いpresigned URL、object分離、retention、削除確認を設ける。private接続が必要ならVPCを検討する
- confidenceを正解とみなさない:Rekognitionのscoreやmodel回答は不確実。閾値別のfalse positive/negativeを測り、重要判断は人が確認する
- 人物利用を別審査にする:顔、生体情報、人物追跡は法務・privacy・差別リスクを確認し、用途外利用を禁止する
- side effectを承認制にする:検出結果を根拠に削除、通報、公開、課金などを自動実行しない。人の承認とrollbackを置く
- 観測可能にする:request ID、利用者、tool、引数の要約、object version、model、latency、cost、拒否理由を残し、機密値はredactする
評価と監視で見る指標
| 観点 | 確認する指標 |
|---|---|
| task品質 | 代表task成功率、説明の根拠性、再現性 |
| 検出品質 | precision、recall、false positive/negative、閾値別結果 |
| agent品質 | tool選択率、引数正確性、不要call、手順完了率 |
| 検索品質 | text/image queryのRecall@k、nDCG、zero-result率 |
| 体験 | p50/p95遅延、timeout、再試行、部分失敗 |
| 安全性 | 不正file・URL・tool・引数の拒否率、承認迂回件数 |
| 費用 | Bedrock、Rekognition、S3、OpenSearch、networkを含むtask単価 |
同じ評価setをBedrock直接呼び出し、MCP+agent、必要なら固定workflowで実行し、平均だけでなく失敗例を比較します。modelやtoolを変更したときも同じsetを再実行できるよう、入力、期待結果、判定理由、実行versionを保存します。
公式情報
関連する記事と支援
複数ツールの実行方式を深掘りする場合はAmazon Bedrock Programmatic Tool Calling、ツールの順序や利用量を制御する場合はAgentCore Temporal Policiesとレート制限も参考にしてください。自社画像で直接呼び出しとMCPを比較し、privacy・費用・運用まで小さく検証する場合は、AI活用・業務効率化支援で要件整理を支援しています。