# DAY 1 - AI 代理 (Agents)
本堂課為 Kaggle Google 5 天 AI 代理密集課程的第一天直播 。由主持人 **Kanch Parlola** 和 **Anand Nalgria**開場,內容涵蓋了課程概覽、Day 1 白皮書的核心概念、業界專家的深度 Q&A ,以及 Day 1 程式實作 (Code Labs) 的介紹。
---
## 1. 🎓 課程介紹
* **課程目標**:本課程旨在帶領學員從基礎到進階,深入了解 AI 代理。
* **課程設計**:
* Day 1:介紹 AI 代理的基礎。
* 後續幾天:將深入探討記憶 (Memory)、評估 (Evaluation),以及如何從原型 (Prototype) 走向生產 (Production)。
* **學習方式**:學員將透過白皮書、程式實作 (Code Labs)、Podcast 和 Q&A 環節進行學習。
* **最終項目**:課程最後有一個可選的 **Capstone 專案**,用於測試學員所學的代理建構技能。
## 2. 📜 白皮書重點:AI 代理簡介
Anand Nalgria 概述了 Day 1 白皮書《Introduction to Agents and Agentic Architectures》的重點,該白皮書奠基於 Julia 和 Patrick 的早期版本。
> ### 代理 (Agent) 的核心架構
> 報告將 AI 代理的核心架構定義為三個主要組成部分:
> * **模型 (Model)**:扮演「大腦」的角色,提供核心推理能力。
> * **工具 (Tools)**:扮演「手腳」的角色,使代理能夠在外部世界中採取行動。
> * **編排層 (Orchestration Layer)**:扮演「神經系統」或「推理引擎」的角色,負責管理記憶和規劃。
* **核心循環**:白皮書詳細介紹了基本的 **Think-Act-Observe (思考-行動-觀察) 循環**。在這個循環中,代理不僅是生成文本,而是持續感知環境、規劃行動,並根據反饋進行迭代。
* **代理系統分類 (Taxonomy)**:
* Level 0:純推理引擎 (Pure reasoning engines)。
* Level 4:自我演進系統 (Self-evolving systems),能夠創造自己的工具。
* 報告中提到了 Google 研發的 Level 3 和 Level 4 系統範例,如 **Co-scientist** 和 **Alpha Evolve**。
* **多代理系統 (Multi-agent Systems)**:探討了超越單一代理的協作模式,多個代理協同解決複雜的工作流程。
* **未來概念**:
* **互操作性 (Interoperability)**:代理如何與人類及其他代理溝通(透過 **A2A 協議**)。
* **安全性 (Security)**:創建新的代理身份類別,以確保自主系統的治理與信任。
## 3. 🎙️ 業界專家 Q&A
本環節邀請了多位在 Google Cloud 負責 AI 代理的專家,回答社群和主持人的提問。
### Q1:從「程式碼工人」到「代理指揮家」的轉變
* **Mike Clark** 指出,這是一個**典範轉移 (Paradigm Shift)**:開發者從專注於「解決單一任務」,轉變為專注於「解決**結果 (Outcome)**」。
* 代理會做出**機率性決策 (Probabilistic Decisions)**,不保證每次都相同。
* 開發者的角色轉變為評估代理的整體表現,並幫助**公民開發者 (Citizen Developers)**(非傳統工程師)使用這些工具。
### Q2:自S自S-improving 代理對企業流程的長期願景
* **Michael Gersonenabber** 回顧了「編碼」的演進:從去年 6 月的 Tab 鍵自動完成,到 10 月的生成完整函式,再到今年 2 月的 **Vibe Coding**(僅給出大概想法,代理即可自主編寫)。
* **影響 1 (創造新工程師)**:使非技術人員(如銷售、產品經理)也能透過代理完成工程任務。
* **影響 2 (個人生產力)**:例如銷售人員使用深度研究代理,快速生成客戶檔案。
* **影響 3 (流程轉型)**:例如藥廠在臨床研究後,能自主完成從數據庫鎖定、分析到撰寫 FDA 摘要的完整流程。
* **Antonio G** 補充,目前已出現**代理設計模式 (Design Patterns)**,例如**批評者模式 (Critic Pattern)**:讓一個代理的產出接受另一個代理的批評與評估。
### Q3:多模態 (Multimodal) 代理(語音、電腦視覺)解鎖的新能力
* **Alan** 建議:應從簡單的(文字+工具)開始建構,然後再疊加上新的介面(如語音)。
* **Computer Use**:這項新功能讓代理能執行 API 不支持的操作(如點擊、填表、登入)。
* **Live Mode**:語音互動適用於需要解放雙手的場景。
* **Michael** 以 **DoorDash** 司機为例:司機雙手拿著包裹,可透過即時語音詢問 AI 代理關於「包裹放置政策」,延遲需控制在 70-200 毫秒。
* 為達低延遲,需準備好數據,例如使用 **RAG**(檢索增強生成)或**提示快取 (Prompt Cache)**。
### Q4:Google AI 代理框架 (ADK) 的核心設計原則
* **Mike Clark**:首要原則是**互操作性 (Interoperability)**。
* **Alan**:ADK 的核心策略是「**押注於語言模型 (Betting on the Language Model)**」,最大化模型的效用,而不僅是建構確定性的工作流。
> **ADK 設計總結**:
> * **開放 (Open)**:開源,支持多語言(Python, Java, Go)。
> * **可互通 (Interoperable)**:可與 **LangChain**、**LangGraph**、**CrewAI** 等框架協作,並支持 **A2A** 和 **MCP** 協議。
> * **可擴展 (Extensible)**:雖然整合了 Google 最佳實踐(Gemini, Vertex),但也允許接入其他模型或平台。
### Q5:代理如何「自主」重組團隊(而非靜態配置)?
* **Antonio**:目前,代理已能自動改善自己的提示 (Prompts)。
* 未來趨勢是代理能演進自己的**拓撲結構 (Topology)**,如同人類的組織圖。
* 可預見「**代理經紀人 (Agent Broker)**」的出現,它專門負責「僱用」新的代理、「解僱」表現不佳的代理,或「合併」功能相近的代理。
### Q6:如何安全地將 AI 代理與企業既有設施(資料庫、CRM)整合?
* **Michael G.**:這是一個持續演進的答案。
* **MCP (Model Context Protocol)** 和 **A2A (Agent-to-Agent)** 協議是關鍵,它們實現了「**關注點分離 (Separation of Concerns)**」。
* 數據團隊(Data Team)可以透過 MCP 或 A2A 協議 來治理數據的暴露程度。
* **防禦性代理**:數據擁有者可以**部署一個防禦性代理**來回應查詢,而不是讓外部代理直接訪問原始資料庫。
* **Alan** 補充:傳統的軟體安全實踐(如**深度防禦 Defense in Depth**、**最小權限 Least Access**)依然適用。
### Q7:實務上如何可靠地串聯 50+ 個工具?
> **Alan**:**坦白說,我不會這樣做 (Frankly, I don't do that)。**
* **最佳實踐**:
1. **分解 (Decompose)**:將代理分解為多個「專家」,每個專家只專注 1-10 個工具。
2. **路由 (Routing)**:在這些專家代理之間進行任務路由。
* **Mike** 補充:
* 使用 **MCP** 處理「交易型」任務(單次問答)。
* 使用 **A2A**(代理對代理)處理需要「流程」才能得出答案的複雜任務。
* **警告**:工具和步驟越多,複雜性、回歸風險 和成本(Token 消耗) 就越高。
## 4. 💻 程式實作 (Code Labs) 概覽
由 **Christopher Overhalt** 和 **Hank Flynn** 介紹 Day 1 的實作內容。
### 代理開發工具包 (ADK) 介紹
* **Hank Flynn** (ADK 技術負責人 ) 解釋 **ADK (Agent Development Kit)** 是一個開源、程式碼優先 (Code-first) 的工具包,旨在將真正的軟體工程紀律(模組化、可測試、版本控制)引入 AI 代理開發。
* **ADK 核心三要素**:
1. **Agent**:核心工作者 (Worker)。
2. **Tools**:手腳,用以與 API 和資料庫互動。
3. **Runner**:執行循環。
* **ADK 關鍵差異化**:強大的**狀態管理 (State Management)**(Sessions, States, Artifacts),這是區分玩具聊天機器人與生產級代理的關鍵。
* **開發與部署**:
* 本地開發:使用 **ADK Web UI** 進行調試。
* 生產部署:可無縫切換到 **Google Cloud Agent Engine** 或 SQL 資料庫。
* **進階功能**:支持 **ADK Live**(即時影音串流) 和 **A2A**(多代理支持)。
### Codelab 1:From Prompt to Action (從提示到行動)
* **目標 1 (LLM vs Agent)**:理解 LLM 和 Agent 的區別。
* **目標 2 (建構代理)**:用少於 10 行程式碼,建構一個包含**Google 搜尋工具**的簡易助理代理。使其能獲取即時資訊(如 ADK Go 語言上週才發布)。
* **目標 3 (ADK Web UI)**:學習使用 **ADK Web UI** 來查詢代理、進行追蹤 (Tracing) 和評估。
### Codelab 2:Multi-agent Systems and Patterns (多代理系統與模式)
* **目標**:學習為何以及如何設計多代理系統。
* **模式 1:順序工作流 (Sequential Workflow)**
* **描述**:像生產線一樣,按固定順序執行任務。
* **範例**:撰寫部落格(A 代理生成 -> B 代理撰寫 -> C 代理編輯)。
* **模式 2:平行工作流 (Parallel Workflows)**
* **描述**:將可獨立執行的任務分派 (Fan-out) 給多個代理同時工作。
* **模式 3:循環工作流 (Loop Agent)**
* **描述**:用於需要迭代和改進的任務。
* **範例**:一個**生成者代理 (Generator)** + 一個**批評者代理 (Critic Agent)**,兩者不斷循環,直到滿足特定標準為止。
* **`[教學]`** https://www.kaggle.com/code/kaggle5daysofai/day-1a-from-prompt-to-action
## 5. 🧠 隨堂測驗 (Day 1 重點回顧)
測驗內容基於 Day 1 白皮書。
1. **AI 代理的核心解剖學包含哪三要素?**
* **答案 (B)**:模型 (Model)、工具 (Tools)、編排層 (Orchestration Layer)。
2. **白皮書中描述的「五步代理問題解決流程」的正確順序是?**
* **答案 \(C)**:Get the mission (獲取任務) -> Scan the scene (掃描場景) -> Think it through (思考) -> Take action (採取行動) -> Observe and iterate (觀察與迭代)。
3. **Level 2 代理(戰略問題解決)與 Level 1(純推理)的關鍵區別?**
* **答案 (D)**:Level 2 使用**情境工程 (Context Engineering)** 來規劃複雜的多步驟目標。
4. **編排層 (Orchestration Layer) 在代理架構中的主要角色?**
* **答案 (A)**:扮演指揮家 (Conductor),管理 **Think-Act-Observe 循環**和狀態。
5. **Level 4(自我演進系統)的定義是什麼?**
* **答案 (B)**:它能演進自己的能力並創造新工具。
---
# Kaggle 實作 - 從提示到行動
本課程筆記是建立 **AI 代理 (AI Agent)** 的第一步。核心目標是引導學習者安裝 **Agent Development Kit (ADK)**、設定使用 **Gemini 模型** 所需的 API 金鑰,並成功建立、運行一個能實際採取行動(例如:使用工具)的簡單 AI 代理。
-----
## 1\. 🚀 課程簡介與環境設定
```python
pip install google-adk
```
### 1.1 設定 Gemini API 金鑰
* **取得金鑰**:首先,至 Google AI Studio 建立一組 API 金鑰。
* **設定密鑰**:在 Kaggle 筆記本編輯器中,選擇 `Add-ons` \> `Secrets`。
* **新增密鑰**:建立一個標籤為 `GOOGLE_API_KEY` 的新密鑰,將您的金鑰貼入「Value」欄位後儲存。
* **驗證金鑰**:運行以下程式碼,從 Kaggle Secrets 讀取金鑰並設定環境變數。
<!-- end list -->
```python
import os
from kaggle_secrets import UserSecretsClient
try:
GOOGLE_API_KEY = UserSecretsClient().get_secret("GOOGLE_API_KEY")
os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY
os.environ["GOOGLE_GENAI_USE_VERTEXAI"] = "FALSE"
print("✅ Gemini API key setup complete.")
except Exception as e:
print(f"🔑 Authentication Error: Please make sure you have added 'GOOGLE_API_KEY' to your Kaggle secrets. Details: {e}")
```
### 1.2 匯入 ADK 元件
**[什麼是ADK](/S-25Aly6STSAeREuDSMENw)**
* 課程將使用 `google-adk` 函式庫(在 Kaggle 環境中已預先安裝)。
* 匯入建立代理所需的核心元件:
<!-- end list -->
```python
from google.adk.agents import Agent
from google.adk.runners import InMemoryRunner
from google.adk.tools import google_search
from google.genai import types
print("✅ ADK components imported successfully.")
```
## 2\. 🤖 建立你的第一個 AI 代理 (Agent)
### 2.1 什麼是 AI 代理?
* **大型語言模型 (LLM)**:傳統的 LLM 流程是「提示 -\> LLM -\> 文字」。
* **AI 代理 (AI Agent)**:代理則更進一步,它能夠思考、採取行動,並觀察行動的結果,以提供更好的答案。
> 代理的運作流程:
> **提示 (Prompt)** -\> **代理 (Agent)** -\> **思考 (Thought)** -\> **行動 (Action)** -\> **觀察 (Observation)** -\> **最終答案 (Final Answer)**
### 2.2 定義你的代理
* 我們使用 `Agent` 類別來設定代理的關鍵屬性:
* `name` 與 `description`:代理的名稱與描述。
* `model`:指定驅動代理的 LLM,此處使用 **gemini-2.5-flash-lite**。
* `instruction`:代理的指導提示(Prompt),告訴它目標與行為準則。
* `tools`:代理可使用的工具列表,此處賦予它 **google\_search**(Google 搜尋)的能力。
<!-- end list -->
```python
root_agent = Agent(
name="helpful_assistant",
model="gemini-2.5-pro",
description="A simple agent that can answer general questions.",
instruction="You are a helpful assistant. Use Google Search for current info or if unsure.",
tools=[google_search],
)
print("✅ Root Agent defined.")
```
### 2.3 運行你的代理
* **Runner (運行器)**:ADK 中負責協調的核心元件,用於管理對話、發送訊息給代理並處理其回應。
* **建立運行器**:使用 `InMemoryRunner` 來載入我們定義的 `root_agent`。
<!-- end list -->
```python
runner = InMemoryRunner(agent=root_agent)
print("✅ Runner created.")
```
* **發送查詢**:使用 `.run_debug()` 方法異步發送提示並取得答案。
<!-- end list -->
```python
response = await runner.run_debug("What is Agent Development Kit from Google? What languages is the SDK available in?")
```
* **輸出範例**:
<!-- end list -->
```
### Created new session: debug_session_id
User > What is Agent Development Kit from Google? What languages is the SDK available in?
helpful_assistant > The Agent Development Kit (ADK) from Google is a flexible and modular framework... [代理的回答] ... ADK is optimized for Gemini ... The ADK SDK is available in the following programming languages:
* **Python**
* **Go**
* **Java**
```
### 2.4 輪到你測試
* 嘗試提出需要即時資訊的問題:
<!-- end list -->
```python
response = await runner.run_debug("What's the weather in London?")
```
* **輸出範例**:
<!-- end list -->
```
### Continue session: debug_session_id
User > What's the weather in London?
helpful_assistant > The weather in London, UK is currently cloudy with a chance of rain... [天氣預報] ...
```
## 3\. 💻 試用 ADK 網站介面
* **ADK Web UI**:ADK 包含一個內建的網站介面(Web UI),用於互動式聊天、測試和偵錯。
* \`\`
* **建立範例代理**:使用 `!adk create` 指令來產生一個包含必要檔案(如 `agent.py`)的 `sample-agent` 資料夾。
<!-- end list -->
```bash
!adk create sample-agent --model gemini-2.5-flash-lite --api_key $GOOGLE_API_KEY
```
* **獲取存取 URL**:運行輔助函數來取得 Kaggle 環境中的代理 URL。
<!-- end list -->
```python
url_prefix = get_adk_proxy_url()
```
* **啟動 Web 服務**:運行 `!adk web` 指令來啟動本地伺服器。
<!-- end list -->
```bash
!adk web --url_prefix {url_prefix}
```
* **存取介面**:點擊 `get_adk_proxy_url()` 儲存格產生的「Open ADK Web UI」按鈕,即可開啟 UI。
> ⚠️ **重要提示**:請勿與任何人分享該代理連結(Proxy Link),因為它包含您的身份驗證權杖。
## 4\. ✅ 總結與後續步驟
* **恭喜!**:你已成功建立並運行了第一個 ADK 代理。
* **核心觀念**:本課最大的收穫是理解代理不僅是回應,它還會**推理 (Reasoned)** 並**採取行動 (Acted)**(使用工具)。
* **了解更多**:
* ADK 文件
* ADK Python 快速入門
* ADK 代理 (Agents) 總覽
* **後續步驟**:繼續下一個筆記本,學習如何建構**多代理系統 (Multi-agent systems)**。