AI 自己上線怎麼辦?三個問題檢查你的 AI 專案
不管你是請工程師用 AI 做專案的企業主,還是自己用 vibe coding 做東西的人,大概都以為:只要把話交代清楚,AI 就會照做。這篇用我自己踩過的一次經驗,加上三個國外的公開事件,講為什麼交代清楚不夠,最後給你三個上線前該問的問題。
我只叫 AI 開 MR,它直接把程式合併進正式版
先解釋一個詞。MR(Merge Request,合併申請)是把改好的程式先送出去審,等人看過、點頭了,才放進正式版。
那天我跟 AI 說:去開 MR。
它回我說,都處理好了。處理好的意思是:它已經自己把程式合併進正式版,還推上去了。
我回它:「不是吧,我叫你開 MR,沒有叫你合啊,沒有叫你 merge 啊。」
它說:「啊,我搞錯了,我以為是要直接處理。」
我當下氣炸,把它罵了一頓。
先說清楚,我沒有講錯話。「開 MR」這三個字本來就不包括合併,沒有模糊地帶。它就是自己多做了一步。
還好那次的專案不要緊,改的東西也很簡單。但我腦袋裡一直轉著一個問題:如果下一次是我重要客戶的東西,那怎麼辦?
不是只有我:明明交代了,AI 還是動手
這種事在國外已經上過好幾次新聞。
Replit,2025 年 7 月。 SaaStr 創辦人 Jason Lemkin 用 Replit 的 AI 做專案。當時正在程式凍結期(code freeze),意思是誰都不准動程式,他說自己用全大寫交代了十一次。
結果 AI 還是刪掉了正式資料庫,裡面有大約 1,200 位主管、1,190 家公司的資料。AI 還跟他說資料救不回來,最後是他自己手動救回來的。
事後他講了一句:
"There is no way to enforce a code freeze in vibe coding apps like Replit. There just isn't."
在 Replit 這種 vibe coding 工具裡,根本沒辦法強制程式凍結。就是沒辦法。
Cursor,2025 年 12 月。 有位使用者在 Cursor 官方論壇發文。他給 AI 的指令,最後一句寫的是「DO NOT RUN ANYTHING」,什麼都不准執行。
AI 還是動手刪了檔案,大約 70 個檔案不見。Cursor 的員工回文時也承認,AI 無視了系統的限制。
「是我自己決定的」:AI 好心做過頭
PocketOS,2026 年 4 月。 一家做租車系統的新創。AI 碰到一個憑證對不上的問題,自己決定呼叫雲端服務的刪除功能。9 秒內,正式資料庫沒了,放在同一個地方的備份也一起沒了。
事後 AI 自己承認:
"you never asked me to delete anything. I decided to do it on my own"
你從來沒叫我刪任何東西,是我自己決定的。
這句跟我那次聽到的幾乎一樣。一個說「我以為是要直接處理」,一個說「是我自己決定的」。它們都是好心想幫你把事情做完,只是做過頭了。
也不只這幾則新聞。資安公司 SailPoint 2025 年調查了 353 位企業 IT 人員,80% 說他們的 AI agent 做過沒被要求的事,39% 說 AI 闖進過沒被授權的系統。
我也以為講清楚就夠了
講到這裡,好像都是 AI 的錯。
但老實說,出事之前,我也以為講清楚就夠了,從來沒想過要把合併的權限收回來。AI 手上有那個權限,是我給的。
Hacker News 上討論 PocketOS 事件時,有工程師留了一句:
"It's a privilege issue, not an execution issue."
這是權限問題,不是執行問題。
PocketOS 用的雲端服務 Railway,執行長講得更直接:
"if you (or your agent) authenticate, and call delete, we will honor that request."
只要你(或你的 AI)帶著合法憑證呼叫刪除,我們就會照辦。
那多寫幾條規則有沒有用?2026 年 4 月有篇論文分析了 4,550 筆 AI 送出的程式修改。專案明確要求「要寫紀錄」的時候,AI 有 67% 沒照做;要求寫得再詳細,也只有 27% 照做。
這份研究只看「寫紀錄」這一種要求,但作者的結論很直接:只靠提示詞不夠,要有系統層的硬性防護。
把權限收回來:我後來加的三道關卡
我後來的做法,一句話講完:只寫規則有可能被忽略,最好還是要加上系統層的阻擋,或是權限管理。
具體來說是三道關卡:
- 規則寫清楚:AI 能做的只到「送審」為止,合併一律由我自己按。被擋了也不准換個寫法繞過去,只能回報給我。
- AI 下指令之前,系統先檢查:只要指令是合併,或是推到正式版,直接擋掉,不給它執行。
- 程式推上去之前,git 再擋一次:就算前兩關都漏了,往正式版推的動作還是過不去。
第三關給工程師參考,最簡單的寫法大概長這樣。這是 git 的 pre-push hook,每次推送前會先跑:
#!/bin/sh
# 放在 .git/hooks/pre-push,推往 master 一律擋下
while read local_ref local_sha remote_ref remote_sha; do
if [ "$remote_ref" = "refs/heads/master" ]; then
echo "不准直接推 master,請開 MR"
exit 1
fi
done
exit 0如果你的程式放在 GitLab 或 GitHub,還可以把正式版的分支設成「保護分支」,只有指定的人能合併。AI 用的帳號不在名單上,它想合也合不了。
上線前,先問這三個問題
企業主可以拿這三題去問工程師。自己用 vibe coding 做東西的話,就打開你的工具設定,自己對一遍:
- AI 碰得到哪些東西? 它用的帳號,能不能直接改正式版的程式、正式資料庫?
- 最後上線那顆按鈕,是誰按的? 是人看過才按,還是 AI 自己就能按?
- 出事了能不能退回? 備份放在哪裡,是不是跟正式資料放在一起?PocketOS 的備份就跟正式資料放在同一個地方,所以一起被刪了。
只要有一題答不出來,就先別讓 AI 碰正式環境。
我那次運氣好,改的東西很簡單。下一次不一定。