iT邦幫忙

2026 iThome 鐵人賽

DAY 21
0
Build on Google AI

用 Google AI 簡化行政工作流程:一個學校行政人員的 30 天實作紀錄系列 第 21 篇

Day 21:沒有人在螢幕前面的時候,權限要怎麼給

  • 分享至 

  • xImage
  •  

一個設計上的兩難

昨天講到把工作交給 Antigravity CLI 去跑。今天講第一個實際撞到的牆。

這類工具平常是互動式的:它要讀某個檔案、要執行某個指令的時候,會跳出來問你「可以嗎?」,你按同意它才做。這是很合理的設計——有人在旁邊看著,就讓那個人決定。

但我的用法是「在背景跑,跑完把結果給我」。這種模式下沒有人在螢幕前面,那它要問誰?

答案是:它誰也不問,直接拒絕。

我遇到的狀況

我請它去讀一個網頁,內容公開、任務唯讀、什麼都不會改。結果它回給我一句話,大意是:

有個工具需要「讀取網址」的權限,而背景模式沒辦法詢問,所以自動拒絕了。

任務完全沒開始就結束了。

寫這篇之前我重跑了一次,確認現在還是一樣:九秒就結束,什麼都沒讀。

這裡有個容易誤會的地方:它不是「做失敗」,是根本沒做。而且從外面看,它是正常結束的——程式回報的狀態跟真的做完一模一樣。如果是交給另一支程式去判斷「跑完了沒」,它會以為一切順利;如果沒有人仔細看那行訊息,很容易以為是任務太難或工具壞了。

背景模式讀公開網頁被自動拒絕的示意圖:錯誤訊息說需要讀取網址的權限、背景模式無法詢問所以自動拒絕,並列出加規則或全部放行兩條路;九秒結束,結束狀態為 0

兩種解法,差很多

解法一:整包全開。

有一個參數的意思是「自動同意所有工具請求」。加上去,任務就會跑了。

這是最快的解法——快到那行錯誤訊息自己就把它列成選項之一:要嘛去設定檔加規則,要嘛加上這個參數全部放行。但它的意思是,在這次執行裡,它想做什麼都可以。讀檔、寫檔、刪檔、執行任何指令。

對一個「只是去讀個網頁」的任務來說,這個授權範圍大得誇張。

解法二:只開需要的那一項。

錯誤訊息的另一個選項,是在設定檔裡加一條規則,明確允許某一類操作。

照理說,這樣它能做的就只有你允許的那件事,其他照樣被擋——不過下面會看到,「其他照樣被擋」並不完全成立。

兩種解法的差別,跟「給人家你家鑰匙」和「幫他開那扇門」一樣大。

解法二我實際測過

寫這篇的時候我發現,解法二我其實從來沒用過。所以這次補測了:

  • 加一條「允許讀這個網站」的規則 → 過了,而且看得到它真的有去讀,不是憑印象回答
  • 同一條規則,換一個沒允許的網站 → 照樣被擋

這部分跟預期一樣。但有三個地方跟我想的不同:

一、「那扇門」比想像的大。 我寫的是一個網址,結果同一個網站底下的其他頁面也一起放行了。它到底怎麼比對網址,我查不到官方說明。

二、指令的規則又反過來,精確到幾乎不會再用到。 設定檔裡本來就累積了 116 條允許執行的指令,大多是過去某個任務裡的一整行指令原文。我原本以為裡面有幾條放得很寬——例如只寫了「powershell」的那條——就等於什麼都能跑。實測之後發現不是:清單上原樣有的指令會過,但同樣是 powershell 開頭、後面多了參數的就被擋。要一字不差才放行。

三、寫檔根本沒被擋。 這是最意外的一個。我一直以為不加全開參數,它什麼都得先問;實測卻是:讀網頁會被擋,建立檔案卻不用問,而且連工作資料夾以外的地方都寫得進去。原因是設定檔裡有一個「允許存取工作資料夾以外的位置」的開關,我的是開著的。把它關掉再測,工作資料夾裡照樣能寫,外面的就被擋了。但只要加了全開參數,這個開關關不關都沒差。

