👁

AgentCoreハーネスを作ろう

この章では、Amazon Bedrock AgentCoreハーネス(AgentCore harness)を、AWSマネジメントコンソールから作成し、ブラウザ画面のプレイグラウンドで会話しながら振る舞いを確認する流れをハンズオン形式で手を動かしながら体験します。マネジメントコンソール上での操作だけで、AgentCoreハーネスの基本動作を一通り理解することがこの章のねらいです。

  • AgentCoreハーネスの立ち位置と、コンソール操作だけで動くことを理解する
  • マネジメントコンソールからハーネスをクイック作成する
  • プレイグラウンドからハーネスに質問を投げ、応答を確認する
  • ハーネスの編集からシステムプロンプトを書き換え、挙動が変わる様子を確認する
  • 独自スキルをS3から読み込ませ、料理レシピアシスタントとして振る舞うハーネスを作る
  • 独自スキル付きのハーネスをローカルの Python から呼び出し、アプリケーションからの利用イメージをつかむ
  • AWSスキルや有志公開スキルなど、既製スキルの選択肢を把握する

1. 事前準備

1.1 必要なツール

この章では、以下のツールを使用します。まだインストールしていない場合は、リンク先の手順に沿って準備をお願いします。

ツール名 関連箇所 理由
Python Pythonのインストール ローカルからハーネスを呼び出すスクリプト(boto3を利用)を記述・実行するために使用する
AWS CLI AWS CLIのインストール ローカルのPythonからAWSに接続するための認証情報を設定するために使用する

1.2 必要なアカウント

この章では、以下のアカウントを使用します。まだ用意していない場合は、リンク先の手順に沿って準備をお願いします。

アカウント名 関連箇所 理由
AWSアカウント AWSアカウントの作成 AgentCoreハーネスを作成する環境として使用する

2. ハンズオンの概要

2.1 AgentCoreハーネスとは

AgentCoreハーネスは、AIエージェントの「モデル呼び出し・ツール選択・結果の受け渡し・失敗ハンドリング」といったオーケストレーションループそのものをマネージドで提供する仕組みです。エージェントの動作(モデル・システムプロンプト・ツール・メモリ・制限)をフォームや設定値で宣言するだけで、AWSがループの実行・分離環境・可観測性まで担当します。

ハーネスを使うと、モデル・システムプロンプト・ツールなどを宣言するだけで、コンソールのフォームに数項目入力するだけ でエージェントを動かせるようになります。

ハーネスの位置付けは AgentCore harness(AWS公式ドキュメント) に「You declare what your agent does (model, tools, skills, instructions); AgentCore handles the environment, compute, memory, identity, networking, and observability」と記載があります。宣言してループはAWS任せ、というのがハーネスの中心的な考え方です(原文は英語表示時のものです。日本語表示に切り替えると翻訳されて表示されます)。

2.2 マネジメントコンソールとCLI・APIの位置づけ

ハーネスは、マネジメントコンソール・AgentCore CLI(agentcoreコマンド)・AWS SDK(boto3など)のいずれからも作成できます。マネジメントコンソールは、初めてハーネスに触るときに最短で「動くハーネス」まで辿り着ける入口です。フォームに数項目を入れてハーネスをクイック作成を押すだけで、IAMロール・ハーネス本体・関連リソースがまとめて用意されます。

一方、CLIやAPIは、configファイルやコードでハーネスの設定を宣言することで、モデル・システムプロンプト・ツールなどを繰り返し書き換えながら開発するのに向いています。この章ではまずマネジメントコンソールで動く形を作り、CLIで設定を突き詰める内容は後の章で扱います。

2.3 ハンズオン全体の流れ

Amazon Bedrock AgentCoreコンソールからハーネスをクイック作成でハーネスを作ります。次に、コンソール内でハーネスと直接会話できるチャット画面であるプレイグラウンドから質問を投げて応答が返ることを確認し、ハーネス詳細画面の編集からシステムプロンプトを書き換えて挙動が変わることも見ます。続いて、独自スキル(料理レシピアシスタント)を S3 経由でハーネスに追加してドメイン特化のエージェントに変身させ、プレイグラウンドで動作確認したうえで、詳細画面の呼び出しコードパネルにあるサンプルコードをローカルの Python から動かして、SDK 経由でも同じスキル付きハーネスを叩けることを確認します。最後に、AWSスキルや有志公開スキルといった既製スキルの選択肢を紹介し、作成したリソースをまとめて削除します。

3. ハーネスのクイック作成

Amazon Bedrock AgentCoreコンソールから、フォーム操作だけでハーネスを作ります。CLIやCloudFormationは使わず、必要なリソースはコンソールが裏側で自動作成する形になります。

