<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ADK on YennJ12 Engineering Blog</title><link>https://yennj12.js.org/yennj12_blog_V4/tags/adk/</link><description>Recent content in ADK on YennJ12 Engineering Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 08 Jun 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://yennj12.js.org/yennj12_blog_V4/tags/adk/feed.xml" rel="self" type="application/rss+xml"/><item><title>FDE 面試準備指南（二）：Agent System Design</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part2-agent-zh/</link><pubDate>Sat, 30 May 2026 10:30:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part2-agent-zh/</guid><description>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(&amp;#34;get_order&amp;#34;, order_id=&amp;#34;456&amp;#34;) │ ▼ Observation：「訂單 #456 狀態：出貨中，預計明天到達」 │ ▼ Thought：「我已經有答案了，可以回覆用戶」 │ ▼ Action：final_answer(&amp;#34;您的訂單 #456 目前正在出貨，預計明天到達&amp;#34;) Reason → Act → Observe → 再 Reason，這個循環一直跑到任務完成或觸發終止條件。</description></item><item><title>FDE core topic - State Machine &amp; DAG：確定性圖結構與 Agent 反思迴圈收斂</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-core-concept-3-state-machine-dag-zh/</link><pubDate>Mon, 08 Jun 2026 10:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-core-concept-3-state-machine-dag-zh/</guid><description>核心定義：DAG 是把 Agent 的「下一步由 LLM 在執行期決定」改成「下一步由工程師在編譯期定義」，讓系統的行為空間可靜態分析、可稽核、可成本管控。
大多數人把 Agent 做成 ReAct 迴圈——因為它最快能跑起來； 少數人在第一次工具呼叫爆炸後改成有守衛的迴圈； 更少人從一開始就把行為編碼成 DAG，把路由邏輯放在 Python 而非 prompt； 最少的人能說清楚為什麼這樣做可以把工具呼叫從 12 次壓到 4 次。
面試情境：「我們的 AI 文件審核系統上線後，有使用者反映處理速度極慢，有時要等 3–4 分鐘；後來發現有些 run 觸發了 25 次以上的 LLM 呼叫，導致每個 query 成本從預計的 $0.01 飆升至 $0.08。如果請你重新設計這個系統的 Agent 架構，你會怎麼做，以及如何確保這個問題不再發生？」
一、為什麼面試官問這個 面試官問這個問題，真正在測試的不是你會不會用 LangGraph API，而是你是否理解 Agent 系統的確定性邊界問題。當 LLM 自己決定下一步時，系統的行為空間在執行前是無界的——相同輸入在不同推論溫度下可能走不同路徑，工具呼叫次數無法預測，成本預算無從管控。在一個 LLM 呼叫每次耗費數十毫秒和若干 Token 費用的世界裡，這不是學術問題，是直接打中 P&amp;amp;L 的工程問題。
面試官測試三個層次：
概念層：你能否清楚說明 ReAct 和 DAG 的本質差異，而不只是說「DAG 有節點有邊」 工程層：你是否知道反思迴圈為何需要雙重收斂條件，以及 State Schema 如何防止跨節點狀態污染 量化層：你能否用具體數字說明影響——工具呼叫次數、Token 成本、收斂延遲 弱答案的特徵：「DAG 就是有向無環圖，LangGraph 可以幫你把 Agent 畫成圖。」只描述工具特性，沒說清楚「為什麼要這樣做」和「不這樣做的具體代價」。</description></item><item><title>FDE 面試準備指南（二十二）：RKK 實戰——動態並行 Tool-Calling 與依賴解析引擎</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part22-parallel-tool-calling-zh/</link><pubDate>Thu, 04 Jun 2026 15:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part22-parallel-tool-calling-zh/</guid><description>LLM 說「我需要查 User Profile、Order History、Risk Score」。
最差的工程師說：「好，我一個一個查。」
FDE 說：「三個互相獨立——我同時查，總延遲從 T₁+T₂+T₃ 降到 max(T₁,T₂,T₃)。」
這就是這題考的核心思維。
面試情境 面試官： 「Gemini 判定需要同時呼叫三個工具：get_user_profile、get_order_history、get_risk_score。這三個工具執行時間不同。有時候工具 B 的輸入必須依賴工具 A 的輸出。你如何設計動態工具執行引擎最大化並行，並處理這種動態依賴關係？」
一、核心問題：順序執行的延遲代價 場景：LLM 決定需要呼叫三個工具 get_user_profile → 150ms get_order_history → 400ms get_risk_score → 300ms 順序執行（最差的方案）： 時間軸： 0 150 550 850ms │─────│─────│─────│ [Profile] [Orders] [Risk] Total: 150 + 400 + 300 = 850ms 並行執行（最優方案，如果互相獨立）： 時間軸： 0 400ms │─────────────────│ [Profile 150ms] [Orders 400ms ] ← 決定總延遲 [Risk 300ms ] Total: max(150, 400, 300) = 400ms（節省 53%） 在 Multi-turn Agent 中，每次推理前的 Tool 執行延遲會直接累積到 E2E 延遲：</description></item><item><title>FDE 面試準備指南（三十一）：RKK 實戰——Google ADK 深度設計：Agent 類型、Tool 宣告與 Multi-Agent 協調</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part31-adk-deep-dive-zh/</link><pubDate>Fri, 05 Jun 2026 09:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/fde-interview-guide-part31-adk-deep-dive-zh/</guid><description>ADK 不只是「Google 版的 LangGraph」。
它是一個針對 Gemini + Google Cloud 生態系優化的 Agent 框架，
在抽象層次、狀態管理、部署模式上都有自己的設計哲學。
面試官考這題，是在測試你能不能幫客戶在 ADK 和 LangGraph 之間做出有依據的選擇。
面試情境 面試官：「客戶是一家保險公司，已經在用 Google Workspace 和 GCP。他們想部署一個多步驟的理賠審核 Agent，需要並行查詢三個系統（核保資料庫、醫療記錄、詐欺偵測），然後由一個審核 Agent 整合結果做決策。你會用 ADK 還是 LangGraph？如果用 ADK，架構怎麼設計？」
一、ADK 在 Google AI 棧中的定位 Google AI Agent 工具棧（由低到高抽象）： ┌─────────────────────────────────────────────────────────────┐ │ Level 1：Gemini API + Function Calling（最底層） │ │ 你自己管理所有狀態、Tool 呼叫、循環邏輯 │ │ 適合：完全客製化，或需要接非 Gemini 模型 │ └─────────────────────────────────────────────────────────────┘ ↓ 抽象提升 ┌─────────────────────────────────────────────────────────────┐ │ Level 2：Google ADK（本篇主題） │ │ 提供 Agent 類型、Tool 宣告、Multi-Agent 協調的標準框架 │ │ 原生整合 Gemini、Vertex AI、Google Search │ │ 適合：需要客製化邏輯，但不想從零搭框架 │ └─────────────────────────────────────────────────────────────┘ ↓ 抽象提升 ┌─────────────────────────────────────────────────────────────┐ │ Level 3：Vertex AI Agent Builder（最高層） │ │ 低代碼/無代碼界面，拖拉設定 Agent 工作流 │ │ 適合：快速原型、業務人員自助、標準企業聊天機器人 │ └─────────────────────────────────────────────────────────────┘ FDE 的判斷原則： 「如果 Agent Builder 能做到，就不用 ADK。 如果 ADK 能做到，就不用從頭用 Gemini API 寫。」 二、ADK vs LangGraph：根本差異 比較維度 ADK LangGraph ────────────────────────────────────────────────────────────────── 模型綁定 Gemini 原生（可接其他） 任何 LLM 抽象層次 高（有 Agent 類型概念） 低（Node + Edge 圖） 狀態管理 Session State（框架管理） StateGraph（你定義 schema） Multi-Agent AgentTeam + sub_agents 自己設計節點間通信 部署 Vertex AI Agent Engine 原生 需要自己包 Container Google Cloud 整合 原生（GCS、BigQuery、Search） 需要額外配置 學習曲線 低（比 LangGraph 少 boilerplate）高（但控制粒度更細） 適合場景 GCP 生態、快速落地 複雜自定義工作流、多模型混用 關鍵判斷點： 客戶在 GCP + 用 Google Workspace + 需要快速 POC → ADK 客戶需要複雜的條件分支 + 不同步驟用不同 LLM → LangGraph 客戶想混用 GPT-4o 和 Gemini → LangGraph（ADK 對非 Gemini 模型支援有限） 三、ADK 的四種 Agent 類型 ADK 的核心設計是「Agent 類型決定執行模式」，而不是讓你手動畫控制流程圖。</description></item></channel></rss>