Claude Agent SDK 完整工作坊 — Thariq Shihipar, Anthropic

Anthropic 的 Thariq Shihipar 在這場兩小時的工作坊中,深入介紹了 Claude Agent SDK 的設計理念與實戰用法。從「為什麼 Bash 是你唯一需要的工具」到如何設計 Agent 迴圈的三大步驟(蒐集上下文、執行動作、驗證結果),再到現場使用 Claude Code 原型製作一個 Pokemon Agent。這場工作坊不只是技術教學,更揭示了 Anthropic 內部建構 Agent 的核心哲學:簡單但不容易,讓模型像被關在房間裡的人一樣自主解決問題。


原影片連結:https://www.youtube.com/watch?v=TqC1qOfiVcQ

影片重點

  • Claude Agent SDK 建構在 Claude Code 之上,將內部建構 Agent 的最佳實踐打包成開發者可用的框架
  • Bash 是最強大的 Agent 工具:它是第一個「Code Mode」,能組合、儲存、動態生成腳本,取代大量專用工具
  • Agent 迴圈的三大步驟:蒐集上下文(Gather Context)、執行動作(Take Action)、驗證結果(Verify Work)
  • 用程式碼生成(Code Generation)來處理非程式碼任務,例如查天氣、分析電子郵件
  • Sub-Agent 是管理上下文視窗的關鍵手段,可平行處理任務並回傳結果給主 Agent
  • Skills 是一種漸進式上下文揭示(Progressive Context Disclosure)機制,讓 Agent 按需載入專業知識
  • 安全性採用「瑞士起司防禦」模型:模型對齊 + 權限控制 + Sandbox 多層防護
  • 建構 Agent 時應優先考慮:問題的可驗證性和狀態的可逆性

詳細內容

[00:00] 開場與議程概覽

Thariq 開場介紹了本次工作坊的議程:什麼是 Claude Agent SDK、為什麼要使用它、什麼是 Agent、如何設計 Agent,以及現場 live coding 環節。他強調這不是一個預先準備好的 demo,而是會現場思考、即時解決問題,因為建構 Agent 迴圈本身就是一門「藝術與直覺」。

[02:30] AI 功能的演進:從單一 LLM 到 Agent

Thariq 描述了 AI 功能的三個演進階段。最初是單一 LLM 功能,像是分類文字、回傳固定類別的回應。接著是工作流(Workflow),例如標記電子郵件、透過 RAG 索引程式碼庫來提供補全建議,這些都有非常結構化的輸入輸出。現在進入了 Agent 時代,以 Claude Code 為典型代表——你不限制它能做什麼,只是用自然語言與它對話,它會自主決定行動軌跡、建構自己的上下文,高度自主地工作。

[05:00] 為什麼建構在 Claude Code 之上

Anthropic 在內部建構 Agent 時,發現不斷重複打造相同的元件:工具系統、迴圈執行、Prompt 設計、檔案系統互動、Skills、Sub-Agent、Web Search、記憶體管理、壓縮(Compacting)、Hooks 等。Claude Agent SDK 就是把這一切打包起來供開發者使用。

一個關鍵發現是:Claude Code 釋出後,不只工程師在用,財務、資料科學、行銷等非技術人員也開始使用它來處理非程式碼任務。Anthropic 意識到這是一個自然湧現的模式,於是決定把 Agent SDK 建構在 Claude Code 之上。這些都是從大規模部署 Claude Code 中學到的經驗教訓,例如工具使用錯誤處理、上下文壓縮等最佳實踐。

[10:00] Bash Is All You Need — Bash 是最強大的 Agent 工具

這是 Thariq 最核心的主張。Bash 工具讓 Claude Code 如此強大,因為它本質上是第一個「Code Mode」——即程式化工具呼叫(Programmatic Tool Use)。Bash 能做到的事情包括:

  • 將工具呼叫結果儲存到檔案
  • 動態儲存記憶
  • 動態生成腳本並執行
  • 組合功能(如 tail、grep)
  • 使用既有軟體(如 FFmpeg、LibreOffice)

如果你在設計一個 Agent 框架,傳統做法是為每個功能建立專用工具(搜尋工具、lint 工具、執行工具),最終會有幾十甚至上百個工具。而 Claude Code 只用 grep 和你的套件管理器(如 npm run testnpm run lint)就能搞定,甚至能在你沒有 linter 時主動幫你安裝 ESLint。

[15:00] Bash 在非程式碼 Agent 中的威力

Thariq 用電子郵件 Agent 舉例。假設用戶問「這週我在叫車上花了多少錢?」沒有 Bash 的 Agent 搜尋收件匣得到一百封郵件,然後必須在上下文中「思考」所有內容。就像有人把一疊紙丟給你讓你算數一樣困難。