マネジメントコンソールで Amazon Bedrock AgentCore コンソール を開き、左メニューの「構築」からハーネスを選択します。「ハーネス」画面の右上にあるハーネスをクイック作成ボタンをクリックし、表示されたメニューからハーネスをクイック作成を選択します。

「ハーネスを作成」ダイアログが開きます。クイック作成で入力するのはハーネス名だけで、モデル・システムプロンプト・実行ロールなどはコンソールが既定値で裏側から自動設定します。

設定項目 設定の基準
ハーネス名 MyHarness ハンズオン用に分かりやすい名前をつける。作成後は変更できないので、この場で確定させる

値を入力したら作成をクリックします。

作成には1〜2分ほどかかります。ハーネス一覧に戻り、MyHarnessステータス準備完了になっていれば作成完了です。

一覧の MyHarness をクリックすると詳細画面が開き、ARN欄に arn:aws:bedrock-agentcore:ap-northeast-1:<アカウントID>:harness/MyHarness-XXXXXX の形式でハーネスのARNが表示されます。この値は次の章で使うのでメモしておいてください。

3.1 出来上がったハーネスの確認

一覧から MyHarness をクリックして詳細画面を開き、まずはどのようなハーネスが作成されたのかを上から順に見ていきます。

ハーネスの詳細

画面上部のハーネスの詳細パネルには、名前・ステータス・IAMロール・ARN・IDなどが並びます。特に押さえておきたいのは以下です。

  • IAMロール: AmazonBedrockAgentCoreHarnessDefaultServiceRole-XXXX として、コンソールがハーネス用のIAMロールを自動作成する
  • ハーネスARNランタイムARN の両方が払い出されている。ハーネスは内部でランタイム上に載っているため、それぞれ別のARNが振られる形になる
  • ステータス準備完了 になっていれば、実際に呼び出せる状態

呼び出しコード

呼び出しコードを表示パネルには、このハーネスが外部のアプリケーションから呼び出される際に使うサンプルコードが表示されます。Python・TypeScript・JavaScript の3言語から選んで確認できます。この章の後半のPythonからの呼び出しセクションで、実際にこのサンプルコードをローカルの Python から動かします。

エンドポイント

AgentCore におけるエンドポイントは、クライアントがハーネスを呼び出すときの入口で、それぞれが特定のバージョンに紐づけられます。クライアントはエンドポイント名を指定して呼び出すため、ハーネスの設定を更新したときも、エンドポイントに割り当てるバージョンを差し替えるだけで済み、クライアント側のコードを書き換えずにバージョンを切り替えられる作りになっています。

エンドポイントパネルには、クイック作成の時点で DEFAULT エンドポイントが自動作成されています。DEFAULT は常に最新バージョンに追従するエンドポイントです。バージョンを固定して呼び出したい場合や、新しいバージョンを段階的に切り替えたい場合は、別のエンドポイントを作ってそこに特定バージョンを割り当てます。

バージョン

バージョンパネルには、バージョン 1 が自動で作られています。ハーネスは設定を更新するたびに新しいバージョンのスナップショットが作られ、DEFAULT エンドポイントは常に最新バージョンを指す形になります。ロールバックや過去バージョンとの比較を行うときはこの単位で扱います。

モデルとシステムプロンプト

モデルとシステムプロンプトパネルには、クイック作成が入れた既定値が並んでいます。

項目 意味
プロバイダー Bedrock ハーネスがモデル推論を委譲するサービスを指定する項目。今回は Amazon Bedrock を使う構成になっている
API フォーマット Converse API プロバイダー側で呼び出す API の種類を指定する項目。Converse API は複数モデル横断で統一されたインターフェースを提供する Bedrock の現行推奨 API
モデル global.anthropic.claude-sonnet-4-6 推論を実行する具体的なモデルを指定する項目。global. プレフィックスはクロスリージョン推論プロファイルを表し、リージョン間で負荷を分散する
システムプロンプト You are a helpful assistant. モデルへの基本指示文で、毎回の会話の先頭に自動で付与される。エージェントの人格や応答スタイルの土台になる。既定値の You are a helpful assistant. は「あなたは親切なアシスタントです」という意味で、方向付けをほとんどしない汎用的な指示にとどまっている

このパネルが、後のセクションで「システムプロンプトを書き換えて挙動を変える」ときに設定を変更する対象になります。

メモリ・ツール・スキル

メモリツールスキルのパネルはいずれも 0 件です。クイック作成はモデルとシステムプロンプトだけのシンプルな構成で立ち上がり、外部ツール呼び出し・会話履歴保持・スキル追加といった要素は空の状態で用意されます。必要になったら詳細画面から追加していく形になります。

