跳到正文
AWS Machine Learning Blog· Kenneth Salmon·· 2 小時前精選AI 評分63

ShipStation Global 如何以 Amazon Bedrock AgentCore 打造 Deckhand AI IT 服務台

How ShipStation Global built an AI IT help desk on Amazon Bedrock AgentCore

AI 導讀

ShipStation Global 在 Amazon Bedrock AgentCore 上為 Slack 建置 Deckhand AI IT 服務台,首三個月回覆 97.5% 的訊息,員工正面評分於 6 月升至 96%。

推薦理由

文章拆解 Slack 服務、AgentCore 執行環境、知識庫與 MCP 工具的分工,並以三個月的訊息及工單數據呈現這套 IT 服務台的實際運作。

正文 · 繁體中文

本文由 ShipStation Global 的 Kenneth Salmon、Edward Boswell、Jack Armstrong、Robert Bahn 和 Nick Ciubotariu 共同撰寫。

回答相同的 IT 問題和處理例行工單,會耗費 IT 團隊原本可用於其他工作的時間。為了騰出這些時間,ShipStation Global 工程團隊基於 Amazon Bedrock AgentCore,為 Slack 建立了由 AI 驅動的 IT 服務台 Agent Deckhand。

ShipStation Global 是領先的智能寄件及物流平台,服務中小型寄件商。公司的理念很簡單:團隊效率越高,就越能為客戶提供更佳服務。Deckhand 正是這個理念的實踐。它利用精選知識庫回答常見的 IT 及公司問題、讀取錯誤訊息的螢幕截圖,並建立及更新 Jira Service Management 工單。

本文會探討 ShipStation 如何設計 Deckhand。這套系統成功解決了 97.5% 的頻道提問,並獲員工給予 96% 的正面回饋評分(圖 1)。

Chart showing Deckhand reached 97.5% channel coverage and a 96% positive feedback rating over three months

圖 1:三個月的頻道覆蓋及正面回饋

業務挑戰

Deckhand 要解決的問題,每個 IT 團隊都熟悉:相同問題不斷有人提出、有人在辦公時間以外發佈錯誤訊息,而且所需資訊分散在不同團隊。在 ShipStation Global,這些對話都集中在一個繁忙的 Slack 服務台頻道。員工提出問題,IT 團隊則逐條對話串作答。答案通常早已存在於 Confluence 教學文章、公司內聯網頁面,或八個月前的對話串中。真正困難的是找到答案。

頻道數據清楚呈現了問題的規模。在 Deckhand 推出前的 12 個月內:

  • 員工發佈了超過 1,500 條對話串,而且數量持續增加。
  • 員工分佈於美國、英國、西班牙、波蘭、澳洲和菲律賓,超過五分之一的問題在美國辦公時間以外提出。
  • 答案散落在不同地方:Confluence 文章、內聯網頁面和 PDF、由 IT 團隊維護的指南,以及頻道本身的歷史訊息。
  • 重複問題耗用了不少時間,而有系統的自助服務流程本可處理這些問題。

「我們建立 Deckhand,是因為尋求協助應該像在 Slack 提問一樣簡單,而不必費力解讀工單表格,或發出電郵後石沉大海。我們認為,工單反映的是營運阻力,而非生產力。Deckhand 能即時解決常見問題;遇到無法解決的情況時,只需按一下,就能把對話轉換成具備完整背景資訊的工單,改善員工體驗,亦讓團隊不必再無休止地重複説:『請提交工單。』」

— ShipStation Global 資深 IT 總監 Chris Collins

解決方案概覽

Deckhand 在 Slack 中的運作方式就像任何隊友:加入頻道、閲讀對話,並從 Slack 個人檔案取得背景資訊,直接在頻道內回答 IT 問題。我們在 Amazon Bedrock AgentCore 上運行 Deckhand。這個平台可使用任何框架或模型,大規模建置、連接及優化 Agent。AgentCore runtime 是 Amazon Bedrock AgentCore 的一項功能,可在隔離的工作階段中託管 Agent,因此我們毋須運行任何伺服器或容器。

