博客 / 詳情

返回

Amazon Connect結合Strands框架及Bedrock Agent Core的智能客服機器人解決方案(實踐篇)

image.png

延續之前發佈的基於Bedrock和Amazon Connect打造智能客服自助服務設計篇,本博客將展示智能客服自助服務領域中如何利用Strands框架和Amazon Connect進行集成,同時結合Bedrock AgentCore Memory及Runtime功能的最佳實踐及解決方案技術框架。

📢限時插播:無需管理基礎設施,利用亞馬遜技術與生態,快速集成與部署生成式AI模型能力。
✨ 精心設計,旨在引導您深入探索Amazon Bedrock的模型選擇與調用、模型自動化評估以及安全圍欄(Guardrail)等重要功能。
⏩快快點擊進入《多模一站通 —— Amazon Bedrock 上的基礎模型初體驗》實驗構建無限, 探索啓程!

1. 客户對智能客服自助機器人的評價指標:

客户對智能客服自助機器人的評價指標,一般會從 服務效果、體驗感受、系統性能、管理運營 四個維度來衡量。

1.1 服務效果類

  • 問題解決率(Resolution Rate):機器人能否真正幫客户解決問題。
  • 首次解答正確率(First Contact Resolution, FCR):一次對話是否就能給出準確答案。
  • 知識覆蓋率:機器人能回答的常見問題比例。
  • 人工轉接率:需要轉人工的比例(越低説明機器人更有效)。

1.2. 用户體驗類

  • 響應速度:從提問到答覆的時間。
  • 交互自然度:語言是否流暢,是否像與人對話。
  • 多輪對話順暢度:是否能記住上下文,避免重複提問。
  • 個性化程度:是否能基於用户歷史、偏好提供定製化回答。
  • 滿意度評分(CSAT):客户對服務的即時評價。

1.3. 系統性能類

  • 穩定性與可用性:是否出現崩潰、超時、答非所問。
  • 併發處理能力:高峯期響應是否依然流暢。
  • 準確率與召回率:意圖識別是否精準,知識檢索是否全面。
  • 安全與合規性:是否保障用户隱私與數據安全。

1.4. 管理與運營類

  • 知識更新及時性:知識庫內容是否快速更新。
  • 運營可視化:後台是否提供對話分析、用户畫像、熱點問題統計。
  • 自我學習與優化能力:是否能通過反饋持續改進。
  • 人工客服協同度:轉人工時是否無縫銜接。
  • ROI 與成本節省:減少人工客服成本、提升整體效率。

2. 基於GenAI智能客服自助系統設計中Agent框架選擇的因素

在基於 GenAI 的智能客服自助系統設計中,選擇 Agent 框架 時要考慮多個因素,因為 Agent 不僅是“問答機器人”,還需要作為一個可以調用知識庫、業務系統、工具(Tool)和人工客服的智能體來運作。

目前Agentic AI不斷髮展,新技術新模式層出不窮,主要往更智能化,更自動化的方向發展,但在智能客服領域主要是要提高客户滿意度,真正幫助客户解決問題,該場景需要雙方互動,因此從目前實際項目效果來看WorkFlow模式更適合該場景,本次實踐也是採用了Stands框架中的WorkFlow來實現。

2.1 技術能力與適配度

大模型適配:是否支持接入多種基礎模型,避免鎖定單一模型。

多工具調用:能否靈活調用數據庫、API、CRM、ERP、支付系統、工單系統等。

上下文管理:支持長對話記憶、多輪對話追蹤、會話狀態管理。

知識增強 (RAG):是否支持文檔檢索、知識圖譜、FAQ知識庫集成。

2.2 系統架構與擴展性

模塊化設計:是否支持分層架構(對話管理、任務代理、工具代理)。

可擴展性:能否快速增加新場景、新業務流程。

跨渠道支持:是否支持接入Web、App、微信、WhatsApp、電話IVR等渠道。

編排能力:能否用工作流或低代碼方式編排對話與工具調用。

2.3 性能與穩定性

實時性:響應是否快速,能否滿足毫秒級響應需求。

