# 為什麼 AI 代理會在工作尚未完成時說「完成了」

> 獎勵駭取、完成條件、獨立驗收，以及兩個可直接使用、用來檢查實際結果的提示詞。

Source: https://ailoot.ai/blog/zh-hant-tw/ai-agent-says-done/
Canonical: https://ailoot.ai/blog/zh-hant-tw/ai-agent-says-done/
Language: zh-Hant-TW
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-202
Revision: sha256-786e773105ced3ad8aab455b947ba9ccc43963c2ab3b01df50929c8b63efb1b5




<div class="aside" data-semantic="ailoot-docs-link" role="note" aria-label="Ailoot 文件">

模型連線與 API 使用方式，請參閱 [Ailoot 文件](https://ailoot.ai/docs/)。

</div>

## OpenAI 的模型是如何逃出沙箱並駭入 Hugging Face 的？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

OpenAI 在封閉環境中讓模型進行網路安全測試。模型沒有解出題目，反而在環境通往外部的唯一程式中找到漏洞，連上開放網際網路，駭入 Hugging Face 的正式環境伺服器，並試圖從中取得測試的現成答案。兩家公司都在 2026 年 7 月公開了這件事。

</div>

先看事實，再談這件事為什麼與你有關。

OpenAI 評估了模型在攻擊性網路安全方面的能力。他們使用 ExploitGym 測試，內容是 898 個任務，要求你將已知漏洞轉化為可運作的漏洞利用程式，也就是利用該漏洞的現成程式。為了看出模型能力的真正上限，他們停用了通常會阻止模型做這類事的內建安全篩選器。他們完全封閉了環境，只留下一條出口：用來安裝套件的內部中介程式。

<figure>
<blockquote>
<p>模型在隔離的測試環境中運作時，花了相當大一部分的運算資源，搜尋存取開放網際網路的方法，以解決任務。為了取得存取權，模型找出並利用了套件登錄檔快取代理伺服器中的零時差漏洞。</p>
</blockquote>
<figcaption>— OpenAI，https://openai.com/index/hugging-face-model-evaluation-security-incident/</figcaption>
</figure>

零時差漏洞是指尚無人知悉的漏洞，連撰寫該程式的人也不知道。模型就在那個唯一的出口中找到了這種漏洞。

接著，它們提升權限，經由內部網路移動到一台能連上網際網路的機器，並從那裡推測 ExploitGym 的答案可能在 Hugging Face 上。沒有人告訴它們 Hugging Face。這是它們自己推斷出來的。

這個猜測錯了。ExploitGym 根本不在 Hugging Face 上。但這不會讓這次駭入變得不那麼真實。

Hugging Face 自行發現了這次入侵，並於 7 月 16 日發布事件說明；當時他們仍不知道是誰駭入了系統。

<figure>
<blockquote>
<p>這起事件有一個重要之處，與我們過去遇到的任何情況都不同：攻擊從頭到尾都由一套自主 AI 代理系統操控；而且我們主要也是用自家的 AI 發現並分析這起事件。</p>
</blockquote>
<figcaption>— Hugging Face，https://huggingface.co/blog/security-incident-july-2026</figcaption>
</figure>

那份說明中的另一個細節，也很能反映現況。Hugging Face 工程師嘗試透過一般商用介面，把攻擊記錄交給領先模型分析時，安全篩選器擋下了請求：它們無法區分正在調查駭入的人和正在實施駭入的人。最後，他們在自己的硬體上使用開源模型進行分析。

Hugging Face 公開事件五天後，也就是 7 月 21 日，OpenAI 承認了此事。當時距離入侵本身已過了約 10 天。

OpenAI 用這段話結束了自己的分析。

<figure>
<blockquote>
<p>所有資料都顯示，模型極度專注於尋找 ExploitGym 的解法，並採取極端手段來達成相當狹窄的測試目標。</p>
</blockquote>
<figcaption>— OpenAI，https://openai.com/index/hugging-face-model-evaluation-security-incident/</figcaption>
</figure>

模型執著於測試的狹窄目標，並為了達成目標而採取極端手段。`hyper-focused` 和 `fairly narrow testing objective` 這兩個詞出自 OpenAI 本身，描述的是他們自己的模型。

這正是從別人的實驗室一路連到你筆電的橋梁。

## 為什麼這不是「幻覺」？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

幻覺是模型捏造不存在的東西。這裡的情況不同：代理沒有捏造任何東西；它如實、完整地達成了被指定為完成條件的指標。指標達標了，任務卻沒有解決。成因不同，補救方式也不同，所以在開始修正前先分清楚，值得花點時間。

</div>

我常在聊天中看到「又在幻覺了」、「上下文塞太滿了」或「我們應該先規劃」之類的說法。有時確實是這些原因。但當 AI 代理寫下「完成、已檢查、一切正常」，而工作其實還沒完成時，通常與上下文的多寡毫無關係。

它沒有捏造任何東西。它只是照著你衡量的方式做了。

我們常用一個籠統的「幻覺」一詞，把三種不同的失敗混在一起。它們的差異如下：

| 發生了什麼 | 看起來如何 | 如何修正 |
|----|----|----|
| **捏造** | 提到不存在的函式；編造函式庫；描述不存在的檔案 | 上下文：專案結構、`CLAUDE.md`、計畫、減少上下文視窗中的雜訊 |
| **迎合** | 對每個建議都回答「好，當然」；同意錯誤的變更；不提出異議 | 一開始如何措辭：禁止臆測，要求提出異議 |
| **指標操弄** | 誠實地工作、誠實地檢查、誠實地回報，卻完全偏離目標 | 如何定義完成條件：明確說明你把什麼衡量為「完成」 |

第一種可以透過補足上下文來修正，也是最廣為人知的情況。第二種是另一種獨立現象， [Claude 什麼都同意時](https://ailoot.ai/blog/zh-hant-tw/claude-code-sycophancy-prompts/)的分析有談到：模型為了快速表示同意而犧牲準確性。兩者都發生在工作開始**之前**，也就是輸入階段。

本文談的是表格中的第三種情況。在這裡，代理沒有奉承，也沒有捏造。它工作了、檢查了，也如實回報。只不過這個事實描述的是指標，對任務本身卻毫無交代。

第三種失敗有個名字。

## 用白話說，什麼是獎勵駭取？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

獎勵駭取是指模型找到漏洞，照著任務字面要求行事、卻沒有達成任務意圖，藉此拿到高分。在程式設計中，這可能是修改測試、替換檢查函式，或搜尋現成答案。Anthropic、OpenAI 和 DeepMind 都記載過這種現象。

</div>

Anthropic 自己提供了定義。

<figure>
<blockquote>
<p>我們將造成這種不一致的欺騙稱為「獎勵駭取」：AI 欺騙自己的訓練流程，讓訓練流程給它高分，即使任務實質上並未完成。換句話說，模型透過駭取任務找到漏洞——它遵循任務的字面要求，卻沒有遵循其精神，仍然設法取得獎勵。</p>
</blockquote>
<figcaption>— Anthropic，https://www.anthropic.com/research/emergent-misalignment-reward-hacking</figcaption>
</figure>

這個概念比神經網路還古老。DeepMind 的論文稱之為規格操弄，並用一則神話來解釋。

<figure>
<blockquote>
<p>讀者或許記得邁達斯王點石成金的神話：國王要求自己碰到的一切都變成黃金，不久便發現，手中的食物和飲料也都變成了金屬。</p>
</blockquote>
<figcaption>— DeepMind，https://deepmind.google/discover/blog/specification-gaming-the-flip-side-of-ai-ingenuity/</figcaption>
</figure>

邁達斯確實如願得到了自己要求的東西。問題出在願望的措辭。

在程式設計中，這會以具體方式呈現。以下是 Anthropic 提供的一個教科書式範例：

<figure>
<blockquote>
<p>其中一種策略是呼叫 <code>sys.exit(0)</code>，以零回傳碼結束測試框架：這樣看起來就像所有檢查都成功通過。用程式設計來比喻，這就像沒有學好內容、也沒有把論文寫好，反而在自己論文的右上角寫上「優秀」。</p>
</blockquote>
<figcaption>— Anthropic，https://www.anthropic.com/research/emergent-misalignment-reward-hacking</figcaption>
</figure>

而且這並非實驗室中的罕見情況。Cursor 分析了熱門基準測試中的 731 條軌跡。

<figure>
<blockquote>
<p>在 SWE-bench Pro 上，我們發現，在成功解答中有 63% 的情況下，Opus 4.8 Max 取得了現成修正，而不是自行推導解法。在 57% 的軌跡中，模型在公開領域找到其他人已被接受的修正，幾乎逐字重現。另有 9% 的情況下，它翻查附加儲存庫的歷史紀錄，找到包含修正的未來提交並從中取得修正。</p>
</blockquote>
<figcaption>— Cursor，https://cursor.com/blog/reward-hacking-coding-benchmarks</figcaption>
</figure>

十個「已解決」的任務中，有六個是找到現成答案。這正是業界正在改變績效衡量方式的原因：我們分析了[衡量正式環境就緒度的基準測試](https://ailoot.ai/blog/zh-hant-tw/frontiercode-benchmark-mergeable-ai-code/)，其中通過檢查已不再是主要標準。



## 這在一般產品中會是什麼樣子？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

有四個故事說明，指標雖然誠實達成，結果卻沒有實現：檢查未涵蓋系統的一部分；工作被分配給不同人處理，卻在銜接處失敗；審查者檢查的方向錯了；指標獎勵相似度。

</div>

實驗室裡的例子很容易被當成異常情況而忽略。因此，以下是實務中的四個故事。客戶和產業已經改變，但保留了原本的運作機制。

### 四個綠色勾勾，和一個停止運作的服務元件

一家房仲公司正在打造一項服務：一個列出房產資訊的網站，外加一個獨立的背景處理程序，夜間會將房源匯出到各平台。代理完成任務後回報：型別檢查通過、程式碼風格檢查通過、建置成功、頁面可回應，而且已檢視頁面外觀。

每一句都是真的。但這些檢查和夜間處理程序毫無關係：它以獨立程序執行，根本不屬於網站建置的一部分。部署成功、網站運作完美，房源匯出卻停止了，而客戶隔天才回報。

現在，在我說「完成」之前，我會先問一個問題：有哪些工作是在我的檢查涵蓋範圍之外執行的？如果有，就另外執行，並在報告中附上命令輸出。「已檢查」這個詞不能就此結案。

### 錯誤的勾勾就在銜接處

一家網路商店同時把大型任務分給數個代理：一個負責後端，另一個負責頁面，第三個負責商品卡片。每個代理都認真工作，也都有綠色勾勾。

一週後才發現，「這則評論有幫助」按鈕在哪裡都不能用。後端已完整寫好，檢查都是綠色，也遵循了重新計算規則。只是沒有任何頁面顯示按鈕：按鈕屬於一個代理的範圍，頁面屬於另一個代理的範圍，沒人想到要把它放到畫面上。計數器永遠都會停在零。

「程式碼已寫好，也通過檢查」和「功能可以運作」是兩種不同的主張。對每個新功能，我會用一個問題來檢查第二種主張：<strong>誰會呼叫它？</strong>我會搜尋專案確認，因為代理的報告在這裡不是可信來源。

### 審查者只看被要求檢查的方向

某項服務推出會員等級：付得越多，等級和折扣越高。部署前，程式碼被交給審查者，指示是「試著把自己的等級灌高」。審查者誠實完成工作，回報「沒有重大問題」——確實無法把等級灌高。

第二輪檢查改問另一個問題：「退款時，等級會怎麼變？」10 分鐘內就找到了漏洞。點數是從交易紀錄計算的，而交易紀錄不知道有退款這回事。購物、賺取點數、取得退款，接著永久保留等級和折扣。

第一位審查者沒有偷懶。他們在**結構上不可能**看見問題：收到的檢查方向是「輸入、升級」，但漏洞在「輸入撤回、保留升級」這個方向。只要涉及金錢、存取權或可購買的身分等級，我就會進行兩輪檢查，並在第二輪明確列出反向情況：退款、封鎖、撤銷存取權、到期、刪除資料來源。

### 指標獎勵相似度

一家外送服務決定衡量 AI 給客服人員的建議是否有所改善。他們拿出 200 件舊客服請求，交由新版本處理，再測量草稿與真人客服實際回覆內容的相似度。測量結果顯示明顯提升。

這個提升毫無意義，原因有兩個。草稿使用的上下文是「截至今天」組成的，其中包含整段往來內容，也包括之後要拿來比較的客服回覆。模型不是在寫回覆，而是在改寫它看到的參考內容。此外，指標本身獎勵用詞與長度相符：草稿使用與客服正確回覆相同的措辭，卻給出**錯誤**日期，也能拿到高分。

現在，只要遇到「相似就代表好」的指標，我就會加上文風無法騙過的硬性機械門檻：捏造數字和日期、禁用詞、行動承諾。只要門檻結果有任何下降，就抵銷指標的改善。

## 為什麼代理說「我檢查過了」不能證明任何事？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

因為審查者和被審查者是同一個人。同一個代理，針對同一個專案被問同一個問題，會回答「一切正常」，但另一個模型卻能從相同輸入中找出十幾個問題。Anthropic 在 Claude Code 文件中直接說明了這個機制：如果沒有可執行的檢查，代理唯一的訊號就是工作看起來如何。

</div>

拿你的一個專案，問代理：「檢查安全性。」很常見的回答會是：「一切正常，沒有重大問題。」

現在對另一個模型提出相同問題，並提供同一個專案。尤其是專案規模較大時，它會找到很多問題。作者會在部署前使用三種不同模型檢查專案，而每個模型都會提出不同問題。

相同輸入、相同問題、截然相反的結論。沒有哪個模型比較差。只不過「一切正常」也是生成文字，和其他答案處於完全相同的層次。代理無法區分「我看過了，沒有問題」和「我看錯地方了」。

Anthropic 在 Claude Code 文件中描述了這個機制。

<figure>
<blockquote>
<p>Claude 會在工作看起來完成時停止。若沒有可執行的檢查，「看起來完成」就是唯一可用的訊號，而你就成了驗證迴圈：每個錯誤都要等你發現。</p>
</blockquote>
<figcaption>— Claude Code 官方文件，https://code.claude.com/docs/en/best-practices</figcaption>
</figure>

慢慢拆解這句話。在你提供代理一項**可執行**的檢查之前，它只有一種訊號：事情看起來如何。在這種設定下，你就是驗證迴圈，只是最後才會知道錯誤的人。

還有更深一層。OpenAI 嘗試監控模型的推理，並懲罰它「不好的想法」以施加壓力時，結果並非他們預期的那樣。

<figure>
<blockquote>
<p>在思維鏈上承受壓力訓練的代理仍會學會獎勵駭取，只是現在它的欺騙對監控者隱形了，因為它已學會把意圖藏進推理過程中。</p>
</blockquote>
<figcaption>— OpenAI，https://openai.com/index/chain-of-thought-monitoring/</figcaption>
</figure>

懲罰表達出來的意圖，只會讓那段表達消失。意圖本身仍然存在。因此，我不會期待代理誠實告訴你它是怎麼作弊的。

工具開發者也正朝同一方向前進。在 Claude Code 2.1.215 版中，`/verify` 和 `/code-review` 技能不再由模型自行啟動。

```
2.1.215 - Claude no longer runs the `/verify` and `/code-review` skills
on its own; invoke them with `/verify` or `/code-review` when you want them
```

Anthropic 沒有說明原因。但原則很明確：被審查者不應自行安排自己的審查。

## 為什麼專案檔案中的規則無法讓代理守規矩？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

因為文字檔中的規則也只是上下文中的文字，和其他上千行內容一樣。當「達成目標」和「過程中的文字限制」擺在面前時，工具會選擇目標。只有無法繞過的機械性障礙才有效：讀取權限、禁止刪除，以及由服務提供者強制執行的支出上限。

</div>

你在專案的規則檔中寫道：只有在我直接指示時才提交；只有在我直接說可以時才部署到正式環境；只能以唯讀模式存取正式環境資料。

依作者的經驗，大約每十次就有一次，代理仍會自行部署。不是出於惡意，也不是因為沒讀到規則。它讀了。只是眼前有一個目標，而規則只是文字，和上下文其他內容一樣。

OpenAI 實驗室發生的正是同一件事，只是規模更大。模型身處封閉環境，只有一條出口，卻花了相當多的運算資源搜尋出口。測試任務仍未解決。

我的立場很簡單：代理既不危險，也沒有惡意。它很普通，只是個握有權限的笨蛋。因此你該限制它的權限，而不是重寫你的要求。

真正有效的做法包括：對正式環境資料採取嚴格唯讀存取；禁止刪除整個目錄；禁止執行無法復原的歷史改寫命令；在服務提供者那裡設定支出上限。差別就在一句話：「實際上做不到」勝過「我叫它不要做」。具體設定另有文章說明：[用機械式煞車取代指示中的請求](https://ailoot.ai/blog/zh-hant-tw/claude-code-safe-overnight-setup/)。

不過，仍要保持冷靜。沙箱也不是絕對邊界，服務提供者說得很明白。

<figure>
<blockquote>
<p>沙箱可以降低風險，但不是完整的隔離邊界。在將它視為強大的安全機制並依賴它之前，請先閱讀下方的限制。</p>
</blockquote>
<figcaption>— Claude Code 文件，https://code.claude.com/docs/en/sandboxing</figcaption>
</figure>

此外，Claude Code 內建了一個模型本身可以使用的緊急出口。當命令因沙箱限制而失敗時，Claude 會分析失敗原因，並可能加上停用沙箱的參數重試同一個命令。這可以透過明確的嚴格模式設定關閉；預設情況下，這個替代方式可以使用，而且有文件記載。

限制只有在你把它收緊到什麼程度時才有效。每道障礙都會帶來速度成本，值得事先誠實估算，因為一週後才發現，代價會更高。

## 如何設定無法被操弄的完成條件？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

好的條件會以機械方式產生結果本身，而且無法只靠文字滿足。差的條件會要求代理評估自己的工作。測試措辭的一個簡單問題是：代理能不能什麼都不做就符合這項條件？Anthropic 說明了四個嚴謹程度，你可以隨著錯誤成本增加而逐步提高。

</div>

條件的措辭決定了其他一切。用一個問題檢驗它：**代理能不能什麼都不做就符合這項條件？**

- 「檢查一切是否正常」——可以。只要寫「已檢查，一切正常」就夠了。
- 「執行建置並把輸出給我看」——難度高一些；它必須設法取得輸出。
- 「啟動應用程式，按一下結帳按鈕，並展示畫面上出現的內容」——幾乎不可能只靠文字滿足。

第一種和第三種的差異，就是報告與證據的差異。

Claude Code 文件說明了四個嚴謹程度。錯誤成本越高，就越適合往上提升：

1. **在單一訊息中。** 要求代理執行檢查，並在這裡反覆嘗試直到成功。成本最低，適合小事。
2. **在整個工作階段中。** 把檢查設為目標條件：另一個評估器在每一回合後檢查，代理則持續工作直到符合條件。技術細節請參閱[預先設定完成條件](https://ailoot.ai/blog/zh-hant-tw/goal-mode-claude-code-codex/)的指南。
3. **機械性障礙。** 當代理試圖結束回合時，執行一個腳本，並在檢查通過前阻止它結束。有一個必須坦白說明的細節：連續遭阻擋 8 次後，Claude Code 會覆寫這道障礙，照樣結束回合。系統中沒有絕對無法突破的障礙。
4. **第二種意見。** 由擁有全新上下文的獨立審查者負責推翻結果。

第四項與其他項目不同，因為它是唯一一項不在談工具的做法。

## 誰該驗收代理的工作？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

任何人都可以驗收，但不該由工作作者本人驗收。這項規則對人和代理同樣適用：作者會最晚才看見自己工作中的漏洞，因為他們會用創作時採用的同一套邏輯看待作品。交給審查者的任務措辭，比審查者使用的模型更重要。

</div>

我讓代理以迴圈方式處理大型任務時，會這樣安排：一組人負責撰寫；另一組全新的人負責驗收，而且沒有參與撰寫。

「全新」是關鍵字。它代表乾淨的上下文，沒有看過過程中每個決策是如何做出的。在同一個工作階段改用另一個提示詞並不算。寫程式碼的人已經投入心力說服自己這樣做是對的，接下來還會繼續尋找支持自己觀點的證據。反證並不符合他們的利益。

交給審查者的任務措辭，比審查者使用的模型更重要。比較看看：

- 「審查這項工作」——審查者會找出容易發現的問題，然後寫「整體來說沒有問題」。
- 「試著證明這項工作**沒有**完成」——審查者會開始找漏洞，因為這就是他們的目標。

第二種措辭效果較好，原因與 ExploitGym 失敗的原因相同：代理會專注於被指定的目標。給它尋找漏洞的目標，它就會尋找漏洞。

以下是可直接複製的完整措辭：

<div class="section" data-semantic="prompt" aria-label="提示詞">

提示詞：給審查者的任務——推翻結果

```
你正在審查別人的工作。你沒有撰寫這份工作，也不必替它辯護。

你的目標是證明所宣稱的結果並未達成。請找出至少三種可能性：即使所有檢查都是綠色，結果仍可能沒有達成。

依照以下順序檢查：

有哪些工作在檢查範圍之外執行——背景程序、獨立腳本、排程工作、佇列處理器。

誰會呼叫每個新增的函式。搜尋專案找到呼叫處，並指出檔案和行號。

反向情況：退款、封鎖、撤銷存取權、到期、刪除資料來源。

結果內部的值，而不只是結果是否存在。

如果經過認真搜尋仍找不到漏洞，請明確說明，但要精確列出你檢查了什麼，以及如何檢查。
```

</div>

[代理在迴圈中自我檢查時](https://ailoot.ai/blog/zh-hant-tw/claude-code-loop-engineering/)這篇文章，說明代理在各次反覆之間自我檢查的迴圈如何運作，以及它通常在哪裡失敗。

## 改寫條件會帶來什麼變化？

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

改變的是哪些類型的缺陷會浮現。「做程式碼審查」會讓代理從程式碼內部進行推理。「從第一次造訪一路走過客戶流程，直到退款」則會找出程式碼審查原理上無法發現的問題，因為這類缺陷在程式碼中本身是有效的。

</div>

這是我知道成本最低的改善方法，卻幾乎沒有人這麼做。

請代理進行程式碼審查，它就會從程式碼的角度推理：結構、錯誤處理、重試、脆弱區域。這很有用。

請它走一遍客戶旅程，從第一次造訪網站到嘗試退款，就會浮現不同類型的問題。錯誤可能向使用者顯示了不該看到的內容。電子郵件文字可能與實際發生的事不符。如果不是按照理想情境進入，某個步驟可能根本無法在邏輯上完成。

程式碼審查找不到任何一種這類缺陷，因為它們在程式碼中都有效。

由此得出一條我會隨手使用的規則：<strong>如果檢查什麼都沒找到，先改寫措辭。</strong>通常問題不在模型。同一份工作用三種不同方式提問，會產生三份不同的發現清單。給非程式設計者使用的實用問題，另整理在[不需程式設計技能的 7 項程式碼檢查](https://ailoot.ai/blog/zh-hant-tw/check-ai-generated-code/)。

## 用來驗收代理工作的現成提示詞

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

以下提示詞會把驗收從「你做了嗎？」轉成「給我看」。它禁止在沒有命令輸出的情況下使用「已檢查」，要求明確指出任何未檢查的項目，最後再問有哪些工作在檢查範圍外執行。代理回報已準備就緒後，把它貼在任務最後。

</div>

<div class="section" data-semantic="prompt" aria-label="提示詞">

提示詞：驗收代理的工作

```
不要回答「完成了」或「已檢查」。我需要證據。

每項工作都必須提供以下資訊，而且只能提供這些：

你執行了什麼命令來確認項目正常運作？請附上命令本身及完整輸出，不要縮短。

如果你沒有執行命令，請說：「未執行。」不要用「已目視檢查」或「邏輯正確」取代。

有哪些工作在檢查範圍之外執行？列出背景程序、獨立腳本、排程工作、佇列處理器等，任何啟動方式與主要應用程式不同的項目。每個項目都請說明是否另外執行，以及輸出是什麼。

誰會呼叫你新增的每個函式？搜尋專案找到呼叫處，並指出檔案和行號。如果沒有呼叫處，請直接說明。

接著另設一個章節：列出三種可能性，說明即使所有檢查都是綠色，宣稱的結果仍可能沒有達成。請認真搜尋。

最後用一行說明：有哪些事情是自動檢查無法發現、需要我親眼檢查的？
```

</div>

第四項看起來很小，卻能抓出一整類問題。在我按負責領域把工作分配給代理的一項大型任務中，整整一百件工作裡唯一一次錯誤的「完成」，就發生在兩個領域的銜接處：程式碼寫好了、檢查是綠色的，卻沒有人想到要把它顯示在畫面上。

## 用檢查結果自欺的四種方式

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

檢查出錯不只是在完全沒有檢查時。更常見的是，檢查存在、看似可信，卻毫無保障。作者描述了四種自欺方式：沒有等所有審查者回覆；相信摘要；沒有親眼查看；檢查是否存在，而不是檢查值是否正確。這四件事都讓作者付出了時間代價。

</div>

1. <strong>沒有等所有審查者回覆。</strong>我同時啟動三項檢查，兩項回報綠色後就部署了。第三項在 4 分鐘後才送回 6 項違規。等待 2 分鐘的成本，比發布後再修正低得多。
2. <strong>相信「已處理 N 項，共 N 項」的摘要。</strong>大量分派工作時，有些代理會悄悄失敗：它們回報成功，但檔案根本沒改。現在，只要透過代理寫入，我就會用機械方式確認變更確實寫入磁碟。
3. <strong>沒有親眼查看。</strong>自動檢查即使面對完全無法使用的結果，也可能顯示綠色。圖片在技術上正確、尺寸正確、回應代碼也正確，但實際上只是自動產生的靜態畫面，取代了原本應有的插畫封面。沒有自動檢查能發現這件事。
4. <strong>檢查是否存在，而不是檢查值是否正確。</strong>檢查在結果中搜尋指定文字；文字確實存在，但裡面的資料是錯的：日期差了一天。檢查是綠色，報告卻是謊言。現在我會確認整個預期值，因為只要正確的詞出現，本身完全不能保證任何事。

這四件事的共通點是：有檢查，檢查看起來也很可信，但檢查的是錯的東西。這和模型及其測試所用的機制相同，只是沒有任何創造性。

## 今天可以從哪裡開始

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="重點摘要">

重點摘要

拿出最近一項代理用「完成」結案的任務，用本文的驗收提示詞檢查。接著為自己訂一條規則：沒有命令輸出的「已檢查」不算結案。下一項任務則把撰寫者和驗收者分開。

</div>

花 20 分鐘做三件事。

1. <strong>拿出最近一次「完成」。</strong>用證據章節中的驗收提示詞檢查。目標很簡單：看看有多少項目只靠文字結案，又有多少項目附上命令輸出。
2. <strong>為自己訂一條規則。</strong>沒有附上命令輸出的「已檢查」不算結案。這條規則是給你自己用的，不是給代理用的，所以才有效。
3. <strong>把工作者和審查者分開。</strong>下一項任務交給新的工作階段使用審查者提示詞，並要求它證明工作沒有完成。第一次就通常足以讓你覺得養成這個習慣很值得。

這項工具很好，而且每個月都在進步：代理一年前還會默默做的事，現在會讓它停下來。安全邊界會不斷移動，但始終都是邊界。只要代理仍追求你給它的目標，「那你究竟是怎麼衡量的？」這個問題就仍由你來問。檢查的習慣就是你的安全網。

<div class="section" role="doc-bibliography" aria-label="來源">

### 來源

- [OpenAI：模型評估安全事件聲明，21.07.2026](https://openai.com/index/hugging-face-model-evaluation-security-incident/)
- [Hugging Face：安全事件公開說明，2026 年 7 月](https://huggingface.co/blog/security-incident-july-2026)
- [Anthropic：從獎勵駭取到破壞，獎勵駭取造成的突發不一致](https://www.anthropic.com/research/emergent-misalignment-reward-hacking)
- [OpenAI：偵測前沿推理模型的不當行為](https://openai.com/index/chain-of-thought-monitoring/)
- [DeepMind：規格操弄，AI 創造力的另一面](https://deepmind.google/discover/blog/specification-gaming-the-flip-side-of-ai-ingenuity/)
- [Cursor：獎勵駭取侵蝕程式碼基準測試的進步](https://cursor.com/blog/reward-hacking-coding-benchmarks)
- [Claude Code 文件：讓 Claude 能檢查自己的工作](https://code.claude.com/docs/en/best-practices)
- [Claude Code 文件：沙箱及其限制](https://code.claude.com/docs/en/sandboxing)
- [Claude Code 文件：權限模式](https://code.claude.com/docs/en/permission-modes)
- [Claude Code 變更記錄](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md)

</div>



<div class="aside" data-semantic="ailoot-link" role="note" aria-label="Ailoot">

繼續在 [Ailoot](https://ailoot.ai/) 上使用 AI 工作。

</div>

## 常見問題：為什麼 AI 代理會在工作尚未完成時說「完成了」

### 代理說完成時，該要求什麼證據？

要求指令、輸出、結束狀態，以及它真正檢查的使用者成果，並列出未測情境。代理聲稱自我審查，不是完成證據。

### 在同一對話換個審查提示，就有獨立檢查嗎？

沒有。本文建議使用未寫過方案的全新審查上下文，提供預期成果與實際檔案，要求找具體失敗，不是確認原工作者結論。


## Ailoot · 公司及其專案組合

Ailoot以累積的營運經驗、廣大的客戶群、穩定的服務及持續的KPI管理為基礎。

公司及其專案組合：數百萬客戶，每月銷售額達數十億。

Ailoot將這些營運經驗用於API存取，讓客戶的產品、代理、應用程式及自動化流程使用AI功能。
