單元 8:Agent 任務設計——從美感直覺到可執行規格
將產品目的、視覺判斷、內容、狀態、技術邊界與驗收證據整理成 Agent 能執行且人能審查的任務契約。
單元 8:Agent 任務設計——從美感直覺到可執行規格
AI Agent 能讓實作速度大幅提升,但它也會放大模糊需求。當你只說「做得高級一點」、「參考這個網站」或「幫我補完整」,Agent 必須自行猜測內容、元件、狀態與技術範圍。它可能很快交出一個漂亮畫面,同時加入不存在的文案、改寫不相關架構或漏掉失敗狀態。
Agent 任務設計不是學習一段萬用 prompt。它是把你腦中的產品與美感判斷,轉成可執行、可觀察、可驗收的契約。你仍然可以保留直覺,但要學會指出直覺背後的關係。
本單元完成條件
完成後,你應該能夠:
- 將模糊需求收斂成目標、必做、non-goals 與檔案範圍。
- 把視覺 reference 拆成可借鑑特徵,避免機械複製。
- 提供真實內容、component、state、route 與 responsive 規格。
- 寫出可由人或工具判斷通過/失敗的 acceptance criteria。
- 讓 Agent 先讀規則與現況,再提出計畫與假設。
- 用 diff 與證據控制變更,不靠完成摘要判斷。
一個完整任務有六層
1. 產品層:為誰解決什麼
先說明主要使用者、使用情境與希望改善的結果。不是寫品牌宣言,而是建立決策依據。例如「讓使用者在手機上能快速找到並開啟一篇筆記」比「打造高效知識體驗」更能判斷導覽、密度與載入狀態。
2. 內容層:畫面真正要承載什麼
提供實際標題、欄位、圖片與資料來源。Placeholder 會讓版面在假內容下看似成立,換成真實長標題、缺圖或空資料就崩壞。若內容尚未確定,應明確列為未知,不要授權 Agent 自行生成推廣文字填滿空間。
3. 互動層:使用者做什麼,系統如何回應
列出觸發、狀態變化、畫面回饋與失敗恢復。主要流程之外,還要涵蓋 loading、empty、error、disabled、重複操作與返回/重新整理。
4. 視覺層:關係與規則,不只是形容詞
把「乾淨」拆成留白級距、內容密度、色彩角色、字體層級與邊界處理;把「有質感」拆成較少但一致的陰影、克制色彩、清楚層級與真實內容。視覺規格應能在多種畫面與狀態重現。
5. 技術層:邊界與限制
列出現有框架、可改範圍、不可動的 API/品牌/共用元件、server/client、secret、相容性與部署條件。這不是替 Agent 指定所有實作細節,而是防止它越過產品與安全邊界。
6. 證據層:怎樣才叫完成
每個重要要求都應對應驗證方法。畫面用指定 viewport 與真實內容;互動用重現步驟;網路用 Network;結構用 Elements 與鍵盤;程式品質用 diff、typecheck、test 與 build;部署用 preview 與 production smoke test。
先定義 Non-goals,避免 Agent 順手擴張
Non-goals 不是消極清單,而是保護任務焦點。例如:
- 不改資訊架構。
- 不重寫既有 component library。
- 不新增登入或資料庫。
- 不自行生成品牌文案。
- 不升級 dependencies。
- 不改指定資料夾以外檔案,除非先提出必要證據。
Agent 常基於「順便整理」擴大 diff。若某項額外修改真的必要,它應先說明與核心目標的因果關係,而不是完成後才在摘要出現。
Reference:學習特徵,不複製成品
提供 reference 時,先拆成四類:
- 保留:你自己產品已有且不可失去的品牌、內容與操作。
- 借鑑:reference 中希望理解的具體特徵,例如留白節奏、卡片密度、導覽收合或排版層級。
- 不借鑑:不適合你的內容、商業模式、文案、圖像與互動。
- 重新設計:把借鑑特徵如何轉成自己需求,而不是換色複製。
「參考整體感覺」太模糊;「借鑑內容區較窄、標題與內文有明顯節奏、次要操作收進選單,但保留自己的導覽與品牌字型」則可審查。
把美感語言翻成規格
| 模糊感受 | 可執行描述 |
|---|---|
| 太擠 | 同組元素維持小間距,段落與區塊增加一級間距;窄畫面不壓縮主要文字行高 |
| 沒層級 | 每頁一個主標題;標題、摘要、metadata 與操作用字級、重量、色彩角色區分 |
| 太像模板 | 移除無功能副標與裝飾卡片;使用真實內容與產品特有操作決定版面 |
| 不夠精緻 | 統一 tokens、邊界與狀態;減少互相競爭的陰影、色彩與字重 |
| 手機很亂 | 指定重排順序、最小可讀寬度、操作固定與否、文字換行及 overflow 行為 |
這些描述不必包含每一個 pixel,但要說出關係與失效條件。
Acceptance criteria 必須可判斷
「看起來好看」「效能良好」「支援響應式」都無法直接判斷。改成:
- 在 320px、768px、1280px 寬度下,主要流程無水平捲動、遮擋或不可點擊區域。
- 長標題能自然換行,不截斷主要資訊。
- 鍵盤能依閱讀順序到達所有主要操作,焦點可見。
- API loading、empty、error、success 都有明確且可恢復的畫面。
- Console 無未解釋錯誤,相關 request status 與 response 符合契約。
- 指定 lint、typecheck、test、build 通過。
- Git diff 僅包含已同意範圍。
不是所有任務都要用相同條件。選擇能證明這次目標的最小充分集合。
讓 Agent 先理解,再改檔
好的開始順序:
- 讀最深層專案規則、README 與直接相關檔案。
- 回報目前架構與可驗證事實。
- 指出未知、假設與需求衝突。
- 提出最小修改範圍與驗證方法。
- 確認後實作。
這不是要求 Agent 寫冗長計畫,而是防止它根據框架慣例猜錯 repository。小任務可以很短,但仍要說清楚會改什麼和怎麼確認。
Diff 是合作介面
你不需要逐字理解所有程式,仍可從 diff 問出重要問題:
- 改動檔案是否都和任務有直接關係?
- 是否出現大量重新格式化,掩蓋真正邏輯?
- 是否新增 dependency、環境變數或公開 endpoint?
- 是否刪除原有錯誤處理、測試或可及性屬性?
- 是否出現 placeholder、秘密、
any、大量as或!important? - 是否修改 lockfile,原因可否解釋?
Diff 不告訴你 runtime 一定正確,但能確認變更邊界,並決定下一步要看哪些測試與 browser 證據。
迭代時一次只修一個可驗證問題
Agent 第一版不理想時,不要只說「再更好一點」。指出一個可觀察差距,例如:「桌面版資訊層級成立,但 375px 時標題、metadata 與操作擠在同一列;請只調整 header 的窄畫面重排,不改文字與桌面版。」
小迭代讓你知道是哪個改動造成改善或退步,也保留 rollback 能力。一次把視覺、資料、路由與 dependency 全改掉,會失去因果。
可直接使用的任務骨架
背景與使用者:
本次可觀察目標:
必須做:
非目標:
允許修改範圍:
不可修改內容:
真實內容與資料:
頁面/route:
component 與重用邊界:
狀態與互動:
server/client/secret:
視覺規則:
responsive 行為:
鍵盤與可及性:
驗收條件:
必須執行的測試:
完成後要提供的證據:
開始前請先讀專案規則與現況,回報假設、衝突、最小修改方案與驗證方法。未知處標成未知,不要自行補內容或擴大範圍。
更多可重用欄位:Learning/ai first frontend foundations/toolkit
操作練習:重寫「做得高級一點」
- 選一個你真的想改善的頁面。
- 寫下最主要使用者與要完成的任務。
- 將你的三個美感感受各翻成可觀察關係。
- 提供真實內容,標出未知而不請 Agent 自行補文案。
- 列出 initial、loading、empty、error、success 與 disabled。
- 設定 3–7 個 must-have 和至少 3 個 non-goals。
- 為每個 must-have 配一項驗證證據。
- 讓 Agent 先回報理解,再只實作最小版本。
- 審查 diff、browser 與自動化證據,記錄下一個小迭代。
常見誤判
- 「Prompt 越長越準」:長度不等於資訊品質,重複與矛盾反而造成漂移。
- 「給 reference 就不用寫規格」:Agent 不知道你要借鑑哪個特徵,也可能造成過度相似。
- 「Agent 會自動補完整狀態」:沒有明確狀態矩陣,它只能猜。
- 「先做出來再看比較快」:若資料、路由或安全邊界錯誤,後續視覺調整都是浪費。
- 「測試通過就不用看 diff」:測試可能沒有覆蓋擴張範圍、秘密與文案變更。
- 「一次改多一點比較有效率」:失敗後無法知道哪個變更造成問題。
Teach-back 題目
- 為什麼 Agent 速度越快,模糊需求的風險反而越大?
- 產品、內容、互動、視覺、技術與證據六層各解決什麼問題?
- 如何使用 reference 而不讓成果變成機械複製?
- 什麼樣的 acceptance criterion 才能真正判斷通過或失敗?
- 你不熟悉全部程式時,仍能從 diff 審查哪些風險?
上一課:Learning/ai first frontend foundations/07 nextjs server client boundaries
下一課:Learning/ai first frontend foundations/09 debugging release and rollback