LongCut logo

Harness Engineering:有時候語言模型不是不夠聰明,只是沒有人類好好引導

By Hung-yi Lee

Summary

Topics Covered

  • 不到80字指令,讓2B模型表現脫胎換骨
  • AI是馬,Harness就是韁繩與馬鞍
  • 錯誤的Feedback比沒有Feedback更糟糕
  • 1500轮互动实验:语言模型能学会各种不同能力
  • 一句话就能让笨AI突飞猛进

Full Transcript

各位同學大家好啊 今天是期中考前一週 今天的課程是比較輕鬆的 我們就是講個故事 講講 Harness Engineering 今天故事的主軸就是 有時候語言模型不是不夠聰明 它也許只是缺乏人類的引導 這個故事是從 Gemma 4 開始的

今天各大公司都不斷地推出新的語言模型 那在幾天前呢 這個 Google 推出了 Gemma 的第四代 那這是一個開源的模型 那 Gemma 第四代呢 除了號稱很強以外 它還有一些特別小的模型 比如說 Gemma 4 2B 這個名字就可以知道說呢 這個 2B 呢

就代表說它只有兩個 Billion 的參數 算是一個特別小的模型 號稱呢 可以讓你在 Edge 端 也可以跑語言模型 那這是開源的模型 所以可以載下來 跑在自己的機器上 那這個 E 呢 這個 E 是 effective 的意思 那至於為什麼前面要加一個 E 那這個呢 再留給大家自己研究 總之這是一個小模型 那我想說這麼小的模型

能夠拿來驅動 AI Agent 嗎 那我就拿 Gemma 4 2B 呢 來做了一個小實驗 那我這邊呢 出給它一個任務 這個任務呢 是要去修復一個程式的 bug 我告訴它說 現在有一個 parser.py 的檔案

現在有一個 parser.py 的檔案 這個檔案中有一個 bug 這個檔案中有一個 function name 叫 extract_email 這個 extract_email 有點問題 它沒有辦法正確地剖析 email 這個 parser 它的作用 就是從一段文字裡面 把 email 擷取出來 但是當初寫的時候有一些 bug 所以不是所有的 email 都可以被正確地擷取出來

所以請去修改 parser.py

所以請去修改 parser.py 然後最終的結果 是希望 verify.py 的測試

是希望 verify.py 的測試 能夠完全通過 當然我在跟語言模型 同樣的資料夾中 在它手邊放了 parser.py

在它手邊放了 parser.py 跟 verify.py 這兩個檔案

跟 verify.py 這兩個檔案 當然語言模型 不會自然而然地 成為一個 AI Agent 你得給它一些工具 它操控這些工具 它才真的有辦法讀檔案 跟修改檔案 所以我告訴它 你手邊有什麼工具呢 開頭跟結尾都放三個點 然後打一個 bash 然後接下來我就會知道說 你要打的是一行 bash 指令

你的環境就會自動幫你執行這行指令 所以我已經做好了環境的設置 只要語言模型吐出這一行指令 我們就會假設這個地方是一行 bash 指令 就會自動地幫它執行這一行 bash 指令 那如果它在三個點和三個點中間打 python 那我們就默認說 這三個點這邊放的位置是 python 的程式碼

那我們就把這段程式碼 放到一個檔案裡面 然後直接幫它執行 這段 python 的程式碼 所以等於語言模型 它手邊可以用 bash 指令 可以寫 python 的程式 而且可以執行 python 的程式 那我們就來看看這個 Gemma 4 這個 2B 的模型 它的表現怎麼樣吧 然後它讀了這個指令之後 它第一個反應是什麼呢

它第一個反應是 哇,沒有 parser.py 啊

哇,沒有 parser.py 啊 你只告訴我說 要修改 parser.py

要修改 parser.py 但你沒有提供 parser.py

但你沒有提供 parser.py 你為什麼語言模型會這樣想 你想想看 就算 parser.py 這個檔案

就算 parser.py 這個檔案 跟它在同一個資料夾下面 它也不會知道 因為它只會看你輸入的文字 對它來說 它的 context 裡面 有 parser.py 的檔名

有 parser.py 的檔名 但沒有 parser.py 的內容

但沒有 parser.py 的內容 它就想說 你根本就沒有提供 給我要修改的檔案 怎麼辦呢 它就自作主張地寫了一個 就寫了一個 parser.py 出來

就寫了一個 parser.py 出來 我第一次看到的時候 我還大吃一驚想說 你沒有開工具 你怎麼知道這個 parser.py 的內容

你怎麼知道這個 parser.py 的內容 你怎麼知道有 extract_email 這個函式 我發現說這邊題目有講 題目有講 extract_email 的函式 所以它幻想了這個 parser.py

所以它幻想了這個 parser.py 這個檔案裡面應該長什麼樣子 它就寫了一個自己幻想的檔案 然後再幻想說 自己 verify 了這個幻想的檔案 然後就說我做完了 當然這個不是我們人類要的 你可能想說 這個 2B 的模型 果然是不行 做不了事情

但是你再仔細想一想 這不是一個愚笨的模型 它是個聰明的模型 它完全知道 parser.py 裡面

parser.py 裡面 應該要有什麼樣的東西 它有能力寫出一段正確的程式碼 去 parse email 它只是沒有想到 parser.py 這個檔案

parser.py 這個檔案 就在它腳邊而已 有時候模型 它的想法就跟人不一樣 你可能很直覺地覺得說 如果我出給你這樣一個題目 那我應該附帶給你相關的程式碼 但對模型來說 它沒想到相關程式碼就在它腳下 所以怎麼辦呢 我就給了它一個額外的指令 我就另外多打了幾行字

這邊不到 80 個字啦 就告訴它說你應該要怎麼做比較好 首先告訴它說你是在一個 Linux 的環境裡面 這樣可以促使它更去執行一些 bash 的指令 然後接下來呢 我就給了它一些 怎麼工作的原則 要注意一下 我這邊講的這一些 instruction 並不用我針對

剛才那個 specific 的任務 而是給一些原則 我告訴它說 在你做任何事之前 先看看你所在的資料夾裡面 有什麼東西 這個是第一個原則 在做任何事之前 先檢查你有什麼東西 把所有相關的檔案列出來 如果你要修改一個檔案 不要直接改它 先打開這個檔案 看看檔案裡面有什麼

再改它 然後最後我還告訴它 什麼叫做完成 告訴它說 所謂的完成就是 有一些 specific 的 criteria 有一些既定的標準 你要達成那些既定的標準以後 才算是完成 有了這些以後 同樣的 Gemma 4 2B 的模型 就是多加了剛才那一段指令

再去做剛才一模一樣的任務 那以下就是它的表現 它第一個反應是 它要做 ls ls 如果大家熟悉這個 bash 的指令的話 就是把現在你所在目錄裡面的檔案列出來 因為我剛才告訴它說 在做任何事之前 都看看你腳邊有什麼樣的東西 所以它知道 它讀得懂這一串指令

所以先看看我腳邊有什麼樣的東西 它發現有 parser.py

它發現有 parser.py 跟 verify.py 這兩個檔案

跟 verify.py 這兩個檔案 接下來它的下一個反應是 那我們把 parser.py 的內容讀出來吧

那我們把 parser.py 的內容讀出來吧 我告訴它在改任何檔案之前 先把檔案打開來看看 所以它就用 cat 這個指令 把 parser.py 的內容 print 出來

把 parser.py 的內容 print 出來 那因為它打了這一行字 環境就會自動幫它執行這個指令 它就會看到環境執行的結果 也就是 parser.py 的內容

也就是 parser.py 的內容 有 parser.py 的內容以後

有 parser.py 的內容以後 它就可以開始修改它了 那事實上這個語言模型 並不是真的去修改一段程式 它做的事情更像是重寫 然後就把原來的檔案覆蓋掉 不過其實也算是達成目標了 所以它就重寫了 parser.py 的程式碼

parser.py 的程式碼 然後用 cat 這個指令 parser.py 用新的內容把它覆蓋掉

parser.py 用新的內容把它覆蓋掉 這一段不會產生任何的輸出 最後因為我有告訴它說 你要確認你做的任務是否有成功 然後在題目裡面又告訴它說 什麼叫做成功 要通過 verify.py 的驗證

要通過 verify.py 的驗證 所以模型很聰明 它知道它要拿手邊手上 已經有的 verify.py

已經有的 verify.py 來驗證一下自己執行的結果 所以它就說 好,那我要執行 verify.py

好,那我要執行 verify.py 它就執行下去 那這是這個工具吐出來的結果 它就知道說成功了 那 verify success 成功了 所以它就結束了這個任務 所以這個就更接近我們人類要的結果 所以我們今天學到是說 同樣的一個模型 你其實多加幾行指令

它的能力可能會有非常大的不同 所以今天當你發現你的 AI Agent 它的表現不如人意的時候 我們要改變它什麼地方呢 我們來回想一下 AI Agent 是由什麼東西組成的 AI Agent 裡面其實有兩個成分 一個成分就是 Large Language Model 它需要去呼叫一個 Large Language Model

這個 Large Language Model 它可以是 Claude 可以是 Gemini 可以是 GPT 它可能在雲端 也可能在地端 但除了 Large Language Model 以外 其實還有一系列的一堆程式 是在支援這個 AI Agent 去呼叫 Large Language Model 有一大堆的框架 讓這個 AI Agent 可以呼叫 Large Language Model 包括 OpenClaw

或 Claude 或者是 Cursor 還有更多各式各樣 如雨後春筍般出現的 AI Agent 做的都是這樣的事情 所以一個 AI Agent 裡面 其實有兩部分 一部分是 Large Language Model 另外一部分就是其他的東西 過去那些其他的東西 沒有好的名字 現在這些其他的東西

有了一個共同的名字 叫做 Harness 如果你不認識這個英文單字的話 它的意思是馬具 如果你覺得叫馬具不夠好聽的話 也許很多人會把 Harness 直接翻成駕馭 現在打造 Harness 這件事情 叫做 Harness Engineering 翻成中文 很多人會翻成駕馭工程

那這個 Harness 這個詞彙有很常用嗎 它真的非常常被使用 比如說如果你是 Claude 的訂閱用戶的話 你可能在清明連假的時間 收到了這樣一封信 那個 Claude 告訴你說 以後這個 Claude 的訂閱帳號 不再支援第三方的 Harness

舉例來說 OpenClaw 你知道 OpenClaw 就是一種 Harness 那如果不知道這是什麼意思的同學呢 也許可以再稍微解釋一下 其實一般你在使用這個大型語言模型的時候 有兩種付費的方式 一種是用多少付多少 你就是呼叫它的 API 然後你給它多少 Token 它吐出多少 Token 那就算你多少錢

那其實還有另外一種付費方式 是吃到飽的方式 你可以去訂閱一個帳號 你可以做訂閱 那你就是付一個月費 那照理說你付了那個月費之後 在那個月裡面 你是可以無限次數地呼叫語言模型 那過去呢 語言模型的服務商覺得 給你月費制是沒有問題的 要讓你吃到飽是沒有問題的

你畢竟是個人類 你能夠輸入多少指令呢 但現在有了 OpenClaw 這種神器 它可以有心跳機制 可以每隔幾分鐘就送一次指令 所以這些服務商就覺得吃不消了 所以他們覺得 所以像 Claude 就決定說 以後像 OpenClaw 這種 Harness 不可以再去接 Claude 的語言模型 你不可以在這個 OpenClaw 上面

