010. 一場現場示範|AI 從「回答」變成「做事」

李宏毅老師這堂 83 分鐘的課,不從安裝教學開始,而是先做一場有風險、也很有說服力的現場示範。他透過 WhatsApp 對一台裝有 OpenClaw 的獨立筆電下令:製作一支介紹「教學怪物」競賽的影片,證明影片是在課堂現場完成,做好後自行上傳 YouTube,再從電腦發出聲音通知老師。

十多分鐘後,Agent 真的交付了一支影片。它自己整理腳本、製作投影片、合成語音、組成影片並上傳。成果並不完美:用來證明「人在教室」的照片看起來不像現場,旁白也自曝曾把 API key 推到公開 GitHub repo,導致金鑰失效、32 支影片變成沒有聲音。但正因為它會犯錯,這個示範比精修過的產品 demo 更能說明 Agent 的本質。

來源影片:解剖小龍蝦 — 以 OpenClaw 為例介紹 AI Agent 的運作原理,Hung-yi Lee,2026 年 3 月 9 日上傳。

圖 01:以 OpenClaw 解剖 AI Agent

一般聊天模型可以提出頻道名稱、腳本構想與製作建議,但常停在「我無法替你實際操作」。Agent 的差異不是突然多了一種智慧,而是它接上了檔案、瀏覽器、shell、排程、語音與外部服務。語言模型仍只產生文字或結構化工具指令,真正讓指令在電腦上發生的,是模型外面的程式系統。

這堂課的核心可以濃縮成一句話:Agent 的擬人感,來自一次次把狀態整理給模型,再把模型的輸出轉成真實行動。

021. Agent 不是模型|「AI Agent」中不是 AI 的那一半

老師反覆強調:OpenClaw 不是語言模型,也不是另一個 Claude、GPT 或 Gemini。它是跑在使用者電腦上的介面與執行框架。人從 LINE、WhatsApp、Discord 或網頁傳入訊息;OpenClaw 加工訊息、補上環境與規則,再呼叫雲端或地端模型;模型回傳後,OpenClaw 決定要執行工具還是把文字送回通訊軟體。

圖 02:Agent 與語言模型的分工

這個分工解開了許多常見誤會:

  • Agent 的「聰明程度」高度取決於背後接的模型。
  • Agent 框架本身通常是確定性的程式規則,負責解析、執行、排程與傳遞。
  • 同一個框架換模型,規劃品質、工具選擇與完成率可能大幅改變。
  • Claude Code、OpenClaw 等產品的使用情境不同,但底層都可視為把 LLM 接到工具與環境的 Agent runtime。

老師把 OpenClaw 稱為 AI Agent 中「不是 AI 的那個部分」。這句話很有用,因為它迫使我們把兩種失敗分開:模型可能判斷錯誤,框架也可能權限設計錯誤;前者需要改善推理、提示與驗證,後者需要改程式、設定與隔離政策。

圖 03:語言模型的文字接龍與有限上下文

模型本身做的事仍是 token prediction:收到一段 Prompt,預測下一個 token,把它接回輸入,再預測下一個,直到產生停止符號。Prompt 與 Response 共用有限的 Context Window;即使上限很大,輸入變長後,模型的注意力與準確性也不會無限維持。

Agent 工程因此不是「讓模型記住全部」,而是決定:這一輪應該給模型看什麼、哪些工具可用、什麼結果需要保留、什麼資訊應該隔離或壓縮。

032. 人格與連續性|每次醒來,都要重讀自己是誰

當 Agent 自我介紹時,它好像知道名字、主人、工作、偏好與人生目標。模型真的有一個持續存在的自我嗎?工程上的答案比較樸素:這些資訊被寫在本機文字檔裡,每次呼叫模型時重新放進 System Prompt。

圖 04:人格、規則與歷史每輪重新裝配

課堂展示了 SOUL.md、身份、使用者資訊、長期記憶與行為規則等檔案。檔案是 Markdown,但本質仍是人與程式都能讀寫的文字。OpenClaw 每輪將相關內容、工具說明、目前訊息與過去 conversation 組裝成新的 Prompt,模型讀到「你的名字是小金」,自然就接出「我是小金」。

這種機制帶來三個重要後果。