有了 Bash,Agent 可以把搜尋結果存到檔案、用 grep 過濾價格、用腳本加總、甚至自我檢查——把每個價格存成帶行號的檔案,事後逐一核對。這種組合能力是 Bash 的核心優勢。

另一個例子是影片會議 Agent:要找出財報電話會議中講者提到「季度業績」的所有時刻,可以用 FFmpeg 切割影片、用 jq 分析資料。

[22:00] 工具(Tools)vs Bash vs 程式碼生成(Codegen)

Thariq 介紹了 Agent 可用的三種行動方式:

工具(Tools):極度結構化、非常可靠、最少重試。缺點是上下文佔用大(50-100 個工具會讓模型混亂)、不可組合、不可發現。適合原子操作,如寫入檔案、發送電子郵件等不可逆動作。

Bash:高度可組合、靜態腳本佔用少量上下文、支援漸進式發現(如 playwright --help)。缺點是需要一些發現時間,呼叫成功率可能略低。

程式碼生成(Codegen):最高組合能力、動態腳本。缺點是執行時間最長(需要 lint、可能需要編譯)。適合高度動態的邏輯、API 組合、資料分析。

在 Claude Code 中,寫入檔案用的是專用工具(因為需要用戶審批),但搜尋、lint、錯誤檢查等都用 Bash。

[30:00] Skills — 漸進式上下文揭示

Skills 是 Claude Code 最近推出的功能,本質上是一組檔案的集合。Agent 需要完成某個任務時,會進入 Skills 資料夾讀取指令、執行腳本。例如 DOCX Skills 教 Agent 如何用程式碼生成來建立文件檔案。

Skills 適合需要大量專業知識的可重複任務。例如最近釋出的前端設計 Skill,就是由 Anthropic 最優秀的 AI 前端工程師精心打磨的 Prompt。Skills 也是「Bash Tool 信仰」的體現——它們本質上就是 Agent 可以 cd 進去閱讀的資料夾。

關於 Skills 與 Claude.md 的區分,Thariq 坦言這些概念都還很新(Skills 才釋出兩週),最佳實踐仍在探索中。大方向是 Skills 用於漸進式上下文揭示——Agent 按需載入,而非一開始就把所有資訊塞進 Prompt。

[38:00] Agent 迴圈的設計

Agent 迴圈的三大步驟:

  1. 蒐集上下文(Gather Context):對 Claude Code 來說是 grep 和尋找檔案;對電子郵件 Agent 來說是找到相關郵件。很多人會低估或跳過這一步。
  2. 執行動作(Take Action):Agent 有了正確工具後如何完成工作——程式碼生成和 Bash 是更靈活的行動方式。
  3. 驗證結果(Verify Work):這是選擇 Agent 適用場景的關鍵指標。如果你能驗證工作成果(如程式碼可以 lint、編譯、執行),那它就是很好的 Agent 候選場景。研究類任務較難驗證,但可以透過引用來源來部分達成。

設計 Agent 迴圈的第一法則:反覆閱讀 Agent 的 Transcript,觀察它在做什麼、為什麼這樣做、你能如何幫助它。

[45:00] 實戰案例:試算表 Agent 設計

Thariq 用試算表 Agent 作為案例,帶領觀眾思考如何設計搜尋、執行和驗證步驟。

對於搜尋試算表,觀眾提出了多種方案:轉成 CSV 後用 grep、用 AWK、用 Google APIs、用 SQLite 直接查詢 CSV。Thariq 特別推崇 SQLite 方案——把問題轉換成模型熟悉的介面(SQL),是很有創意的 API 設計。其他搜尋介面設計包括:使用試算表座標語法(如 B3:B5)、SQL 查詢、XML 查詢(因為 XLSX 底層是 XML)。

關鍵洞察:蒐集上下文是非常有創意的工作,只嘗試一種方法絕對不夠。要嘗試 SQL、grep、座標搜尋等多種方式,跑測試比較效果。

[55:00] Sub-Agent 的威力

Sub-Agent 是管理上下文的利器。主 Agent 可以派出搜尋 Sub-Agent 去做大量工作,只需要看最終結果,避免上下文汙染。例如試算表 Agent 可以同時派出多個讀取 Sub-Agent,分別讀取和摘要不同的工作表,然後回傳結果。

Thariq 特別自豪的是 Claude Code 在 Sub-Agent 搭配 Bash 方面的表現。平行執行多個 Sub-Agent 時,Bash 會產生很多複雜的 Race Condition,Claude Code 團隊投入了大量工作來解決這些問題。

[62:00] 安全性:瑞士起司防禦模型