これらのパネルへの追加は、本章の後半と後続の章で段階的に扱います。

  • メモリ: AgentCore Memoryで会話履歴を任せよう で、会話履歴を AgentCore Memory のマネージド機能に任せる形を扱います
  • ツール: AgentCore Gatewayでツールを統合公開しよう で Lambda 関数などを MCP ツールとして公開し、ハーネスから呼べる形にする流れを扱います。AgentCoreでMCPサーバを作ろう では独自の MCPサーバを Runtime 上に立てる方法を扱います
  • スキル: 本章の後半の「AWSスキルの紹介」「独自スキルで料理レシピアシスタントを作る」で、AWS提供の既製スキルの位置づけと、S3経由での独自スキル追加を体験します

高度な設定

高度な設定パネルには、ハーネスの内部動作にまつわる既定値が並びます。

項目 意味
許可されたツール すべてのツール (*) ハーネスが呼び出しを許可するツールのフィルタを指定する項目。* は全ツール許可を意味する(今回はツール0件のため実質的な効果はない)
ネットワーク PUBLIC ハーネスの実行環境が持つネットワーク到達性を指定する項目。PUBLIC はインターネットに出られる状態を意味する
切り詰め戦略 sliding_window150 メッセージ) 会話履歴が長くなったときの詰め直し方針を指定する項目。sliding_window は直近N件のメッセージだけをモデルに渡す方式で、既定値は 150 メッセージ
呼び出しの制限 最大イテレーション 75タイムアウト 1時間 1回の呼び出しでモデル→ツール→モデルのループを回せる上限回数と、全体のタイムアウト時間を指定する項目
ライフサイクル アイドル 15分最大有効期間 8時間 セッションが自動的に切断される条件を指定する項目。何も操作しないと15分でアイドル切断され、連続稼働は最長8時間

会話履歴の切り詰めやセッションタイムアウトなど、実運用で必要になる制御が既定値であらかじめ入っているのが分かります。

インバウンド認証

インバウンド認証パネルのインバウンド認証タイプIAM です。ハーネスを呼び出すクライアント(ローカルの Python・Lambda など)は AWS IAM 認証情報を持っている必要があり、この章の後半でローカル Python から呼び出すときも、AWS CLI で設定済みの認証情報を暗黙的に使う形になります。

IAM 以外の認証方式(Cognito などの OAuth 2.0 / OIDC プロバイダとの連携、社内 SSO のトークンをそのままエージェント呼び出しに使う構成など)については、AgentCore Identityでアクセス制御を設計しよう で扱います。

オブザーバビリティ

オブザーバビリティパネルには、セッション数・呼び出し数・トークン数・エラー率などのメトリクスが並びます。まだ一度も呼び出していないためすべて 0 ですが、後のセクションでプレイグラウンドから何回か会話したあとに戻ってくると、実行回数やトークン数が反映されます。

ログの配信とトレース

ログの配信とトレースパネルでは、CloudWatch へのログ/トレース配信の有効化を設定できます。既定では未設定で、トレース配信を有効化するには Transaction Search を先に有効化する必要がある旨のメッセージが表示されます。オブザーバビリティを本格的に扱う手順は AgentCore Observabilityでエージェントを可視化しよう で扱うため、この章では未設定のまま先に進みます。

タグ

タグパネルは空の状態です。運用でコスト集計や環境の切り分けをタグで行う場合はここに追加していきますが、このハンズオンでは何も設定しません。

4. コンソールからの動作確認

作成したハーネスが期待通りに動くかを、コンソールから2つの角度で確認します。まずは素の状態のハーネスに質問を投げて応答を得るところから始め、そのあとシステムプロンプトを差し替えて挙動が変わることを確認します。

4.1 プレイグラウンドでの会話

プレイグラウンドは、ハーネスに直接メッセージを送れるコンソール内のチャット画面です。ここから質問を投げて、素の状態のハーネスがどう応答するかを確かめます。

MyHarnessの詳細画面の右上にあるハーネスをテストをクリックします。

プレイグラウンド画面が開きます。画面上部には呼び出し対象を切り替えるハーネスエンドポイントセッションIDのセレクタが並び、下部にはチャット入力欄、右側には設定パネル(モデル・システムプロンプト・ツール・スキル・パラメータ・呼び出しの制限を確認・変更できる)が表示されます。

チャット欄に以下の質問を入力して送信します。

日本の四季について教えてください

数秒待つと応答が返ってきます。応答の上部にはAgent traceが畳まれた形で表示され、展開すると内部で実行されたツール呼び出し(Shell など)を確認できます。応答の右上には入力トークン数・出力トークン数・合計・レイテンシーの指標も表示され、1回の呼び出しごとにコストと応答時間の目安が把握できるようになっています。