解決方案由四個主要部分組成,如圖 2 所示:

  1. Slack 服務: 以 FastAPI 和 Slack Bolt 建構的應用程式,託管於 AWS App Runner。它會接收 Slack 事件、判斷機械人是否應作出回應,並根據提出請求者的 Slack 個人檔案建立用戶上下文 payload,當中包括姓名、電郵、時區及主管。
  2. Agent 服務: Strands agent 以容器形式部署於 Amazon Bedrock AgentCore runtime,使用 Amazon Bedrock 中 Anthropic 的 Claude 管理多輪工具 Agent 循環。
  3. 工具與知識: 單一 AWS Lambda 函數透過 AgentCore Gateway(Amazon Bedrock AgentCore 的一項功能)以 Model Context Protocol (MCP) 工具形式提供,可分類請求、建立及更新 Jira 工單,以及分析圖像。Amazon Bedrock knowledge base 會為 Confluence、公司內聯網、Slack 及市場推廣頁面的內容建立索引,並將內容儲存在 Amazon Simple Storage Service (Amazon S3)。
  4. 營運與意見回饋。 Amazon DynamoDB 儲存意見回饋,AWS X-Ray 使用 OpenTelemetry 追蹤請求路徑,而各項服務則將記錄寫入 Amazon CloudWatch。

Architecture diagram of Deckhand on Amazon Bedrock AgentCore showing the Slack service, agent runtime, knowledge base, Gateway-backed Lambda tools, Jira Service Management, and DynamoDB feedback

圖 2:架構圖顯示 Slack 事件進入 Slack 服務及 Amazon Bedrock AgentCore runtime,並分別連接至 Amazon Bedrock knowledge base、由 AgentCore Gateway 支援的 Lambda 工具、Jira Service Management 及 DynamoDB 意見回饋。

當員工在 Deckhand 所屬的頻道發佈訊息時,Slack 服務會整理完整的對話串記錄及用戶上下文,然後透過 AgentCore runtime API 呼叫 Agent。Agent 會搜尋知識庫,並按需要呼叫工具。找到答案時,Agent 會傳回最終回覆(圖 3);找不到答案時,則會提出澄清問題或建議建立工單(圖 4)。

Slack screenshot of Deckhand replying with numbered self-service steps

圖 3:Deckhand 提供自助處理步驟

Slack screenshot of Deckhand offering a Create Ticket button

圖 4:Deckhand 提議建立工單

Deckhand 工作流程

本節會逐步介紹 Deckhand 的實作方式,從先決條件到完成部署。

先決條件

要實作此模式,你需要具備以下條件:

  • 可使用 Amazon Bedrock、AgentCore runtime 及 AgentCore Gateway 的 AWS 帳戶。
  • 已設定事件訂閲、簽署密鑰及符合使用情境之 Bot token 的 Slack app。
  • 容器映像檔登錄庫,例如 Amazon Elastic Container Registry (Amazon ECR)。
  • Amazon S3 儲存貯體及 Amazon Bedrock knowledge base。
  • 為各 runtime 和工具設定適用權限範圍的 AWS Identity and Access Management (IAM) 角色,以及用於第三方憑證的 AWS Secrets Manager 項目。

使用 Strands Agents 和 AgentCore 建構 Agent

這個 Agent 刻意採用輕量設計。使用開源的 Strands Agents SDK,Agent 由模型、一組工具及系統提示詞組成。SDK 會管理推理循環,讓模型選擇工具、處理結果,並反覆執行,直至產生答案。Deckhand 的 Agent 服務只需少量 Python 程式碼即可實作。

from strands import Agent
from strands.models import BedrockModel
from strands.tools.mcp import MCPClient
from strands_tools import retrieve
from mcp.client.streamable_http import streamablehttp_client

model = BedrockModel(
    model_id=MODEL_ID,
    max_tokens=2048,
    temperature=0.3,
)

gateway = MCPClient(lambda: streamablehttp_client(url=GATEWAY_URL))

agent = Agent(
    model=model,
    tools=[gateway, retrieve],
    system_prompt=SYSTEM_PROMPT,
)

模型 ID 透過環境變數設定,因此無須修改應用程式程式碼即可切換模型。

工具透過兩種方式與代理程式整合。Amazon Bedrock Knowledge Bases 檢索是 Strands 的原生工具,只需匯入一次即可搜尋知識庫。其他功能,包括分類、工單管理、用戶識別及圖像分析,則由在 AgentCore Gateway 上註冊的 Lambda 函式處理。Gateway 將這些功能公開為 MCP 工具,而 Lambda 會按工具名稱路由每次呼叫。這種分離方式可讓工具邏輯獨立更新,代理程式亦可透過 Gateway 使用新工具,無須重新建置。

AgentCore runtime 以容器形式託管代理程式,無須管理伺服器或工作階段。Slack 服務會就每則訊息同步呼叫代理程式,提供對話串記錄及用戶背景資料,並發佈最終回覆。由於每次請求都會附上背景資料(包括員工個人檔案),代理程式可自動填寫工單詳情。

知識庫設計與答案路由