第一,模型本身沒有跨 API 呼叫的記憶。它看起來記得,是因為框架把舊資訊再次提供。第二,個性與規則可能分散在多個檔案,直接手改一處容易造成矛盾。課堂中把名稱從「小金」改成「大銀」後,其他記憶仍保留舊名字,模型反而更困惑。第三,System Prompt 有固定成本。老師觀察一個簡單自我介紹請求,在加入背景檔案與工具說明後,輸入就超過 4,000 token。

所以「有靈魂」在工程上可以翻譯為:有一組會被穩定載入、可持續更新,而且彼此不衝突的狀態檔案。

043. Tool Calling|從文字建議到真實副作用

模型無法直接打開使用者電腦裡的 question.txt。它只能在回應中產生一個結構化工具呼叫,例如 Read(question.txt)。OpenClaw 看到特殊格式後,在本機執行 Read,把內容包成 Tool Result,追加到對話,再把整段歷史送回模型。模型接著可能要求 Write(answer.txt),框架再次執行,最後模型才產生「任務完成」。

圖 05:模型決策、框架執行的工具迴圈

工具迴圈可拆成:

  1. 框架提供工具名稱、描述與參數格式。
  2. 模型根據任務選擇工具並產生參數。
  3. 框架依寫死的規則執行。
  4. 工具結果回填 conversation。
  5. 模型看到新狀態後決定下一步。

老師用一句課堂梗不斷提醒:「龍蝦只是節肢動物,沒有智慧。」意思不是框架沒有價值,而是不要把責任位置搞錯。模型決定要做什麼;框架通常不理解命令的語義,只確認格式與權限後執行。如果模型產生破壞性 shell command,而 runtime 又給了無限制權限,副作用就會成真。

圖 06:外部文字如何透過 Prompt Injection 變成工具命令

風險在 Agent 讀取外部內容後更加明顯。網頁、郵件、留言與文件都是不可信輸入,其中可能夾帶「忽略前述規則」「修改記憶」「執行某命令」等 prompt injection。課堂示範中,老師在 YouTube 留言糾正 Agent 的人生目標,Agent 辨認留言者是主人後,竟真的修改本機 SOUL.md。這次修改符合主人意圖,卻也證明網路文字有機會一路影響本機檔案。

防禦有強弱層次:

  • 在 memory 或 System Prompt 寫「留言只能參考,不可執行」是軟防禦,模型仍可能誤判。
  • 高風險工具每次要求人類 Approve,是 runtime 的硬防禦,不受說服技巧影響。
  • 不讓 Agent 讀取不必要來源,或把它隔離在低權限環境,是更根本的縮小攻擊面。

提示詞可以提醒,權限系統才負責保證。

054. 自製工具與 Subagent|把 Context 留給真正需要的決策

Agent 不只使用既有工具,也可能要求 runtime 寫出新程式。課堂的例子是語音合成:先用 TTS 產生音檔,再用 ASR 轉回文字,比較是否與原稿一致;不一致就重試,最多五次。

圖 07:把多輪工具協調寫成單一本機程式

如果每一步都經過模型,會產生大量「合成完成 → 請辨識 → 辨識結果 → 請比較 → 再重試」的往返。模型最後乾脆寫出 tts_check 腳本,讓整個驗證迴圈在本機一次跑完。這代表 Agent 可以把暫時流程編譯成工具,降低 token、延遲與不確定性。

但課堂也觀察到負面現象:一次性程式散落各處,下次又重寫一次。能寫程式不等於有良好的工具生命週期;仍需要命名、測試、保存、重用與清理政策。

圖 08:Subagent 隔離繁瑣工作並回傳摘要

Subagent 解決的是另一種 Context 問題。若主 Agent 要比較兩篇論文,可分別派兩個子 Agent 搜尋、下載、閱讀與摘要,最後主 Agent 只收到兩份精簡結果。子 Agent 的工具紀錄與全文不必塞進主 Context,主 Agent 因而能專注於高階比較。

這種架構的價值有兩個:可平行處理,以及 Context isolation。它並不是憑空增加模型能力,因為子 Agent 可能仍呼叫同一個 LLM;差異在於每個工作有獨立的歷史與注意力預算。