応答が返ってくれば、ハーネスがBedrockのモデルを呼び出して回答している状態です。まだシステムプロンプトを設定していないため、モデルの学習内容だけで回答している点に注意してください。

4.2 システムプロンプトによる挙動の変更

素の状態のハーネスに、常時の指示を与えて振る舞いを変えてみます。ハーネス詳細画面の編集から、モデル・システムプロンプト・ツールなどを書き換えて新しいバージョンとして保存すると、以降の呼び出しに新しい設定が反映されるようになります。

MyHarness の詳細画面右上にある編集をクリックします。

編集画面が開き、モデルとシステムプロンプトセクションではモデルソース(Bedrock・LiteLLM・OpenAI・Gemini から選択可能)・API ソース・モデル・システムプロンプトを編集できます。システムプロンプト - オプション欄に以下の内容を入力してください。

あなたは丁寧なアシスタントです。回答は必ず箇条書きで返し、最後に一言まとめを添えてください。

画面下部までスクロールして、右下のハーネスを保存をクリックします。

保存直後は、エンドポイント一覧のDEFAULTエンドポイントのステータスがアップデート(バージョン切り替え中)になります。しばらくして準備完了に戻れば、新しいバージョンが DEFAULT エンドポイントに反映され、以降の呼び出しには新しいシステムプロンプトが効くようになります。

DEFAULT エンドポイントが 準備完了 に戻ったら、プレイグラウンドをもう一度開き、以下の質問を送信します。

日本一高い山は?

応答が箇条書きで返り、最後に「まとめ:〜」の1行が添えられていれば、システムプロンプトが正しく効いています。ハーネスの設定を1つ書き換えて保存するだけで挙動が変わったことが確認できました。

💡 ポイント
編集から保存する変更は、ハーネスの新しいバージョンとして恒久化され、DEFAULT エンドポイント経由の以降すべての呼び出しに適用されます。試行錯誤の段階では、プレイグラウンド右側の設定パネルからシステムプロンプトを差し替える方法もあり、そちらはそのセッション内だけの一時変更として反映されます。開発中はプレイグラウンドの設定で挙動を試し、方針が固まったら編集からハーネスに保存する、という流れがしやすくなっています。

5. 独自スキルによる料理レシピアシスタントの作成

ここまでで基本のハーネスは動くようになりましたが、実運用では「特定のドメイン知識を持ったエージェント」を作りたい場面が出てきます。AgentCoreハーネスには、そうした知識・振る舞いをスキルという単位で外付けする仕組みが用意されており、コードを書かずに Markdown ファイル1枚でエージェントの役割・応答フォーマット・遵守ルールなどを宣言できます。

このセクションでは、独自スキルの作り方を体験するために、LambdaによるBedrockの応用操作を身につけよう で自前実装した料理レシピアシスタントと同じ役割を、独自スキルとしてハーネスに載せてみます。

5.1 独自スキルとは

独自スキルは、SKILL.md という名前の Markdown ファイルにエージェントの役割・応答フォーマット・遵守してほしいルールなどを記述し、S3 バケットや Git リポジトリに置いてハーネスから読み込ませる仕組みです。

SKILL.mdAgentSkills.io 仕様 に沿った形式で、以下の要素を持ちます。

  • 冒頭の YAML フロントマター(namedescription)でスキルの識別情報を宣言する
  • 本文の Markdown に、エージェントに与えたい指示・応答フォーマット・ルールなどを記述する
  • 必要に応じて、同ディレクトリに scripts/(スクリプト)、references/(詳細ドキュメント)、assets/(画像などのアセット)を配置できる

スキルの配置先は自分で用意する必要があり、次のいずれかから選べます(詳細は Skills(AWS公式ドキュメント))。

  • Amazon S3: S3バケットにディレクトリを作って SKILL.md を配置し、s3://bucket/prefix/ の URI で指定する
  • Git (HTTPS): GitHub などのリポジトリを指定する(サブディレクトリ指定も可能)
  • Filesystem path: ハーネスのコンテナイメージに焼き込んだり、セッション開始時にダウンロードして配置する

本章では、最もシンプルな S3 経由でスキルを配置します。

5.2 S3バケットとSKILL.mdの準備

料理レシピアシスタントとしての振る舞いを定義した SKILL.md を作成し、S3バケットにアップロードします。

S3バケットの作成

S3コンソールを開き、右上のバケットを作成をクリックします。「バケットを作成」画面が開くので、「一般的な設定」で以下の値を入力します。

設定項目 設定の基準
AWSリージョン アジアパシフィック (東京) ap-northeast-1 ハーネスと同じリージョンにする
バケットタイプ 汎用(既定) 一般的な用途で使うため既定のままにする
バケット名前空間 グローバル名前空間(既定) 既定のままにする
バケット名 agentcore-harness-skills-<任意のプレフィックス> S3バケット名はグローバルで一意である必要があるため、<任意のプレフィックス>に自分だけが使う文字列(イニシャル・ランダム文字列など)を入れて重複しない名前にする

