FDE 面試準備指南(二):Agent System Design

RAG 是知識,Agent 是行動。
FDE 的工作常常是兩者都要。
Agent 面試的考點不是「你能不能架起來」,
而是「你知不知道它什麼時候會出問題,以及出了問題你怎麼設計讓它不失控」。


面試情境

面試官:「請設計一個 AI 客服系統,能夠查詢訂單狀態、回答 FAQ、在必要時轉接人工客服。然後告訴我:你的 Agent 如果陷入無限循環,你的架構怎麼防止它失控?」


一、Agent 的本質:LLM + Tools + Loop

用一句話說:

Agent = LLM + Tools + Loop

LLM 負責決策,Tools 負責執行,Loop 讓它反覆思考直到完成任務。

最主流的 Loop 模式叫 ReAct(Reasoning + Acting)

用戶:「我的訂單 #456 到了嗎?」
           │
           ▼
    Thought:「我需要查 CRM 確認訂單狀態」
           │
           ▼
    Action:call_tool("get_order", order_id="456")
           │
           ▼
    Observation:「訂單 #456 狀態:出貨中,預計明天到達」
           │
           ▼
    Thought:「我已經有答案了,可以回覆用戶」
           │
           ▼
    Action:final_answer("您的訂單 #456 目前正在出貨,預計明天到達")

Reason → Act → Observe → 再 Reason,這個循環一直跑到任務完成或觸發終止條件。


二、AI 客服 Agent 的完整系統架構

步驟一:釐清需求(先問,再設計)

你應該問的問題:

├── 日均 query 量是多少?(影響 scaling 設計)
├── 需要處理哪些語言?
├── 訂單查詢需要用戶身分驗證嗎?
├── 轉人工的觸發條件是什麼?(用戶主動要求?還是 AI 判斷不確定?)
└── 對話歷史需要跨 session 保留嗎?

步驟二:完整架構圖

┌──────────────────────────────────────────────────────────────┐
│                         用戶                                   │
└───────────────────────────┬──────────────────────────────────┘
                            │ HTTPS
┌───────────────────────────▼──────────────────────────────────┐
│              API Gateway(身份驗證 + Rate Limiting)           │
└───────────────────────────┬──────────────────────────────────┘
                            │
┌───────────────────────────▼──────────────────────────────────┐
│                   Orchestrator Agent                           │
│                                                               │
│   ① 接收用戶輸入                                              │
│   ② 維護對話狀態(Short-term Memory)                         │
│   ③ ReAct Loop:決定呼叫哪個 Tool                             │
│   ④ 整合 Tool 結果,生成最終回應                              │
│   ⑤ 判斷是否需要終止或轉接                                    │
└──────────┬──────────────────┬──────────────────┬─────────────┘
           │                  │                  │
┌──────────▼──────┐  ┌────────▼────────┐  ┌─────▼──────────────┐
│   CRM Tool       │  │  Knowledge Base  │  │  Escalation Tool   │
│                  │  │  Tool (RAG)      │  │                    │
│  查訂單狀態      │  │  查 FAQ /        │  │  轉接人工客服       │
│  查客戶資料      │  │  退款政策        │  │  建立工單           │
│                  │  │  產品說明        │  │                    │
│  ⚠ 只讀,不允    │  │                  │  │  需要人工確認的     │
│  許 Agent 修改   │  │                  │  │  高風險操作         │
└──────────────────┘  └─────────────────┘  └────────────────────┘

步驟三:意圖分類的位置與設計

意圖分類放在 Orchestrator 內部,有兩種設計方式:

方式 A:讓 LLM 自己選 Tool(Function Calling)
  優點:彈性高,能處理模糊意圖
  缺點:Tool 多時 prompt 變長,選擇準確率下降
  適合:Tool 數量 < 10,任務多樣

方式 B:前置分類器 + LLM 選 Tool
  訂單查詢 ──→ CRM Tool
  FAQ 問題 ──→ Knowledge Base Tool
  轉接請求 ──→ Escalation Tool
  其他     ──→ LLM 自行判斷

  優點:快速路徑成本低(分類器比 LLM 便宜很多)
  缺點:需要維護分類器
  適合:意圖類別固定、高流量、latency 敏感

三、Multi-Agent:什麼時候要拆開

這是面試官最愛問的判斷題。「任務複雜就用 Multi-Agent」這個答案不夠好。

正確的判斷框架

Single Agent 就夠的條件:
  ├── 任務流程是線性的,沒有並行需求
  ├── Tool 數量 ≤ 10
  ├── 一個 context window 裝得下整個任務
  └── 不需要獨立視角驗證輸出

