---
# System prepended metadata

title: DAY 1 - AI 代理 (Agents)
tags: [AI_Agent]

---

# 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)**。