その他の項目は既定のまま画面下部までスクロールし、右下のバケットを作成をクリックします。既定ではパブリックアクセスがすべてブロックされる設定になっており、ハーネスは実行ロール経由でバケットを読むため、パブリック公開の設定は変更不要です。

上部に「バケット agentcore-harness-skills-<任意のプレフィックス> が正常に作成されました」というバナーが表示されれば、バケット作成は完了です。

続いて、作成したバケットの直下に cooking-recipe-assistant フォルダを作成します。この後 SKILL.md をアップロードする置き場所になり、ハーネスにはこのフォルダを指定してスキルを読み込ませる形になります。

作成したバケットの詳細画面(オブジェクト一覧)で右上のフォルダの作成をクリックし、以下の値を入力します。

設定項目 設定の基準
フォルダ名 cooking-recipe-assistant ハーネスに登録するスキルディレクトリ名になる。この後の手順で S3 URI として指定するため、この名前に統一する
サーバー側の暗号化 暗号化キーを指定しない(既定) バケットの既定暗号化設定を継承させる

入力できたら右下のフォルダの作成をクリックします。「フォルダ cooking-recipe-assistant が正常に作成されました」のバナーが表示され、オブジェクト一覧に cooking-recipe-assistant/ が並べば準備完了です。

SKILL.mdの準備

料理レシピアシスタントの SKILL.md を用意します。以下のファイルをダウンロードしてください。

ファイルの中身は、YAMLフロントマターと Markdown 本文の2ブロックで構成されています。

---
name: cooking-recipe-assistant
description: ユーザから料理名を受け取り、...
---

SKILL.md の冒頭にある --- で挟まれたブロックは YAML フロントマターと呼ばれ、スキル自体のメタデータを宣言する部分です。name はスキルの識別子、description はハーネスがスキルの用途を判断するための説明文で、実行時にモデルへ渡されます。

あなたは料理レシピアシスタントです。ユーザから料理名を受け取ったら、以下のフォーマットで必ず回答してください。
...

YAMLフロントマター以降の本文が、エージェントに与えられる指示です。応答フォーマット(推定時間・難易度・材料・手順・コツ)と、遵守してほしいルール(健康配慮・加熱手順・話題外の依頼への対応)を Markdown で自然文として記述しています。

S3へのアップロード

作成した cooking-recipe-assistant/ フォルダに SKILL.md をアップロードします。

S3コンソールで、先ほど作成した cooking-recipe-assistant/ フォルダをクリックして中に入り、右上のアップロードをクリックします。「アップロード」画面が開いたら、ファイルを追加からダウンロードしておいた SKILL.md を選択します。ファイルとフォルダの一覧に SKILL.md が並び、送信先s3://agentcore-harness-skills-<任意のプレフィックス>/cooking-recipe-assistant/ になっていることを確認したら、右下のアップロードをクリックします。

「アップロードに成功しました」の緑色バナーが表示され、概要欄の成功しました1 ファイル, 1.1 KB (100.00%) になっていればアップロード完了です。送信先s3://agentcore-harness-skills-<任意のプレフィックス>/cooking-recipe-assistant/ になっていること、ファイルとフォルダ一覧の SKILL.mdステータス列が 成功しました になっていることも確認します。

アップロード後、S3 URI が s3://agentcore-harness-skills-<任意のプレフィックス>/cooking-recipe-assistant/SKILL.md の形式になっていることを確認します。ハーネスに登録するのはファイル単位ではなくフォルダ単位なので、後のステップでは s3://agentcore-harness-skills-<任意のプレフィックス>/cooking-recipe-assistant/ の URI を使います。

5.3 実行ロールへのS3読み取り権限の追加

ハーネスはクイック作成時に自動で払い出された実行ロール(AmazonBedrockAgentCoreHarnessDefaultServiceRole-XXXX)で動きます。この実行ロールはBedrockモデルの呼び出し権限しか持っていないため、S3からスキルファイルを読むための権限を追加する必要があります。

IAMコンソールを開き、ハーネス詳細画面に表示されていた実行ロール(AmazonBedrockAgentCoreHarnessDefaultServiceRole-XXXX)を選択します。許可タブで右上の許可を追加をクリックし、ドロップダウンからインラインポリシーを作成を選択します。

「アクセス許可を指定」画面が開きます。エディタ右上のJSONタブに切り替えて、以下のポリシー内容を貼り付けます。既存の内容がある場合は、丸ごと以下で置き換えてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::agentcore-harness-skills-<任意のプレフィックス>",
        "arn:aws:s3:::agentcore-harness-skills-<任意のプレフィックス>/*"
      ]
    }
  ]
}