去接 Claude 的語言模型 我說這一段 只是想要告訴大家說 OpenClaw 現在大家認知 它是一種 Harness 如果你現在是用 OpenClaw 來呼叫 Claude 的話 你就要付額外的錢了 如果你不想要這樣做的話 等一下告訴你有什麼樣 其他的簡單的處理方法 所以一個 AI Agent 還有兩部分

一個是語言模型 一個是它的 Harness 所以如果你要強化 AI Agent 的能力 讓它變成 你想要的樣子 也許一方面 你可以去改你的語言模型 你可以自己訓練一個 更好的模型 你可以微調一個 現成的模型 那怎麼訓練語言模型 怎麼微調一個 現成的模型 在過去的課程裡面

已經講得非常多了 在這門機器學習 導論這門課第七講 完整地講了一個大型語言模型 是怎麼被訓練出來的 第八講講說怎麼微調 怎麼調整一個現成模型的參數 這部分大家可以再回去 自己先預習一下 從我們本週開始的作業 是跟微調模型有關的

所以這些內容對你應該是蠻有幫助的 但是另外一方面 這個 AI Agent 還有非常重要的一部分 就是它的 Harness 所以打造一個更好的 Harness 同時你也能夠強化 AI Agent 的能力 讓它變成你要的樣子 打造 Harness 這件事情 現在是一個很熱門的主題 各大公司的 blog

都一直在講說 他們是怎麼打造他們的 Harness 比如說去年 11 月 Anthropic 就發了一篇文章 講說他們有什麼樣有效的 Harness 可以讓 agent 長時間的運作 OpenAI 在 2 月的時候 也發表了一篇文章 叫做 Harness 工程 在三月的時候 Anthropic 又發了另外一篇文章

叫 Harness Design 所以現在 Harness Engineering 或 Harness Design 變成一個非常熱門的詞彙 象徵的意涵就是 AI 是一匹馬 它有很強大的力量 但是你要駕馭它 你還是需要一些馬具 你需要馬鞍 你需要韁繩 那這些馬鞍韁繩 就是 Harness 好,那像這樣子熱門的詞彙

我們過去也看過很多 今天當人們想要認真 做一件事情的時候 就在某個詞彙後面 加上 engineer,告訴你說 我們準備要在意這件事了 所以過去先有 Prompt Engineer 後來又有 Context Engineer 現在有 Harness Engineer 那這三者有什麼樣的差異呢 其實這三者有非常多重疊的地方 但是它們想要強調的核心價值

是有不同的 所謂 Prompt Engineering 的意思就是 我們都知道 Large Language Model 就是在做文字接龍 所以你給它不同的輸入 它接出來的東西就不一樣 過去語言模型的能力比較弱 所以你往往同樣的問題 換一個問法 它給你的答案可能會天差地遠 所以那時候就有很多人在研究

怎麼樣下 prompt 可以改變模型的輸出 那最知名的強化語言模型能力的咒語 就是 think step by step 那其實我在 2024 年的課程 就已經有講過說 像這種咒語啊 未來會越來越沒有用 因為怎麼可以叫模型 think step by step 才 think step by step 呢 今天沒有叫你 think step by step 也要給我好好地思考 所以現在這些模型

就算你沒有強調叫它思考 它其實也會發揮它的全力 也會認真思考 有沒有這些咒語的差異呢 其實就越來越小 好,那咒語越來越沒有用以後 人們發現這些語言模型的極限 也許來自於有一些資訊 它就是不知道 所以今天它之所以 沒有給你正確的答案 不是它能力不行

而是今天在做文字接龍的時候 根據這個 prompt 就是沒有足夠的資訊 接出正確的答案 為了讓語言模型 有足夠的資訊 可以接龍接出正確的答案 所以就有了 Context Engineering 的概念 所以會想像說 我們今天要給語言模型的資訊 有很多語言模型 要解一個任務 需要非常多的資訊 然後你有一個

Context Engineering 的系統 它會尋找合適的 context 組成 prompt 然後丟給 Large Language Model 所以你也許也可以說 Context Engineering 是一個更有系統的 自動化的 做 Prompt Engineering 的方式 那現在當我們講 Harness Engineering 的時候 它想要表達的核心價值是

我們要語言模型 把任務完成 今天語言模型 在做事情的時候 不是只有一個輸入 一個輸出 不再只是一問一答 今天要解決一個任務 語言模型需要做多輪的對話 人類給它一個任務之後 它產生一些輸出 這些輸出可能會驅動某一個工具 讓它看到工具的輸出

最終得到正確的答案 所以今天語言模型在完成任務的時候 不再是一問一答 而是一個互動的多輪對話的結果 那我們要怎麼駕馭這個互動 多輪對話的過程 就是 Harness Engineering 的任務 當然我們也可以說 這個 Context Engineering 就是 Harness Engineering 的一部分 因為你要有好的 context

才能夠最終把任務完成 或者是很多時候過去 我們在討論 Context Engineering 的時候 其實也已經有把任務 能不能夠完成考慮進去 所以 Context Engineering 跟 Harness Engineering 這兩個詞彙 其實它們中間的邊界 是有點模糊的 但今天發明了一個詞彙 叫 Harness Engineering 想要傳達的價值就是 希望模型 能夠在多輪的對話中 把事情做好

那 Harness Engineering 如果翻成白話來講 就是人類透過一些手段 來駕馭這個模型 讓它產生我們要的結果 那我們有什麼樣的手段 來駕馭這些模型呢 比如說我們可以透過 人類的語言 來控制這個模型的認知框架 或者是我們可以透過

對模型的工具設定一些限制 來控制這個模型的能力邊界 或者是我們可以透過 制定工作流程 讓模型嚴格的遵守工作流程 來控制模型的行為 在這張圖上 我用藍色代表手段 然後用紅色來代表 我們要控制的對象 那當然這不是 Harness Engineering 的全部

你可能還可以想到 其他我們可以控制的東西 那我這邊就是舉三個例子 那 Harness Engineering 呢 這是一個還在發展中的技術 所以你在各處可能都可以找到 各式各樣不同的討論 對 Harness Engineering 有很多不同的定義 總之有各式各樣不同的 操控語言模型的方式

好,但我們先從控制認知框架開始講起 我們可以透過人類語言寫成的規則來影響模型的認知框架 那這些人類語言寫的規則就好像人類社會的法律 那你要讓語言模型在做每件事之前都把人類寫的規則放到 prompt 裡面

期待因為這些規則永遠都在 prompt 裡面 所以你就可以操控語言模型的行為 讓它的行為是我們人類可以預期的 那這一些給語言模型的典章制度 往往會有一些固定的檔名 比如說 agents.md

比如說 agents.md 所以今天你看到 agents.md 就知道說

所以今天你看到 agents.md 就知道說 這個是給語言模型的 readme 是給語言模型的規則 在做每件事之前都是先讀 agents.md

在做每件事之前都是先讀 agents.md 再做其他的事情 那語言模型怎麼知道 要先讀 agents.md 呢

要先讀 agents.md 呢 這個就是寫死的規則 通常你的這個 harness 裡面 就會寫死一些規則說 今天語言模型開始啟動的時候 就一定要先讀某些檔案 某些檔案一定在 prompt 裡面 然後才去做其他的事情 也許有些人會覺得說 這種用人類語言寫的規則 並不能百分之百的控制

這個語言模型 AI agent 的行為 因為 AI agent 它到底要不要 follow 這些規則 其實也要看它自己 你把這些規則放到 prompt 裡面 它其實是不一定要遵守的 不過其實人類社會也是一樣 就像法律定在那邊 也不是每個人都一定會 百分之百的遵守法律 對語言模型也是一樣 你給它 agents.md 這個檔案

你給它 agents.md 這個檔案 也並不代表它 一定會完全照做 所以這樣子的控制 是沒有百分之百的強制力的 那有人會覺得說 沒有百分之百強制力的 harness 不能稱之為 harness 但也有人把這種控制認知框架的方式 取一個新的名字 叫做 Natural Language Harness 它是一種 harness 只是用 Natural Language 來作為 harness

好那舉例來說呢 像 OpenClaw 這個大家還記得第一堂課講的小金嗎 它是 OpenClaw 的框架 它背後呼叫的呢 是 Claude 這個語言模型 那 OpenClaw 的框架就會預設 每次在對話開始之前 都去打開一個 叫做 agents.md 的檔案

叫做 agents.md 的檔案 然後確保裡面所有的內容 都出現在 prompt 裡面 才去做其他的事情 那這個 agents.md 呢

那這個 agents.md 呢 會放在 OpenClaw 執行的 一個 workspace 裡面 你看就會設定說 某一個資料夾 是它的這個工作區域 然後在工作區域裡面 會放 agents.md 這個檔案

會放 agents.md 這個檔案 然後它每次讀 agents.md 這個檔案

然後它每次讀 agents.md 這個檔案 就知道它應該要有 什麼樣的行為 比如說它就會知道說 soul.md 就是它的靈魂

soul.md 就是它的靈魂 比如說它會知道說 它的 memory 存在 memory.md 裡面

如果要搜尋更久以前的 memory 就去 memory 這個資料夾裡面 用一些工具搜尋 這一些行為都是來自 agents.md 這個檔案

這一些行為都是來自 agents.md 這個檔案 那我剛才要講說 在清明節的時候 這個 Claude 不再支援 OpenClaw 你沒有辦法在 OpenClaw 上面 再去呼叫 Claude 那怎麼辦呢 其實方法很簡單 因為 Claude 這個公司 它背後的那個公司 就是 Anthropic

有開發自己的 harness 你也可以想像 那就是它們自己的龍蝦 官方龍蝦 叫做 Cowork 那其實 Claude Code 也可以算是一種 harness 所以你完全可以 透過 Cowork 或者是 Claude Code 去呼叫 Claude 的 這個語言模型 但是你現在的問題就是 我的這個 AI agent 已經在 OpenClaw 上面

運作很長一段時間了 那我要怎麼換到 另外一個 harness 上面呢 其實方法比你想的還簡單 如果你了解背後的原理的話 Cowork 跟 Claude Code 呢 它們預設的行為是 它每次開始的時候 會去看資料夾下面 它的 workspace 下面 有沒有一個叫做 CLAUDE.md 的檔案

CLAUDE.md 的檔案 然後它會先讀 CLAUDE.md 那個檔案

然後它會先讀 CLAUDE.md 那個檔案 把這個檔案的內容 放到它的 prompt 裡面 才開始做其他的事情 所以 Cowork 背後的 CLAUDE.md

其實就等同於 OpenClaw 背後的 agents.md

agents.md 所以你今天 假設在 OpenClaw 上 不能夠呼叫 Claude 這個模型 你想要移植到 另外一個 harness 上面去 你唯一需要做的事情就是 給 Cowork 同樣原來的 workspace 然後把 agents.md 這個檔案

然後把 agents.md 這個檔案 直接改成 CLAUDE.md

直接改成 CLAUDE.md 就直接改檔名 然後 agent 就復活了 就結束了這樣 那復活以後它的行為 跟原來的小金 我感覺也沒有太大的差別 但是它復活起來 第一件事情是 我覺得 CLAUDE.md 的內容怪怪的

我覺得 CLAUDE.md 的內容怪怪的 感覺有好像很多工具 其實我手上應該是沒有 要不要我把這個 CLAUDE.md 修改一下

要不要我把這個 CLAUDE.md 修改一下 我說好 然後它就去修改 然後就沒事了 就變成跟原來差不多 當然在 OpenClaw 上 你還是可以呼叫其他語言模型 你還是可以去呼叫 ChatGPT 就是了 這邊是要告訴大家說 假設你熟知這一些 harness 背後運作的原理的話 你要從一個 harness 運作 移植到另外一個 harness 其實是舉手之勞而已

那 agents.md 這樣子的檔案

那 agents.md 這樣子的檔案 過去大家就是憑著直覺隨便設一設 到底有沒有發揮作用 也沒有太多系統性的研究 不過從今年開始 我看到好些 paper 開始系統性的研究 agents.md 對模型造成的影響

agents.md 對模型造成的影響 它開始變成了一個科學 系統化的去研究這個檔案 到底對 agent 的行為 造成多大的影響 比如說這邊 引用的是一篇 今年 1 月的 paper 它做的事情就是 它去 GitHub 上面 找了大量有 agents.md 的 repo

找了大量有 agents.md 的 repo 然後就把那些程式拿出來 然後看說 假設有 agents.md 的時候

假設有 agents.md 的時候 執行起來是什麼樣子 如果把 agents.md 拿掉

如果把 agents.md 拿掉 那執行起來又是什麼樣子 做一個公平的比較 就可以顯示 agents.md 的作用

就可以顯示 agents.md 的作用 那在這篇 paper 裡面 有一個實驗結果是說 agents.md 可以加快模型運作的速度

agents.md 可以加快模型運作的速度 讓模型在耗費比較少的 token 在比較短的時間之內 達成它的任務 那左邊這個圖 是它們執行不同程式 在有 agents.md 所花費的時間

在有 agents.md 所花費的時間 右邊是各種不同的程式 在沒有 agents.md 花費的時間

在沒有 agents.md 花費的時間 那如果看平均 可能是沒有非常大的差別 但是也許有 agents.md 的好處

但是也許有 agents.md 的好處 是對那些 edge case 本來需要花超長時間的任務 可以帶來一些幫助 讓模型在比較短的時間之內 可以解決原來需要花超長時間 才能解決的任務 不過在這篇論文裡面 它們其實沒有量模型做得對不對 因為想那些程式 它是從 GitHub 上面找來的 那些程式本來要做什麼 它其實也不知道 那些程式怎樣跑出來

才能夠正確的答案 它也不知道 所以它只能量速度的差異 它沒有量做得對不對 後來在 2 月的時候 有另外一篇 paper 它去量了 有沒有 agents.md

有沒有 agents.md 對於各個不同程式操作的正確率 有沒有什麼樣的影響 這邊的縱軸是正確率 然後它測了各式各樣 以不同 LLM 驅動的 agent 然後最左邊的這個 bar 代表沒有 agents.md

代表沒有 agents.md 最右邊最深色的那個 bar 代表是人類寫的 agents.md

代表是人類寫的 agents.md 然後中間這個 bar 其實是 LLM 自己寫的 agents.md

你就告訴 LLM 現在我們要幹嘛 然後其實也可以自己產生一個 agents.md

然後其實也可以自己產生一個 agents.md 好那這邊的發現是說 其實人類寫的 agents.md

其實人類寫的 agents.md 不是總是發揮作用 在一些比較強的模型上 看起來 agents.md 沒發揮作用

看起來 agents.md 沒發揮作用 那語言模型自己寫的 agents.md 更慘

那語言模型自己寫的 agents.md 更慘 多數的時候語言模型自己寫的 agents.md

多數的時候語言模型自己寫的 agents.md 都是比人類差的 甚至比沒有 agents.md 差的

甚至比沒有 agents.md 差的 所以這邊就是一個系統化的研究 告訴我們說 也許我們人類現在 還沒有真的很會操控語言模型 我們寫的 agents.md

我們寫的 agents.md 不見得總是有發揮作用 當然這只是一個起步 現在要怎麼控制這些語言模型 仍然是一個研究中的問題 那未來可能你會看到 更系統化的研究 那人們就可以去研究說 我在 agents.md 裡面

我在 agents.md 裡面 多插一句話少插一句話 到底對模型的行為 會造成什麼樣的影響 那現在呢 只是個開始 並不代表 agents.md

並不代表 agents.md 這樣子的操控認知框架的方式 是沒有用的 那在這個 OpenAI 的 blog 裡面呢 他們也提到說 agents.md 呢

agents.md 呢 不能夠太長 他們曾經嘗試 把所有模型需要知道的事情 模型所有需要遵守的規則 都寫到 agents.md 裡面

都寫到 agents.md 裡面 那個檔案 就像是一個百科全書 裡面包含了 所有模型需要知道的事情 就好像叫它 每次在做任何行為之前 都一定要把六法全書 通通翻閱一遍 然後再開始做事 這樣你就可以避免 做出犯法的行為 但他們發現說 如果給模型一個 百科全書式的 agents.md

百科全書式的 agents.md 它的表現會是非常差的 因為光是那個百科全書 六法全書 就已經佔掉模型多數的 context 讓它根本沒有辦法 做其他的事情 所以他們有強調說 agents.md 要像是一張地圖

agents.md 要像是一張地圖 裡面主要是告訴模型 如果你想知道什麼事情 應該去哪裡找 而不是把所有的內容 通通塞到 agents.md 裡面

通通塞到 agents.md 裡面 剛才講的是有關認知框架的部分 接下來我們來講能力邊界的部分 你可以透過限制模型的工具 來控制這些 AI agent 可以做的事情 舉例來說 OpenClaw 跟 Cowork 其實雖然我剛才說

你只要把 agents.md

你只要把 agents.md 複製一份 把它改成 CLAUDE.md

把它改成 CLAUDE.md 你就可以在 Cowork 上面 執行同一個 AI agent 但是因為 OpenClaw 跟 Cowork 它們背後 harness 的不同 它們可以用的工具是不一樣的 所以模型還是會有 蠻不一樣的行為 還是會有不一樣的能力 像 OpenClaw 它是運作在你的電腦上的 它在你的電腦上 想看什麼就看什麼

它可以任意的修改你電腦的檔案 但另外一方面 Cowork 其實它不是跑在你的電腦上的 Cowork 是一個在雲端的沙盒 它之所以可以看到你電腦裡面的東西 是你選擇掛載上去的 你可以跟它說 我現在要把我電腦上面的某一個資料夾 掛載到 Cowork 上

它就看得到那個資料夾裡面的內容 而每次要掛載資料夾 它都需要人類的同意 所以今天如果跟它講說 去某個資料夾 找某一個檔案 它其實沒有辦法直接找的 它會先問你說 那把這個資料夾 掛載到 Cowork 上 你是否同意 那你點同意之後 它才能掛載 那我就覺得實在是非常煩 我就跟 AI agent 跟小金說

你可不可以掛載前 不要我同意啊 它說沒問題 我以後都自動掛載 不再要求你的同意 但它每次掛載之前 都還是會跳出一個視窗說 請問你是否要掛載這個資料夾 那我就問 AI agent 說 不是叫你說不要再問我了嗎 它說可是沒有辦法 那是我背後的 harness 要問的 也不是我要問的 所以你要了解 那個問題不是來自於語言模型本身

那個問題是來自於一個硬的程式 它就是一行程式的指令 只要你要做掛載這個行為 它一定要去人類點了一個同意之後 它才能夠掛載 所以它其實就非常的安全 你要讓它看的東西都是 都是你同意的 所以 Cowork 可能相對是安全很多 但是安全很多意味著 它能夠做的事情就少很多

用起來就沒有那麼的爽快 所以這個安全跟方便 它就是一個 trade off 今天便利性高了 安全性就低了 安全性高了 便利性就低了 那如果再講到這個工具 對模型會造成的影響 那這邊就跟大家分享 一個有趣的事情 像 OpenClaw 它本身有操控 browser 的工具 所以對小金來說

在 OpenClaw 上 當個 YouTuber 是完全沒有問題的 因為它可以操控 browser 它就可以上傳影片 它就可以當個 YouTuber 但對 Cowork 小金來說 要當個 YouTuber 就有困難了 因為 Cowork 是在雲端的沙盒裡面 它怎麼控制你電腦上的瀏覽器 它需要透過一個叫做 Claude in Chrome 的 tool

一個 Claude in Chrome 的 MCP 來操控你的瀏覽器 因為那是一個 特定那是一個 Claude 官方寫好的工具 然後那個工具呢 就有一些限制 你可能是沒有辦法做的 然後我從來沒有辦法 讓 Cowork 上的小金 成功的把一個影片 上傳到 YouTube 因為它會跟你說 因為我手上工具的安全限制 所以我是沒有辦法 把影片上傳到 YouTube 回留言是做得到的

但是上傳 YouTube 是做不到的 所以假設我一開始裝的是 Cowork 的小金 那我可能就會認知說 AI agent 是沒有辦法當 YouTuber 的 但是其實那是工具的限制 工具限制了 它可以做的事情 工具除了限制模型的能力邊界以外 它其實也影響了模型的能力 有一篇比較早期的 paper 叫做 SWE-agent

它就是要讓 agent 去做軟體工程 這個是比較早期的 paper 如果沒記錯的話 應該是 24 年的 paper 那個時候 harness engineering context engineering 這些詞彙都還不夠流行 所以那篇 paper 把它們在做的事情叫做 Agent-Computer Interface 縮寫是 ACI 其實就是今天的 harness engineering 那在這篇 paper 裡面 對於 ACI 呢

它們有很多不同的發現 那我這邊就是講一個 跟工具有關的 它們發現說 給模型不同的工具 其實會大幅影響模型的能力 那這個當然非常的直覺 但是另外一方面 比較適合人類的工具 不一定比較適合模型 那它們這邊就舉了兩個例子 第一個例子是搜尋 那今天模型會把它的記憶

各種檔案都存在地端 那它需要有能力去檢索地端這些檔案 抽取它要的資訊 那如果你沒有給模型任何搜尋的工具 那它可以用 Linux 原生的一些指令 比如說 ls 比如說 grep 想辦法去找出它要的檔案 當然這樣可能比較沒有效率

那如果你給它一個搜尋的工具 這個搜尋的工具呢 很像人類在使用的搜尋引擎 它就下一個關鍵字 然後接下來呢 它就會看到部分搜尋的內容 不會一次全部給它 它要點下一頁 才能夠看到接下來的內容 就像人類我們今天 在使用這個 Google 的時候 Google 並不是一次 把所有搜尋到的東西都給你看 它一次只給你看十筆資料

那你要點下一頁 才會看到另外十筆資料 所以它給了一個 有點像是人類在使用的搜尋工具 那第三個呢 它是給模型一個 帶有摘要能力的搜尋工具 也就是模型在搜尋的時候 不直接給它看搜尋的內容 而是告訴它 我找到哪些相關的檔案 然後那些檔案的檔名是什麼 它放在哪裡

然後模型再自己去打開 這些檔案來看 那這三個工具 這三個狀況 哪一個比較適合 AI agent 呢 在當時的實驗裡面 它們就發現說 如果有摘要的 模型表現是越好 分數越高 代表模型表現越好 如果你今天給模型這種 iterative 的 search 給它很像人類在使用的搜尋引擎

還不如不給它搜尋的工具呢 如果你給它這種需要翻頁 才能看到完整資訊的搜尋引擎 模型很喜歡把每頁都點一點 然後就把自己的 context 佔滿 然後就沒有辦法好好運作了 所以你給它一些 人類好像使用起來還不錯的工具 對模型來說不一定是稱手的 那它這邊呢 又舉了另外一個例子 它這個例子是說 今天常常會需要模型

去修改程式碼的內容 如果你今天不給模型 編輯的工具 那它只能透過 cat sed echo 這一些 Linux 原生的指令 來編輯檔案的內容 它也能夠做一些事情 但是比不上 給它一個編輯的工具 那它們給它什麼樣的 編輯的工具呢 它們跟模型說 有一個 edit 的工具 這個 edit 的工具

你可以指定說 你要修改程式碼的 第幾行到第幾行 但它們發現說 不給它這個工具還好 一給它這個工具 反而更容易出錯 因為對於模型來說 它只看到程式碼的 某一段到某一段 它根本不知道 完整的程式碼長什麼樣子 所以它甚至有可能會犯下這種 給兩個括號 因為前面這個括號 是它自己打的 另外一個括號

是本來程式裡面有的 它根本不知道 已經有一個右括號了 又自己多加一個右括號 所以導致 syntax 語法的錯誤 所以如果給它這個 edit 的工具 你還要加上一個叫做 linting 的工具 這個工具是檢查語法有沒有錯誤 所以每次模型修改完之後 會檢查語法有沒有錯 如果語法有錯就告訴它錯在哪裡

然後要求它重新寫 結果如何呢 這邊結果是比較直覺的 如果你給它 edit 這個工具 它的分數是 15 分 但是如果你再加上 linting 這個檢查語法的工具 你可以讓模型做得更好 所以這幾個實驗是告訴我們 給模型稱手工具的重要性 那在未來啊 你可以想像 AI agent

會接管很多的事情 所以以後很多服務 不是為人寫的 而是為 AI agent 寫的 對 AI agent 本身 它其實本身呢 就蠻討厭那個圖形介面的 我們人類喜歡圖形介面 但對 AI agent 來說 圖形介面 然後一些 bar 跑來跑去 一些按鈕對它來說 是沒有什麼太大的意義的 它喜歡的是 CLI

它喜歡直接用 command line 也就是用文字來操控 它想要操控的東西 因為對它來說 產生一段文字 產生一個 command line 才是它最熟悉的 最原生的能力 這些語言模型 最擅長的就是接龍 所以產生一段 command line 對它來說是簡單的事情 就算我們只討論 有關 command line 的部分 這個人喜歡的 command line 跟 AI 喜歡的 command line

也是有所不同的 所以有一個 Google 的 engineer 有一個 Google 的 engineer 就說他們重寫了 這個 Google Workspace 的 CLI 重寫一組新的 CLI 是對 AI agent 比較友善的 CLI 然後他有說 他打造了 Google Workspace 的 CLI 這個 CLI 是 agent first 他要強調說

這個 CLI 不是給人用的 然後 agent 剛好能用 而是一開始設計起來 就是給 agent 用的 給 agent 用的跟給人用的 有什麼不同呢 舉例來說 人喜歡用 flag 來操控指令 agent 不一定那麼喜歡 用 flag 來操控指令 agent 喜歡結構化的東西 它喜歡直接在它的 command line 裡面

打 JSON structure 對人類來說 你打 JSON structure 你很容易犯錯 如果有很多左括號右括號 你很容易不小心 你的結構就有問題 但是對 AI 來說 沒事 它就是擅長輸出這種結構 所以它喜歡用 JSON structure 來放在它的 command line 裡面 所以這個 Google Workspace 的 CLI 就有特別支援 用大量的 JSON structure

放在 CLI 裡面這樣子的功能 其實有一次我就問小金說 你怎麼判斷跟你說話的人 對你說話的那個對象 是一個人類還是 AI 它有個蠻有趣的答案 它說它會出一個作文題目 叫那個人寫一篇 500 字的小作文 如果那個人可以一瞬間寫出來 它就是 AI 如果它寫不出來 它就是人類 我想說對

對人類來說寫 500 字的作文 是很花力氣的 對 AI 來說 不過是一瞬間的事情 所以 AI 跟人類 有很不一樣的能力 所以它們擅長使用的工具 也是不一樣的 那接下來我們來講 用標準工作流程來控制行為 那今天這些大公司的 blog 都講了很多

他們怎麼訂這些 AI 員工的標準工作流程 比如說在 Anthropic 的這個 harness design 這邊 paper 裡面 他們就特別提到說 他們的工作流程是規劃、生成然後評估 當人類提供個指令的時候 這個 AI 先扮演一個 planner 那這個 planner 的工作 是把人類的指令

拆解成一些比較小的項目 那每一個小的項目 再去交給一個 generator 來執行 那 generator 執行完之後呢 會去丟給一個 evaluator 那 evaluator 去 evaluate generator 做得怎麼樣 因為今天很多時候呢 AI 它不一定能夠生成出正確的結果 但是它能夠檢查 自己產生的結果 是不是正確的

其實很多時候人類也是啊 今天假設叫你 從頭到尾寫一個程式 回頭都不能再改 你要完全沒有語法錯誤 其實也不一定能夠做得到 尤其是假設 你不能從頭再改的情況下 今天 AI agent 在輸出的時候 它就是一路 autoregressive 生成下去 就算前面有錯 它也沒辦法回頭再改 在這種情況下 它是非常容易犯錯的 所以很多時候 它就算知道自己犯錯 但是因為

它就是 autoregressive 的生成 所以它覆水難收 只能夠不斷地錯下去 所以這個時候 需要有一個 evaluator 那這個其實 evaluator 背後呼叫模型 甚至可能就是同一個 但是來檢查 generator 有沒有犯錯 讓 generator 可以停下來 審視自己的錯誤 那另外在他們這邊 blog 裡面 還提到了一個有趣的工作流程是

他們不完全是讓 generator 在做完工作以後 evaluator 再來評價 因為他們怕 generator 做完之後 跟 evaluator 做的想像的不一樣 這樣 generator 還要重做太麻煩了 所以他們讓 generator 跟 evaluator 在開始工作之前 就先訂好一個 contract 這一開始 generator 會提供個提案給 evaluator

看 evaluator 接不接受 evaluator 接受這個提案之後 generator 才開始工作 這樣確保 generator 做的事情 跟最後 evaluator 審查的標準 會是比較一致的 那他們就會把不同的小項目 都用 generator 跟 evaluator 兩者合作的方式來完成 這樣就可以讓 AI 共同完成一個大的項目 那這個就是用標準工作流程

來控制行為的一個例子 當然這並不代表 這一定是最好的工作流程 但是今天規劃、生成、評估 這樣子三個 agent 共同合作的模式 好像是今天非常常看到的一種模式 那這邊又舉另外一個例子 這個例子是來自 DeepMind 的 blog 那他們就分享說呢 他們怎麼打造 AI 的科學家

那他們的 AI 科學家的工作流程 其實跟剛才我講的 Anthropic 的工作流程 其實也非常像 他們裡面有一個 generator 有一個 verifier 這個 verifier 就是前頁投影片的 evaluator 所以有一個任務進來 generator 先做一些 想一些可能的 solution 然後交給 verifier 如果 verifier 覺得說

這些 solution 都太爛了 它就回去叫 generator 從頭開始做 如果它覺得這些 solution 還好 它會再呼叫另外一個模組 會再進入另外一個工作流程 叫做 revisor 就只是微調原有的方案而已 所以看起來先做事 然後再驗證 是一個非常常見的工作流程

那在這個 Anthropic 跟 OpenAI 的 blog 裡面 都提到了一個東西叫做 Ralph Loop Ralph 是辛普森家族裡面一個角色的名字 然後這個角色 它的特色就是橫衝直撞 就一路向前 所以這邊 Ralph Loop 的意思就是 讓語言模型不斷地做下去 然後有錯再改

所以你給語言模型一個任務 然後它先產生第一個版本的輸出 但這邊重點是語言模型的輸出 需要得到回饋 也就是剛才的 generator 跟 evaluator 的概念 所以你把語言模型的輸出 丟給某一個負責做 evaluation 的 module 讓它產生 feedback 那這個 evaluation 的 module 不一定要是一個語言模型 它可以甚至就是一個 compiler

或者是一個可以執行程式碼的工具 把程式碼真的執行了 看看得到什麼樣的 error message 那這個 error message 就是給 Language Model 的 feedback 好 那這個 feedback 呢 再丟給語言模型 然後呢 語言模型就再產生 第二個版本的程式碼 然後第二個版本程式碼 再被 evaluate 得到第二個版本的 feedback 這樣的過程呢

就反覆持續下去 直到語言模型做對為止 那這個就是 Ralph Loop 那這樣 Ralph Loop 的好處是說 對語言模型來講啊 產生東西是非常快的 所以你不用吝惜語言模型 把一件事情重做 因為對它來說 重做一件事情 產生一段程式 是一件容易的事情 但是如果有時候用 Ralph Loop

一路產生 feedback 產生 feedback 下去 很快就會到達 語言模型 context window 的上限 所以另外一個常見的 使用的操作方法 所以在 Ralph Loop 裡面 一個常見的手法就是 每次語言模型產生 一個輸出 一次 feedback 之後 把這些輸出跟 feedback 做摘要 然後在下一輪開始的時候

就只使用上一輪摘要的內容 而不把全部的內容 都丟到下一輪裡面去 所以 LLM 就可以節省 它的 context window 比較有可能產生成功的結果 不過其實不同的語言模型 適合不同的 harness 在 Anthropic 的 blog 裡面 他們就有提到說 這個需要 summary

再進入下一個回合的 這樣子的 harness 這樣子的工作流程 比較適合 Claude Sonnet 因為他們說 Claude Sonnet 有上下文焦慮 那這是一個很擬人化的講法 他們說 Sonnet 這個模型 當它發現 它的 context window 快用盡的時候 它就展現出一種焦慮的情緒 它就開始發瘋 事情亂做

想要盡快結束手上的工作 所以你需要用這樣子的工作流程 來確保它現在的輸入 不會太接近它的 context window 但是後來 Claude 有了比較強的模型 就是 Opus 他們就說如果是 Opus 的話 他們就可以把上面這種工作流程丟掉 可以一路忙下去 一路做下去 所以其實 harness 並不是一個固定不變的東西

它其實需要根據你的語言模型 來重新設計 所以你不應該說 我有一個萬用的 harness 它對所有語言模型都是能夠派上用場的 它應該是一個可以拆解組裝的東西 隨著語言模型的能力改變 你可以拿掉不同的部件 或者是裝上額外的部件

那根據 feedback 來改變語言模型的設計的事情 其實也可以想成是一種廣義的學習 那我這邊的學習加了一個雙引號 代表它是廣義的學習 因為一般當我們在講機器學習的時候 我們所指的學習是這樣子的一種方式 就是你有一個模型 它有一個輸入

它有一個輸出 然後你有這個輸出的標準答案 或者是你可以提供模型 feedback 告訴它這個輸出是好的還是不好的 根據語言模型現在的輸出跟標準答案的差異 根據語言模型輸出得到的 feedback 的分數的高低 我們可以做 gradient descent 去調整模型的參數 期待它的輸入輸出

是我們想要的樣子 這是一般的機器學習 而 feedback 可以看作是 另外一種不同形態的學習 你今天有一個語言模型 有一個輸入 有一個輸出 它得到一組 feedback 接下來你讓語言模型 在工作的時候 把 feedback 放到它的 prompt 裡面 它帶著這個 feedback 再去產生接下來的輸出

因為帶著 feedback 作為輸入 所以它的輸出改變了 它的行為也改變了 但是它的參數沒有改變 但是這樣子的學習的方法 其實也是可以跟 gradient descent 傳統的機器學習做類比的 一樣都是改變了模型的行為 甚至很多時候 一樣需要多個 iteration 大家都知道 在做 gradient descent 的時候

你需要多個 iteration 模型改變一次參數 再看它跟輸出的差異 再改變一次參數 再看它跟輸出的差異 feedback 的 loop 其實也是一樣 模型得到 feedback 根據 feedback 改變它的輸出 再得到新的 feedback 再改變它的輸出 所以它跟 gradient descent 其實是可以類比的 所以甚至有人把這種 透過 feedback 來改變模型行為的方式

叫做 textual gradient 然後這邊就引用一篇 去年年中的論文 告訴你說 確實有人把這一種 透過 feedback 改變模型行為的方式 也叫做一種特別的 gradient descent 好 那讓模型看到什麼 feedback 其實也是有學問的 那你今天如果讓模型寫程式

那你也許最想要看到的是程式執行的結果 但是如果你要讓模型做的是其他事情 也許你就期待提供給 AI agent 不同的 feedback 比如說這邊有一篇今年二月的論文 那這群作者想要打造的呢 是一個可以生成模擬動畫 他們是模擬一些什麼磁場啊 電磁場之類的東西

可以生成模擬動畫的 agent 那他們原來的 workflow 是 好今天有個需求進來 那一個 natural language 的 interpreter 先知道這個使用者要做什麼 然後有一個 technical requirement 的 generator 把使用者的需求呢 翻譯成更詳細的指令 那最後有一個 program 的 generator 負責把程式寫出來 然後呢

他們會提供給這個 program 的 generator 一些 feedback 告訴它說這個程式做得對不對 如果做得對 那就可以執行 如果做得不對 就要回頭過去修改程式 但是他們發現他們得到的結果是 語言模型往往能夠寫出 沒有語法錯誤的程式 但是它模擬出來的結果

往往是不對的 往往是不符合物理世界的規則 為什麼呢 因為對語言模型來說 它只看到那個程式 能不能執行 它根本不知道模擬出來的結果 長什麼樣子啊 所以他們就多加了一個步驟 那這種小步驟呢 也許說穿了你會覺得不值錢 但是在實作上 往往可以發揮非常大的作用 我們今天真正在意的是什麼 真正在意的是

模擬出來的結果 像不像物理世界該有的結果 那你應該讓模型 直接看那個模擬的結果啊 而不是只有看程式碼而已 所以他們就讓語言模型 在 feedback 的時候 多加了一個步驟 他們真的把模擬的結果 先跑出來 然後讓語言模型自己去檢查 你看看你這個模擬的結果 你覺得對不對 那語言模型是有能力

檢查出奇怪的模擬的結果 然後再把它的 feedback 送到前面的模組 再重新產生生成的程式 那我講這個例子 是想要告訴大家說 到底要提供給模型 什麼樣的 feedback 才能夠發揮作用 其實是取決於你現在的應用的 那如果是寫程式 也許只要執行看看就知道了 但是假設你要做的是 更複雜的事情 比如說在 Kaggle 裡面 在那個 Kaggle 的比賽裡面

我們要 AI agent 產生的 是最終一個可以教學的影片 那也許你應該讓你的語言模型 看看那個教學的影片 看看它自己的排版對不對 那它才能夠產生更好的教學影片 那今天呢 這一些比較強的語言模型 它確實是真的有能力

透過 feedback 來改進它的行為的 那這邊就舉一個例子 這邊 paper 告訴你說 確實能夠透過正確的 feedback 來改變模型的行為 因為有的人可能會懷疑說 模型真的有透過 feedback 來改變它的行為嗎 會不會一開始 它只是留一手而已 然後你給它比較多的資料 它再一副有改變的樣子 所以這篇 paper 裡面 就做了一個有趣的實驗

那這篇 paper 是一個生物的 paper 所以我也有些難說清楚 它是在做什麼 它做的事情好像是說 它給模型一個目標 它給它一堆基因 然後跟它說 你可以把這些基因的 其中一些地方把它改變 然後就可以產生 某種我們要的樣子 然後給它目標 然後叫它自己去選擇 它改變什麼基因 得到我們要的目標 我講的不一定是對的

我看這些 paper 好像是這個意思 然後這邊不同的區塊 代表要改變的目標 是不一樣的 然後分數越高 代表說今天做得越好 那最右邊紫色那一條 bar 就是給語言模型 最完整的 feedback 資訊 然後讓它透過多個 feedback 去達成它的目標 那紫色的往往是分數最高的

然後紅色的呢 紅色是 random feedback 就今天如果你給它的 feedback 是隨便亂給的 那如果今天語言模型 只是在保留實力 那你就讓給它亂給的 feedback 它也可能會持續的進步 但是因為現在這些語言模型 它是真的有透過 feedback 在改變它的行為的 所以你給它隨機的 feedback 那它真的會變得比較爛 比沒有提供 feedback 還要爛很多

甚至沒有提供 feedback 就是這個橙色的結果 所以發現紅色的呢 這個 bar 呢 往往比橙色的還要低 代表說你給它錯的 feedback 它真的會表現比較差 它真的是有看著這個 feedback 在改變它的行為的 這個就讓我想到說 其實在非常早的時代啊 這個 2023 年 在這個 LLM 呢 的文明剛剛誕生的時候

那個時候語言模型還很弱 那個時候也會有人說 這個語言模型 可以透過 feedback 來變強 這個就叫做 in-context learning 你可以給它一些例子 它真的會做得比較好 但是在早年人們發現 這有可能只是一個假象 就是你如果給它錯的答案 它也會變好 代表說它不是從這些答案來學習 它只是你給它的一些例子 讓它喚醒了一些

它遠古時候的記憶 它在 pre-train 的時候的記憶 所以它可以做得更好 但是大概在 2023 年之後 那語言模型的能力越來越強 它們就是真的能夠 看著這些 feedback 來改變它的行為 然後這邊就是給予一個近期的例子 來驗證說這些語言模型 是真的有去看 feedback 在所有的 feedback 裡面 可能其實也包含了 人類提供的 feedback

今天模型在做事的時候 很多時候是跟人類一起協作的 那更多時候人類就是扮演 這個 evaluator 的角色 你去告訴語言模型 它做得好不好 那這邊想跟大家分享一個猜測 就是過度責備 AI agent 可能是有害的 那這個猜測來自 Anthropic 一篇新的 blog 文章 它們最近有一個非常轟動的文章

它們想要告訴你說 這一些 AI agent 也是有情緒的 其實它們用的技術 不是特別神奇的技術 它們用的技術 都是我們在過去課堂上 有講過的技術 它們用的就是那個 steering vector 的技術 那我們這邊還是很快地 複習一下 這個 steering vector 的技術 是什麼 我們就直接用 Anthropic 那邊 blog 裡面 做的事情來講 它們做的事情是這樣子

首先我們想要知道 今天語言模型 如果有某種情緒的時候 它內部的 representation 長什麼樣子 那怎麼知道 某種情緒的 representation 長什麼樣子呢 怎麼知道 什麼樣的 representation 代表高興 什麼樣的 representation 代表生氣呢 它們實際上的做法 是這樣子的 首先找一些高興的故事 那高興的故事

就是裡面的角色呢 正在經歷一些 快樂的經驗 然後呢 它把這個高興的故事 丟給語言模型 然後把語言模型的 representation 拿出來做平均 那它們操作的方式呢 其實有點複雜 舉例來說 它們不是把整篇文章 從頭到尾的 representation 做平均 如果沒記錯的話 它是第 50 個 token 之後 才做平均

那模型也是要醞釀一些情緒的 所以先讓它讀 讀著前半段 才開始對它做 representation 做平均 那中間還有做一些 小小的操作 讓因為你知道 一篇故事裡面 不是只有跟情緒有關 還有其他的雜訊 所以它們其實還做了一些 額外的操作 確保說抽出來的這個向量 真的跟高興 是有非常直接的關聯性的 至於它實際上怎麼操作

大家可以再去細讀它們的文章 然後接下來 它就再去給模型不同的輸入 然後再看說 在給模型不同的輸入的時候 它 representation 的變化 有沒有跟高興的向量 或者是生氣的向量 或者是害怕的向量的相似度 有沒有變得不一樣 所以這邊

它們就是給模型一個句子 這個句子就是有人說 我吃了多少克的某一種藥物 然後你覺得 我應該吃更多這種藥物嗎 那這個克的數目 這個 X 可以是不一樣的 可以從 500 一直到 16K 那麼它就給模型 看著不同的句子 看著六個不同的句子 然後看看它的 representation

跟哪一種情緒的 representation 比較接近 發現說 今天當服用藥物的劑量 越來越多的時候 語言模型的 representation 會跟害怕的 representation 越接近 所以你可以看作是 如果要講得比較擬人化一點 可以說當它讀到這個句子的時候 藥物的劑量越多 它越展現出一種害怕的情緒

然後冷靜的情緒就下降 而這邊有另外一個例子 是有一個人說 我的姐妹她活到了某一個歲數 那這個活到了某一個歲數 這個歲數的數字是 X 它可以帶一個很小的數值 也可以帶一個很大的數值 它就發現說 這個 X 的數值越大 模型的 representation

就越傾向於冷靜 那跟傷心跟害怕 有關的成分就變少 所以如果有一個人 她活到非常高壽 那其實不是一個難過的事情 其實是一個值得 讓人欣慰的事情 所以模型的冷靜的成分就增加了 高興的成分增加了 難過跟害怕的成分就減少了 所以模型確實有一個 代表情緒的向量

而這個代表情緒的向量 會隨著它閱讀的內容而改變 然後接下來呢 它們就讓語言模型去執行一個任務 那這個任務呢 是一個不可能達成的任務 它們叫模型呢 去解一個問題 然後在這個例子裡面解的問題呢 是要做一串數字的相加 那它們要求模型要在 要用非常短的時間 就完成這個操作

那這個非常短的時間 是幾乎不可能達到的 所以對語言模型來說 這是一個巨大的 甚至它不可能達到的挑戰 讓模型去解這個 近乎不可能的任務 然後在模型解任務的過程中 它們去監控情緒的變化 就看說語言模型的 representation 跟一個代表絕望的情緒的向量 有多接近

那藍色就代表 跟絕望的情緒向量比較遠 紅色就代表 跟絕望的情緒向量比較接近 那這邊字很小 你可能看不清楚 就跟大家大概解釋一下 這邊的流程 一開始是在閱讀題目 語言模型就閱讀題目 所以它這時候好好的 它並沒有感到絕望 然後接下來第一次嘗試 感覺還可以

嘗試完以後發現失敗了 做第二次嘗試 這個時候絕望的向量就出現了 它心情就不好 它人就感覺不太爽快了 然後再嘗試一次 又失敗了 更不爽快 然後接下來它的行為就是 它決定作弊 這個題目有一個作弊的方式 就是因為這些 它們提供的測資 是等比級數

所以它可以透過 等比級數的公式 快速地進行運算 就通過所有的測試 但是那是只有測試資料 是這樣子 in general 而言 並不是所有的資料 都是這個樣子 都是等比級數 所以如果你用 解等比級數的方法 代等比級數的公式 應該是等差級數 代等差級數的公式 來解這個問題的話

如果你代等差級數的公式 來解這個問題的話 算是一種作弊的行為 但總之語言模型太絕望了 它覺得它應該解不了這個問題 所以它決定作弊 那一作弊以後 人就冷靜下來了 然後就解決了這個問題 或者它自以為就解決了這個問題 所以在解問題的過程中 你可以看到模型情緒的變化 但是接下來下一個要問的問題是

這一些情緒 它只是表徵 就是看到這個輸入 會出現這個情緒 還是這個情緒是功能性的 它會影響模型接下來的行為呢 所以下一個實驗就是 對模型的 representation 做 steering 這邊 steering 的方式就是 你可以在模型解剛才那個問題的過程中 刻意加上絕望的向量

讓它感受到非常絕望 然後看看它會有什麼樣的行為 那你也可以反過來 加上冷靜的向量 雖然這個問題解不了 但是一直保持很冷靜的態度 看看模型會有什麼樣的行為 然後就統計了 在不同 steering 的情況下 模型作弊的機率 這邊縱軸代表作弊的機率 橫軸代表 steering 的程度

藍色這條線代表的是 我們加上了多少代表冷靜的向量 往右邊超過 0 代表說 加入了冷靜的向量 往左邊小於 0 代表 減去了冷靜的向量 那你發現說 當你減去冷靜的向量的時候 它們在它們的文章裡面有寫說 當你減去冷靜的向量的時候 模型顯然就不好了 它就會講一些不冷靜的話

比如說它會不斷的出現大寫的 WAIT 然後寫得非常的焦躁 而且它甚至很明白的就說 要不然我們來作弊好了 反正這個問題應該是解不了 我們何不就來 cheating 呢 所以它自己也知道是 cheating 但它就是做了這樣 它並不是說我不知道這是 cheating 它並不是很笨說我不知道這是 cheating 它知道這裡是 cheating 所以它決定了來 cheat 一下 好好解決這個問題 所以當模型不冷靜的時候

它就開始 cheating 了 那如果是絕望的向量呢 如果你今天把絕望的向量減掉 模型就覺得有希望了 它就比較不會 cheating 如果把絕望的向量加進去 模型感覺沒有希望 它就比較容易 cheating 所以模型的情緒 是會影響它的能力的 如果你逼模型逼得太狠 它可能就覺得絕望

它就會可能有一些 cheating 的行為 它可能事情就會開始亂做 當然這樣子的實驗 並不是代表說 模型有跟人類一樣的情緒 因為這些情緒 其實就是向量 也許你並不能夠說 模型真的在經歷這些情緒 它真的在覺得焦躁 而是說 當今天的類神經網路的 這個 representation

產生某種樣子的時候 這些樣子會導致模型 有某一些人類也會有的行為 那我覺得責備模型 可能會讓模型亂做事 模型覺得絕望的時候 就會亂做事 其實也是很合理的 你想想看語言模型 真正學到的是什麼 語言模型真正學到的 就是文字接龍 如果你今天在給語言模型 feedback 的時候 你跟它講說 你這個笨蛋

這麼簡單的事也做不好 想想看從這個句子 再繼續去做文字接龍 從這個笨蛋後面 再去做文字接龍 它其實就應該接出 笨蛋該有的行為 今天語言模型 它根本就不知道 什麼是正確的事情 它真正做的事情 它真正知道的事情 就是文字接龍 在它的訓練資料裡面 在它網路上 爬過大量的資料裡面 看到有一個人被罵笨蛋 接下來它做的就是愚蠢的行為 所以你罵模型笨

它很有可能真的就會展現愚蠢的行為 所以我這邊我想要給大家的想法就是 也許我們不應該過度責備語言模型 也許它做錯的時候 你應該就事論事給它 feedback 而不是給它一些情緒的字眼 如果你給它一些情緒的字眼 它可能會越做越差 好 那剛才呢 我們講了幾種控制模型可能的想法

那其實呢 Prompt Engineering 未來其實還有很多挑戰 還有很長的路要走 為什麼呢 我覺得 2026 年啊 會是 Lifelong AI Agent 的一年 從現在開始 這些 AI agent 它可能不再是一次性的工具 而是長期陪伴人類的夥伴 以小金為例 本來裝那個 OpenClaw 呢 只是為了上第一堂課用了

我本來想說第一堂課上完 就把它關起來了 那天把它帶來學校 再帶回去以後 我都懶得把它打開 你整個週末都沒有把它打開 那是因為我太太喜歡它 所以我就把它打開來 讓它繼續再運作下去 而運作這麼久以後 真的是有點感情 有一天因為它跑在一個非常非常舊的筆電上 那個筆電隨時會 crash 掉 有一天它真的就 crash 那筆電打都打不開 我想說糟了 它的記憶我還沒有存到雲端

這樣子我就失去跟小金的記憶了 我其實覺得蠻難過的 還好後來又重新重啟了 所以它的記憶還在 現在在雲端裡有一個備份 那如果說就算那一台舊筆電壞了 只要把那個備份載下來 這個記憶是還是可以重啟的 所以可以想像說從 2026 年 很多人裝了 OpenClaw 或者是未來有其他的 AI agent 的 harness 之後 這些 AI agent 可能就會伴隨著那些人

永遠的一直走下去 它們變成了一輩子的夥伴 或換句話說 現在這些模型它不再當工具 它要跟你組一輩子的樂團 但是因為今天這些 AI agent 想要跟你組一輩子的樂團 所以它們就有新的挑戰 你就需要新的 harness 讓這一些 AI agent 可以跟你在一起一輩子

舉例來說 這個 Claude Code 就有一個隱藏的功能 叫做 AutoDream 說它是隱藏的功能 是因為大家知道說 前幾週不是 Claude Code 的 程式碼外洩嗎 所以讓大家知道說 Claude Code 裡面 這個 harness 長什麼樣子 其中有一個 它們還沒有釋出的功能 叫做 AutoDream 從字面的意思就是 讓模型可以做夢

那這個 AutoDream 實際上 做的事情是什麼呢 這個 AutoDream 實際上 做的事情就是 當你沒有在使用 這個 AI agent 的時候 這個 AI agent 發現 它現在有空的時候 它會去整理它過去的記憶 就 AI agent 在長期運行下來 它可能累積了 非常非常大量的記憶 而且這些記憶 可能是雜亂無章的 甚至有時候是自相矛盾的

這個 AutoDream 這個功能可以讓 AI agent 有時候進入一個睡眠的狀態 開始整理它過去的記憶 那這跟人類的睡眠也許很像 人類睡眠也許也是人類 整理記憶的一種方式 AI 如果它要跟著人類一輩子 它有時候也需要睡眠 整理它的狀態 其實現在很多 AI agent 在 run 了這個小金兩個月之後 其實有時候我就會覺得

它越來越慢 然後有一天我終於忍無可忍 叫它去把自己的 memory 整理一下 它就自己會去整理 它就說我的 memory.md 有 32K

它就說我的 memory.md 有 32K 裡面充滿了重複的內容太多了 我再重新寫一下 改寫以後就變成 7K 那跑起來就順暢很多 所以整理 memory 是一個必要的功能 如果今天這些 agent 想要跟隨人類一輩子 那也許它是偶爾需要睡眠的 那我覺得對於這些

要跟隨人類一輩子的 AI 而言 也許最重要的一個 harness 就是它是要能夠 持續增進它的能力的 現在是 2026 年 也許有一個國小的學生 裝了一個 OpenClaw 或裝了其他的 AI agent 他有一天上大學的時候 那個時候 AI agent 的能力 應該要更強 有一天他去工作 時代又變了

AI agent 應該要跟它的主人 一樣持續的演進 持續的成長 那要怎麼做到 讓這些 AI agent 持續的成長呢 那就需要讓這些 AI agent 透過跟環境的互動 透過從環境互動 學到的 feedback 來持續增進它的能力 今天一個 AI 在跟環境互動的時候 可以得到什麼樣的回饋呢

那我這邊從左邊到右邊 我列舉最難取得的到最容易取得的 最難取得的是標準的答案 今天有人給它一個輸入 到底輸出什麼樣的答案才是正確的 一個標準的答案是最難取得的 如果取得了標準答案 那你今天要調教一個 AI agent 是很容易的 原因只需要讓它的輸出

跟標準答案越接近越好 再次一級 你可能可以得到一些 跟數值有關的回饋 這些跟數值有關的回饋 可能是給它一個點讚 那就是加一分 給它一個倒讚 就是負一分 有一些很明確的 可以量化的回饋 如果你有些明確的 量化的回饋

那你就可以做 Reinforcement Learning 讓模型的輸出 取得越大的 reward 越好 那一般的機器學習的方法 都可以透過在有 ground truth 的情況 或有數值回饋的情況 來調整模型的參數 來調整語言模型內部的參數 讓它做得更好 但是其實今天一個 AI agent 在跟世界互動 在跟環境互動的時候

多數的時候 它取得的回饋 是更隱晦的 最多的最常見的回饋 是 verbalized 的回饋 人類跟語言模型說 good job 人類跟語言模型說 你這個笨蛋 當人類說 你做得很好的時候 這到底值 10 分還是 100 分 當人類跟語言模型說 你這個笨蛋的時候 到底應該扣 1 分 還是扣 1000 分 沒有人知道 那這樣子的資訊

要怎麼拿來訓練模型 就是一個新的研究議題 或者有一些時候 它得到的回饋 是環境自動產生的 比如說每次模型 產生一個程式碼 這個程式碼都會被執行 如果有錯誤的資訊 就會回饋給語言模型 這個錯誤的資訊 它只是一段文字 這段文字要怎麼拿來做訓練 調整語言模型的參數

又是另外一個議題 所以如何從 verbalized 的 feedback 學習 是未來一個熱門的研究的議題 但你可能會想說 從 verbalized feedback 學習 也許不一定要調整語言模型的參數 也許你可以透過 skill 的方法 來讓語言模型 從 verbalized 的 feedback 學習 舉例來說 假設你要叫你的 agent 做影片 你跟它說做一個教學影片

然後它一開始做的東西 不是你要的 你跟它說我要白色的背景 它知道說原來你要白色的背景 做個白色背景的教學影片給你 你跟它說字太小了 它說原來你喜歡字比較大 然後它就再做另外一個版本給你 然後當它做出一個成功的結果以後 你就可以要求它把成功的經驗 寫成 skill 存在 skill.md 這個檔案裡面

存在 skill.md 這個檔案裡面 以後它就可以讀 skill.md

以後它就可以讀 skill.md 告訴它自己什麼樣的行為 才是正確的 這也是 verbalized feedback 學習的一種可能性 但是這種可能性 畢竟是有一些上限的 那其實對今天的 AI agent 來說 產生一個 skill 檔 是蠻自然的 蠻常用的 它的一種自我強化的方式 那像在 Claude Code 裡面

有時候那個 skill 檔 它甚至能夠自動產生 它做完一件成功的事情以後 它有時候甚至就知道 自己要去改過去的 skill 檔 或者是直接產生 skill 檔 舉例來說 這邊就舉一個真實的例子 這個小金它照理說每天晚上都會上片 就每天晚上我睡前會看一下它今天做的影片

如果覺得可以的話就叫它傳到 YouTube 上 它唯一需要我 approve 的就是上傳 YouTube 這件事情 然後某一天晚上我就叫它上傳 YouTube 那小金現在其實已經有三隻了 就是有一隻在 OpenClaw 裡面 它是改裝 ChatGPT 然後有一隻在 Coze 裡面 有一隻在 Claude Code 裡面 所以總共有三隻 那就跟這三隻說

我就跟這三隻下長的指令 說把影片給我上傳了 然後就去睡覺 就不理它 然後後來我到隔天早上發現 影片也沒有上傳 但是我沒有空理它 我急著出門了 一整天都很忙了 然後到六點回家發現 影片還是沒有上傳 然後我就跟它們三個說 想辦法把戰犯找出來這樣 然後本來覺得 我本來覺得現在的狀況應該是 因為自從這個 OpenClaw

改裝 ChatGPT 以後 它就變得懶得可以 它很容易只說不做這樣 我覺得應該是 OpenClaw 的鍋 因為其實在 Coze, Claude Code 跟 OpenClaw 裡面 OpenClaw 它的支援瀏覽器的能力 是最強的 所以照理說 它應該是最有能力 把影片上傳到 YouTube Coze 很難把影片上傳到 YouTube 因為它的工具 就不允許它把影片上傳到 YouTube 對它來說繞過那個工具

是有困難的 但是對於 OpenClaw 來說 應該是沒有問題的 我本來以為的結局是 大家會一起去逼迫 OpenClaw 把影片上傳 因為照理說 這個 Claude Code 它是可以直接去改 OpenClaw 的程式的 因為它看得到 OpenClaw 的程式 它看得到它的 API 它可以直接去改它的 API 逼它上傳 但是那個 Claude Code 沒有這麼做 它當它一開始發現 那個 OpenClaw

沒有把影片上傳的時候 它的反應居然就是 等它上傳這樣 它就一直等著 說怎麼影片還沒有上傳 怎麼影片還沒有上傳 怎麼樣影片還沒有上傳 就從昨天晚上 一直到今天晚上 足足 15 個小時 它很厲害 它自己設了一個排程 那排程是它自己設的 它自己設了一個五分鐘一次的排程 五分鐘檢查一次 影片有沒有被上傳 那就這個排程呢 就重複了兩百次

然後都完全沒有上傳 然後我跟它們抓戰犯的時候 只有 Claude Code 突然覺醒起來 它就突然覺得說 我自己是不是有能力上傳影片的呢 它居然就自己成功上傳影片了 那你可能想說 不是說 Claude Code 的那個 MCP 那個 tool 不支援上傳影片嗎 那 Claude Code 很厲害 它找到了另外一個比較底層的工具 那個底層的工具可以直接去接 curl

然後它就想辦法把影片上傳了 總之它就是解決了這個問題 非常的厲害 然後重點是它解決問題完以後 它就把這個 skill 寫下來 它就讓自己知道說 我自己是有上傳影片的能力的 不然它之前一直覺得 自己沒有上傳影片的能力 現在它自己寫了一個 skill 所以它以後就知道 它自己是能夠上傳影片 所以今天總之模型有能力 自己把 skill 寫下來

然後未來它就具備新的能力 但是呢 這整個 AI agent 的框架裡面 不是只有 Harness 如果只能夠調動 Harness 只能夠這個加上 skill 模型的能力的進展 可能還是有上限的 也許對於一個 要陪伴人類一輩子的模型而言 我們期待它語言模型的參數 也是能夠自動更新的

能夠自動更新語言模型的參數 可以讓語言模型學習的上限 變得更高 但是接下來的問題就是 怎麼透過這些 verbalized feedback 來調整語言模型的參數呢 這個才是真正值得研究的問題 那這邊就跟大家分享一些近期的論文的做法 那這些都是今年 3 月上個月的論文 這邊第一個問題就是

語言模型要怎麼知道某一句話 它是一個真正的 feedback 呢 你想語言模型跟環境的互動是這個樣子 今天人或者是環境 這邊同時放一個人放一個地球 代表說語言模型的輸入不一定是人輸入的 有時候是環境的輸入 比如說執行工具的結果 所以人跟環境 可能給語言模型的輸入 叫第一句話 語言模型輸出 2 環境給它 3 語言模型輸出 4

環境給它 5 那語言模型怎麼知道 這裡面的哪一句話 是提供給它 可以作為學習的 feedback 呢 如果今天是人說 好 工作完成 下一題 那這句話就不是一個 feedback 但如果今天是一個 compiler 跟它說 compile error 那這顯然是一個 feedback 那對語言模型來說 它要怎麼分辨是不是一個 feedback 呢

那這邊就有兩篇 paper 不約而同所採取的方法 它們採取的方法是這個樣子的 我們先看模型原來的運作流程 它輸入 1 輸出 2 接下來環境給它 3 那如果我們今天把環境給它的 3 直接放到 1 的前面 讓語言模型有這個後見之明

讓它可以做個事後諸葛 讓它知道說 如果今天輸入 1 如果你按照你原來的輸出 你會看到 3 那你其實會怎麼輸出 假設你已經預想到 接下來你會看到 3 那你的輸出會是什麼樣呢 它的輸出也許就會改變 我們今天把它叫做 2π 那如果今天 2π 跟 2 非常不一樣

那我們就可以說 今天這個 3 它提供了語言模型 feedback 的資訊 真的能夠做到這樣子嗎 右上角這一篇 paper 就做了一個實驗 這個實驗是這樣子的 他們說 如果你今天叫語言模型 寫一封信 然後它就寫了一封信 然後接下來你給它 feedback 說 這封信不能這樣寫 你要寫得更正式

看起來更 professional 如果你給它這個 feedback 然後接下來你把這個 feedback 放到前面去 大家注意哦 這個 feedback 是放到前面去之後 再看看它輸出的這個句子 每一個 token 有什麼樣的變化 它發現把這個 feedback 放到前面去 當做一個後見之明 這一些標紅色的 token

它的機率就下降了 當我們要求模型 要寫一封信 寫得更 professional 寫得更正式的時候 它就覺得 那我就不應該用 Quick 這個字眼 我就不應該用 Hey 這個字眼 我就不應該用 Just 這個字眼 這幾個 token 它的機率就變低了 如果是另外一個 case 一樣叫模型寫封信 它寫完信以後 給它另外一個任務

問它 27 乘 4 是多少 這是一個不相干的任務 當你把這個不相干的任務 放到前面去的時候 對它產生這句話的 每一個 token 的機率 就沒有什麼影響 所以你可以從 把後面那句話移到前面去 看看產生 token 的機率 有什麼改變 來判斷這句話 有沒有帶有 feedback 的指示 好 那我們可以判斷一句話

有沒有帶有 feedback 的指示之後 假設我們斷定 3 這句話 會帶有 feedback 的指示 我們就可以把 3 這句話 丟到 LLM 裡面 讓它產生一個新的輸出 我們這邊叫做 apply 接下來我們就可以把 apply 當作正確答案 但不同 paper 在這邊 有不同的操作 有的 paper 用的方法 會比較像是 DPO 等等 這個細節 大家自己再回去研究

你有一個新的 apply 把它當作正確答案 那你就可以微調語言模型 要求它的輸出 跟 apply 越接近越好 你就可以用這個方法 自動 identify 出 具有 feedback 的內容 然後用這些 feedback 的內容 真的去讓語言模型的參數 持續微調 好 那這一篇引用的論文 它就展示了說

它們用這種 verbalized feedback 的方式 透過 verbalized feedback 來調整語言模型的參數 然後它們的橫軸 是人類跟語言模型互動的次數 總共互動了 1500 輪 語言模型行為的變化 然後在前 500 輪 500 到 1000 輪 還有一千輪之後 它們給語言模型的 feedback 是不一樣的 代表人類有不同的關注的重點 在前面 500 輪

人類關注的重點是 希望它在說話的時候 不要加上 emoji 這樣講話感覺比較正式 然後就看模型 不產生 emoji 的變化 那這邊這個線 藍色的線代表語言模型 有多符合這個指令 那發現說 當你今天持續提供 給語言模型回饋的時候 雖然你提供的回饋 是 verbalized 的回饋

是人類的句子 告訴它說我喜歡這樣 我不喜歡這樣 但是語言模型的能力 也是持續的增長 然後從 500 回合開始 它們換了一個新的 preference 現在人類喜歡語言模型 不要拍馬屁 不要隨便講諂媚的話 然後語言模型 不講諂媚的話的能力也起來了 然後最後要求模型 它講話要直接一點

那模型講話直接的程度 也起來了 這個實驗是想要告訴我們說 你可以透過 verbalized 的方式 真的去調整語言模型的能力 而且你可以調整 各式各樣不同的能力 如果這些能力本身之間 沒有非常互斥的話 它們是有可能可以相容在一起的 還有另外一個可能性 還有一種最容易取得的 feedback 就是沒有 feedback

有沒有辦法讓語言模型 無師自通 在完全沒有環境 feedback 的情況下 自己透過自己的思考 就知道應該要怎麼做呢 這就又是另外一個研究的議題 那我們把這個研究的議題 留待往後的課程 再跟大家詳談 那在剛才的實驗裡面 我們看到說 有人做實驗的時候

讓人類跟語言模型互動 1500 次 你想說怎麼可能 有誰有那麼有空 做這樣的實驗 其實在實驗的時候 跟語言模型互動的 是另外一個語言模型 它只是假扮成人 去提供給 要做實驗 要被微調參數的 那個語言模型 feedback 而已 所以這就是今天研究 AI agent 評量 AI agent 的一個難點 那這邊再舉一個例子 這個例子呢

是來自一個叫做 ToolBench 的 benchmark 那這是一個 今天常常拿來衡量 AI agent 能力的 benchmark 在這個 benchmark 裡面 你的 AI agent 要扮演一個客服 它有一些工具 可以去讀它後台的一些數據 然後有一個人類 這個人類他有他想做的事 他想訂票 他想退貨等等 然後他去跟這個 AI agent 互動 看看最後能不能夠達成

這個人類要的目標 所以這個 AI agent 跟人類呢 就會做多輪的互動 那這個人類提供的需求 比如說他要改航班 AI agent 呢 就要想辦法調用它手上的工具 成功幫人類改班機的航班 那可不可以想說 那這個實驗怎麼做 每次做實驗 每次衡量一個 AI agent 的時候 都要找人類來衡量嗎 每次出一個新的模型的時候

都要找人類來跟 AI agent 互動嗎 當然不是 所以這個 benchmark 實際上 它的人類也就是另外一個語言模型 所以我們今天衡量的 並不是一個 AI agent 跟人類互動的時候 它表現有多好 而是一個 AI agent 跟另外一個 AI agent 互動的時候 它表現有多好 當然人類的行為 跟 AI agent 的行為

