前 15 天蓋的生產線完全不靠 AI 也能跑。今天開始的第三篇,要在生產線旁邊加一位懂事的專案經理——這位經理是用 Google ADK(Agent Development Kit,Google 開源的 agent 開發框架)搭出來的。
| 比喻 | 術語 | 白話 |
|---|---|---|
| 專案經理 | agent(代理人) | 會自己判斷「下一步做什麼」的程式,不是照死板腳本跑 |
| 經理能用的工具 | tool | 包住一段純函式(例如生產線上的某道工序),經理可以呼叫它、看結果 |
| 「佈展前的總管」這位經理 | expo_director |
建置期跑的 agent,把生產線從頭跑到尾 |
| 「展場現場」那位經理 | docent |
執行期跑的 agent,回答參觀者問題、操控畫面 |
| 一群分工的經理,照順序接力 | SequentialAgent |
ADK 提供的一種 agent,把好幾個子 agent 串成固定順序 |
| 經理反覆檢查、修到過為止 | LoopAgent |
ADK 提供的另一種 agent,反覆跑一組子 agent 直到某個條件成立 |
| 開一間可以跟經理對話、看它每一步在幹嘛的展示間 | adk web |
ADK 內建的本機除錯網頁(Dev UI) |
AI 不寫幾何——不會去決定三角形怎麼排列,那些前 15 天已經交給確定性程式做完,快又穩。AI 該做的是沒有標準答案、需要判斷的工作:
Input_Gear 這種英文零件名,該怎麼寫成中文介紹?這條界線在系列一開始就講過(CLAUDE.md 的硬規則也白紙黑字寫著:AI SDK 只准出現在這個資料夾裡):拔掉這位專案經理,生產線完全照跑,只是所有判斷都要人工填參數。這個系列目前這位經理還沒有申請 AI 服務的門票(GOOGLE_API_KEY),所以接下來會誠實地寫「這部分沒有真的用 AI 測過」。
docent(展場導覽員)目前最簡單,剛好拿來當入門範例。它的骨架長這樣:
root_agent = LlmAgent(
name="docent",
model=os.environ.get("EXPO3D_MODEL", "gemini-2.5-flash"),
description="展場導覽員(W5 實作)",
instruction="你是展場導覽員,只根據展品資料回答,不知道就說不知道。",
before_model_callback=not_implemented,
)
有名字、有模型、有一句指示,但 before_model_callback 這個掛勾攔在最前面,讓它現在收到任何問題都固定回一句「還沒做好」,完全不會真的去問模型。這正好示範一件事:用 ADK 搭一個 agent 的骨架,跟「有沒有真的接上模型」是兩件分開的事——可以先把骨架、職責、工具都搭好,晚一點再決定要不要真的讓它去問模型。
「佈展前的總管」expo_director 是一個 SequentialAgent(接力隊):五個子 agent 依序接力,把生產線從頭跑到尾(各自負責什麼,接下來幾天會一個一個拆開講)。「展場現場」的 docent 骨架已經搭好,但接下來的內容要等系列第四篇才實作。
expo_director 有一套「照劇本走」的替身:沒有申請門票時,不是跳過那些步驟,而是照著固定劇本一步一步真的去呼叫該呼叫的工具,跟接上真的模型時走的是同一組工具、同一份事件流,差別只在「下一步做什麼」是照劇本決定,還是讓模型自己決定。這個設計讓「有沒有申請門票」不影響整條生產線的骨架驗證,只影響有沒有中文文案——零件中文名、熱點解說、常見問答,沒有模型時一律留白,不捏造內容湊數。
adk webADK 提供一個本機網頁,可以看到所有 agent、跟它們對話、逐步看每一次呼叫了什麼工具:
uv run adk web agents --port 8000
打開瀏覽器,選單裡會列出這個資料夾底下所有 agent。這個系列目前有兩個:docent、expo_director。
docent 的實際對話能力還沒做,骨架先搭好。下一篇:把生產線上的每一道工序,包成經理可以呼叫的「工具」。