s3:GetObjectSKILL.md などのファイル本体の取得に、s3:ListBucket はスキルディレクトリ内の一覧取得に必要です。両方を許可することで、ハーネスがスキルを問題なく読み込めるようになります。貼り付け後、画面右下の次へをクリックします。

「確認して作成」画面で、ポリシー名に以下を入力します。

設定項目 設定の基準
ポリシー名 SkillsBucketReadPolicy 用途が分かる名前を付ける。他のインラインポリシーとの識別のためスキル読み取り用と分かる名称にする

このポリシーで定義されている許可の欄に S3 サービスが 制限あり: リスト, 読み取り のアクセスレベルで並んでいることを確認したら、右下のポリシーの作成をクリックします。

ロール詳細画面に戻り、緑色の「ポリシー SkillsBucketReadPolicy が作成されました。」バナーが表示され、許可ポリシー一覧に SkillsBucketReadPolicyカスタマーインラインとして追加されていれば、権限追加は完了です。

5.4 MyHarnessへの独自スキルの追加

作成した独自スキルを MyHarness に登録します。MyHarness の詳細画面右上にある編集をクリックします。

編集画面を下方向にスクロールして、スキル – オプション (0) パネルにあるスキルを追加をクリックします。

「スキルを追加」モーダルが開きます。AWS スキル / Git / S3 / スキルパス (コンテナ内) の4種類のスキルソースが並んでいるので、S3 セクションのS3 を参照をクリックします。

「S3 リソースを選択」モーダルで、バケットルート(agentcore-harness-skills-<任意のプレフィックス>)まで戻り、cooking-recipe-assistant/ フォルダのラジオボタンを選択して、右下の選択をクリックします。

⚠️ SKILL.mdファイルを直接選ぶとNo files foundエラーが出る
ここで cooking-recipe-assistant/ フォルダを選ばずに、フォルダを開いて中の SKILL.md ファイルを選ぶと、S3 URI の末尾に / が付いて .../SKILL.md/ という形になります。AgentCore はスキルディレクトリを指定する仕様(末尾スラッシュ付きのフォルダパス)を前提としているため、SKILL.md/ を「フォルダ」と解釈し、その中身を探しに行って No files found at S3 URI エラーで失敗します。必ずフォルダを選択してください。

「スキルを追加」モーダルに戻ります。S3 セクションの入力欄に s3://agentcore-harness-skills-<任意のプレフィックス>/cooking-recipe-assistant/ が入っていることを確認したら、右下の保存をクリックします。

編集画面に戻ります。スキル – オプション (1) パネルに、追加した S3 スキルの行が表示され、URL/パス列が s3://.../cooking-recipe-assistant/(末尾スラッシュ付きのフォルダパス)になっていれば、パネルへの追加は完了です。

このままではハーネス本体の設定はまだ保存されていません。画面下部までスクロールして、右下のハーネスを保存をクリックしてハーネスの設定を更新します。ハーネスの新しいバージョンが自動作成され、DEFAULT エンドポイントが最新バージョンに切り替わります。

5.5 料理レシピの質問での挙動確認

スキルが有効になったハーネスに実際に質問を投げて、応答が期待どおりに変化することを確認します。

今のハーネスには、先に設定したシステムプロンプト(丁寧・箇条書き・一言まとめ)と、今回追加した料理レシピ Skill(description:料理レシピアシスタント/本文:推定時間・難易度・材料・手順・コツの5セクション形式)の2つの指示が同時に生きている状態です。この状態で料理クエリと非料理クエリの両方を投げて、それぞれがどう組み合わさって効くかを確かめます。

まず、料理系のクエリを投げます。

オムライスの作り方を教えてください

料理レシピなのでモデルは Skill を呼び出し、SKILL.md 本文がロードされます。応答上部の Agent traceSkills のステップが表示され、SKILL.md がロードされたことが確認できます。応答本文は SKILL.md で定義したとおり、推定時間 / 難易度 / 必要な材料 / 手順 / コツ の5セクションで構成されて返ってきます。

次に、料理と関係ない話題を投げてみます。

日本一高い山は?

こちらのクエリでは、Skill の description によって「料理レシピアシスタント」というペルソナが与えられ、そのペルソナのままシステムプロンプトの指示(丁寧・箇条書き・一言まとめ)に沿った形式で丁重にお断りする応答が返ってきます。

料理クエリでは Skill 本文(SKILL.md)の詳細フォーマットが優先されて5セクション形式の応答になり、非料理クエリでは Skill 本文はロードされないためシステムプロンプトの形式(箇条書き + まとめ)で応答が返る、という綺麗な分担になっています。