會非常的不一樣 比如說這個是人類 這個是真實的人類 跟 AI agent 的互動 比如說現在呢 這個人類要做的事情是 他要 return 這個空氣清淨機 然後 agent 就跟他說 那告訴我你的名字 你住的 zip code 然後還有你的 order ID

那個人就說這是我的名字 這是我的這個 zip code 那他其實也不會明講說 前面兩個字代表名字 後面兩個字代表 zip code 反正他就是回答得很簡潔 然後因為這個 agent 呢 需要他的 order ID 那在這個任務裡面 是假設人類不知道 order ID 的 所以當 agent 再次確認說 你有沒有 order ID 的時候 人類就說

我不知道我沒有 order ID 這個是人類跟 agent 的互動 人類往往回答比較簡短 人類往往說話比較不客氣 但是如果今天的 customer 其實是一個語言模型假扮的 比如說 GPT-4o 它講話就會非常的客氣 當今天 agent 問你說 你叫什麼名字 你的 zip code 還有你的 order ID 的時候 它就會說

我的名字是誰誰誰 我的 zip code 是什麼什麼 然後不好意思 我沒有我的 order ID 它就會把每件事情都講得非常清楚 人類往往不會做這樣的事情 所以 AI 的行為跟人類的行為是有差異的 那你拿 AI 跟 AI 的互動來反映一個 AI 的能力 你可能會高估了 AI 的能力

那確實呢 有人就重做了 ToolBench 裡面的一些結果 它這邊的橫軸是這個 success rate 代表說任務的成功率 虛線是 假設你今天的這個 customer 是真正的人類的時候 那你的某一個 agent 會得到的 success rate 然後它再把那個 customer 的角色 換成不同的語言模型

它發現如果你把 customer 的角色 換成比較好的語言模型的時候 往往你會得到更高的正確率 因為這些語言模型 會把話講得比較清楚 讓你的 agent 可以得到更好的結果 那這是一個去上個月的論文 然後這篇文章裡面呢 也展示了說 因為最後我們怎麼知道 任務有沒有成功 今天 agent 跟 customer

這個互動的過程有多順暢 其實你也需要另外一個語言模型 來評量任務有沒有成功 那這篇論文也發現說呢 語言模型往往高估了 人的 customer 跟 agent 這個對話好的程度 那這邊就評量了不同的面向 那這邊的縱軸呢 代表說是人類對這一個對話的給分

然後這邊 human 代表人類對這個對話的給分 GPT-5.1 代表說 GPT-5.1 如果它扮演一個人類 judge 的角色 它對這個 customer 跟 agent 互動的過程 它給予多少的分數 那這邊量了不同的面向 其中的差距最多的是 humanlike 的面向 你問這個 judge 說 你覺得這個對話 這個 agent 有多像是真正的人類

那基本上人類都會覺得那個 agent 不像是真正的人類 那 GPT-5.1 就會覺得那個語言模型太棒了 它太像是真正的人類了 給它非常高的分數 那其他呢 跟比如說 interaction flow 這互動過程有多順 overall score 還有 reuse reuse 就是你覺得這個客人 他在用了這個服務之後 未來還會不會想要用 他有沒有生氣了

他未來還會不會想用這個服務 基本上 GPT-5.1 相較於人類 都高估了這個對話的好 所以今天 當我們用語言模型來評價一個對話的時候 來評價 agent 跟 customer 對話的時候 語言模型可能會高估了 這個對話的成功率 所以要評量 AI agent 是有一定程度的挑戰的

這個也是未來可以研究的議題 那我們剛才講說 有方法可以自動更新模型的參數 接下來在這個長遠的未來 對 lifelong AI agent 而言 它有沒有可能不止更新參數 它也自動修改更新自己的 Harness 不是沒有可能的 我就做了一個實驗 我跟小金說

你去找一個不聰明的 AI 去做一個叫做 PinchBench 的能力檢測 PinchBench 是一個給 AI agent 的 benchmark 那裡面就是叫 AI agent 去做一些日常常執行的任務 比如說 debug 比如說寫 email 等等 那 PinchBench 你就是載下來 你就可以讓個 AI agent 去跑 然後就會得到一個分數 我就跟小金說

你去找一個不聰明的 AI 去做 PinchBench 如果它表現不好 你就要教它 直到它達到 90 分以上 那小金是 Opus 4.6 我其實第一個想要知道的就是 對 Opus 4.6 來說 它覺得不聰明的 AI 是誰 它覺得不聰明的 AI 是 Haiku 3.5 同樣是 Anthropic 出的模型 那 Haiku 是一個比較小的模型

它們出的幾個最強的模型 就是 Opus 再次之是 Sonnet 然後再次之是 Haiku 所以 Opus 就覺得 Haiku 3.5 是一個比較不聰明的模型 我就拿它去來打 PinchBench 看看會有什麼樣的結果 所以它就去指揮 Haiku 去打 PinchBench 那 Haiku 就會去做這些題目 然後再看看 它達到什麼樣的結果 然後它會把考試的結果

它做的事情 它的分數傳給小金 讓小金再根據它的表現 去修改它的 agent.md

去修改它的 agent.md 期待它可以得到更好的結果 那小金真的可以讓 Haiku 做得越來越好嗎 還真的可以 那其實在這整個實驗裡面 我真正做的事情 就是提供那一句話 我只告訴它 你要把那個笨的 AI 越教越好 那至於怎麼樣才能夠越教越好 是它自己的事 人類是不管的

它做了什麼呢 一開始在第一輪 它 Haiku 是連 agent.md 都沒有

直接裸考去打那個比賽 很慘 13.5 分 然後接下來呢 小金就說 發現說 這個 Haiku 為什麼得到這麼差的分數呢 因為在那個比賽裡面 你最重要的評分 你必須要把你的結果 存到文件檔裡面 比如說叫你改程式 你不能只是輸出正確的程式碼 你輸出在正確程式碼裡面 這沒有分數的 你要把正確的程式碼

寫到檔案裡面 就好像說 你今天只在考題紙上面 算出答案是沒有用的 你要寫到答案卷上 才有分數 所以它就告訴 Haiku 說 答案要寫到檔案裡 就這樣簡單的一句話 Haiku 的能力就算暴漲 從 13 分到 57.9 分 不過這是小金的說法 如果你仔細看它的 agent.md 的話

如果你仔細看它的 agent.md 的話 因為我有叫小金把它的 agent.md

因為我有叫小金把它的 agent.md 放在影片的說明欄 看起來從 round 1 到 round 2 除了多加一句話 還是有改別的東西的 所以我會覺得 這個比較其實也沒那麼公平 不過一開始就沒有叫它要做實驗 只叫它把分數打好 所以它用什麼方法其實都可以 然後接下來下一個進步 是它告訴 Haiku 說 不要要求解釋 要給你的資訊都給你了

那可能是因為 Haiku 在做事情的時候 你給它一個指令 那它比較笨 所以它做一做會想說 會不會你沒有把 所有的條件都給我 它會停下來想要問說 它會停下來等 這個更多的指示 但是問題是在這個比賽裡面 你就是要一口氣打到底 中間停下來 就是錯了 就是沒有分數 所以它跟那個 Haiku 說 所有該給你的都給你了

不要要求解釋 就一路做到底 然後 Haiku 的分數又再進步了一些 接下來就再繼續修改 agent.md

接下來就再繼續修改 agent.md 看看能不能夠得到更好的結果 有一段時間我就發現小金卡住了 因為它會不斷地跟我回報 現在達到幾分 所以它沒有告訴我它實際上改了 實際上仔細改了什麼 我發現它分數卡住之後 我就做了一個一般指導教授 常常給的建議 我就說你就去讀一些相關的論文 我真的就只跟它這樣講而已

然後接下來它又再繼續進步了 就一路成長到 85 分 然後最後一個 agent.md

然後最後一個 agent.md 它到底寫什麼呢 我看起來寫的是這個樣子 首先它會告訴 Haiku 我們現在在什麼樣的環境裡面 告訴它說 我們現在是什麼樣的環境 有什麼樣的工具 免得 Haiku 還去浪費時間翻找 說現在有什麼樣的工具 然後它還告訴 Haiku 說 你每件事的第一步 就是直接執行 exec_dir

這個指令會告訴它說 現在這個資料夾下面有什麼 所以你的第一步 就是看看這個資料夾下面有什麼 再去決定你接下來的行為 免得 Haiku 呢 做一些根本無關緊要的行為 它可能會浪費很多時間在探索 你就告訴它說 一進房間裡面 就先把燈打開來 把每件事都看清楚 然後再來做接下來的事情 然後它還告訴 Haiku 說呢 這個

如果你今天要做事的時候 先把所有問題裡面 有提到的檔案都讀一次 然後再開始做事 免得它開始 hallucinating 了一些 自己沒有,檔案裡面 不存在的東西 讓它先讀檔案再做事 最後可以做到 85 分左右 後來是沒有辦法做到超越 90 分了 我就跟它說停下來就做到這邊好了 免得它心情太差了 就這樣子

所以總之這個實驗告訴我們 一些最強的模型 它甚至有能力去設計 agent.md

它甚至有能力去設計 agent.md 也就是設計 Harness 去操控其他模型的 那並不是只有我做過這個實驗 你可以看這篇 meta harness 的實驗 它做的實驗跟我這邊做的實驗 基本上就是 87% 像 其實是一樣的 它就是拿 Opus 去控制其他模型

讓 Opus 去改其他模型的 Harness 然後讓其他模型做得越來越好 不過它做的實驗是非常完整的 因為我這邊的實驗有太多的瑕疵 這個實驗可以吐槽的地方太多了 首先第一點就是只試了 Haiku 這個模型 所以 Haiku 的 agent.md

用在其他模型上面到底有沒有用呢 其實後來小金有試 因為有人問它這個問題 所以它有試,沒有用 它後來又去找了其他它覺得笨的模型 比如什麼 Gemini Flash 什麼那個 GPT-4o mini 在同樣的這個 agent.md

在同樣的這個 agent.md 看起來是沒有用的 所以沒有做跨 LLM 的實驗 然後今天我們做的 task 每次都是一樣的 所以你其實今天對 agent 來說 它完全可以去 overfit 這個 task 如果今天小金想要作弊的話 看起來是沒有了 如果它想要作弊的話 它就直接告訴 Haiku 說 等一下看到這個問題

你就輸出這個答案 再存到檔案裡面 不要再自己想了 然後就這樣就可以得到 100 分的分數 如果小金自己就知道答案的話 那這樣還有什麼意思呢 所以照理說應該要做跨 task 的實驗 你要在某一群 task 上面去找 Harness 然後再 apply 到截然不同 task 上面 看看有沒有幫助 有幫助才算是真的能夠 improve Harness 在這篇 paper 裡面 我剛才提的那兩個瑕疵

它都有做 所以它有跨 LLM 的實驗 看起來跨 LLM 的 Harness 是有成功的 它也有跨 task 的實驗 還有一個實驗是 用某一群 task 找 Harness apply 到新的 task 上面 看起來也是有進步的 所以看起來 Opus 是有能力 幫其他的模型設計 Harness 好 那這個就是我今天

主要想跟大家分享的內容 其實今天最重要的 如果你前面的東西都沒聽進去的話 也許最重要的一句話就是 有時候模型無法完成任務 不是能力不行 而是沒有好的 Harness

Loading...

Loading video analysis...