Deckhand 透過單一 Amazon Bedrock 知識庫提供答案,主要資料來源均由 S3 提供支援:

  • 從 Confluence 同步的文章。
  • 從公司內聯網同步的內部網頁、PDF 文件及活動資訊。
  • 從 Slack 挖掘的已解決支援對話串(下一節會介紹)。

每份文件都包含標題、來源網址、內容類型及活動日期等中繼資料。這讓代理程式可以篩選內容,例如在用戶詢問即將舉行的活動,或 Austin 辦公室每週午餐餐單時,找出相關資訊。

使用遞迴語言模型(RLM)挖掘 Slack 歷史記錄

最有價值的資料來源,是已解決支援對話串的存檔。在 Deckhand 出現之前,Slack 一直是解決問題的地方:多年來,員工在 Slack 描述問題,IT 人員則逐步指導他們排除故障。這段歷史自然累積成一個知識庫,並由最理想的審核者——問題得到解決的當事人——驗證。不過,當中也有不少雜訊:原始匯出內容混雜閒談、自動警示,以及實際上從未解決的對話串。若將未經驗證的解決方法或錯亂的摘要編入索引,知識庫就可能以與正確答案同等的信心顯示錯誤答案,因此資料萃取必須精確。

挖掘流程分為三個階段(圖 5):

  1. 指令碼透過 Slack API 匯出頻道的完整歷史記錄,擷取每個對話串的所有回覆,並寫入結構化資料檔,其中包括對話串標記、時間戳記及回覆數量。
  2. DSPy 的遞迴語言模型(RLM)在 Amazon Bedrock 上執行 Claude,並在沙盒化的 Python 讀取-求值-輸出循環(REPL)環境中,把匯出資料視為可導覽的記憶空間,而非單一提示詞。模型會反覆處理數據,將每個對話串分類為已解決、未解決或已升級,並篩走公告及非疑問內容。嚴格的準則有助維持品質:只有當對話串本身清楚顯示完整且可行的解決方法時,才會將其視為已解決。
  3. 對於每個已解決的討論串,RLM 會協調遞迴呼叫子大型語言模型(LLM),擷取結構化欄位,並逐一使用 Pydantic 模型驗證。欄位包括問題摘要、原始問題和解決方法,亦會記錄修正方法是可自行處理還是需要建立支援單、自助處理步驟、涉及的應用程式和系統、錯誤訊息及標籤。如果子 LLM 呼叫傳回的內容不符合結構描述,RLM 以程式碼實作的迴圈便會在直譯器中捕捉驗證錯誤並重試。結果會寫入一份按問題分類的 Markdown 文件。處理流程會將文件上載至 Amazon S3,供知識庫編製索引。

Three-stage pipeline diagram: export Slack channel history, classify threads as resolved or not, and extract structured fields

圖 5:Slack 對話匯出的分類及擷取工作流程

我們選用 RLM,因為它會在持續存在的沙盒變數空間中保留完整的 Slack 歷史記錄,讓系統可以反覆推理匯出內容,並確保輸出結構一致。因此,當員工遇到同事曾經解決的問題時,Deckhand 便會提供已驗證有效的解決方案,通常會以可直接跟隨的編號步驟呈現。

知道何時不應回答

在共用頻道中,AI 機械人往往會先在社交層面出問題,才在技術層面出錯。Deckhand 最成熟的邏輯,是判斷何時應保持沉默:

  1. 代理程式每次收到訊息時,首先會判斷該訊息是公告、社交訊息,還是人與人之間的對話。如屬上述情況,它會輸出「SKIP」,Slack 服務便會隱藏回覆。
  2. 在討論串中,它只會回覆原始發訊者。
  3. 如果最近一則回覆來自另一位人類協助者,它便會保持沉默,因為已有真人接手。
  4. 如果回覆以 @提及 某人開頭,該訊息就不是發給機械人的。

收集意見

每個答案都附有意見回饋按鈕。系統會直接記錄讚好;如果用戶按倒讚,則會顯示簡短的「出了甚麼問題」欄位。評分會連同原始問題和機械人的回覆一併儲存在 DynamoDB。

負面意見回饋是寶貴的數據集,可用於改善系統提示詞及代理程式行為,並更新知識庫中不正確的資訊。

安全及驗證

