
在最後的五天實戰衝刺中(Day 26 ~ Day 30),我們將把前 25 天學習到的所有零件,融合成一個真正能端到端運行的生產級專案:
使用者在前端輸入一句自然語言(例如:「列出高價值客戶並評估近期退費風險」),後端 Embabel Agent 立即分析意圖、調用 Java 查詢 CRM 真實資料庫、組裝出強型別的 DashboardSpec,並透過 SSE 串流管線即時推播,最後由前端 json-render 漸進渲染出高互動性的動態儀表板。
但在敲下任何一行 Java 或 TypeScript 代碼之前,我們必須先做一件最關鍵、但也最容易被忽視的事:「定義 MVP 邊界與前後端 Spec 契約」。
很多 AI 專案之所以爛尾,原因往往不是技術不夠好,而是一開始就讓 AI 自由發揮寫 Code,導致後端隨意吐 JSON、前端到處修補未定義的元件,最終前後端對不上。今天作為整合專案的第 0 天,我們的原則是:「今天刻意不寫任何業務程式碼,先把邊界與契約徹底釘死!」
json-render 根本吃不下深層巢狀結構。┌────────────────────────────────────────────────────────────────────────┐
│ 最後五天實戰推進時間線 │
├──────────────┬──────────────┬──────────────┬──────────────┬────────────┤
│ Day 26 (今天)│ Day 27 │ Day 28 │ Day 29 │ Day 30 │
│ MVP 邊界收斂 │ 後端 GOAP │ SSE 串流 │ 前端 React │ 端到端驗收 │
│ & 契約定義 │ Action 實作 │ 事件管線 │ 漸進渲染 │ & 生產就緒 │
└──────────────┴──────────────┴──────────────┴──────────────┴────────────┘

useDashboardStream 客戶端、思維鏈進度面板與 FlatTreeRenderer。DashboardStreamController、SseProgressBroker 與 A* GOAP 規劃器(意圖分析 $\rightarrow$ CRM 資料庫 $\rightarrow$ LLM 洞察 $\rightarrow$ 確定性組裝)。為了確保五天內能高品質完成專案,我們必須嚴格落實 「MVP 3/5/3/1 原則」:
Stack(排版容器)、Heading(標題)、MetricCard(指標卡)、AlertBanner(預警橫幅)、DataTable(數據表格)。CustomerQuery、TravellerActivity、DashboardSpec。status $\rightarrow$ plan $\rightarrow$ step $\rightarrow$ chunk $\rightarrow$ complete。在現代 AI 輔助開發中,技能(Skills)是執行器,提示詞(Prompts)是指揮棒。
當你需求還沒想清楚時,千萬不要過早觸發程式碼生成技能;必須先將 AI 當作產品顧問,逼它做減法,等規格被框定在不可踰越的邊界內後,才正式啟動編碼。
以下提供今天必須執行的兩組「黃金提示詞」,以及由其產出的精確前後端契約規格書。
我要做一個「自然語言輸入 -> Embabel 後端 Agent -> JSON UI Spec -> 前端 json-render 漸進渲染」的完整前後端專案。
請先擔任我的資深軟體架構顧問,現在嚴禁輸出任何 Java 或 React 程式碼。
請幫我把需求嚴格收斂在「五天內能 100% 開發並驗收完畢」的最小可行性產品(MVP),並遵守以下上限:
1. 剛好 3 個具代表性的自然語言查詢情境(涵蓋單一查詢、列表統計、異常預警)。
2. 剛好 5 種受控前端元件(不許自創額外複雜圖表)。
3. 剛好 3 種後端領域 Record 資料物件。
4. 剛好 1 條標準 SSE 串流流程。
請輸出這份 MVP 定義表,並明確列出「這次我們刻意不做(Out of Scope)」的項目清單。
規格確定後,請幫我定義前後端共用的 UI Spec 資料契約(這是後端 Agent 的輸出,也是前端 json-render 的輸入):
規範要求:
1. 頂層必須是 Flat Tree 格式:{ root: string, elements: Record<string, ElementSpec> }。
2. children 必須是 key 的字串陣列(string[]),嚴禁使用巢狀 JSX 結構。
3. 針對 3 個查詢場景,逐一列出會用到的 5 種元件型別(Stack, Heading, MetricCard, AlertBanner, DataTable)與 props 屬性。
4. 關鍵要求:每個 prop 都必須標註它是「確定性資料 (由 Java 填寫)」還是「敘事文字 (由 LLM 生成)」。
請只輸出這份契約表格與 TypeScript / Java 定義,不要寫任何業務邏輯實作。
// 前後端共用:屬性權責劃分矩陣表
export interface ElementContract {
Stack: {
direction: "horizontal" | "vertical"; // [Java 確定性指定]
gap: number; // [Java 確定性指定]
};
Heading: {
text: string; // [LLM 創意生成] (如: "陳大文先生的年度旅遊總結")
level: "h1" | "h2" | "h3"; // [Java 確定性指定]
};
AlertBanner: {
severity: "info" | "warning" | "error" | "success"; // [LLM / 規則判定]
message: string; // [LLM 創意解讀] (如: "近三個月取消率偏高,建議提供優惠")
};
MetricCard: {
title: string; // [Java 確定性指定] (如: "近一年總消費")
value: string | number; // [Java 確定性計算] (如: "NT$ 143,000")
trend?: "up" | "down" | "neutral"; // [Java 規則計算]
change?: string; // [Java 規則計算] (如: "+18%")
};
DataTable: {
columns: Array<{ key: string; label: string }>; // [Java 確定性定義]
rows: Array<Record<string, any>>; // [Java 確定性直連 DB] (嚴禁 LLM 轉抄!)
};
}
columns_list 而不是 columns,前端元件無法渲染。| 評估維度 | ❌ 自由發揮型開發 (Bad) | ✅ Prompt 驅動 + 契約優先 (Good) |
|---|---|---|
| 開發起點 | 一拿到想法直接讓 AI 寫 Code | 先下限制條件,收斂出 3/5/3/1 MVP 邊界 |
| 前後端協同 | 後端隨意吐 JSON,前端邊接邊改 | 第一天先釘死 Flat Spec 與 Props 權責契約 |
| 交付可預測性 | 功能無限膨脹,高機率爛尾 | 範圍小而美,保證 5 天內 100% 準時上線 |
| 代碼整潔度 | 充滿為修補 Bug 產生的臨時相容代碼 | 架構層次分明,符合 Clean Architecture |
下圖是實作系統的首頁:一個自然語言輸入框、按場景分組的建議查詢(專職分析、動態篩選、清單排行、複合融合等,對應各專職 Agent),以及右側待命的 Embabel Agent 執行面板。所有查詢都被收斂在這些預先定義的場景邊界內——這就是「先決定要看什麼」落地後的樣子。

server/,前端 client/)。DashboardSpec 與 ElementContract 定義分別儲存為 Java 與 TypeScript 的型別檔案。rows」標記為「Java 確定性填寫」是整套 Generative UI 專案成功的最高關鍵?