Multi-Agent 的觸發條件(這四個才是關鍵):
  ├── 需要並行執行(Research + Analysis + Writing 同時跑)
  ├── 需要專業分工(不同 Agent 有不同的 System Prompt 和 Tool 集)
  ├── 任務太長,單一 context window 裝不下所有 history
  └── 需要相互驗證(Generator + Critic 循環改進)

三種主流 Multi-Agent 模式

模式 A:Supervisor-Worker
(適合任務可分解、需要協調)

  Supervisor Agent(任務分解 + 結果整合)
       ├── Worker A:資料搜尋
       ├── Worker B:數據分析
       └── Worker C:報告撰寫

  注意:Supervisor 的 context 只看摘要,不看每個 Worker 的完整 trace

模式 B:Pipeline
(適合有明確順序依賴的任務)

  Agent 1(資料收集)─→ Agent 2(分析)─→ Agent 3(撰寫)
  每個 Agent 的輸出是下一個的輸入

模式 C:Peer Review
(適合需要反覆驗證、輸出品質要求高)

  Generator Agent ─→ Critic Agent ─→ Generator Agent(修訂)
       ↑_______________________________________|
  循環直到 Critic 滿意或達到最大迭代次數

Multi-Agent 的代價(不能不說)

代價                    說明
────────────────────────────────────────────────────────────
Latency 增加            每個 Agent 間有通信 overhead,LLM 呼叫次數增加
Error Propagation       前一個 Agent 的錯誤會傳給下一個,放大影響
Debug 困難              不知道是哪個 Agent 出問題,需要完整 tracing
State 管理複雜          Agent 間共享狀態需要設計同步和衝突解決
成本增加                更多 LLM 呼叫 = 更高費用

面試官最想聽的一句話:
「Multi-Agent 的複雜度必須由它帶來的具體收益(並行加速、專業分工、品質驗證)來 justify。如果這些收益不顯著,Single-Agent + 更好的 Tool 設計通常是更好的選擇。」


四、失控防禦:四道護欄

Agent 最大的生產風險是無限循環——決策錯誤 → 重試 → 還是錯 → 繼續重試 → 費用爆炸。

四道護欄的設計層次:

┌──────────────────────────────────────────────────────────┐
│  護欄 1:Hard Limits(硬性上限)← 最基本,必須有          │
│  最大迭代次數(Max Steps)= 20                            │
│  最大執行時間(Timeout)= 60 秒                           │
│  最大 Token 消耗 = 50,000                                 │
│  任何一個觸發 → 強制終止,回報「任務無法完成,請人工處理」 │
└──────────────────────────────────────────────────────────┘
          ↓(Hard Limits 沒觸發)
┌──────────────────────────────────────────────────────────┐
│  護欄 2:Progress Detection(進度偵測)                    │
│  每 N 步比較最近的 Observation 和前 N 步的 Observation     │
│  如果相似度 > 90% → Agent 停滯,強制觸發 Reflection 或終止 │
└──────────────────────────────────────────────────────────┘
          ↓(沒有偵測到停滯)
┌──────────────────────────────────────────────────────────┐
│  護欄 3:Cost Budget(費用預算)                           │
│  每次 LLM 呼叫前估算累積費用                              │
│  超過預算上限 → 暫停,通知用戶或觸發降級策略              │
└──────────────────────────────────────────────────────────┘
          ↓(費用在預算內)
┌──────────────────────────────────────────────────────────┐
│  護欄 4:Human-in-the-Loop(高風險操作人工確認)           │
│  高風險動作清單:退款、刪除資料、發送大量通知、修改定價    │
│  觸發時:暫停 Agent,等待人工審核(設定 5 分鐘 timeout)   │
│  超時未確認 → 取消操作,記錄日誌                          │
└──────────────────────────────────────────────────────────┘

設計原則: 從最便宜的護欄(Hard Limits)到最貴的(Human Review),依序觸發。


五、MCP:Model Context Protocol

這是 Anthropic 和 Google 都在推的標準化工具協定。

為什麼需要 MCP?

沒有 MCP 的世界:
  每個 Agent 框架(LangGraph / ADK / CrewAI)
  各自定義工具呼叫格式
  → 同一個 CRM 工具,換一個框架就要重寫 connector

有 MCP 的世界:
  CRM 只要實作一個 MCP Server
  任何支援 MCP 的框架都能直接用
  → 就像 HTTP 讓任何瀏覽器都能訪問任何網站

MCP 的架構:

  Agent(MCP Client)
       │ 標準 JSON-RPC 請求
       ▼
  MCP Server(CRM / ERP / 資料庫的 adapter)
       │ 標準回應格式
       ▼
  Agent 接收結果,繼續 ReAct loop

MCP 解決的核心問題是工具的可移植性。一旦有人寫好了 Salesforce 的 MCP Server,所有 Agent 框架都能用,不需要重複開發。