面對「給 Agent 這麼大的權力,如何確保安全?」的問題,Thariq 介紹了「瑞士起司防禦」(Swiss Cheese Defense):每一層都有防禦,加在一起就能攔住一切。

  • 模型層:對齊訓練(推薦參考 Anthropic 的 Reward Hacking 論文)
  • 框架層:權限控制、Prompt 約束、Bash 工具解析器(能可靠地知道 Bash 在執行什麼)
  • Sandbox 層:沙箱化網路請求和檔案系統操作,防止資料外洩

如果 Agent 被惡意接管,Sandbox 確保它無法將資訊外送。搭配 Cloudflare、Modal、E2B、Daytona 等 Sandbox 提供商,可以做到不在個人電腦或有生產環境密鑰的機器上運行。

[70:00] 上下文管理與壓縮

Thariq 分享了一個有趣的觀察:很多用戶告訴他「我已經 Compact 五次了」,而他自己幾乎從不需要 Compact。原因是他習慣頻繁清除上下文視窗——在程式碼開發中,狀態儲存在程式碼庫的檔案裡,Agent 只需要看 git diff 就能了解當前變更,不需要整個聊天記錄。

對於非技術用戶的 Agent,上下文管理更具挑戰。可能的方案包括:每次新問題時自動 Compact、將用戶偏好儲存到檔案系統、讓試算表本身承載狀態。核心觀點是不需要百萬 Token 的上下文,只需要好的上下文管理和 UX 設計。

[75:00] 現場原型製作:Pokemon Agent

Thariq 現場演示了如何用 Claude Code 建構一個 Pokemon Agent。他先讓 Claude Code 去搜尋 PokeAPI 並生成一個 TypeScript 函式庫(包含 getPokemonByNamelistPokemongetSpecies 等介面)。

他對比展示了兩種方案:

  • 純工具版:用 Messages API 定義了 getPokemongetPokemonSpeciesgetMove 等工具,透過工具呼叫回答「Generation 2 的水系 Pokemon 有哪些?」
  • Claude Code 版:只用 Claude.md 描述 API、提供範例腳本,讓 Agent 自己寫腳本查詢和分析

Claude Code 版能處理更複雜的問題,如「我想組一個以 Venusaur 為核心的隊伍,根據 Smogon 資料給建議」——它會搜尋 Smogon 文字資料、分析最常見隊友、生成分析腳本。

[85:00] 從原型到產品化

部署 Agent 有兩種路線。第一種是本地應用——因為 AI 的運行開銷,本地 App 可能會重新流行(如 Claude Code 就是本地運行)。第二種是 Sandbox 託管,使用 Cloudflare 等提供商,程式碼可以簡單到 sandbox.start() 然後 bun agent.ts

一個進階技巧:如果 Agent 需要自適應 UI,可以在 Sandbox 中運行 Dev Server,Agent 編輯程式碼後即時重新整理,用戶直接與動態網站互動。這也是 Lovable 等網站建構器的工作原理。

[90:00] 重要建議與哲學

Thariq 分享了幾個關鍵建議:

關於寫程式碼的心態:我們能用 AI 加快 10 倍寫程式碼,也應該 10 倍速度丟棄程式碼。不要過度投資在預測未來的架構上,建構今天有效的東西,準備好之後重寫。對新創公司來說,這是對抗大公司六個月孵化週期的最大優勢。

關於 Hooks 的用法:Hooks 可以在每次工具呼叫後插入確定性驗證,也可以注入即時上下文變更(如用戶在 Agent 工作期間修改了試算表)。

關於大型程式碼庫:目前的做法是撰寫好的 Claude.md、確保 Agent 從正確的目錄開始、建立完善的驗證步驟和 Hooks。語意搜尋(Semantic Search)的問題在於模型不是在語意搜尋上訓練的,而 grep 是模型熟悉的工具。

我的想法

這場工作坊最讓我印象深刻的觀點是「把 Agent 想成被關在房間裡的人」這個比喻。你會希望給這個人一台電腦和網路,而不是一疊你認為「可能有用」的紙。這重新定義了我們設計 Agent 的思維——與其精心挑選上下文餵給模型,不如給它工具讓它自己去找需要的資訊。

「Bash Is All You Need」的主張初聽有些極端,但背後的邏輯很紮實:每新增一個專用工具,都是在假設我們知道 Agent 需要什麼。而 Bash 的通用性讓 Agent 能發現和組合任何工具,這種靈活性在面對真實世界的複雜問題時特別有價值。

另一個值得注意的點是 Thariq 反覆強調「Read the Transcript」。建構 Agent 不像傳統軟體開發那樣有確定的設計模式可以遵循,它更像是在理解一個有機體——你需要觀察它的行為、理解它的偏好、為它設計合適的環境。這種「養模型」的心態轉變,對於從傳統工程背景轉向 AI Agent 開發的人尤其重要。

