AI Agent 解剖學
AI Agent 解剖學:把 Agent 想成一個人
把 AI Agent 想成一個人。每個組成部分都對應到人體的功能,理解這些角色就能理解整個 Agent 架構。
LLM = 大腦
LLM(Large Language Model)是 Agent 的大腦。負責理解語言、推理、判斷。
跟人的大腦一樣:
- 能理解意圖:你說「幫我查台北天氣」,大腦知道你要什麼
- 能推理:「天氣冷 → 建議穿外套」
- 有知識但有限:訓練資料有截止日,不知道「今天」的事
大腦想「打開門」,需要手去做。LLM 想「查資料庫」,需要 Tool 去執行。
使用者: 「台北明天會下雨嗎?」
LLM 思考過程:
1. 意圖辨識 → 使用者想知道天氣
2. 判斷 → 我的訓練資料沒有明天的天氣,需要呼叫 API
3. 行動 → 呼叫 get_weather(city="Taipei", date="tomorrow")
4. 整理 → 把 API 回傳的資料組成回覆
Context Window = 短期記憶
Context Window 是 Agent 的短期記憶。像你的工作桌面:同時能攤開多少文件看。
- 容量有限:桌面放不下 100 本書,Context Window 有 token 上限
- 先進先出:超過容量時,最早的內容被推掉
- 範圍內全部可見:在 window 內的資訊,LLM 全部都能參考
Context Window 的組成:
┌─────────────────────────────────────────┐
│ System Prompt (角色設定、規則) │
│ ─────────────────────────────────────── │
│ 對話歷史 (user/assistant 來回) │
│ ─────────────────────────────────────── │
│ 檢索到的文件片段 (RAG) │
│ ─────────────────────────────────────── │
│ Tool 回傳的結果 │
│ ─────────────────────────────────────── │
│ 當前使用者輸入 │
└─────────────────────────────────────────┘
全部加起來不能超過模型的 token 上限
Context Engineering 就是在有限空間內決定放什麼、怎麼放、放多少。
Harness = 中樞神經系統
Harness 是 Agent 的中樞神經。協調大腦和手腳之間的所有訊號,控制整個運作循環。
Harness 負責:
- 循環控制:何時呼叫 LLM、何時執行 Tool、何時停下來
- 路由:使用者訊息送給 LLM,Tool Call 送給對應的 Tool
- 權限管理:哪些 Tool 能用?哪些操作需要人工確認?
- 狀態管理:記住 Agent 做到哪了,中斷後能繼續
- 安全護欄:攔截危險操作、偵測 Prompt Injection
沒有 Harness 的 Agent 就是一個 while 迴圈加上 LLM 呼叫。有了 Harness,Agent 才能可靠地跑在正式環境。
Tools = 手腳
Tools 是 Agent 的手腳。大腦下指令,手腳去做事。
- 查詢類:天氣 API、資料庫查詢、網頁搜尋 → 「看」
- 操作類:發 Email、寫檔案、建立日曆事件 → 「做」
- 計算類:計算機、程式碼執行器 → 「算」
LLM 決定「要做什麼」,Tool 執行「怎麼做」。LLM 不直接查資料庫,而是生成一個 Tool Call 讓 Harness 去執行。
LLM 與 Tool 的互動:
1. LLM 判斷需要用工具
2. LLM 生成 Tool Call(函數名稱 + 參數)
→ get_weather(city="Taipei")
3. Harness 截獲 Tool Call,執行 API 呼叫
4. Tool 回傳結果
→ {"temp": 28, "condition": "晴天"}
5. LLM 根據結果回覆
→ 「台北目前 28 度,晴天。」
MCP = 統一介面
MCP(Model Context Protocol)是 Agent 連接 Tool 的標準協議。
沒有 MCP 的時候,每個 Tool 串接方式都不同。有的用 REST、有的用 GraphQL、有的要 SDK。每接一個新工具就要寫一套專屬程式碼。
MCP 統一了這件事。就像 USB-C 統一了充電線:
沒有 MCP:
Agent ─── 自寫 SDK ─── GitHub API
Agent ─── 自寫 SDK ─── Slack API
Agent ─── 自寫 SDK ─── Database
每個都要寫一套串接程式碼
有了 MCP:
Agent ─── MCP Client ─── MCP Server (GitHub)
├── MCP Server (Slack)
├── MCP Server (Database)
└── MCP Server (任何新工具)
統一協議,插上就用
MCP 架構
Host (AI 應用,如 Cursor / Claude Desktop)
└── MCP Client
├── MCP Server A (工具提供者)
├── MCP Server B (工具提供者)
└── MCP Server C (工具提供者)
每個 Server 暴露:
- Tools → 可執行的動作(查天氣、寫檔案、搜尋)
- Resources → 可讀取的資料(文件、圖片、資料庫內容)
- Prompts → 預設的提示範本
實際在用的 MCP 應用
| MCP Server | 提供的能力 | 用途 |
|---|---|---|
| GitHub MCP | 建 PR、查 Issue、搜尋 code | AI 幫你管理 Git 專案 |
| Slack MCP | 發訊息、查頻道歷史 | AI 幫你在 Slack 溝通 |
| Cloudflare MCP | 管理 Workers、D1 資料庫、KV | AI 幫你操作雲端基礎設施 |
| PostgreSQL MCP | 查詢資料庫、執行 SQL | AI 直接查你的資料庫回答問題 |
| Filesystem MCP | 讀寫本地檔案 | AI 在你的電腦上操作檔案 |
| Brave Search MCP | 搜尋網頁 | AI 幫你查最新資訊 |
1xam 這個平台本身就在用 Cloudflare MCP 和 GitHub MCP。MCP 不是理論,是現在就在跑的東西。
Skills = 技能
Skills 是 Agent 學會的做事方法。跟人的技能一樣——騎腳踏車、打字、煮飯——是可以重複使用的流程知識。
跟 Tools 的差別:
- Tool 是「能做什麼」→ 有一把螺絲起子
- Skill 是「怎麼做」→ 知道怎麼拆裝電腦
Skills 的特點:
- 按需載入:不是每次都用到,需要時才放進 Context Window
- 可重複使用:同一個 Skill 可以用在不同任務
- 可分享:寫好的 Skill 檔案可以給其他 Agent 用
例子:
- Skill: "怎麼做 Code Review"
→ 載入後 Agent 知道要檢查哪些項目、用什麼標準
- Skill: "怎麼寫部署腳本"
→ 載入後 Agent 知道步驟、注意事項、常見錯誤
- 如果任務不需要這些技能,就不載入,節省 Context Window 空間
整合:一個完整的流程
場景:「幫我查下週三台北的天氣,如果會下雨就建一個帶傘提醒」
1. 使用者輸入進入 Harness
2. Harness 把訊息 + System Prompt + 對話歷史放進 Context Window
3. LLM(大腦)理解意圖,決定先查天氣
4. LLM 生成 Tool Call: get_weather(city="Taipei", date="next-wed")
5. Harness 透過 MCP 找到天氣 Tool,執行呼叫
6. Tool 回傳: {"rain_probability": 80%, "condition": "thunderstorm"}
7. Harness 把結果送回 Context Window
8. LLM 判斷: 會下雨 → 需要建提醒
9. LLM 生成 Tool Call: create_reminder(text="帶傘", date="next-wed")
10. Harness 檢查權限 → 不需要人工確認 → 執行
11. Tool 回傳: {"status": "created"}
12. LLM 回覆:「下週三台北有雷陣雨(降雨 80%),已設定早上 7 點帶傘提醒。」
13. Harness 送回使用者
作業
作業 1:拆解一個 Agent
打開 Cursor 或 Claude Code,做一個簡單任務(例如「幫我建一個 hello world 網頁」)。觀察並記錄:
- LLM(大腦)做了什麼判斷?
- 用了哪些 Tool(手腳)?
- Harness 做了什麼協調工作?
- 有沒有看到 MCP 的痕跡?
作業 2:畫出你自己的 Agent 架構
假設你要設計一個「自動回覆客服信件」的 Agent,畫出架構圖:
- LLM 負責什麼?
- 需要哪些 Tool?
- Harness 要控制什麼流程?
- 需要哪些 Skill?
互動圖解
點選人體各部位查看對應的 AI Agent 組件說明
點選或移到各部位查看說明