How ShipStation Global built an AI IT help desk on Amazon Bedrock AgentCore
https://aws.amazon.com/blogs/machine-learning/how-shipstation-global-built-an-ai-it-help-desk-on-amazon-bedrock-agentcore/📌 ShipStation用Bedrock AgentCore打造IT客服機器人Deckhand
TL;DR:ShipStation Global在Slack上用Amazon Bedrock AgentCore打造IT help desk agent,三個月內回覆97.5%訊息、正向回饋達96%。
IT team每天被同樣的問題淹沒,答案通常早就存在於某篇Confluence文件或八個月前的某條Slack討論串裡,難的從來不是「有沒有答案」,而是「找不到答案」。ShipStation Global索性讓AI去找。
🤔 同樣的問題被問一百次,答案卻散落在各處
ShipStation Global是一個出貨與物流平臺,過去IT支援的痛點很典型:同樣的問題反覆被問、下班後才出現的錯誤訊息截圖、以及需要跨team蒐集資訊才能回覆的請求。這些對話全部堆在一個忙碌的help desk Slack頻道裡,答案常常已經存在於某篇how-to文件、intranet頁面或幾個月前的討論串,但找出來本身就是體力活。
🧩 Agent跑在AgentCore上,工具透過Gateway用MCP掛載
Deckhand像團隊成員一樣加入Slack頻道、讀對話、並從使用者的Slack profile取得context來回答問題。整套系統跑在Amazon Bedrock AgentCore上,用AgentCore runtime把agent跑在隔離的session裡,不需要自己管伺服器或容器。流程大致是:員工在頻道發訊息→Slack service組合完整討論串歷史與使用者context→透過AgentCore runtime API呼叫agent→agent搜尋knowledge base並視需要呼叫工具→找到答案就回覆,找不到就提出澄清問題或主動提議建立ticket。
Agent本體用open source的Strands Agents SDK實作:一個agent就是model、一組工具、加上一個system prompt,SDK負責管理reasoning loop讓模型選工具、處理結果、反覆迭代直到產出答案,model ID透過環境變數設定,換模型不用改程式碼。工具整合有兩種方式:Amazon Bedrock Knowledge Bases檢索是Strands內建工具,一行import即可用;其他功能(分類、ticket管理、使用者解析、圖片分析)則由註冊在AgentCore Gateway上的Lambda function處理,Gateway把它們包裝成MCP tools,Lambda依工具名稱分派呼叫,這讓工具邏輯可以獨立更新、也讓agent能直接從Gateway取得新工具而不需要重新部署。
Knowledge base用S3-backed data sources,每份文件帶metadata(標題、來源URL、內容類型、活動日期),讓agent可以依條件過濾內容。最有價值的資料來源是「已解決的Slack支援討論串」歷史存檔,這是多年來員工描述問題、IT team帶著排查的完整紀錄,等於一個由「問題真正被解決的那個人」驗證過的知識庫,但原始匯出資料相當雜訊,混著閒聊、自動警示與從未真正被解決的討論串。團隊用三階段pipeline進行挖礦與萃取,核心採用RLM,因為它能把整個Slack匯出歷史維持在一個持久的sandbox變數空間裡,讓模型對這份匯出資料反覆推理並產出一致的輸出結構,最終效果是員工遇到同事以前解過的問題時,Deckhand能直接給出已驗證過的解法,通常是一組可執行的編號步驟。
在共用頻道裡運作的AI bot,往往是先在社交層面出錯,才輪到技術層面出錯,所以Deckhand也有一套邏輯判斷何時該保持安靜(具體規則素材未揭露)。每則回覆都附上回饋按鈕:按讚直接記錄,按倒讚則會跳出簡短的「哪裡出錯」欄位,評分連同原始問題與機器人回覆一起存進DynamoDB,負面回饋被用來改善system prompt、agent行為,以及修正knowledge base裡不正確的資訊。權限管控也不只靠prompt規則,而是透過程式碼與基礎設施層面落實。
📊 三個月:1,935則訊息,97.5%回覆率,409張ticket
Deckhand於2026年4月上線,一開始每天約30則訊息,到初夏增加到最多100則。上線前三個月共處理1,935則訊息、開啟1,221次agent對話、建立409張Jira Service Management ticket,整體回覆了97.5%的訊息。三分之一的問題是下班後提出的,這類問題Deckhand回答了94%,原本要等到第二天早上才有人處理的問題,當晚就有了答案。正向回饋率從4月的82%成長到6月的96%,是團隊根據使用者抱怨調整system prompt與knowledge base後達成的。最明顯的成效是ticket deflection:1,221次agent對話裡只有409次真正變成ticket。
💡 真正的工程量,在資料清洗而不是架構本身
從架構上看,Deckhand是典型的「knowledge base檢索+MCP工具呼叫」客服agent模式,搭配AgentCore runtime做無伺服器部署,設計本身並不特別新穎。真正的工程含金量在於資料工程:把雜訊很重的歷史Slack討論串萃取成可信賴、已驗證的知識庫內容,以及把回饋資料持續接回system prompt與knowledge base的迭代機制,這套負回饋閉環才是支撐97.5%回覆率與96%滿意度背後的實際工作量。
🎯 實務啟示
想做類似IT或客服agent的團隊,比起糾結架構要多複雜,更值得投資的是三件事:既有歷史對話資料的清洗與驗證pipeline;把回饋資料接回system prompt與knowledge base的迭代機制;以及用Gateway/MCP把工具邏輯與agent邏輯解耦,方便各自獨立迭代。
🔗 來源
- 標題:How ShipStation Global built an AI IT help desk on Amazon Bedrock AgentCore
- 作者/機構:Kenneth Salmon, Edward Boswell, Jack Armstrong, Robert Bahn, Nick Ciubotariu(ShipStation Global)/AWS Machine Learning Blog
- 連結:https://aws.amazon.com/blogs/machine-learning/how-shipstation-global-built-an-ai-it-help-desk-on-amazon-bedrock-agentcore/
#AWS #BedrockAgentCore #AIAgent #RAG #SlackBot #ITHelpDesk #StrandsAgents #MCP #GenAI #CustomerSupport
原始資料 AWS ML · 收集於 2026-10-13
摘要原文
This post is co-written with Kenneth Salmon, Edward Boswell, Jack Armstrong, Robert Bahn, and Nick Ciubotariu from ShipStation Global. Answering the same IT questions and clearing routine tickets drains time that IT teams could spend elsewhere. To reclaim it, the ShipStation Global Engineering team built Deckhand , an AI-powered IT help desk agent for Slack, on Amazon Bedrock AgentCore . ShipStation Global is the leading intelligent shipping and logistics platform for small and mid-sized shippers, and it operates on a simple belief: the more efficient its teams are, the better it delivers for customers. Deckhand puts that belief to work. It answers routine IT and company questions from a curated knowledge base, reads error-message screenshots, and creates and updates Jira Service Management tickets. In this post, we discuss how ShipStation architected Deckhand, which resulted in resolving 97.5 percent of incoming channel queries while earning a 96 percent positive feedback rating by employees (Figure 1). Figure 1: 3-month channel coverage and positive feedback The problem Deckhand solves is the one every IT team will recognize: the same questions are routinely asked, error messages are posted after business hours, and information needs to be gathered from different teams. At ShipStation Global, those conversations lived in a busy help desk Slack channel, where employees asked, and IT answered, one thread at a time. The answers usually already existed in a Confluence how-to article, on a company intranet page, or in a thread from eight months earlier. Finding them was the hard part. The channel data made the scale concrete. In the 12 months before launch: “We created Deckhand because getting help should be as simple as asking a question in Slack, not deciphering a ticket form or sending an email into the void. We believe that tickets are an indication of operational friction not productivity. Deckhand resolves common questions on the spot and, when it can’t, converts the conversation into a fully contextualized ticket with one click, improving the employee experience and freeing our team from endlessly repeating the phrase: ‘Please file a ticket.’” — Chris Collins, Senior Director IT at ShipStation Global Deckhand works in Slack like any teammate—joining channels, reading the conversation, and drawing context from Slack profiles to answer IT questions in place. We run it on Amazon Bedrock AgentCore, a platform to build, connect, and optimize agents at scale, with any framework or model. AgentCore runtime, a capability of Amazon Bedrock AgentCore, hosts the agent in isolated sessions, so we run no servers or containers. The solution has four main components, shown in Figure 2: Figure 2: Architecture diagram showing Slack events entering the Slack service and Amazon Bedrock AgentCore runtime, with separate paths to an Amazon Bedrock knowledge base, AgentCore Gateway-backed Lambda tools, Jira Service Management, and DynamoDB feedback. When an employee posts in a channel where Deckhand is a member, the Slack service assembles the full thread history and user context. It then invokes the agent through the AgentCore runtime API. The agent searches the knowledge base and calls tools as needed. When it finds an answer, it returns a final response (Figure 3). When it doesn’t, it asks a clarifying question or offers to create a ticket (Figure 4). Figure 3: Deckhand responds with self-service steps Figure 4: Deckhand offers to create a ticket This section walks through how Deckhand is implemented, from prerequisites to a working deployment. To implement this pattern, you need the following: The agent is intentionally lightweight. Using the open source Strands Agents SDK , an agent consists of a model, a set of tools, and a system prompt. The SDK manages the reasoning loop, allowing the model to select tools, process results, and iterate until it produces an answer. Deckhand’s agent service is implemented in a few lines of Python. The model ID is set through an environment variable, which allows switching models without modifying application code. Tools are integrated with the agent in two ways. Amazon Bedrock Knowledge Bases retrieval is a native Strands tool that supports knowledge base search with a single import. Other functions, including classification, ticket management, user resolution, and image analysis, are handled by a Lambda function registered on AgentCore Gateway. The Gateway exposes these as MCP tools, and the Lambda routes each invocation by tool name. This separation allows tool logic to be updated independently, and the agent can access new tools from the Gateway without requiring a rebuild. AgentCore runtime hosts the agent as a container, avoiding the need for server or session management. The Slack service calls the agent synchronously for each message, providing the thread transcript and user context, and posts the final response. Since context, including the employee’s profile, is included with every request, the agent can complete ticket details automatically. Deckhand answers from a single Amazon Bedrock knowledge base with core S3-backed data sources: Each document includes metadata such as title, source URL, content type, and event dates. This allows the agent to filter content, for example, when users ask about upcoming events or weekly lunch menus in the Austin office. The most valuable data source is the archive of resolved support threads. Before Deckhand existed, Slack was where problems got solved: years of employees describing issues and IT walking them through fixes. That history is an organic knowledge base, validated by the best possible reviewer: the person whose problem got fixed. It’s also noisy: a raw export mixes banter, automated alerts, and threads that never actually got resolved. Indexing an unverified fix or a garbled summary means the knowledge base surfaces an incorrect answer with the same confidence as a correct one, so extraction needs to be precise. The mining process follows a three-stage pipeline (Figure 5): Figure 5: Export classification and extraction workflow of the Slack conversation We chose RLM because it maintains the entire Slack history in a persistent sandbox variable space, allowing iterative reasoning over the export and consistent output structure. As a result, when an employee encounters a problem previously solved by a colleague, Deckhand provides the proven solution, often as actionable, numbered steps. An AI bot in a shared channel fails socially before it fails technically. Deckhand’s most refined logic decides when to stay quiet: Each answer includes feedback buttons. A thumbs-up is recorded directly, while a thumbs-down prompts a brief “what went wrong” field. Ratings are stored in DynamoDB with the original question and the bot’s response. Negative feedback is a valuable dataset used to improve the system prompt and agent behavior, and to update incorrect knowledge base information. Prompt rules enhance behavior but do not replace access controls. Enforcement is managed through code and infrastructure: Deckhand launched in April 2026. It started at about 30 messages a day and reached as many as 100 by early summer. In its first three months it handled 1,935 messages, started 1,221 agent conversations, and opened 409 Jira tickets. It replied to 97.5 percent of messages. A third of the questions came in after hours, when no one on the IT team was working, and Deckhand answered 94 percent of those. People who would have waited until the next morning got an answer that night. Feedback improved as the team worked on it. Positive ratings went from 82 percent in April to 96 percent in June, after they revised the system prompt and knowledge base to fix what people complained about. The clearest win was ticket deflection. An agent conversation is a question that would otherwise have become a Jira ticket. Of the 1,221 conversations, only 409 turned into tickets.
由 claude-code/sonnet 自動生成