このイベント用のハンズオン手順ですが、どなたでも好きなときに試せます!(30分〜1時間目安)
これをローコードでサクッと作ります。
残念なことに最近、新規作成したばかりのAWSアカウント(特に会社契約でないもの)では、Bedrockのモデル呼び出しクォータが既定で0になっていたり、新しいフロンティアモデルの利用権限がないケースも多いのですが、そんな場合でも何とかハンズオンを体験できるように工夫を凝らしています!
多少のAWS利用料(数十円〜の想定)がかかります。ご自身の責任で実施ください。
フルサーバーレスなので、費用の大半はブラウジング中のLLM APIの推論トークン料金です。
事前準備
AWSアカウントを新規作成
※「有料」プランを選択してね
サインアップ後、マネジメントコンソールにサインイン
リージョンを「バージニア北部」に設定
RAG編
社内文書をアップロード
S3コンソールへ移動
S3バケットを新規作成
- バケット名は世界でユニークなものに。他はデフォルトでOK
以下の社内文書サンプルをダウンロードして、作ったバケットにアップロード
このスライド、すべて画像なんですが果たして正しくRAGナレッジに変換できるのか?注目です。
RAGパイプラインを構築
Bedrockコンソールに移動
構築 > ナレッジベース > Create Managed KB
「S3を参照」ボタンから上記のバケットを選択。他はデフォルトのまま「ナレッジベースを作成」
自動でRAG構築と初回同期が開始される。数分かかるので次の作業に進んでOK
マネージドKBは、裏で使われるLLMや埋め込みモデルもAWS管理のため、新規AWSアカウントでBedrockのクォータが0でも使えます!
AIエージェント編
AgentCoreゲートウェイを構築
AIエージェントとRAGを繋ぐゲートウェイを先に作成します。
AgentCoreのコンソールに移動(右クリックして新しいタブで開くと便利)
構築 > ゲートウェイ > ゲートウェイを作成
Step 1はデフォルトのままNext
Step 2は、Inbound Auth typeで「IAM許可」を選んでNext
Step 3はターゲットタイプをConnectorsにして、今作成したKBを選択してNext > ゲートウェイを作成
ここでWeb Search Toolも選べますが、日本語の検索精度が悪いです。このハンズオン後半で紹介するAgentCoreブラウザで代替するのがお手軽です。
AgentCoreハーネスを構築
「Strands Agents + AgentCoreランタイム」のセットをデプロイします。
構築 > ハーネス > 高度なハーネス作成
モデルとシステムプロンプトを開く
- APIソース:Bedrock Mantle
- モデル:GLM 5
ここでMantle(Bedrockの新基盤)を選ぶことで、新規AWSアカウントがBedrockのクォータ0でもモデルを呼び出せます。
ただしClaudeやGPTは利用許可されないことが多いため、他の賢いモデルで代替。
ツール > ゲートウェイ を有効にして、今作ったゲートウェイを選択して「ハーネスを作成」
ここでゲートウェイを選んでおくと、AgentCoreハーネスから呼び出すためのIAMポリシーが自動で設定されるので便利。(後から付けるとポリシー手動編集が必要)
2〜3分かかるので、先に進みましょう。
動作確認(RAG)
先ほど作ったKBの画面から「ナレッジベースをテスト」
KAGってエンジニア教育サービスもやってるの? などと質問
動作確認(エージェント + RAG)
先ほど作ったハーネスの画面から「ハーネスをテスト」
KAGってエンジニア教育サービスもやってるの? などと質問
ブラウザツール追加編
課金が気になる方は、ここを飛ばして次の「フロントエンド構築編」に進めば安くハンズオンを完走できます。
ブラウザの操作画面を読み込みながら操作を繰り返すため、Bedrockへの入力トークン量が膨れてしまいがちなためです。
ハーネスプレイグラウンドの右側から「ツールを追加」より、ブラウザツールを追加
ところでJAWS-UG東京でもこれを学べそうか、ブラウザで調べて などと追加質問
右上の「︙」から「既存のハーネスを更新」すればデプロイ完了
フロントエンド構築編
Webサーバー起動
画面右上の「>_」アイコンからCloudShellを起動
フロントエンドのPythonファイルを作成
nano frontend.py
以下コードを貼り付け
import boto3, uuid
import streamlit as st
# サイドバー
harness_arn = st.sidebar.text_input("ハーネスARNを入力")
# ページタイトルとチャットボックス
st.title("おしえて! AgentCore")
prompt = st.chat_input("メッセージを入力")
if prompt:
# ユーザーのメッセージを表示
st.chat_message("user").write(prompt)
# エージェントを呼び出す
response = boto3.client("bedrock-agentcore").invoke_harness(
harnessArn=harness_arn,
runtimeSessionId=str(uuid.uuid4()),
messages=[{"role": "user", "content": [{"text": prompt}]}],
)
# ステータスを表示
answer = ""
with st.status("考えています") as status:
for event in response["stream"]:
tool = event.get("contentBlockStart", {}).get("start", {}).get("toolUse")
# ツール実行中はツール名を画面に表示
if tool:
answer = ""
status.update(label=f"{tool.get('name')} ツールを実行中")
answer += event.get("contentBlockDelta", {}).get("delta", {}).get("text", "")
# ストリーミングが完了したらステータスに反映
status.update(label="完了しました", state="complete")
# エージェントの回答を表示
st.chat_message("assistant").write(answer)
nano画面下部の案内どおり「Ctrl + X」>「y」>「Enter」で保存して閉じる
以下コマンドでWebサーバーを起動
# Pythonライブラリを追加インストール
pip install -U boto3 streamlit
# Streamlitアプリを起動
streamlit run frontend.py
動作確認
ここにブラウザからアクセスするため、+ボタンから2つ目のus-east-1ターミナルを起動
以下コマンドで、このCloudShellへアクセス可能なURLを発行
# Cloudflare Tunnelクライアントをダウンロード
wget -O cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
# 実行権限を付与
chmod +x cloudflared
# Streamlitのローカルポートを、Tunnelでインターネット公開
./cloudflared tunnel --url http://localhost:8501
途中で出力されるURL( https://XXXXX.trycloudflare.com )にアクセス
マネコンで、今作ったハーネスのARNをコピー
KAGAI Learning Hubについて社内文書を調べて などと質問
おかたづけ
マネージドKBはストレージ分の従量課金もあるので、ハンズオンが終わったら「削除」ボタンから消しておきましょう。
英語で「delete」と入れないと消えませんw
最後に宣伝
AgentCoreに興味を持ったら、JAWS-UGメンバーが書いた本でさらに学んでみよう!








































