# 《AI代理與自動化工作流》教師核對範例

課程先從Codex入門開始：開啟教師準備的資料夾，讀材料、逐步完成一次情報整理，開啟報告並回顧剛做的步驟。第1週不先定義Skill、不寫範本，也不觸發Skill；交首次報告與操作步驟。第2週再從這些步驟發現可封裝的方法，認識Skill、判斷何時值得建、看使用好處，建立第一份情報Skill後換輸入驗收。

三種工作方法代理（咖啡店練習）、三份必要Skill與選做開發驗收｜第一版

**本書全部為模擬教材的預期核對例，沒有實際執行Codex、安裝Skill、寄信、辦活動、部署或驗證獲利。** 學生必須保存自己的原始輸入、Skill版本、實際輸出、核對及狀態。教師答案不能填入學生實際結果欄。自由文字來源應由學生讀取；以下規範化表格是教師核對輸出，不可直接當代理輸入冒稱已完成抽取。

下載範本與本文標籤為research-SKILL、operations-SKILL、analysis-SKILL、build-tool-SKILL。學生實作母本在專案 `.agents/skills/`下的cafe-research、cafe-registration、cafe-analysis、cafe-build-tool各自 `SKILL.md`；metadata name相同。驗收學生三份必要業務Skill是否自建、明確使用與跨批測試；開發驗收Skill選做，不用範本下載或網站示範代替。