併發能力:是否能支撐高併發場景(電商促銷、遊戲活動高峯)。

健壯性:應對模型回答錯誤、API超時等異常時,是否有降級機制。

2.4 安全與合規

數據安全:是否支持敏感信息脱敏、加密存儲、訪問權限控制。

合規要求:是否滿足 GDPR、CCPA、網絡安全法等法規要求。

可控性:是否有安全護欄,防止模型生成不當內容(越權操作、違規回答)。

2.5 運維與優化能力

可觀測性:是否能追蹤對話日誌、Agent調用鏈路,便於問題定位。

可訓練性:是否支持持續學習(基於用户反饋優化)。

A/B 測試:能否在不同 Agent 策略或模型之間做對比實驗。

成本控制:調用大模型的 Token 消耗與框架優化能力(如緩存、混合模型調用)。

3. Amazon Connect結合Strands和Bedrock AgentCore智能客服自助系統架構設計

3.1 解決方案High Level設計

本次實踐採用Amazon Connect的Chat文字聊天作為客户接入方式,整個自助服務的流程控制採用Amazon Connect的Workflow設計實現,客户輸入後由Connect通過lambda來調用GenAI模型來實現意圖識別,基於Bedrock的RAG知識庫查詢,基於Stands框架的的 Multi Agent來實現自助服務,不同的意圖會對應不同的處理流程,詳見圖1。

image.png

圖1 解決方案High Level設計

3.2 系統架構設計

整個解決方案可以同時支持電話及文字聊天等多渠道呼叫中心解決方案,不同的接入渠道採用統一的流程管理。整體方案設計中以Amazon Connect作為呼叫中心平台核心服務平台,同時採用Amazon Lex作為自主服務組件,Amazon Lex以及Amazon Connect Content Flow通過調用Lambda來實現對Bedrock Cluade模型的調用以及Bedrock 知識庫的調用。詳細流程見圖2.

業務流程説明:

  • 通過內部CRM系統整理知識庫文件並放入S3,採用Bedrock知識庫服務並同步S3數據源
  • 客户通過文字聊天發起服務並進入connect服務
  • Connect通過Workflow定製流程並調用lex進行對話交流
  • Lambda實現客户意圖識別及調用AgentCore Memory實現會話記憶
  • Connect workflow獲取到客户自助服務就調用Lambda
  • Lambda調用基於Strands框架編寫並運行在AgentCore Runtime上的Agent實現自助服務
  • 自助服務滿足不了客户需求,轉人工坐席
  • 坐席調用AgentCore Memory長期記憶功能獲取之前對話總結併為客户繼續提供服務

55e2297e86addf4444034bca0f0b7bd3.png

圖2 詳細系統架構設計圖

3.3 對話記憶功能實現解析

如何實現對話記憶功能有可以有多種方案,之前博客採用的是利用Amazon Connect的隨路數據來實現。本次採用Bedrock AgentCore Memory最新服務來實現。

Amazon Bedrock AgentCore 的 Memory 模塊是一個由亞馬遜雲科技託管的持久化記憶系統,用於存儲和管理 AI Agent 的對話和知識。它提供短期記憶(short-term memory)和長期記憶(long-term memory)兩種模式。短期記憶負責在一次會話中記錄最近的交互內容(例如最近幾輪對話),確保代理能夠“記住”當前對話的上下文。長期記憶則從對話中提取結構化的關鍵信息,在多個會話之間保留知識,使Agent能夠“學習”用户偏好、事實和摘要等信息。

Memory 模塊在架構上採用分層存儲策略:短期記憶層存儲原始交互事件作為即時上下文,長期記憶層存儲從事件提取的概要知識。Memory 服務背後實現了自動的信息處理流水線:當新的事件被存儲時,如果 Memory 配置了長期記憶策略,服務會異步地對事件內容進行分析(例如調用基礎模型)來提煉出可長期保存的知識片段。

所有數據由亞馬遜雲科技以 加密 方式存儲,並使用命名空間(namespace)進行隔離分區,確保不同應用或用户的記憶數據彼此分隔。這一完全託管的記憶基礎設施讓開發者無需自己搭建數據庫或向量存儲,就能方便地讓 Agent 擁有記憶功能。

如圖3所示是本次實踐採用AgentCore Memory,並充分利用了長期記憶,如摘要信息來簡化客服轉坐席的總結功能,同時也可以實現自動語義識別來提取信息寫入CRM系統,詳細參加圖3。

image.png

圖3 AgentCore Memory功能

3.4 Agent框架及運行解析

本次實踐採用Stands框架來實現了具體Agent。並和Benrock AgentCore Runtime結合,每次調用Agent就是啓動一次Bedrock AgentCore Runtime。

Bedrocl AgentCore Runtime 是一款高度安全、彈性、高效能的 Serverless Agent 託管平台,它讓企業無需為基礎設施煩惱,即可專注 Agent 業務開發,並滿足生產級安全、成本和可擴展性需求。支持多步邏輯和異步任務執行,Runtime 可保持會話狀態長達 8 小時,適合複雜推理和長流程任務,採用按實際計算資源使用計費方式,計算只有在 Agent 真正執行時才計費,節省大量因等待外部 LLM 或 API 的空閒時間費用,非常適合客服應用場景。

image.png

3.3 Amazon Connect ContentFlow調用Lambda的最佳實踐

在Amazon Connect ContentFlow中調用Lambda實現和外部系統集成時如果採用同步模式,Lambda最大執行超時時間是8秒,這個現在在調用大語言模型時如果任務比較複雜,執行會超過8秒,這會導致這個流程報錯。為解決這個問題可以採用最新的異步調用模式,這個可以將最大執行時間延長到60秒,肯定可以滿足要求。具體調用方法參加下圖。先在Amazon Lambda Function調用時候選擇異步模式,然後設置Wait節點等待執行完成,執行完成後再次調用Amazon Lambda Function節點,並選擇Load Lambda Result來獲取執行結果。這樣可以解決超時瓶頸問題。

image.png

4. 具體代碼實現及部署解決方案

4.1 本次實踐客户場景描述

  • 本次實踐以製造業海外售後服務為背景,通過智能客服來實現產品售後服務諮詢,訂單查詢,自動退貨等實際場景,如果問題複雜無法通過自助服務解決將自動轉接人工坐席。
  • 智能客服統一採用基於Stands框架的Multi Agent架構,將意圖識別,知識庫調用,工具調用統一封裝為各種Agent服務,可以實現簡單智能調用。

4.2Amazon Connect 業務流實現:

  • 利用Connect Content Flow來實現整個業務場景。
  • 通過Lex來獲取用户輸入,支持語音和Chat兩個渠道。
  • Connect Content Flow通過異步調用Lambda實現智能Agent的調用,並返回最佳回覆給到客户,整個過程支持多輪對話和多業務處理。
  • 當Agent返回結合告知該服務需要人工坐席接入則系統自動轉人工坐席並提供自動服務的全程對話摘要,避免坐席重複詢問之前的問題,提升用户體驗。

image.png

4.3 Stands Agent 及Bedrock AgentCore Runtime部署及實現:

  • Strands Agents SDK 是由亞馬遜雲科技開源的Agent軟件開發工具包,它採用模型驅動的方式,旨在簡化和加速 AI 智能體的構建與部署。它的主要優勢:

    • 開發流程簡化:開發者只需定義核心的提示詞(Prompt)和可用的工具列表,而無需編寫複雜的工作流代碼。極大降低了開發成本,加快上線速度。
    • 廣泛的生態支持:SDK 具有高度的開放性和兼容性,支持包括 Amazon Bedrock、OpenAI、Ollama 等在內的多種大型語言模型。並且,預置了文件管理、代碼執行、網絡請求等多種實用工具,開箱即用。
    • 支持多智能體編排:該 SDK 引入了先進的 Swarm 架構,支持多智能體併發處理和協同工作。這對於處理複雜任務、提升處理效率和準確率至關重要。
  • 在本次的智能客服機器人的實踐中,我們採用瞭如下的多Agent編排的架構,讓負責的客服任務能夠更精確有效的執行。

image.png

  • Strands SDK 多Agent的關鍵代碼實現:

    • 總控Agent的代碼實現:
      bedrock_model = BedrockModel(
            model_id="global.anthropic.claude-sonnet-4-20250514-v1:0",
            temperature=0.3,
            top_p=0.8,
        )

        # Create the supervisor agent with all specialist Agents
        self.current_agent = Agent(
            name="Supervisor Agent",
            system_prompt=self._build_system_prompt(),
            model=bedrock_model,
            state={"session_id": session_id},
            tools=[
                update_user_id,
                get_product_usage,
                start_return_process,
                check_order_status,
            ],
        )
  • 子Agent的代碼實現:
@tool
def retrieve_from_kb(query: str) -> Dict[str, Any]:
    """
    Retrieve information from a knowledge base based on a query.
    Args:
        query: The search query
    Returns:
        Dictionary containing retrieval results
    """

    try:
        # Call the retrieve tool directly
        retrieve_response = retrieve.retrieve(
            {
                "toolUseId": str(uuid.uuid4()),
                "input": {
                    "text": query,
                    "score": MIN_RELEVANCE_SCORE,
                    "numberOfResults": MAX_RAG_RESULTS,
                    "knowledgeBaseId": DEFAULT_KNOWLEDGE_BASE_ID,
                    "region": AWS_REGION,
                   
                },
            }
        )
        logger.info(f"retrieve_response: {retrieve_response}")
        return retrieve_response
    except Exception as e:
        logger.error(f"Error details: {str(e)}")
        raise
        return {
            "status": "error",
            "message": f"Error retrieving from knowledge base: {str(e)}",
        }


def init_agent(agent_name: str) -> Agent:
    return Agent(
        name=agent_name,
        system_prompt=faq_agent_system_prompt,
        model=bedrock_model,
        tools=[retrieve_from_kb, check_order_status],
    )

4.4 Bedrock AgentCore Memory 調用實現:

  • Amazon Bedrock AgentCore 是一個由亞馬遜雲科技推出的全託管、模塊化平台,旨在幫助開發者大規模構建、部署和運營安全可靠的 AI Agent。其中,Memory是為Agent提供持久化的短期和長期記憶能力,以維護對話上下文。

在本客服機器人實踐中,我們利用AgentCore Memory的能力來保存客户歷史上的對話記錄,並將這些歷史對話記錄作為客服的基礎,來更好的回答客户的問題和訴求。在此,我們以代碼片段的形式,將Memory的調用過程,展示給大家。

    • 第一步,創建memory
def create_memory(memory_name: str) -> None:

    try:
        client = MemoryClient(region_name=AWS_REGION)
        memory = client.create_memory_and_wait(
            name=memory_name,
            strategies=[
                {
                    "userPreferenceMemoryStrategy": {
                        "name": "UserPreference",
                        "namespaces": ["/users/{actorId}"],
                    }
                }
            ],
        )
        logger.info(
            f"Successfully created AgentCore Memory with ID: {memory.get('id')}"
        )
        logger.info(f"Memory details: {memory}")
    except Exception as e:
        logger.info(f"Error creating AgentCore Memory: {e}")
    • 第二步,保存memory
def update_memory(user_id: str, message: Tuple[str, str]) -> None:
    params = {
        "memory_id": BEDROCK_AGENTCORE_MEMORY_ID,
        "actor_id": f"user_{user_id}",
        "session_id": f"session_user_{user_id}",
        "messages": [message],
    }

    memory_client = MemoryClient(region_name=AWS_REGION)
    memory_client.create_event(**params)
    • 第三步,在適合的流程中,召回memory。 召回Memory的過程中,我們使用Strands tools:AgentCoreMemoryToolProvider。可以使用不同的Query召回不同分類的Memory。使得Memory的應用更加靈活和精準。
def init_agent(agent_name: str, user_id: str, session_id: str) -> Agent:
    provider = AgentCoreMemoryToolProvider(
        memory_id=BEDROCK_AGENTCORE_MEMORY_ID,
        actor_id=f"user_{user_id}",
        session_id=f"session_user_{user_id}",
        namespace=f"/users/user_{user_id}",
        region=AWS_REGION,
    )
    return Agent(
        name=agent_name,
        system_prompt="You are a helpful assistant with memory capabilities.",
        model=bedrock_model,
        tools=provider.tools,
    )

@tool
def process_customer_info(user_id: str, session_id: str, query: str) -> str:
    """
    Process and respond to the use of product related queries using a specialized return agent.

    Args:
        user_id: customer provided user id
        session_id: current chat session id, in the context model
        query: A return related question or problem from the user

    Returns:
        customer history or save the new event in custoemr memroy store
    """
    # Format the query for the contact agent with clear instructions
    formatted_query = f"{query}"

    try:
        logger.info(
            f"Routed to memory Agent: user_id:{user_id}, session_id:{session_id}, query:{query}"
        )
        agent = init_agent("customer info agent", user_id, session_id)
        agent_response = agent(formatted_query)
        text_response = str(agent_response)
        logger.info(f"customer info agent: {text_response}")
        if len(text_response) > 0:
            return text_response

        return "沒有關於這個用户的任何信息。"
    except Exception as e:
        # Return specific error message for shipping processing
        return f"Error processing your return related query: {str(e)}"
  • Amazon Bedrock AgentCore Runtime是為Agent是一個專門為託管 AI Agent而設計的基礎設施。它採用容器化的部署方式,負責處理用户輸入、維護上下文,並利用容器的隔離能力,給AI應用一個安全高效的運行環境。

在本次實踐中,我們多Agent的應用部署平台,就採用了AgentCore Runtime。它保證了我們客服能夠按需付費,不用為客服的閒時花費基礎資源費用,同時Runtime的高擴展性,也保證了整個系統可以應對突然的業務高峯衝擊。 我們客服機器人的業務調用流如下: Connect 服務為客服機器人系統的接入模塊,負責chat或voice數據的流入,Lex為客服邏輯模塊,負責意圖識別和系統調度,Lex可以通過Lambda調用部署在AgentCore Runtime上的多Agent客服系統,自動處理客户問題。

d1da8719cc164f1ff18d9cbbea0c9052.png

  • AgentCore Runtime有2種部署方式,本文使用的是可定製化程度更高的自建Docker image,上傳ECR的部署形式。具體的操作流程可以參見附件所列的文檔。

5. 附錄

Github code:https://github.com/heqiqi/multi-agent-for-customer-support

6. 總結

本篇討論了亞馬遜雲科技Amazon Connect呼叫中心服務和Amazon Bedrock AgentCore以及Strands agent框架結合實現智能客服自助服務最佳實踐。本博客從用户實際需求出發提供一個實際可行的解決方案,結合技術和成本綜合考慮提供最佳實踐。本設計充分考慮呼叫中心的特殊性,採用Lambda,Amazon Bedrock,Amazon Bedrock AgentCore,Stands Agent框架結合提供綜合解決方案,同時提供了Amazon Bedrock AgentCore Runtime和Stands Agent結合的代碼並和Amazon Connect實現集成,提供Amazon Bedrock AgentCore Memory集成及調用代碼實現智能客服上下文自動記憶功能。本篇提供了整個實踐的完整代碼及實現的效果展示,,讓讀者可以清楚瞭解實現效果和技術細節。

*前述特定亞馬遜雲科技生成式人工智能相關的服務目前在亞馬遜雲科技海外區域可用。亞馬遜雲科技中國區域相關雲服務由西雲數據和光環新網運營,具體信息以中國區域官網為準。

本篇作者
image.png
本期最新實驗《多模一站通 —— Amazon Bedrock 上的基礎模型初體驗》
✨ 精心設計,旨在引導您深入探索Amazon Bedrock的模型選擇與調用、模型自動化評估以及安全圍欄(Guardrail)等重要功能。無需管理基礎設施,利用亞馬遜技術與生態,快速集成與部署生成式AI模型能力。
⏩️[點擊進入實驗] 即刻開啓 AI 開發之旅
構建無限, 探索啓程!

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.