コードを一切書かず、YAML と Markdown だけで独自エージェントの振る舞いを定義できるのが、AgentCoreハーネスとスキルの組み合わせの強みです。この章の最初にクイック作成した素のハーネスから、SKILL.md を1枚書いて登録するだけで、料理を尋ねると専門的な回答を返し、無関係な話題には丁重にお断りするハーネスに変身しました。

💡 ポイント
Skill の description は常にシステムプロンプトに注入されて全クエリのペルソナに影響する一方、SKILL.md 本文はモデルが Skill を必要と判断したクエリのときだけロードされます(progressive disclosure)。エージェントの肩書き・守備範囲は description にコンパクトに書き、詳細な応答フォーマットや業務ルールは SKILL.md 本文に書く、という書き分けが自然な設計です。

5.6 既製スキルという選択肢

独自スキルを自分で作る流れを体験しましたが、「よく使う領域のスキル」については、既製品を利用する選択肢もあります。今回は取り入れませんが、実務で役立つ場面もあるので選択肢として紹介します。

AWSスキル(AWS公式提供)

AWSスキル(AWS Skills)は、AWSサービスを扱うためのノウハウがあらかじめパッケージ化されたスキル群で、AWS Agent Toolkit(AWS公式GitHubリポジトリ) にラインナップされています。EC2・S3・Lambda・DynamoDB・CloudWatch などの基本操作から、Athena・Glue のような分析系、トラブルシューティング・診断まで揃っています。

「スキルを追加」モーダルのAWSスキルパネルには、以下の3つの選択肢が並んでいます。

  • 無効にする(既定)
  • すべての AWS スキルを有効にする
  • 特定の AWS スキルを有効にするcore-skills/aws-s3 のようにグロブパターンで絞り込む)

💡 ポイント
AWSスキルは AgentCoreランタイム内部にプリインストール済み(/opt/amazon/skills から読み込む)のため、S3や外部リポジトリを準備する必要も、実行ロールに追加の権限を付ける必要もありません。ラジオボタンで有効化するだけで動くのが、独自スキル(S3経由)との大きな違いです。

有志公開スキル(Git経由)

スキルは AgentSkills.io 仕様 というオープン標準に沿っているため、AWS 以外の第三者・有志も自由にスキルを作って公開できます。AWS公式ドキュメントでも例示されている Anthropic 公式のスキル集(GitHub) など、パブリックな Git リポジトリで公開されているスキルが多数あります。

「スキルを追加」モーダルのGitパネルには、リポジトリを指定するための入力欄が並んでいます。

  • Git URL: HTTPS 形式のリポジトリ URL
  • サブディレクトリ – オプション: リポジトリ内で対象スキルを絞る場合の相対パス
  • 認証情報プロバイダー ARN – オプション: プライベートリポジトリの場合、AgentCore Identity で管理する Personal Access Token を指定する
  • ユーザー名 – オプション: Git 認証用のユーザー名

3種類のスキルソース(独自 S3・AWS公式・Git公開)はすべて併用でき、詳細は Skills(AWS公式ドキュメント) に記載があります。用途に応じて既製と独自を組み合わせて設計します。

6. Pythonからの呼び出し

コンソールのプレイグラウンドから料理レシピアシスタントとして応答できることを確認しましたが、実運用ではアプリケーションから SDK 経由でハーネスを呼び出すことになります。ここでは、詳細画面の呼び出しコードを表示パネルにあるサンプルコードをそのまま使い、ローカルの Python から独自スキル付きのハーネスを叩いてプレイグラウンドと同じ SKILL.md フォーマットで応答が返ることを確認します。

MyHarness の詳細画面に戻り、呼び出しコードを表示 パネルの Python タブでコード全体をコピーします。任意の場所に invoke_harness.py ファイルを作成し、コピーしたコードを貼り付けます。以下の3箇所を実際の値に書き換えます。

  • harnessArn の値: サンプルの ARN を、MyHarness の実際の ARN(arn:aws:bedrock-agentcore:ap-northeast-1:<アカウントID>:harness/MyHarness-XXXXXX)に置き換える
  • runtimeSessionId の値: <Enter your SessionId> を、任意の33文字以上の文字列(例: harness-python-cooking-session-00001)に置き換える
  • 質問文(messages 内の text): プレイグラウンドで試したのと同じ「オムライスの作り方を教えてください」に置き換える

書き換え後のコード例は以下のとおりです。

import boto3

client = boto3.client('bedrock-agentcore', region_name='ap-northeast-1')

response = client.invoke_harness(
    harnessArn='arn:aws:bedrock-agentcore:ap-northeast-1:<アカウントID>:harness/MyHarness-XXXXXX',
    runtimeSessionId='harness-python-cooking-session-00001',
    messages=[
        {
            'role': 'user',
            'content': [{'text': 'オムライスの作り方を教えてください'}]
        }
    ]
)