提示詞規則有助改善行為,但不能取代存取控制。執行管控由程式碼和基礎架構負責:

  • 建立支援單必須取得明確確認。當 Deckhand 提議建立支援單時,Slack 服務會加入 建立支援單 按鈕;用戶選取後,代理程式便會發出確認。支援單更新只接受符合服務台專案格式的有效鍵值,並會拒絕空白留言。
  • 執行分類前會先進行驗證。請求分類會透過獨立的 Amazon Bedrock Converse API 呼叫執行,傳回結構化支援單欄位;這些欄位會先經 Pydantic 驗證,才會送至 Jira。
  • 圖像工具只可從 Slack 的檔案主機下載檔案。工具會使用機械人權杖進行驗證,每次請求最多處理五張圖像,每張不超過 5 MB,並透過 Converse API 將檔案傳送至視覺模型。
  • 憑證不會寫入程式碼。Slack 權杖、簽署密鑰和 Jira 憑證均儲存在 AWS Secrets Manager;每項服務和工具則使用各自具有限定範圍的 IAM 角色執行。
  • 提示詞會強制執行行為防護措施:絕不索取密碼或多重驗證(MFA)代碼、絕不在支援單留言中寫入憑證,也絕不透露用於支援單欄位的個人資料中繼資料。

成果

Deckhand 於 2026 年 4 月推出。最初每日約處理 30 則訊息,到初夏時增至每日最多 100 則。在推出後首三個月,它處理了 1,935 則訊息,啟動了 1,221 次 Agent 對話,並開立了 409 張 Jira 工單。它回覆了 97.5% 的訊息。三分之一的問題在非辦公時間提出,當時 IT 團隊沒有成員當值,而 Deckhand 回覆了其中 94% 的問題。原本要等到翌日早上才會得到回覆的用戶,當晚便收到了答案。

團隊持續改進系統,評分亦有所提升。正面評分由 4 月的 82% 升至 6 月的 96%;團隊修訂系統提示詞和知識庫,處理用戶提出的問題。

最明顯的成效是減少了工單。一段 Agent 對話,指的是原本會變成 Jira 工單的問題。在 1,221 次對話中,只有 409 次最終變成工單,其餘 812 次則在聊天中處理。開立工單,再進行處理並關閉,約需 30 分鐘。這 812 次對話在三個月內合共節省約 406 小時,換算下來每年約 1,600 小時。員工可把這些時間用於自己的工作,IT 團隊亦無需花時間處理工單登記。

結論

Deckhand 減輕了員工處理重複 IT 問題的負擔,讓員工和 IT 團隊都能騰出時間。它之所以奏效,是因為技術堆疊的每個部分各司其職,並以受管理服務方式運行:AgentCore runtime 用來託管 Agent,AgentCore Gateway 將 Lambda function 轉換為 Agent 可呼叫的 MCP 工具,而 Amazon Bedrock Knowledge Bases 則負責檢索。團隊無需架設伺服器或維護協調程式碼,便完成了部署。

如要建置類似的方案,請先準備妥善維護的知識來源,並清楚界定要執行的操作。如要開發 Agent,請參閲 Amazon Bedrock AgentCore 文件和 Strands Agents SDK;如要連接內容來源,請參閲 Amazon Bedrock Knowledge Bases 文件。

如要討論適用於貴機構的代理式 AI 使用案例,請聯絡 AWS 客戶團隊。


作者簡介

Kenneth Salmon

Kenneth Salmon

Kenneth 是 ShipStation Global 的軟件工程師,專長是整合、工作流程自動化及 AI 驅動系統。他的工作重點是運用應用式 AI、大型語言模型和對話式 Agent,解決複雜的營運挑戰。

Edward Boswell

Edward Boswell

Edward 是 ShipStation Global 的高級軟件工程師,專長是 AI 應用程式和快速原型開發。他熱衷於運用 AI 消除營運瓶頸,提升團隊效率。工作以外,Edward 曾是職業魔術師,喜歡在會議上表演助興。

Jack Armstrong

Jack Armstrong

Jack 是 ShipStation Global 的高級軟件工程師。他精通多種程式語言,熟悉 Python、TypeScript 等語言,並具備豐富的軟件工程系統知識,尤其熟悉 Amazon Bedrock。

Robert Banh

Robert Banh

Robert 是 ShipStation Global 的工程總監,負責帶領一支專注於在各部門部署 AI 的 SWAT 團隊。他熱衷於解決問題,並運用數據推動切實可行的改進。

Nick Ciubotariu

Nick Ciubotariu

Nick 是 ShipStation Global 的首席技術總監。二十多年來,他一直負責推出企業級軟件和 AI 系統,這些系統服務數以億計的人。

Ravi Kashyap

Ravi Kashyap

Ravi 是 AWS 的資深解決方案架構師,與零售及電子商務公司合作,協助建立、擴展及優化雲端和 AI 工作負載。他專注於自動化及應用 AI,並積極貢獻開源項目,回饋開發者社羣。

來源:AWS Machine Learning Blog · aws.amazon.com