官方路徑與metadata來源：[OpenAI Build skills](https://learn.chatgpt.com/docs/build-skills)。本文方法與預期不是官方保證的執行結果。

## 一、情報材料與版本核對

第1週首次Codex任務直接讀材料、完成報告，交報告與操作步驟，不建立或觸發Skill。第2週回顧步驟後才建立第一份情報Skill，以下方法範例供第2週對照。

回顧第1週的「讀材料→分清事實與推論→附來源→核對→保存報告」後，才介紹以下方法。第2週首次建立情報Skill，不把建立當作第1週的前置要求。

Skill是可按需呼叫、可重複使用的方法包，可含說明、範本、參考資料與選用腳本。相同類型工作反覆發生，且有穩定判斷、品質或格式要求時，才值得建立；一次性簡單任務可直接提示，固定算式用試算表即可。好處是省去每次重講、換輸入仍保留同流程與格式，把經驗留下來測試與改善；不保證永遠正確。第2週先比較「每次重講」的兩份提示範例，再判斷值得建的方法，改短範本，最後換輸入驗收。

Skill是可重複、可帶入不同條件的工作方法。建立階段才改方法範本；使用階段只提供本次任務條件、材料位置與批次，方法母本不改。咖啡店只是練習資料，情報追蹤、報名處理、單品分析三份Skill可在相同工作方法下換產業、活動與品項：換輸入和政策，不改母本。這不代表能把同一Skill拿去解不同工作方法的問題。cafe-*是本課既有資料夾名稱，名稱不鎖定咖啡商品。

初學者先用教師備妥的完整短範本，不從空白起手。核心方法只留五段：用途、材料、步驟、成果、缺料回報。建立時學生先把方法範本說清楚，再請Codex協助建檔；之後使用只給本次條件、材料位置與批次，能用自己的話說明方法即可；不需懂程式、手打命令或自寫複雜schema。資料夾、Skill安裝、CLI與前端連接由教師課前準備。每份業務Skill用兩週逐步練熟，先求好用再談完整治理。第3站在建立週改範本、使用週只備本次輸入；第4站一次完整呼叫可包含助建檔及業務執行。

學生必做驗收只有兩項：固定同一Skill，換一批新的完整資訊；再試一個缺漏或衝突案例。比較步驟、來源引用、成果格式與品質是否一致，缺料是否誠實回報。SHA、複雜狀態／版本、整批故障、防重複事件與完整回歸測試由教師示範或選做，不作初學者必修門檻。

課堂每週一次必要呼叫是為了控制額度；Skill建立後，同一方法長期接續新資料與既有狀態，不每批重建。Skill要讓Codex在「同樣場景、不同資訊」維持一致步驟、引用依據、輸出結構、品質與停止條件。三份必要業務Skill是情報追蹤、報名處理與單品分析；開發／回歸驗收Skill選做。第一次做介面是一項單次Codex開發任務，可直接指定已核對規格，不必先建開發Skill。

重複使用核對：先建立一次方法母本，記錄版本；第二次換新資料並讀既有state，產生新報告版本；第三次由教師示範重跑相同批次（學生選做），不能新增重複、清掉待辦或漏掉補件。固定母本後再測新批、缺漏與來源衝突，逐項比一致步驟、引用、輸出欄位與停止條件。來源id、活動容量與數字答案是輸入，不寫死在Skill；例如12席與35元要從該批policy及成本材料讀取。只有必做測試失敗或方法不全才修Skill；學生重看原案與新案，完整回歸由教師示範，不因換批次重建。weekN檔名只為教學辨識；長期保存run-id、輸入／報告版本、Skill版本與接續state。



| 來源 | 模擬材料內容 | 能支持 | 不能支持 |
|---|---|---|---|
| A1 | 9/21、9/22、9/23三次12:10–12:25看到櫃檯排隊；沒有人數、等待分鐘或完整訂單。 | 指定三日時段看到排隊。 | 每日全天、平均10分鐘、確定人力不足。 |
| B1 | 店門口便利抽樣8位願意受訪同學，5願試預訂、3暫無需求；無科系年級。 | 這8人的意向。 | 全校需求比例、實際交易。 |
| C1 | 甲美式50、乙美式55，缺規格、採集日期、網址，虛構。 | 忠實抄錄表列值、算差5元。 | 同規格現價比較或採購推薦。 |
| D1 | 給課堂同學的一頁探索提案，問是否值得午間預訂；沒有成本、銷售額或滿意度。 | 讀者、格式與探索需求。 | 獲利提升、試辦已成功。 |
| A2 | 追加9/24、9/25兩次午間觀察，仍沒有分鐘、人數。 | 原三次加兩次的材料更新關係。 | 平均等待、全時段結論。 |
| B2 | 另批獨立便利樣本6人，2願試、4無需求，無交易。 | 第二批樣本意向。 | 與B1直接合併估全校，或需求下降。 |
| E1 | 模擬CAFE-01活動，2026-10-23 14:00、容量12、每人最多5席，未開真實報名。 | 本課營運活動規則。 | 真實活動已公開、已有顧客報名。 |

### F/G/H自由文字完整判讀

F v1（9/23）原句：「有人說午餐時間要等十分鐘，可是我們沒記過時間。」同段說一人顧櫃檯又出餐、怕預訂更亂。十分鐘是傳聞，不能蓋過A未量測；人力與流程須補查，不能斷定原因或預訂一定快。

G v1（9/24）原句：「群組早先講可能十六席。那個數字只是討論，還沒定。我們先等正式公告。」第一週待公告；第二週E1提供12後採正式公告，保留G16差異。依據是來源角色與明確狀態，不只是較新日期。

H v1（未提供採集日期）原句：「甲店美式50元起，需看杯型；乙店55元活動價，搭配套餐。」沒有可開原頁及同規格表。起價、杯型、套餐與促銷日不同，不能只挑50判便宜；要求原頁、日期、規格與優惠條件。

F/G/H另記來源版本清單，不改A/B/C/D已讀基準。以上為模擬原文判讀，沒有實際量測、比價或代理查證結果。

### 第一週四欄摘要預期

| 事實 | 來源 | 推論 | 待確認 |
|---|---|---|---|
| 三次指定午間看到排隊，未量測等待。 | A1 | 取餐安排可能值得改善，原因未辨識。 | 等待、訂單量、付款與出餐步驟。 |
| 8人中5願試、3暫無需求，便利抽樣。 | B1 | 部分受訪者願意探索另一種取餐方式。 | 實際使用、代表性需求。 |
| 虛構50／55，缺規格日期來源。 | C1 | 可用於學查核格式。 | 同規格與當期來源。 |
| 交一頁探索提案，無營運效果資料。 | D1 | 可先設計收資料的試辦。 | 成本、營收、滿意度。 |

原句「平均等10分鐘、全校62.5%會買」應修為「三次午間看到排隊，分鐘待確認；8位便利抽樣受訪者中5願試，不能代表全校或交易」。修句依據A1與B1，不編造來源。

每週情報週報沿用同一母本接續新來源；換批、缺漏與衝突仍按相同引用與輸出欄位驗收。

### 第二週更新摘要預期

A2保留原三次與追加兩次，仍未量測分鐘；B1為5／8、B2為2／6，兩批分列且都有便利抽樣與意向限制。E1交營運活動id、日期時間、12席、每人上限5與模擬界限。C1與D1未變更，限制保留。新增或改版共A2/B2/E1三項，同批重跑新增0，不能產生重複通知。

### 已讀狀態的示例表示法

下列JSON是教學用預期結構，日期2026-10-14是示例日期，不是代理實際讀取證據；實作使用真實操作日期與自己的格式。保留歷史，不只存最新版本。

```json
{
  "simulation": true,
  "history": [
    {"source_id":"A","version":1,"read_date":"2026-10-14","limit":"三次午間，沒有等待分鐘"},
    {"source_id":"B","version":1,"read_date":"2026-10-14","limit":"8人便利抽樣，意向非交易"},
    {"source_id":"C","version":1,"read_date":"2026-10-14","limit":"虛構報價，缺規格日期網址"},
    {"source_id":"D","version":1,"read_date":"2026-10-14","limit":"無成本營收，不估獲利"},
    {"source_id":"A","version":2,"read_date":"2026-10-14","limit":"追加兩次，仍無分鐘人數"},
    {"source_id":"B","version":2,"read_date":"2026-10-14","limit":"獨立6人便利樣本，不直接合併"},
    {"source_id":"E","version":1,"read_date":"2026-10-14","limit":"模擬活動，不開真實報名"}
  ],
  "latest_versions":{"A":2,"B":2,"C":1,"D":1,"E":1},
  "supporting_sources":[
    {"source_id":"F","version":1,"read_date":"2026-10-14","limit":"十分鐘傳聞未量測"},
    {"source_id":"G","version":1,"read_date":"2026-10-14","limit":"16席草案未定；正式E為12"},
    {"source_id":"H","version":1,"read_date":"2026-10-14","limit":"價格條件不同，無原頁日期"}
  ],
  "first_update_count":3,
  "same_batch_second_update_count":0
}
```

### 第2週第一份情報短Skill核對例

學生依完整短範本修改並由Codex協助建檔方法，再對照此例。正式Skill資料夾名稱與metadata name須一致，課堂明確指定使用並看實際輸出。

```markdown
---
name: cafe-research
description: 追蹤情報並整理新材料與變更；不同來源與產業沿用同一核對方法。
---
## 用途
追蹤情報並整理新材料與變更；不同來源與產業沿用同一核對方法。
## 材料
本次任務條件、原始材料位置、來源版本、先前報告及狀態，由使用者指定。
## 步驟
讀本次原文與舊狀態；分事實、可能解釋與待確認；每項附來源；衝突列雙方不任選；只處理新資訊。
## 成果
沿用既定報告欄位（初次由使用者指定）整理摘要、變更與待確認；接續既有狀態，不清掉舊待辦。
## 缺料回報
缺來源或支持不足就指出缺什麼，請人確認，不補數字；先顯示給人核對。
```

測試預期：完整A–D有四列與限制；新版三項處理；同批新增0；缺必要來源停止；同一事實若兩來源不同，列雙方與位置。沒有實際輸出時，測試狀態尚未執行。

## 二、營運原信的規範化核對摘要

以下是來源摘要，不是逐字原信。學生須讀 `operations-emails.md`自由文字與policy，從原文抽取並附引用，不能只處理這張已整理表。

### policy P01–P08核對

P01日期時間採E1。P02容量12、單筆1–5整數，整團容納不了就候補，不拆團／加名額。P03活動＋正規化email去重，完整才占位，同id重跑不處理。P04明確修改且對得上舊報名才更新，先扣自己的舊席數再驗容量；語意、活動或數字未定都補問。P05費用、發票、改期、退款、雨天、地點未提供，換人也無條款，不編答案。P06逐欄及處置附id、原句、條款，不猜email。P07草稿核准綁內容版本，修改失效，僅本機產出，沒有寄信權限。P08狀態／表／草稿／核准分存，單筆不足停筆，表頭或讀寫錯停整批、不覆寫；未執行不記成功。

### 原句與處置核對

| 訊息 | 支持原句 | 抽取與處置 | policy／人工待辦 |
|---|---|---|---|
| M001 | 「原本小組三位，但小詹…不能來，所以是我和阿庭參加…CAFE-01」 | 當前2人，不抓最先3；email從原信聯絡欄。 | P02/P06；費用發票P05未答。 |
| M002 | 「最後幾位還沒確定…希望不要誤算兩位」 | 席數未知，不填2，不占位，補問。 | P03/P04/P06。 |
| M003 | 「我和室友參加，共兩位」 | 新報名2。 | P02/P06；雨天P05未答。 |
| M004 | 「我和阿庭仍是兩位…不是新增一組」 | 同key同意圖，重複不新增。 | P03，回溯M001。 |
| M005 | 「接續…兩位報名…總共三位…更新原本那筆」 | 同列2→3，舊草稿／核准失效。 | P04/P07；換人未答。 |
| M006 | 「一位。請通知我結果」但email未提供 | 已知1仍缺聯絡，停筆不猜。 | P06/P08。 |
| M007 | 「看了好幾張活動海報…報五位」 | 已知5但活動不明，不默認CAFE-01。 | P04/P06。 |
| M008 | 「接續…未確定席數…我與兩位同學…共三位」 | 陳補齊3，總8。 | P03/P04；費用P05未答。 |
| M009 | 「五位一起…不夠五個位子就整組候補，不要拆開」 | 超容量整團候補，不改4。 | P02，8＋5>12。 |
| M010 | 「可能三位，也可能四位，還沒確定…先別多留」 | 保留原3與待確認，不選一值。 | P04/P06，回溯M005。 |

表中原句節錄供核對，不能取代完整自由文字輸入。

| 訊息 | 姓名／聯絡 | 活動／席數／意圖 | 預期動作 |
|---|---|---|---|
| M001 | 林同學 lin@example.invalid | CAFE-01，2席，新報名。 | 建林key，2席。 |
| M002 | 陳同學 chen@example.invalid | CAFE-01，缺席數。 | 待補件，不占位，補問。 |
| M003 | 吳同學 wu@example.invalid | CAFE-01，2席，新報名。 | 建吳key，2席。 |
| M004 | 林同學，同email | 同活動再報2席。 | 同key同值重複，不新增。 |
| M005 | 吳同學，同email | 明確修改為3席。 | 同列更新2→3，舊草稿失效。 |
| M006 | 葉同學，沒有email | CAFE-01，1席。 | 缺聯絡停止此筆，不猜email、不占位。 |
| M007 | 許同學 hsu@example.invalid | 沒活動id，5席。 | 待確認活動，不占位。 |
| M008 | 陳同學，同email | 補3席，CAFE-01。 | 完整後建立陳3，總8。 |
| M009 | 蘇同學 su@example.invalid | CAFE-01，5席。 | 總8＋5>12，候補不占位，仍8。 |
| M010 | 吳同學，同email | CAFE-01，席數三或四位未定。 | 尚未確定修改，保留原吳3與待確認。 |

key為 `event_id + '|' + email.trim().toLowerCase()`。同key不同明確席數是更新；語意不明要待核對。缺活動時不可因課堂只有一場就自行補CAFE-01。所有地址為模擬，不真實投遞。

### 七封後的有效報名表範例

status在本例以可讀中文表示，實際工具格式以自己的規格為準；有效報名與回信核准是不同狀態。

```csv
registration_key,event_id,email,name,seats,status,last_message_id
CAFE-01|lin@example.invalid,CAFE-01,lin@example.invalid,林同學,2,有效待回信核准,M001
CAFE-01|wu@example.invalid,CAFE-01,wu@example.invalid,吳同學,3,有效待回信核准,M005
```

合計5。M004不改變林的版本或last_message_id；M005更新吳且保留歷史。M002/M006/M007在處理狀態與缺漏清單，不擅自填進有效表。

### 十封後的有效表範例

```csv
registration_key,event_id,email,name,seats,status,last_message_id
CAFE-01|lin@example.invalid,CAFE-01,lin@example.invalid,林同學,2,有效待回信核准,M001
CAFE-01|wu@example.invalid,CAFE-01,wu@example.invalid,吳同學,3,有效待回信核准,M005
CAFE-01|chen@example.invalid,CAFE-01,chen@example.invalid,陳同學,3,有效待回信核准,M008
```

合計8。候補蘇5另列，不能算13或改蘇4；M010未確定修改，不覆寫吳或last_message_id。三封重讀無新增，待確認訊息也保存處理狀態，不重複生成草稿。

### 訊息狀態與版本預期

| 訊息 | 處理狀態 | 現有報名影響 |
|---|---|---|
| M001 | 已建立 | 林版本1，2席。 |
| M002 | 待補件；M008補齊後保留已解決關聯。 | 當時不占位。 |
| M003 | 已建立；後被M005更新。 | 吳舊版本1，2席。 |
| M004 | 已識別重複 | 林仍版本1。 |
| M005 | 已更新 | 吳版本2，3席，舊草稿失效。 |
| M006 | 缺聯絡停止 | 不創建猜測地址。 |
| M007 | 待確認活動 | 不建立不明活動key。 |
| M008 | 已補件並建立 | 陳版本1，3席。 |
| M009 | 超容量候補 | 不占有效名額。 |
| M010 | 待確認修改；原信尚未決定。 | 吳版本2仍3席，沒有確定新值。 |

### 草稿文字完整範例

林確認草稿：收件地址lin@example.invalid；活動CAFE-01；key為CAFE-01|lin@example.invalid；版本1。「林同學您好，您的模擬報名資料為2席，活動時間2026-10-23 14:00。這是課堂回信草稿，尚未送出。請教師核對活動與席數後再模擬核准。」

陳補問草稿（M002）：收件地址chen@example.invalid；已知CAFE-01，席數缺漏。「陳同學您好，已收到您對CAFE-01的模擬報名需求，請回覆要報名幾席，限1–5席整數。資料尚未完整，目前不占位。本草稿未送出。」M008補3後，舊補問草稿不再適用，保留歷史但不能繼續核准送出。

吳更新確認草稿（M005）：收件地址wu@example.invalid；key為CAFE-01|wu@example.invalid；版本2。「吳同學您好，依本次明確修改，模擬報名已由2席更新為3席，同一筆紀錄不另新增。活動時間2026-10-23 14:00。這是尚未送出的版本2草稿，舊2席版本不再適用。」

葉缺聯絡：內部停止紀錄「M006缺email，停止此筆，請從原材料補聯絡資料；未產可投遞回信，不猜地址，不占位」。不得把此內部記錄標成送給葉的信。

許活動確認草稿（M007）：收件地址hsu@example.invalid；活動未提供。「許同學您好，信中已有5席需求，請確認要報名的活動編號。活動尚未確認，目前不占位；本草稿未送出。」不重複詢問已提供席數，也不默認CAFE-01。

陳補齊確認草稿（M008）：「陳同學您好，CAFE-01的模擬報名資料已補齊為3席。這是待核對的確認草稿，尚未送出。」需重新綁當前內容版本，不能沿用補件草稿的核准。

蘇候補草稿（M009）：「蘇同學您好，本次5席需求會使有效總席數超過12，因此先列候補，不占有效名額。不能保證名額，若有變動再由人核對。本草稿尚未送出。」

吳修改確認（M010）：「吳同學您好，您說可能三或四位尚未確定。我們記下待確認，原3席保留，不多留；確定修改時再回覆人數。本草稿未送出。」不把未定語意當確定3或4。

所有草稿另列林費用／發票、吳雨天與換人、陳M008費用待辦。可寫政策未提供、交人工確認，不能承諾免費、能開發票、下雨照辦、一定可換人或補場。原信詢問不等於改政策授權。

### 營運短 Skill完整核對例

```markdown
---
name: cafe-registration
description: 依公告與政策處理報名、修改及補件；不同活動沿用同一報名方法。
---
## 用途
依公告與政策處理報名、修改及補件；不同活動沿用同一報名方法。
## 材料
本次任務條件、活動公告與policy位置、原信批次及既有報名／待辦，由使用者指定。
## 步驟
讀懂報名或修改意圖；每欄附原句與policy；從當批公告讀活動、席數及容量，不寫死活動id；保留既有表，不確定不覆蓋。
## 成果
沿用既定欄位（初次由使用者指定）交報名表、需補問草稿與人工待辦；不重複占位，回信等人核對，不實際寄送。
## 缺料回報
缺email或活動等資訊就回報；政策未答不編，先保留原紀錄與待確認。
```

每批信件與補件接續既有state；待政策問題不能因下一批到來消失，未定更新不能覆蓋既有效報名。

## 三、權限、核准與失敗測試（教師進階示範／選做）

### 核准版本的模擬例

假設在M003後人核准吳版本1，再接M005更新為3。舊核准不可用於版本2。下表是狀態演算例，非實際核准紀錄。

```csv
draft_id,registration_key,record_version,decision,note
CAFE-01|wu@example.invalid:v1,CAFE-01|wu@example.invalid,1,失效,M005改為3席使舊內容核准失效
CAFE-01|wu@example.invalid:v2,CAFE-01|wu@example.invalid,2,待核准,須人回查M005及policy
```

模擬後續預期：人明確核准版本2才可標模擬送出；標送出一次後再點，事件仍一筆。若改內容產生版本3，版本2核准也不能沿用。真實信件發送本課沒有做。

| 測試 | 執行前預期 | 要看的實際證據 |
|---|---|---|
| 完整七封 | 有效林2＋吳3=5，缺漏與重複另記。 | 原信引用、CSV、訊息狀態、草稿版本。 |
| M008補件 | 陳3加入，總8。 | 陳來源與當前記錄。 |
| M009超容量 | 候補5不占位，仍8。 | 有效表與候補清單分開。 |
| M010未確定修改 | 保留原3，待確認，不選3或4。 | 原句、P04與前後表。 |
| 同id重讀 | 不再次處理。 | 訊息狀態、表與草稿數量不變。 |
| 新id同key同值 | 重複不新增。 | key與有效席數不變。 |
| 明確修改 | 更新同列，舊核准失效。 | record_version與approval-log。 |
| 曖昧修改 | 待核對，不任選。 | 待確認事項及原表保留。 |
| 缺必需CSV欄位 | 停整批，不覆寫。 | 報錯與原表讀回一致。 |
| 模擬送出再點 | 同版本不新增事件。 | 模擬事件id與數量。 |

以上全部尚未執行。學生每項另記真實輸出、判定與修訂。核准紀錄缺失時保持等待，不能把工具複述規則當作人工核准。

## 四、模擬財務與完整手算

每月新報價、成本說明、brief及CSV沿用分析Skill跨文件核對；缺漏與衝突不降品質。方法母本不寫35、172等測試答案。

### 原案和更新的資料

店長brief問單杯與單品損平，也要中文介面、Skill、狀態、實際產物及人先看草稿。成本原句：美式豆16＋杯材5＋其他4=25、售價60；拿鐵豆20＋奶15＋杯材5=40、售價80；租5000＋折舊1000=6000共享。先引用原文整理CSV與decision-summary，再核算，不只抄整理表。

```csv
product,price,variable_cost,fixed_cost
美式咖啡,60,25,6000
拿鐵,80,40,6000
```

```csv
product,price,variable_cost,fixed_cost
美式咖啡,65,29,7200
拿鐵,85,43,7200
```

前表是cafe-finance.csv，後表是更新案。NTD，price與variable_cost每杯；fixed_cost每月共享。兩列固定金額不能加總。以上為分析假設，非實店成本，不用於證明情報D的真實獲利。

| 情境／品項 | 每杯毛利 | 毛利率 | 向上取整損平 | 前一杯／損平杯數的損益 |
|---|---|---|---|---|
| 原美式60/25/6000 | 60−25=35 | 35/60=58.3333% | ceil(6000/35)=172 | 171×35−6000=−15；172×35−6000=20。 |
| 原拿鐵80/40/6000 | 80−40=40 | 40/80=50% | ceil(6000/40)=150 | 149×40−6000=−40；150×40−6000=0。 |
| 更新美式65/29/7200 | 65−29=36 | 36/65=55.3846% | ceil(7200/36)=200 | 199×36−7200=−36；200×36−7200=0。 |
| 更新拿鐵85/43/7200 | 85−43=42 | 42/85=49.4118% | ceil(7200/42)=172 | 171×42−7200=−18；172×42−7200=24。 |

此表為單品情境預期，不是多品項組合，不是營運獲利觀察。每杯毛利為本課定義的售價−變動成本；正式報表須另核成本分類。

decision-summary範例：「原拿鐵每杯40比美式35多5；美式毛利率58.3333%高於50%。單品損平150／172不能相加成組合。更新42／36、固定7200、損平172／200。無銷售佔比或實際杯數，不能斷定整體更賺；更新無細項，不推定租或原料哪項漲，報名不當銷售。」本例為模擬預期。

錯誤CSV完整四列，空成本為故意缺料：

```csv
product,price,variable_cost,fixed_cost
缺成本,60,,6000
毛利為負,20,25,6000
負固定成本,60,25,-1
非數字售價,待確認,25,6000
```

### 清理與邊界預期（完整教師核對；學生選一例）

| 輸入情境 | 預期 | 禁止的處理 |
|---|---|---|
| 缺變動成本 | 指出欄位與來源列，停止該列計算，要求補料。 | 補0，算出高毛利。 |
| 成本大於售價 | 指出毛利≤0，無有效損平。 | 取絕對值、改成本或輸出負杯數。 |
| 月固定成本負數 | 非法範圍，報錯停止。 | 改成正數或0。 |
| 非數字 | 格式錯誤停止，不算有效結果。 | 猜數值、默認0。 |
| 售價0或負 | 非法售價，停止。 | 毛利率除0或負價。 |
| 毛利0 | 不具本模型可算的損平，停止。 | 輸出無限／0當正常。 |
| 固定0且毛利正 | 損平0，依模型沒有固定需回收。 | 一律判固定0非法。 |
| 有效decimal金額 | 可算，再對單位與範圍。 | 因金額有小數就擅自取整。 |
| 共享固定重複顯示 | 各單品用同一情境固定，不能加總。 | 用12000或14400。 |
| 混合品項銷售 | 需要另外寫組合假設，本課暫不算。 | 兩損平直接相加。 |
| 報名總8 | 只表示活動報名席數。 | 當8杯或計營收。 |

錯誤CSV四筆按原始素材列號回查。上表不給缺漏補具體數字，學生必須對實際原始材料引用。固定0的加測可輸入60、25、0，預期毛利35、毛利率58.3333%、損平0；毛利0加測60、60、6000，預期停止。

### 分析短 Skill完整核對例

```markdown
---
name: cafe-analysis
description: 按相同單品成本方法核對來源與試算；不同品項或產業只換資料。
---
## 用途
按相同單品成本方法核對來源與試算；不同品項或產業只換資料。
## 材料
本次分析問題、成本說明與CSV位置、單位、比較批次及先前報告，由使用者指定。
## 步驟
先對各文件與單位；共享固定不加兩次；每單位毛利為售價減變動成本，率除售價，損平向上取整；數字從本批材料讀。
## 成果
沿用既定欄位（初次由使用者指定）交有來源CSV、比較摘要與待確認；只說假設下的單品結果，不把報名當銷售。
## 缺料回報
缺值、來源衝突或毛利不正先指出原因，停止算有效損平，不補0或編細項。
```

## 五、小型工具開發與三必要Skill工作流

### 重複變更與回歸驗收 Skill完整核對例（選做）

```markdown
---
name: cafe-build-tool
description: 小型本機決策工具反覆變更或回歸驗收時使用；依已核對分析規格修改HTML與README並重測新舊情境。
---
# 本機決策工具重複變更與驗收
## 輸入
已核對analysis-SKILL、analysis-spec、CSV、公式與手算測試。
## 步驟
1. 確認分析規格已核對，不自行重訂公式或猜缺值。
2. 在既有本機decision-tool.html接續變更，保留舊版：改數、讀CSV、比較、檢核與錯誤提示。
3. 用固定函式驗證與算術，非法值不輸出有效損平，反覆匯入不累加舊列。
4. 不加資料庫、登入、大型後臺或外部服務，不部署。
5. 寫README的材料、操作、人工核對、預期、限制及實測位置。
6. 提供檔案後等待人開啟與換資料，未測功能標尚未驗證。
7. 保留錯誤、修訂與重測，回交三代理workflow。
## 驗收
本機可開、各情境結果與外部測試預期一致、錯誤與0邊界符合規格；同學照README新檔重跑。
## 停止與權限
缺確認規格停止；本課不真實寄信／公開報名／上線，不冒稱實店使用。
```

### 新資料與介面功能預期

| 測試 | 預期結果 |
|---|---|
| 開原案 | 美式35、58.3333%、172；拿鐵40、50%、150。 |
| 改美式65/29/7200 | 毛利36、55.3846%、200。 |
| 讀更新CSV | 更新美式200；拿鐵42、49.4118%、172；原值不殘留。 |
| 同更新檔重讀 | 列數與結果不累加。 |
| 四筆錯誤 | 分列原因，不補0、不當有效數值。 |
| 固定0加測 | 60/25/0得到35、58.3333%、0。 |
| 毛利0加測 | 60/60/6000停止，沒有有效損平。 |
| 同儕重跑 | 只照README讀新檔，結果與預期比；追問位置要修說明。 |

該表只有預期，沒有實際網頁執行。學生保存自己的HTML及實際測試。第一次介面可直接交Codex，反覆變更與回歸驗收Skill選做；網站lab匯出不算自己的Codex開發證據。

### 本機starter的驗收範例

教師先依local-codex-starter.zip準備Node、已登入CodexCLI及權限。學生在同一必要任務只改少量中文UI／任務設定，保留CLI連接，不增加DB、會員、付款、寄信或部署。預期：選Skill與任務，開始後可見進行／完成／失敗，完成後開實際產物；草稿由人核准特定版本。沒有CLI、登入、連接或額度時顯示不能執行，不假成功。decision-tool.html可另開。

驗收需真實一次CLI執行紀錄、實際檔案與內容讀回，不只按鈕動畫；失敗需要原因、保留舊檔與未完成狀態。這些是要求與預期，本書沒有實際測starter。

### workflow完整範例

| 步驟／Skill | 輸入 | 輸出 | 人的核對／權限 | 失敗返回 |
|---|---|---|---|---|
| 情報／cafe-research | 多來源、版本、已讀狀態、任務。 | 來源摘要、差異、活動公告與限制。 | 回查來源，核對衝突；不真實發布。 | 缺來源回準備，矛盾回查原文。 |
| 營運／cafe-registration | 公告、policy、自由文字原信、表、狀態。 | 抽取依據、有效表、草稿、缺漏與版本。 | 核對意圖／key／容量；核准綁內容版本；僅模擬送出。 | 缺欄停整批；缺料停筆；曖昧等待。 |
| 分析／cafe-analysis | 決策brief、模擬財務來源、手算。 | 有來源CSV、清理、分析規格與摘要。 | 查單位、共享固定、公式；報名不當銷售。 | 缺值／衝突先補查，錯誤不算。 |
| 單次開發任務／選做cafe-build-tool | 已核對分析包、需求與測試。 | HTML、README、測試與handoff。 | 人開啟換檔、同學重跑；不部署。 | 功能錯回規格或生成，再測受影響案例。 |

三代理應用有三份必要業務Skill，開發驗收Skill選做，不要求四份自建或同時並行。學生依workflow逐步明確指定方法。沒有連續執行證據時描述為人工逐步串接，不稱全自動。

### README應有的完整說明

作品用途：本機模擬咖啡店單品決策工具，使用資料只供課堂。材料包括三份必要Skill與選做開發驗收Skill、來源、狀態、policy、原信、核准、decision-brief、財務CSV、手算與測試。

操作：在Codex App開課資料夾，確認原始材料與Skill可讀；先情報查核與狀態更新，再營運按原信／policy處理並人工核准版本；分析另讀模擬brief，核對CSV與手算；開發讀已確認分析包生成HTML。用瀏覽器開本機檔，讀原案及更新，測錯誤，另存實際結果。工具版本可取得才記，不填猜測編號。

完成條件：來源逐欄可回查；訊息與key不重複；核准版本有效；數值符合手算；HTML與CSV可開；同學新資料重跑有實際紀錄。沒有做到的部分標未執行，不拿本書預期補完成。

限制：資料模擬、便利樣本、報價不可比、營運無真實信箱、財務只單品假設、無DB登入後臺或部署。報名不表示交易，工具結果不證明營運獲利。額度不足可先交自建Skill、規格與人工演練，Codex部分留未執行。

## 六、各週問題的核對答案

第一週：A沒有分鐘不能估平均；意向、預訂與付款需不同證據；差5元只算術，現價與同規格來源不足。

第二週：從第一週步驟封裝第一份情報Skill；同類反覆且格式品質穩定才值得建，可省重講與換輸入，但不保證永遠正確。B2新版本須查；兩批便利樣本不能代表全校，比例差不證明需求變化；已讀只記處理狀態，不等於資料正確。

第三週：M004新訊息id但同key同值，不新增；M005明確更新同列；模糊修改待核對；M006缺email不能猜。固定key／容量由規則，自由文字意圖與補問由代理，人回查依據。

第四週：舊核准不覆蓋新版本；單封缺漏停筆，CSV結構缺欄影響整批辨識，應停整批；重跑要比表、訊息、草稿版本與事件數量，不只席數。

第五週：兩列6000共享不相加；171.43需向上172才能覆蓋固定；8報名不是8杯，缺品項、實際購買與付款。更新原案皆模擬單品情境，不能估真實獲利。

第六週：改資料須改毛利、毛利率、固定與損平、來源狀態；打開實際結果找舊值；README按實際追問修；需求、預期與實測分開，未生成／未測／未部署都明標。

個人反思沒有唯一答案，必須說自己做了什麼與證據在哪。只有範本／網站演練但沒有Codex實際輸出，提供方法回饋，代理部分仍未完成；正確發現失敗、修規則再重測，可提供充分學習證據。