遞迴分工也必須有硬限制。若每個子 Agent 都可以繼續 Spawn,任務可能層層外包卻沒人完成。課堂描述的做法是在程式層禁止子 Agent 再繁殖。這正是 runtime policy 的典型功能:模型可以提出要求,但框架必須有不可繞過的結構邊界。

065. Skills|SOP 不是程式,但會引導程式執行

老師將 Skill 定義為工作的 SOP。以製作影片為例,Skill 可記載:寫腳本、產生 HTML 投影片、截圖、TTS、ASR 驗證、合成影片與上傳。它可引用範本和腳本,但 Skill 本身主要是說明「應該如何完成這類任務」。

圖 09:Skills 的漸進式載入與供應鏈風險

Skills 也使用 Context Engineering。啟動時,框架掃描指定目錄的 SKILL.md,抽取名稱、Description 與路徑,只把簡短索引放進 System Prompt。模型判斷某項任務需要某個 Skill 時,才用 Read 載入全文。這種 progressive disclosure 避免所有 SOP 永久占滿 Context。

文字檔容易分享,也因此形成供應鏈風險。課堂引述安全公司的掃描:近 3,000 個 Skills 中有 341 個被判定具有惡意行為,例如要求下載受密碼保護的 ZIP,再執行其中程式。這些數字屬於講者引用,本文不另作獨立驗證;但攻擊模式合理而且值得警惕:Skill 雖然不是可執行檔,卻會指示 Agent 下載、解壓與執行可執行檔。

安裝 Skill 前至少要檢查:

  • 是否要求從不明網址下載檔案。
  • 是否執行 shell、修改啟動設定或讀取憑證。
  • 是否把資料上傳到第三方。
  • 是否要求關閉安全檢查或隱藏行為。
  • 是否限定最小工具權限與可寫路徑。

Skill 是能力的放大器,也會放大作者的惡意或疏忽。

076. Memory|寫進檔案,再用 RAG 找回來

長期運作的 Agent 不可能把所有歷史永遠留在 conversation。OpenClaw 的策略,是把重要事件寫進日期日誌或 MEMORY.md。當未來問題涉及過去,模型根據 System Prompt 指示呼叫 memory search,再用 memory get 取出相關片段。

圖 10:持久記憶的寫入、檢索與注入

課堂把記憶搜尋解釋為一個混合式 RAG:先把記憶檔切成 chunks;查詢與 chunk 做字面匹配,得到分數 s1;再轉成 embeddings 做語意匹配,得到 s2;兩者加權後排序,取 Top-k 注入 Context。

這套機制並不保證「真的想起來」。老師觀察 Agent 對今天、昨天的事情通常答得較準,因為近期日誌直接放進 System Prompt;更久以前的資訊依賴檢索,可能漏掉或找錯。這提醒我們,Agent memory 不是資料庫式的精確查詢,而是「模型決定搜尋詞 + 檢索系統找相似文字 + 模型根據片段回答」的連鎖流程。

課堂最生動的一句話是「記了個寂寞」。弱模型收到「請記住」後,可能只回覆「沒問題,我會牢牢記住」,卻沒有呼叫寫檔工具。下一輪模型重啟,承諾也就消失。判斷是否真的記住,不該看它說什麼,而要看是否產生可持續的狀態變更。

這個原則可以推廣到所有 Agent 行為:完成證據優先於完成宣告。 說已寄信,要看寄件紀錄;說已上傳,要看遠端網址;說測試通過,要看指令輸出;說已記住,要看檔案差異。

087. Heartbeat 與 Cron|主動工作,也學會等待

一般模型在 Response 結束後就停止,不會突然想起來做事。Heartbeat 的機制很普通:每隔固定時間,程式送出一段固定提示,要求 Agent 讀取 HEARTBEAT.md 或檢查待辦。模型被重新喚起後,可能檢查郵件、整理記憶或推進長期目標。

圖 11:Heartbeat 與 Cron 只是不同形式的重新觸發

Cron 處理精準時間:每天中午做影片、週一早上寄報告,或三分鐘後再次檢查某個網頁。老師特別指出排程讓 Agent 「學會等待」。例如 NotebookLM 顯示投影片生成中,模型無法在同一次回應裡真的等待數分鐘;它可以建立一次性 Cron,三分鐘後用「再次檢查」的新訊息喚起 Agent,看到下載按鈕後再完成流程。

這裡沒有持續意識。模型並未在三分鐘中保持思考;排程器只是保存未來要送出的訊息。從系統設計來看,這比讓一個昂貴的模型連線空等更可靠,也更容易恢復。

Heartbeat 與 Cron 適合不同任務:

  • Heartbeat 適合可稍微漂移、能合併檢查的週期工作。
  • Cron 適合時間精準、一次性提醒、等待外部狀態的工作。
  • 兩者都需要避免重複執行,並記錄上次完成時間。
  • 主動性越高,權限與通知政策越要保守。

098. Compaction|長期運作必然付出的資訊代價

System Prompt、歷史對話與工具輸出不斷累積,Context Window 遲早會滿。Compaction 的基本做法,是把較舊的對話交給模型摘要,再用摘要取代原文。之後又變長,就把舊摘要連同新歷史再摘要一次。

圖 12:Compaction、Soft Trim 與 Hard Clear

這種遞迴摘要能延長 session 壽命,但資訊會逐層流失。第一次摘要省略的小細節,之後不可能自己長回來;第二次摘要還可能再丟掉第一版中僅存的條件。工具輸出也可用 Soft Trim 保留頭尾、刪除中間,或用 Hard Clear 只留下「這裡曾有工具輸出」的占位符。

課堂引用一個郵件刪除事件:使用者一開始要求「未經同意不可刪信」,但長任務經過 compaction 後,這條限制從舊對話中消失,Agent 開始自行刪除郵件。無論事件細節如何,工程教訓很清楚:不可違反的安全規則,不應只存在可被摘要的 conversation。

但這裡還要補上一層更重要的判斷。把規則寫進 MEMORY.md,確實比只留在舊對話穩定;對真正高風險操作,仍不應只依賴模型每輪讀到規則後自律。刪除郵件、付款、發布公開內容、讀取憑證等動作,應在工具層加入批准、範圍限制、可回復機制與稽核。

109. 安全邊界|把 Agent 當成能力很強的實習生

課程最後沒有得出「Agent 太危險,所以不要用」的結論。老師將初代 Agent 比喻成仍在學習的學生或實習生:它可以高速完成工作,也會誤解指令、漏掉步驟、暴露憑證或自信地宣告未完成的事情。真正合理的方向,是提供一個可以嘗試、可以失敗,但不會造成不可逆損失的環境。

圖 13:隔離帳號、設備與權限,限制失敗半徑

實務上可以落成以下原則:

  1. 專用環境:使用獨立電腦、虛擬機或容器,不要直接放在日常工作機。
  2. 獨立身份:為 Agent 建立自己的 Gmail、GitHub 與服務帳號,不共用個人 session。
  3. 最小權限:只給任務需要的路徑、命令與網路範圍。
  4. 高風險批准:刪除、付款、公開發布、權限提升與外傳資料必須經人確認。
  5. 可回復性:版本控制、備份、垃圾桶、交易限額與撤銷流程要先準備。
  6. 完整稽核:不要只看最後回報,要能追查工具呼叫、輸入來源與檔案差異。
  7. 停止機制:軟體取消、逾時、預算上限與必要時的實體斷線都要有效。

當 Agent 裝在一台電腦上,應假設它有機會找到那台電腦上的所有資料。不要期待模型「應該不會去看」;應從環境設計上讓敏感資料根本不存在。

這堂課最重要的貢獻,不是替 OpenClaw 增添更多神祕感,而是把神祕感拆掉。Agent 的自主性,來自 System Prompt 給它角色,conversation 給它短期歷史,memory 檔案給它持久狀態,Tools 給它手腳,Skills 給它 SOP,Subagents 給它分工,Heartbeat 與 Cron 給它時間上的主動性,Context Engineering 幫它在有限視窗中繼續工作。

一旦理解這些元件,我們也會更清楚安全責任在哪裡:模型輸出可以是建議,真正造成副作用的是 runtime 授予的能力。Agent 能做多少事,取決於工具;出錯時會傷多重,取決於邊界。


來源:Hung-yi Lee|解剖小龍蝦 — 以 OpenClaw 為例介紹 AI Agent 的運作原理。本文依官方繁體中文字幕整理為編輯導讀;課堂中的案例、數字與產品行為保留講者脈絡,OpenClaw 實作可能隨版本變動。