六、Google ADK 的定位

FDE 面試 Google 職位,ADK 可能被問到。

ADK vs LangGraph 的核心差異:

                LangGraph                   Google ADK
──────────────────────────────────────────────────────────────
抽象層次        低(細粒度控制)             高(開箱即用)
Gemini 整合     需要自己配置                 原生支援
Multi-Agent     需要自己設計通信              內建 AgentTeam
工具生態        LangChain Tools              Google Cloud Tools
適合場景        複雜自定義工作流              快速原型、GCP 生態系

GCP 整合:

ADK 天然整合 Google Cloud 服務:
  ├── Vertex AI Agent Builder(低代碼部署)
  ├── Cloud Run(Serverless 部署 Agent)
  ├── BigQuery(結構化資料查詢 Tool)
  ├── Google Search / Workspace(原生 Tool)
  └── Cloud Monitoring(Agent 追蹤)

面試中什麼時候提 ADK:
  客戶已在 GCP 生態、希望快速上線 → ADK
  需要複雜的自定義狀態管理和工作流 → LangGraph

七、面試官地雷題

地雷 1:「Single-Agent 加更多 Tool 和 Multi-Agent 有什麼本質差異?」

答:Single-Agent + 多 Tool 的 context 只有一個,
    所有的 Thought / Action / Observation 都在同一個 window 裡,
    工具之間沒有隔離,長任務很快就會 context overflow。

    Multi-Agent 讓每個 Agent 有自己的 context 邊界,
    Supervisor 只看 Worker 的結果摘要,不看完整 trace,
    所以可以處理 Single-Agent context window 裝不下的任務。

    但代價是:多了 Agent 間的通信 overhead 和 error propagation 風險。

地雷 2:「你的 Agent 每次都呼叫 LLM 做決策,太慢怎麼辦?」

答:兩個方向:
    1. 對確定性的路徑用 Rule-Based Router 繞過 LLM(例如「查訂單」就直接路由到 CRM Tool)
    2. 用 Planner-Executor:先讓 LLM 一次生成完整計畫(一次呼叫),
       再用輕量 Executor 逐步執行,不需要每步都呼叫完整的大模型。

地雷 3:「MCP 和直接 Function Calling 有什麼差別?」

答:Function Calling 是 LLM 廠商定義的呼叫格式(每家不同)。
    MCP 是跨框架的標準協定,讓工具只需要實作一次,就能被任何支援 MCP 的框架使用。
    本質差異:Function Calling 是 LLM 層的 interface,
              MCP 是工具層的 standard protocol。

地雷 4:「Human-in-the-loop 怎麼設計才不會讓 Agent 卡住?」

答:關鍵是設定 confirmation timeout:
    等待人工確認的動作設一個時間窗口(例如 5 分鐘)。
    超時有三個處理選項:
    1. 取消操作,把任務放回隊列(適合非緊急)
    2. 降級到更保守的動作(例如建 ticket 而不是直接退款)
    3. 通知用戶「需要人工協助」

    不能讓 Agent 無限等待——那比無限循環還糟。

八、面試回答完整示範

面試官期待聽到的回答:

釐清需求(1 分鐘):
「在設計之前,我想先確認幾個需求。
 這個客服系統的日均查詢量大概是多少?
 訂單查詢需要驗證用戶身分嗎?
 轉人工的觸發條件是什麼——是用戶主動說『我要找人工』,
 還是 AI 判斷自己不確定時就要轉?」

架構(2 分鐘):
「我的設計是單一 Orchestrator Agent,帶三個 Tool:
 CRM Tool(只讀,查訂單和客戶資料),
 Knowledge Base Tool(RAG,查 FAQ 和退款政策),
 Escalation Tool(轉接人工或建工單)。
 不用 Multi-Agent,因為這三個任務是順序的、不需要並行,
 單一 context window 夠裝,Multi-Agent 只會增加複雜度。」

失控防禦(2 分鐘):
「防失控我設計四道護欄:
 第一道是 Hard Limits——最大 20 步、60 秒 timeout,
 任何一個觸發就強制終止並通知用戶。
 第二道是 Progress Detection——每 5 步比較最近的 Observation,
 相似度超過 90% 就視為停滯,強制進入 Reflection 模式。
 第三道是 Cost Budget——設定每個 session 的 token 上限。
 第四道是 Human-in-the-Loop——退款等高風險操作,
 Agent 不自己決定,暫停等人工確認,5 分鐘沒回應就取消。」

Agent 系統設計考的不是你記了多少框架 API,
而是你知道它什麼時候會出問題,以及你的架構如何讓問題可控。

下一篇:ML 基礎知識 — FDE 面試中哪些 ML 基礎仍然必考。

Yen

Yen

Yen