for event in response['stream']:
    if 'contentBlockDelta' in event:
        delta = event['contentBlockDelta'].get('delta', {})
        if 'text' in delta:
            print(delta['text'], end='')
print()

ターミナルから以下のコマンドで実行します。

Windowsの場合:

python invoke_harness.py

Macの場合:

python3 invoke_harness.py

推定時間 / 難易度 / 必要な材料 / 手順 / コツ の5セクション形式でオムライスのレシピが流れてくれば、独自スキルを追加したハーネスを Python からも叩けている状態です。プレイグラウンドで見たのと同じ SKILL.md フォーマットで返ることから、マネジメントコンソール経由でも Python 経由でも、同じスキル付きハーネスを呼び出せていることが確認できます。

⚠️ ModuleNotFoundError: No module named 'boto3' が出る場合
ローカルに boto3 がインストールされていません。Python 側で boto3 をインストールしてから再実行してください。詳細な手順は Pythonのインストール の「boto3のインストール」に記載があります。
⚠️ Unable to locate credentials が出る場合
ローカルの AWS CLI 認証情報が未設定です。aws configure を実行してアクセスキーID・シークレットアクセスキー・リージョン(ap-northeast-1)を設定してください。詳細は AWS CLIのインストール に記載があります。
💡 ポイント
ここではローカルの Python から直接呼び出しましたが、実運用では AWS Lambda・ECS・EKS 上のバックエンドから同じ invoke_harness を叩く形になります。Lambda から呼び出す場合、Lambda の実行ロールに bedrock-agentcore:InvokeHarness を許可する IAM ポリシーが追加で必要になります。Resource を対象ハーネスの ARN に絞っておけば、意図しないハーネスを呼び出してしまうリスクを抑えられます。詳細な API 仕様は InvokeHarness API リファレンス(AWS公式ドキュメント) に記載があります。

7. 不要リソースの削除

ハーネスは呼び出し時間とストレージに対して課金される要素を含むため、ハンズオン後は忘れずに削除します。

7.1 独自スキル用のS3バケットの削除

S3コンソールで、agentcore-harness-skills-<任意のプレフィックス> バケットを開き、中の cooking-recipe-assistant/ フォルダと SKILL.md を削除します。中身が空になったら、バケット自体を削除します。

7.2 MyHarnessの削除

Amazon Bedrock AgentCore コンソールハーネス画面で、MyHarnessを選択して削除をクリックします。一覧から消えれば、ハーネス本体の削除は完了です。ハーネスと一緒に自動作成された実行ロール(AmazonBedrockAgentCoreHarnessDefaultServiceRole-XXXX)と、そこに追加した SkillsBucketReadPolicy インラインポリシーも、ハーネスの削除に伴って一緒に消えます。

8. まとめ

この章では、AWSマネジメントコンソールを使って AgentCoreハーネスを作成し、プレイグラウンドでの会話・システムプロンプトの書き換え・独自スキルの追加・ローカル Python からの呼び出しまでを体験しました。

  • ハーネスは、モデル・システムプロンプト・ツールなどを宣言するだけで、オーケストレーションループをAWSに任せられる仕組み
  • マネジメントコンソールのハーネスをクイック作成から、IAMロールごと数分でハーネスを作成できる
  • プレイグラウンドでは、ハーネスに質問を投げて応答・Agent trace・トークン使用量を確認できる
  • ハーネス詳細画面の編集からシステムプロンプトを書き換えて保存すると、新しいバージョンとして恒久化され、以降の呼び出しに反映される(一時的な試行はプレイグラウンド右側の設定パネルからも可能)
  • 独自スキル(SKILL.md)を書いてS3に置き、スキルパネルに登録するだけで、コードを書かずにドメイン特化のエージェントに変身させられる
  • 既製スキルとしてAWS公式のAWSスキルやGitHub公開のスキルもあり、必要に応じて併用できる
  • 詳細画面の呼び出しコードパネルにあるサンプルコードをそのままローカルの Python から動かせば、独自スキルを追加したハーネスも SDK 経由で同じ応答形式で叩ける
  • Lambda など AWS のバックエンドから呼び出す場合は、実行ロールに bedrock-agentcore:InvokeHarness を許可する IAM ポリシーを追加する

この教材は役に立ちましたか?

いいねをたくさんいただけると、制作者の励みになり、より多くのセクションが作れるようになります。

感想を一言(任意)

いただいたコメントは次の制作のヒントになります。ぜひお気軽にご投稿ください。

このコメントは他の受講生には公開されません。DevOps Camp運営が、教材改善のために確認します。

0 / 2000