最後,「簡單但不容易」這個定位很精準。Agent 的程式碼量不需要大,但每一行背後都需要對模型行為的深刻理解和大量實驗。這也是為什麼 Thariq 比喻 Agent SDK 像 React——雖然一開始覺得麻煩(JSX、Bundler、Sandbox),但它提供了正確的抽象層級,讓你能專注在真正重要的領域問題上。

進階測驗:Claude Agent SDK 完整工作坊

測驗目標:驗證你是否能在實際情境中應用 Claude Agent SDK 的設計理念與最佳實踐。
共 5 題,包含情境題與錯誤診斷題。

1. 電子郵件 Agent 的搜尋策略 情境題

你正在用 Claude Agent SDK 建構一個電子郵件分析 Agent。 用戶問:「這個月我在 Uber 和 Lyft 上花了多少錢?」 Agent 搜尋收件匣後回傳了 120 封相關郵件。 你需要讓 Agent 從這些郵件中準確計算總花費。
  • A. 把 120 封郵件全部放入上下文視窗,讓模型逐一閱讀並加總金額
  • B. 用 Bash 將搜尋結果存入檔案,用 grep 過濾金額欄位,寫腳本加總並將結果存檔供核對
  • C. 建立一個專用的「計算總金額」Tool,傳入郵件 ID 列表作為參數
  • D. 派出 120 個 Sub-Agent,每個 Sub-Agent 處理一封郵件並回傳金額

2. 試算表 Agent 的搜尋介面設計 情境題

你要建構一個試算表 Agent,用戶會問類似「2026 年的營收是多少?」的問題。 試算表有上百個欄位和上萬筆資料。 你在設計「蒐集上下文」步驟時,哪種做法最符合 Anthropic 的建議?
  • A. 把整個試算表轉成 JSON 放入 System Prompt,讓模型直接解析
  • B. 為每種查詢類型各建立一個專用 Tool(查營收 Tool、查利潤 Tool、查成本 Tool)
  • C. 將試算表轉換成 SQLite 資料庫,讓 Agent 用 SQL 查詢——因為模型對 SQL 非常熟悉
  • D. 只提供試算表的前 10 行給 Agent 看,讓它猜測資料結構後直接回答

3. Agent 適用場景的判斷 情境題

你的團隊正在評估哪些任務適合用 Claude Agent SDK 建構 Agent。 以下是四個候選任務,根據工作坊中強調的「可驗證性」和「可逆性」原則, 哪一個是最佳的 Agent 候選場景?
  • A. 自動化程式碼審查:可以用 lint、編譯、測試來驗證,且有 Git 歷史紀錄可以回溯
  • B. 自動在電商網站下單:操作不可逆,加錯商品到購物車會導致複雜的狀態變化
  • C. 深度研究報告生成:很難驗證研究結果的正確性,只能部分透過引用來源確認
  • D. 即時社群媒體發文:發布後難以撤回,且無確定性的驗證方法判斷貼文品質

4. Agent 架構設計的反模式 錯誤診斷

小明用 Claude Agent SDK 建構了一個客服 Agent,但效能很差。 以下是他的設計: – 定義了 85 個專用 Tool(查訂單、查物流、查退貨、查優惠券…) – 每個 Tool 都有詳細的 JSON Schema 描述 – Bash Tool 被託管在獨立的虛擬環境中,與 Agent 的檔案系統隔離 – 所有 Tool 呼叫的結果直接留在上下文視窗中,不儲存到檔案
  • A. 問題只在於 Tool 數量太多,應該減少到 10 個以內就能解決
  • B. 問題在於沒有使用 Sub-Agent,應該為每個功能建立獨立的 Sub-Agent
  • C. 問題在於 JSON Schema 太詳細,簡化描述就能改善效能
  • D. 有多重問題:Tool 過多佔用大量上下文、Bash 與檔案系統隔離是反模式、Tool 結果不存檔導致上下文膨脹

5. Agent 安全性設計的漏洞 錯誤診斷

小華部署了一個 Agent,處理用戶上傳的文件並生成分析報告。 她的安全措施如下: 1. 使用 Claude 模型的對齊能力(模型層防護) 2. 在 System Prompt 中加入「不要執行危險操作」的指令 3. Agent 運行在她的開發筆電上,可以存取公司 VPN 和生產環境密鑰 4. 沒有限制網路請求的範圍 一位安全工程師指出這個部署存在嚴重風險。最關鍵的問題是什麼?
  • A. System Prompt 的安全指令不夠詳細,應該列出所有禁止的操作
  • B. 應該在模型層使用更強的對齊訓練,確保模型永遠不會違反指令
  • C. 缺少 Sandbox 層防護——Agent 在有生產密鑰的機器上運行且未限制網路,即使被入侵也能外洩敏感資料
  • D. 缺少 Bash Tool 解析器來監控 Agent 執行的命令內容
0

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *