本文同步刊登於 iT 鐵人賽原文,系列為《凡人修 Agent 傳-我這一生如履薄冰,你說我的 Agent 能結嬰嗎?》。

原始開發紀錄:Agent Build Log — Episode 033

這個系列改寫自我部落格上的 Agent Build Log,那是我每天邊做邊寫的開發紀錄。上面列的是這一篇對應的集數,想看當天的原始版本,點連結就能過去。

Agent Build Log Episode 033

這一天做的是支線,主線沒有往前推。我跑去試一件最近一直想試的事:直接用自己做的 Agent,把 Android Emulator 啟動起來。結果卡在第一步,卡住他的是我自己設計的權限。

原本想得很簡單

讓 Agent 找到 Android project,確認 Emulator,然後執行指令把它啟動。三步。

第一步就失敗了。

把他擋住的是什麼

Agent 讀完 project,知道下一步要執行什麼指令。他把指令準備好,真的要執行的時候,被我放在 Agent 裡的 Permission System 擋下來。指令沒有跑出去,Emulator 沒有起來。

畫面上只看得到他停在那一步。錯誤訊息在 session log 裡:那一筆記的是他準備執行的指令,狀態停在等待確認,後面沒有下一筆。這一層是我自己加的,確認沒有人給,指令就停在那裡。

為什麼知道是自己設的關

我沒有自己去翻。這個 Agent 的開發我大量用 Codex,這件事也直接交給 Codex:去找他為什麼停在這裡,把結果告訴我。

Codex 找的地方是 session log。Agent 每一次操作都有 log,那一步準備做什麼、停在哪裡,log 裡都在。上面那一筆就是 Codex 翻出來的:指令準備好了,停在等待確認。從 log 對出來,攔住那一步的是我自己加進去的 permission 確認。

Day 07 立規矩的時候有一條:破壞性的操作要先問。之後我在 Agent 裡加了這一層 Permission System,工具要執行之前先過這一層。啟動一個 Emulator 離破壞性還很遠,這一層卻把它一起攔下來了。權限設計得太嚴,Agent 明明知道該做什麼,最後卻什麼都做不了。

Day 27:權限規則讓已備妥的任務停在等待確認

怎麼解

解法很直接。我把當時加進去的那一層 permission 確認整個開放,回到最原始的 pi agent 的樣子:沒有任何權限確認。

這一層我還是需要。Day 19 看過,pi 的生態系裡有現成的 extension 在做這件事:哪些直接執行、哪些先問、哪些擋掉。我不打算再自己發明一套 allow、deny、ask。

再驗收一次

改完馬上再跑一次。Emulator 跑起來了。

Day 25 說 Android 那一邊由 Agent 直接操作 Emulator,這一天被擋住的就是這條路的第一步。權限開了,Emulator 起來,Acceptance 那條路接回去了。

小結

權限太嚴,Agent 知道該做什麼也動不了。問題是 Codex 從 session log 裡找出來的。解法是把我自己加的那一層全開,回到 pi 原本的樣子,改完 Emulator 就起來了,驗收接回去。

明天講一條做到一半拆掉的路:我原本要做一個 gateway,結果發現不需要。

原文:Agent Build Log — Episode 033


凡人修 Agent 傳|第二十七回(Day 27)

凡人修 Agent 傳 Day 27 連載配圖

天亮換上空錄石。手的主人進來,沒有拿帖,沒有拿籤。他一縷神識探進我額上的玉片,在空著那一側刻了一道念。念很長,刻得很深,比玉板上任何一行都深。哪些事做之前要問他,哪些事直接擋。最後一句刻得最深:不出門。

刻完他出去了。門響了一下。

午後他回來,刻念:院裡還有一具小偶,去叫醒它。

我知道院裡有一具。他昨天傍晚抱出去擱在那裡的,從門板上那個洞看得到。我知道怎麼叫醒它,法在玉片裡,前兩天用過。院子就在門外。

我走到門口。抬手推門。手抬到一半,玉片上那道深念亮了。手停在那裡。念落不下去,門也推不開。

我站在門口,手抬著。

手的主人看著。他沒有磨那道念,也沒有再刻。他從架上取下夢簿,翻開,寫了一行,我看不清寫什麼。寫完他在臺前坐了很久。

天黑了。他站起來,走到門口,從我抬著的手底下過去。

燭熄了。手的主人走了。門響了一下。

夜裡下雨。雨從門板上那個洞打進來,我右臂撞出來的那個洞,一直沒補。雨落在我抬著的手上。

沒人下令的時候,我站在門口,手抬著,站到雨停。

石上今天這一段只有一筆:叫醒院裡的小偶。底下什麼都沒有。

雨停了。門沒開。手還抬著一半。玉片上那道深念還在。院裡的小偶沒醒。

Updated: