這個活動用的動手做步驟,任何人都可以在自己方便的時候嘗試!(約 30 分鐘~1 小時)
我們會用低程式碼快速做出來。

可惜的是,最近新建立的 AWS 帳號(尤其不是公司契約的那種),Bedrock 的模型呼叫配額常常預設為 0,或是沒有使用新 Frontier Model 的權限,不過,即使在這種情況下,我們也想辦法讓大家仍然能體驗這個動手做!
會產生一些 AWS 使用費用(預估數十日圓起)。請自行負責執行。
因為是全伺服器無狀態架構,所以費用大多是瀏覽過程中 LLM API 的推論 token 費用。
新建立 AWS 帳號
※請選擇「付費」方案

註冊後,登入管理主控台

將區域設定為「美國東部(維吉尼亞北部)」


前往 S3 主控台

建立新的 S3 儲存貯體

下載以下的內部文件範例,並上傳到剛建立的儲存貯體
這份投影片全部都是圖片,究竟能不能正確轉換成 RAG 知識呢?敬請期待。

前往 Bedrock 主控台

建置 > 知識庫 > Create Managed KB

從「瀏覽 S3」按鈕選擇上面的儲存貯體。其他維持預設,然後按「建立知識庫」

系統會自動開始建立 RAG 並進行首次同步。這需要幾分鐘,期間可以先進行下一步。

受管 KB 背後使用的 LLM 和嵌入模型也由 AWS 管理,因此即使新 AWS 帳號的 Bedrock 配額是 0,也可以使用!
先建立連接 AI 代理人與 RAG 的閘道。

前往 AgentCore 主控台(建議按右鍵以新分頁開啟)

建置 > 閘道 > 建立閘道

第 1 步保持預設直接按 Next

第 2 步在 Inbound Auth type 中選擇「IAM 權限」,然後按 Next

第 3 步將目標類型設為 Connectors,選擇剛建立的 KB,然後 Next > 建立閘道

這裡也可以選擇 Web Search Tool,但日文搜尋精準度不太好。建議改用本動手做後半段會介紹的 AgentCore 瀏覽器,會比較方便。
部署「Strands Agents + AgentCore Runtime」這組合。

建置 > Harness > 建立進階 Harness

打開模型與系統提示詞

在這裡選擇 Mantle(Bedrock 的新基礎架構),即使新 AWS 帳號的 Bedrock 配額是 0,也能呼叫模型。
不過 Claude 和 GPT 通常不會被授權使用,因此改用其他同樣聰明的模型。
啟用工具 > 閘道,選擇剛才建立的閘道,然後按「建立 Harness」

先在這裡選好閘道,這樣系統會自動設定從 AgentCore Harness 呼叫所需的 IAM 政策,很方便。(如果之後才加,會需要手動編輯政策。)
這裡需要 2~3 分鐘,先往下進行。
從剛建立的 KB 畫面中選擇「測試知識庫」

例如輸入 KAG 也有在做工程師教育服務嗎? 之類的問題

從剛建立的 Harness 畫面中選擇「測試 Harness」

例如輸入 KAG 也有在做工程師教育服務嗎? 之類的問題

如果你在意費用,可以跳過這裡,直接進入下一個「前端建置篇」,這樣就能用比較低的成本完成整個動手做。
因為在反覆操作時,系統會一邊讀取瀏覽器畫面,一邊進行操作,容易讓送往 Bedrock 的輸入 token 數量暴增。

從 Harness Playground 右側的「新增工具」加入瀏覽器工具

再加上一個問題,例如 順便幫我用瀏覽器查一下,JAWS-UG 東京也能學到這個嗎?

從右上角的「︙」選單選擇「更新現有的 Harness」,就完成部署了


從畫面右上角的「>_」圖示啟動 CloudShell

建立前端的 Python 檔案
nano frontend.py
貼上以下程式碼
frontend.py
import boto3, uuid
import streamlit as st
# 側邊欄
harness_arn = st.sidebar.text_input("請輸入 Harness 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
因為要從瀏覽器連到這裡,所以先按加號按鈕開啟第二個 us-east-1 終端機

使用以下指令,取得可以存取這個 CloudShell 的網址
# 下載 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

開啟過程中輸出的網址(https://XXXXX.trycloudflare.com)

在管理主控台中複製剛建立的 Harness ARN

例如輸入 幫我查一下 KAGAI Learning Hub 的內部文件 之類的問題

受管 KB 也會產生儲存空間的按量計費,所以動手做結束後,請從「刪除」按鈕把它移除。

如果沒有輸入英文的「delete」,就無法刪除w

如果你對 AgentCore 感興趣,不妨再閱讀一下 JAWS-UG 成員寫的書,進一步學習!

原文出處:https://qiita.com/minorun365/items/7d06434cf830df9c54ff