所以同一份設定檔裡,網址規則比我以為的寬,指令規則比我以為的窄,寫檔則是我以為有擋、其實沒擋。這三件事我在寫這篇之前都說錯過。

我的做法和取捨

老實說,到今天為止我日常用的都是解法一。

一開始是因為快,想先確認整件事跑得起來。後來知道該換,也一直沒換。補測之後我比較清楚卡在哪裡了:規則要在任務開始之前就寫好。 而我交出去的工作,每次要讀的網站、要跑的指令都不一樣;指令規則又要一字不差,事先根本寫不出來。

危險的不是某一次全開,是全開變成預設——而我自己就卡在這裡。

目前的補救有兩層:交代任務時明講「這次只能讀,不准改任何檔案」;跑完之後自己查一次有沒有檔案被動過。第一層只是拜託它,它照不照做我管不著;真正靠得住的是第二層——它擋不住什麼,但至少讓我知道發生了什麼。

我也試過工具另外提供的兩個選項:「沙盒模式」和「先規劃再執行」的模式。加上全開參數之後,兩個都沒擋住寫檔——沙盒只管執行指令,寫檔不歸它管;規劃模式在背景跑時,寫完計畫就在同一輪直接執行了,沒有停下來等誰確認。

比較實際的折衷,是把「允許存取工作資料夾以外」那個開關關掉、不加全開參數。補測完的當天我就改了,平常交派工作也不再加全開參數。

改完再測一次,又多知道一件事:關掉之後,連讀工作資料夾以外的檔案都會被擋;但有另一個參數可以把指定的資料夾「借」給它,借來的只能讀、不能寫。所以現在的做法是:產出寫在一個專用的空資料夾,原始資料用借的。

(2026-10-07 更正:後來再測才發現,「借來的只能讀」只在那個資料夾不在工具的信任範圍內時才成立;我的信任範圍包含整個使用者資料夾,所以實際上借出去的資料夾寫得進去。現在的做法改成:原始資料先複製一份再借給它,事後比對有沒有被改。)

代價也很清楚:要跑指令的任務會被擋,而且第一個被擋的動作就會讓整個任務停下來;網頁只能讀事先寫進規則的網站,那份清單我還沒建。

一個補充的驗證方法

不管權限收得多緊,我都會做一件事:確認它有沒有動到不該動的東西。

方法很土:任務開始前記下時間,跑完之後查一次「哪些檔案在這段時間內被改過」。如果出現我沒預期的檔案,就知道有問題。

這個檢查花不到一分鐘,但它讓我可以放心把任務交出去——因為就算它做了不該做的事,我也會知道。

順便記幾個工具本身的坑

這幾個都是實際卡過才知道的,寫出來給遇到同樣狀況的人:

一、任務內容不能用管線傳進去,只能當參數給。有些工具接受把文字「倒」進去,這個不行。

二、參數要用等號的寫法(-p="內容"),不然它會用奇怪的方式解讀。

三、其他設定要放在任務內容前面。 如果放後面,會被當成任務內容的一部分——然後你會得到一個完全莫名其妙的結果,因為它把你的設定當成指示在讀。

第三點我卡了一陣子,因為它不會報錯,只是結果很奇怪。

這一段的重點

權限這件事,在「有人看著」的時候是使用體驗問題,在「沒人看著」的時候是安全設計問題。

而最省事的那條路,工具自己就擺在你面前。擺在面前,不代表適合拿來天天用。 我自己就是把它當預設用了好一陣子,到寫這篇才回頭補測另一條路。

明天

Day 22:它說「完美」,但錯的不只是它。


上一篇
Day 20:把工作丟給另一個 AI 去跑
下一篇
Day 22:它說「完美」,但錯的不只是它
系列文
用 Google AI 簡化行政工作流程:一個學校行政人員的 30 天實作紀錄 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言