1 of 80

從 API First 到 AI First

Chief Architect @ 91APP

Andrew Wu

2 of 80

大綱: 從 API First 到 AI First - 讓 AI 有效運用 API 的設計

  1. 前情提要�
  2. 安德魯小舖 GPTs
    1. Demo #1, 出一張嘴就能買東西的魔法
    2. 降維打擊, 透過 AI 提升使用者體驗
    3. Demo #2, 偵測使用者滿意度的魔法�
  3. 軟體開發,還是你想像的樣貌嗎?
    • 開發 AI 應用程式, 你該練習的基本功夫
    • Demo #3, 安德魯小舖 Copilot
    • Demo #4, 安德魯的部落格 GPTs
  4. 實際應用: 零售業的 AI 應用情境
  5. 總結

// AI + API

  • (Agent) AI know how to call functions
  • (Copilot) APP with AI-Assistant 輔助
  • 其他應用 ( prompts, data, RAG ) 的整合

3 of 80

About Me - Andrew Wu

講者簡歷, 個人部落格 (https://columns.chicken-house.net/about/)

  • 現任 91APP, 首席架構師
  • 榮獲 Microsoft MVP 微軟最有價值專家 獎項,2016 ~ 2025+
  • 擔任多次 Microsoft Azure Cafe, TechDays, TechEd, DevOpsDays Taiwan, .NET Conf�等大型研討會講者,與相關 Azure PaaS 雲端系列課程與企業內訓講師

演講經歷

  • .NET Conf 2023, 架構師也要 DevOps - 談模型的降級驗證技巧
  • DevOpsDays 2023 Keynote, 架構師也要 DevOps - 談服務模型的持續交付
  • DevOpsDays 2022 Keynote, DevOps 潮流下的 API First 開發策略
  • DevOpsDays 2021, 大型團隊落實 CI/CD 的挑戰
  • .NET Conf 2020, 非同步系統的 SLO 設計
  • .NET Conf 2020, 刻意練習, 抽象化能力的鍛鍊
  • .NET Conf 2019, 大規模微服務導入 #1 / #2
  • DevOpsDays 2019, 從零開始的 DevOps
  • .NET Conf 2018, Message Queue Based RPC
  • DevOpsDays 2018, 微服務基礎建設 - Service Discovery

4 of 80

我的簡報習慣

  • 黑字就是我正式的簡報內容�����
  • 黑字就是我正式的簡報內容��
  • 黑字就是我正式的簡報內容�

  • 黑字就是我正式的簡報內容�// 註解代表我想表達的�// 原則上都會用講的�// 避免我口齒不清或是節省大家忙於抄筆記的時間��
  • 黑字就是我正式的簡報內容�// 註解代表我想表達的
  • 黑字就是我正式的簡報內容�// 註解代表我想表達的

5 of 80

AI 話題已經燒了整整一年以上了,我看到的內容大部份是...

  • GenAI 很熱門,看到大家都在談各種模型的訓練,參數大小,性能評比...�
  • Computex 很熱門,大家都在談 GPU / NPU,強調資料中心跟設備端的計算能力...�
  • 對於 AI 的應用,大家都在談 "人" 該怎麼使用 "AI 工具" …�

我是軟體開發者,我想談談你開發的 “軟體” 或 "服務",該怎麼 "使用AI" 該怎麼 "被 AI 使用" …�

這就是 API First 到 AI First 的重要環節,也是軟體開發的重要發展路徑

  • GenAI 很熱門,看到大家都在談各種模型的訓練,參數大小,性能評比...�// 現況: 但是我沒有足夠的本事,訓練或是微調我自己的模型...�// 思考: 模型一定會持續進步,等到他成熟了我應該拿它來做什麼?
  • Computex 很熱門,大家都在談 GPU / NPU,強調資料中心跟設備端的計算能力...�// 現況: 我是使用算力的人,不是建構機房或是設計硬體的人...�// 思考: GPU 一定會越來越強,NPU 一定也會持續進步,等到算力普及了我應該拿它來做什麼?
  • 對於 AI 的應用,大家都在談 "人" 該怎麼使用 "AI 工具" …�// 現況: 各種生成式 AI 的工具,加速了程式碼、文字、影像工作者用 10x 做好 "現在的" 工作�// 思考: 所以 AI 還能完成哪些 "未來的" 工作?

我是軟體開發者,我想談談你開發的 “軟體” 或 "服務",該怎麼 "使用AI" 該怎麼 "被 AI 使用" …�// 如果我的服務也要用 AI,我該準備什麼? 我該學什麼技能? 我的軟體或服務該做什麼準備或改變?�// 我看到 LLM 開始具備 "使用工具" 的能力之後,AI 跟 API 的關聯就串起來了,突然之間有了各種可能性

這就是 API First 到 AI First 的重要環節,也是軟體開發的重要發展路徑// 也是在 AI 世代,軟體架構師應該要做的事 (軟體開發團隊會更加重要,但是你需要掌握相關技能)

6 of 80

1. 前情提要: DevOpsDays 2023 - API First

7 of 80

我沒講出來的背後的想法 (也就是今天的主題):

API 是服務透過現代化的方式提供的管道,給機器用的介面必須比給人用的更對準商業模式才行。API 允許比 UI 更多樣的應用,更高效率的執行。優點會被自動化放大,缺點也會

因此技術規格,需要對準商業模式,API 才能帶來商業價值。

不過,光是這句話 "技術規格,需要對準商業模式",就足以搞死大部分的人了。

最終:

研究商業策略的人,應該將商業模式收斂成簡單的模型,來設計公司的服務與對應的組織

研究技術架構的人,應該定義系統間的運作模型,變成大型系統開發與協作的基礎

兩個面向的模型必須互通,而且需要持續修正,商業策略才能順利貫通到系統運行。

回顧

8 of 80

BizDevOps?

BizDevOps 通常不是 "單一" 循環;一個 Biz 價值交付可能是來自多個 DevOps (team) 的總和,需要一個 "實體" (服務) 來對應 & 拆解。

團隊中負責對準這兩大模型的角色就是架構師。

如何做到持續交付模型,就是今天的主要內容。

Biz

Srv

Dev

Ops

業務需求

系統服務

實際狀況是:

團隊規模大 (200+, 20+ teams), 每個團隊都只負責部分功能, 只跑部分循環。補上中間產物才能拆解

Tech Model

CPO / CTO / Architect

PO(s) 跑的循環

Feature Team 跑的循環

Biz Model

POC

Sim

模型 (抽象)

回顧

一個老闆

20 個團隊

5 個環境

部署

Q: 這循環要怎麼跑?

三個角度都抽象化到極致,收斂成單一的技術模型,由架構師來對齊中間的落差。

LLM

9 of 80

我實際上在進行的案例

當你有這麼多 "組" 模型,也都各自驗證過... 你是否有能力將這些模型都組合起來?�

你只有熟練這些過程 (變成反射動作),你才有餘力拆解成獨立的服務,交給不同的團隊負責開發,並且能扮演好用模型來驗證各個系統的開發方向是否符合產品線的設計?

�確保每個團隊做的系統,最終都能彼此合作無間,這就是架構師最重要的任務。

結帳

購物車

訂單

型錄

買什麼?

要多少錢?

你是誰?

購買紀錄

(買的順利)

(逛街)

會員

回顧

10 of 80

今天談的範圍: AI 在每個循環都帶來改變 ...

交付什麼價值?

怎麼有效交付?

思考如何善用 AI 提升開發效率

(開發人員+)

思考如何善用 AI 簡化系統維運

(維運人員+)

思考如何將 AI 融入你的服務之中

(客戶 & 使用者+)

11 of 80

我實際上在進行的案例 (2024)

結帳

購物車

訂單

型錄

買什麼?

要多少錢?

你是誰?

購買紀錄

(逛街)

會員

WEB

APP

AI - Agent

(安德魯小舖GPTs)

像人一樣對話

自然語言的UX

零售系統 API

AI - Copilot

AI - Copilot

維持既有的UX

擴充對話協助

維持既有的UX

擴充對話協助

12 of 80

2. 安德魯小舖 GPTs

13 of 80

安德魯小舖 GPTs 是什麼?

  • GPTs 連結 (已開放所有使用者, Free 版本有限定對話次數)https://chatgpt.com/g/g-Bp79bdOOJ-an-de-lu-xiao-pu-v5-2-0
  • 在 ChatGPT 創建出來的 GPTs - 虛擬店長。�可透過對話方式,給你商品推薦,建議,到採購與結帳服務。�
  • 安德魯小舖,背後整合 EC 的會員認證與 API,你可以體會 AI 如何扮演真正的 "店長分身" 來執行任務 (不只是個能回答資訊的 AI)�
  • Open AI 官網對於 GPTs 的介紹:
    • GPTs let you customize ChatGPT for a specific purpose
    • Developers can connect GPTs to the real world
    • Enterprise customers can deploy internal-only GPTs
    • We want more people to shape how AI behaves
    • We’ve made ChatGPT Plus fresher and simpler to use

14 of 80

Demo #1, 出一張嘴就能買東西的魔法

15 of 80

Demo #1, 出一張嘴就可以買東西...

情境說明 (對話大綱):

🕐00:00�使用者詢問推薦商品,限定預算,指定商品�店長能協助加入購物車,並且結帳

🕐00:40�使用者查詢購買紀錄,並且按照期待調整呈現方式�表格改成條列 (適合手機),從訂購紀錄統計商品數量

🕐01:10使用者直接跟店長說明情境,由店長判定並且推薦適合商品,並且協助完成結帳

16 of 80

這個展示,背後做了什麼事?

1. 設置 GPTs Instruction�

2. 建立 Custom Actions���

3. 設定啟動對話�

4. 發布 GPTs�

1. 設置 GPTs Instruction�// 告訴 GPTs 該如何扮演好店長的角色�// (工作準則)

2. 建立 Custom Actions�// 建立 API Service�// 設定 API 驗證機制 (OAuth)�// 設定 Open API Spec (swagger)

3. 設定啟動對話�

4. 發布 GPTs�

// 實做的技術門檻非常低�// 困難的部分都在 AI 身上 (GPT4o)

17 of 80

背後的 API 規格

就是來自 "商業模型" 設計而來的 API Spec

(參考前面的介紹: 我在進行的案例)

特別留意:

  • API 規格非常精簡,只有基本功能。��
  • 並沒有查詢 "折扣活動" 的 API。�
  • 前面示範的 "預算限制",是 AI 自己組合多次 API 呼叫,並且從試算的結果來決定要不要繼續算下去..�

就是來自 "商業模型" 設計而來的 API Spec

(參考前面的介紹: 我在進行的案例)

特別留意:

  • API 規格非常精簡,只有基本功能。�// AI 有腦補的能力,有必要他會組合使用
  • 並沒有查詢 "折扣活動" 的 API。�// 唯一的方式只能先加入購物車,然後試算結帳金額�// 就像超商店員: "我幫你刷看看有沒有折扣"
  • 前面示範的 "預算限制",是 AI 自己組合多次 API 呼叫,並且從試算的結果來決定要不要繼續算下去..�// AI 能夠自己補位,嘗試組合出你要的操作�// 但是有 API 的話 AI 會直接使用 (一定更快更精確)

18 of 80

結帳

購物車

訂單

型錄

買什麼?

要多少錢?

你是誰?

購買紀錄

(買的順利)

(逛街)

會員

19 of 80

降維打擊: 透過 AI 來提升使用者體驗

20 of 80

THINK: 你覺得 "安德魯小舖 GPTs" 的 UX 好嗎?

我沒有設計任何畫面 (UI),也沒有優化操作流程 (Flow)

但是卻有比操作 UI 更好 (?) 的體驗...

主要的差異在於:

  1. "安德魯小舖" 聽的懂人話,我用說的他就能正確操作。�
  2. "安德魯小舖" 懂得隨機應變,設計規格不存在的需求它也能應付。�
  3. "安德魯小舖" 能隨時調整我要的輸出樣式。�

我沒有設計任何畫面 (UI),也沒有優化操作流程 (Flow)

但是卻有比操作 UI 更好 (?) 的體驗...

主要的差異在於:

  • "安德魯小舖" 聽的懂人話,我用說的他就能正確操作。�// UI: 靠設計師的經驗與流程設計,來 猜測 使用者的意圖�// AI: 直接用 LLM 的 理解 能力來解讀使用者的意圖
  • "安德魯小舖" 懂得隨機應變,設計規格不存在的需求它也能應付。�// UI: 靠設計師的經驗、訪談、掌握情境,預先猜測使用者的意圖,來設計功能與流程,達成使用者期待�// AI: 靠 LLM 的理解能力,搭配文字訊息的回覆 + 解讀後轉化為對應 API 呼叫,達成使用者期待
  • "安德魯小舖" 能隨時調整我要的輸出樣式。�// UI: 靠設計師的經驗、訪談、掌握情境,規劃設計適合使用者當下想要得到的資訊內容與呈現方式�// AI: 靠 LLM 的理解能力,解讀使用者的需求,轉化成 API 呼叫取得資訊,調整輸出的內容與形式。

21 of 80

THINK: 你覺得 "安德魯小舖 GPTs" 的 UX 好嗎?

現在的 UX 改善,都來自厲害的 UX designer 精湛的設計…

然而 "安德魯小舖 GPTs" 的 UX 改變,完全是另一條路 …

��

兩者完全是不同 “維度” 的工程技術...

現在的 UX 改善,都來自厲害的 UX designer 精湛的設計…

// 主要是呈現在 UI 操作方式跟 Flow 的設計,作為改善的切入點�// 以大量的訪談,大量的追蹤,用數據與案例,設計師的經驗作為改善的基礎

然而 "安德魯小舖 GPTs" 的 UX 改變,完全是另一條路 …

// 來自於 "聽的懂人話" (理解使用者的意圖)�// 能應付設計規格以外的需求 (靠 Runtime, 不是靠 Design Time / Build Time)�// 這些改善的動力都來自 LLM 的進步,與背後算力的支持

兩者完全是不同 “維度” 的工程技術...

// 兩者不互相衝突,可以各自發展�// AI 有機會做到目前 UX 做不到的事

22 of 80

Demo #2, 偵測購買滿意度的魔法

23 of 80

Demo #2, 了解喜好, 判斷情緒

示範情境:

🕐00:00使用者說明自身喜好,店長推薦商品。�店長自己記下會員摘要註記 (下次會記得)

🕐00:55三天後使用者再次來訪,只描述情境,店長能根據使用者喜好 (上次留下的註記) + 情境給予推薦商品

🕐01:25店長口頭給了錯誤的折扣資訊,導致使用者表達不滿。訂單的註記與消費滿意度給了 2 分,並記錄不滿意的原因

24 of 80

THINK (Again): 你覺得 "安德魯小舖 GPTs" 的 UX 好嗎?

我沒有設計任何滿意度問券,也沒有埋追蹤設定,來觀察統計轉換率,跳脫率等等指標�但是卻能從 LLM 解讀對話過程,得到更明確的使用者回饋...,並且可以用於個人化推薦...

主要的差異在於: 從數據統計(ML) vs 從店員有人性(LLM)的關懷

  • "安德魯小舖" 能看懂 "個人註記",藉此了解我的喜好,說我想聽的,推薦我想要的給我。�
  • "安德魯小舖" 能從互動過程中察覺我的想法,能修正回應,也能做出正確的評價 (目前: 過度樂觀)。�

我沒有設計任何滿意度問券,也沒有埋追蹤設定,來觀察統計轉換率,跳脫率等等指標�但是卻能從 LLM 解讀對話過程,得到更明確的使用者回饋...,並且可以用於個人化推薦...

主要的差異在於: 從數據統計(ML) vs 從店員有人性(LLM)的關懷

  • "安德魯小舖" 能看懂 "個人註記",藉此了解我的喜好,說我想聽的,推薦我想要的給我。�// UI: 從追蹤數據,追蹤使用者操作等資訊,進行統計 & 推測使用者體驗,進行改善�// AI: 直接藉由 LLM 的語言理解能力,轉化為文字的回應,或是更新註記
  • "安德魯小舖" 能從互動過程中察覺我的想法,能修正回應,也能做出正確的評價 (目前: 過度樂觀)。�// UI: 從追蹤數據,問券回饋 (通常要付出一些誘因讓顧客願意填寫) 取得回饋�// AI: 直接藉由 LLM 的語言理解能力,觀察情緒變化與猜測使用者的意圖,做出評價與判斷並更新註記

25 of 80

小結

你注意到 "變革" 發生在哪裡了嗎?

API 的層面,技術完全沒有改變。差別在於 API 的設計上要開始考慮 AI 的 DX 了

��

體驗上多了 AI 加持,就帶來了體驗與滿意度的改善,而且用的是不同以往的工程作法。

���

你注意到 "變革" 發生在哪裡了嗎?

API 的層面,技術完全沒有改變。差別在於 API 的設計上要開始考慮 AI 的 DX 了

// 要讓 AI 看的懂,要避開 AI 的不確定性。�// 真正的 "服務" (API),在這案例內一行都沒有改,我只是調整 "技術" 規格讓 ChatGPT 能順利使用它�// 商業應用層面完全沿用 (甚至更精簡: 我沒有給預算處理的程式碼)

體驗上多了 AI 加持,就帶來了體驗與滿意度的改善,而且用的是不同以往的工程作法。

// AI 帶來了新的抽象層級�// 在同一層級的優化會有極限的�// 多了 AI 這層服務抽象層,效果是加成的。使用得當的話能超過目前做法的極限。�// 多一個維度帶來的差距就是這麼大,站在三次元的視角你可以完全輾壓二次元的生物。

26 of 80

3. 軟體開發,還是你想像的樣貌嗎?

27 of 80

感想: AI "已知用火"

  • AI 能理解對話的意圖,也能正確使用工具..���
  • 傳統資訊科學,講求的都是 "精確的運算";對於 "無法用精確數據與流程的要求" 都不擅長處理。���
  • 不可確定性,是優點也是缺點。掌握他,把它放在有效益的位置�
  • AI 能理解對話的意圖,也能正確使用工具..�// 其實語音助理 ( 例如: Siri ) 已經能透過對話使用工具了,只是理解能力很差�// 換上 LLM 理解能力大幅提升,AI 懂得使用工具已經符合成為一個 "AGENT" 的基本要求了。�
  • 傳統資訊科學,講求的都是 "精確的運算";對於 "無法用精確數據與流程的要求" 都不擅長處理。�// 有明確的 INPUT,明確的規則,明確的 OUTPUT�// 所以能夠測試。LLM + API 該如何測試?�// 你該做的是,把 API 盡量做的夠可靠,夠防呆 (防 AI 的呆),做到不論怎麼亂打 API 都不會出錯。
  • 不可確定性,是優點也是缺點。掌握他,把它放在有效益的位置�// 藉由 LLM 的發展,"使用者意圖","使用者情緒","使用者滿意" 等抽象的概念都能被系統處理了。�// 各位軟體開發領域的夥伴,必須開始學會如何把他運用在你的系統了。

28 of 80

標題回收: "從 API First 到 AI First”

API First 是你能否有效運用 AI 的關鍵基礎。你必須要有 AI 能理解的 API,AI 才能成為你的得力助手:

  1. 以前 API 是給 "別人" 用的,你有太多 "檯面下的手段" 可以讓他運作。���
  2. 以前 API 是直接給 UI / Feature 開發人員用的,你會不知不覺為了交付,加上一些 "捷徑"�(開出結構上不正確,或是不必要的 API),而這些捷徑都會成為未來的技術債。��
  3. 以前 API (尤其是內部用的) 你可以約束使用端該怎麼使用,避開某些會壞掉的用法。�

API First 是你能否有效運用 AI 的關鍵基礎。你必須要有 AI 能理解的 API,AI 才能成為你的得力助手:

  • 以前 API 是給 "別人" 用的,你有太多 "檯面下的手段" 可以讓他運作。�// AI 不吃這套。�// 要 AI 聽話的方式是給對的 instruction, 型態可以直接下 prompt, 或是給他 document�// 終究你逃不掉寫文件 (只是現在的文件需要給 AI 看)
  • 以前 API 是直接給 UI / Feature 開發人員用的,你會不知不覺為了交付,加上一些 "捷徑"�(開出結構上不正確,或是不必要的 API),而這些捷徑都會成為未來的技術債。�// AI 開始有能力自己組合 API,不再一定需要你給他 "捷徑"。你只需要給最核心的 API。
  • 以前 API (尤其是內部用的) 你可以約束使用端該怎麼使用,避開某些會壞掉的用法。�// AI 不吃這套。你要讓他避開 "邏輯上" 他應該能做的事情,只能寫文件交代清楚 (但是例外越多越貴)�// 另一條路是老老實實修好程式碼,或是改善設計

29 of 80

Hint: 重視 API 的設計品質是必要的

我這次的 "安德魯小舖",去年底發行時是 v5.0.0, 過去曾經大翻過 API 四個版本,都是在 API spec 設計的不好,AI 老是無法照我預期的運作。所以 Prompt 越寫越長,AI 行為越來越難控制...

最後我想通了,AI 是按照 "常理","通則" 被訓練出來的,我重新按照 "常理" 把 API 梳理了一次..

對,就是去年談 API First 的那套做法:

  1. 物件導向: 模擬實際世界的運作,變成電腦的理解方式並且能實際運作的科學
  2. 有系統的分析 (主體的 狀態變化、觸發轉移的動作、驅動動作的角色、狀態轉移事件),再開出規格

當你開出來的規格符合 "常理" 了,AI 就看的懂了 (當然真人也看得懂了)

然後,"安德魯小舖 GPTs" 5.0.0 突然間就成功了 XDDD, 於是就有了 [這則評論] 與 [這篇文章]

30 of 80

為什麼 "模型" 很重要?

XXX: 某某客戶實在很無理,他說 "只要改個按鈕就好了,這很簡單啊" ..,難道他不知道按鈕背後的一大堆程式跟資料庫都要跟著改嗎?

老闆 / 客戶的立場: 這改變是合理的,只是把 XXX 流程的某個步驟跳過去而已 (背後的流程都完全沒變),所以 "只要改個按鈕就好了,這很簡單啊"

工程師的立場: 為了簡化需求開發,我特地用了 XXX 技巧,你看,程式碼只要 1/10 就夠了,而且結果剛剛好跟需求要求的一樣。我對過規格了,我們就這樣做。(這些實做設計隱含很多規格沒有提到的 "巧合" 為前提,剛好略過了部分系統 "目前" 不需要理會的邏輯)。結果老闆的這個改動,把我省略的邏輯凸顯出來了,拿掉那個按鈕假設就不對了啊... 所以 "難道他不知道按鈕背後的一大堆程式跟資料庫都要跟著改嗎?"

沒有精準扼要的模型設計,來對齊老闆 (商業模型) 與工程師 (技術模型),你不會知道你的實做設計有沒有真的對準商業需求...。

架構師的價值,就在於建模。建立的模型,就是你對於系統的設計。

回顧

31 of 80

問題背後的問題:�為何客戶認知的 "異動",跟系統實際上需要的 "異動" 落差這麼大?�有沒有可能差異早已存在,只是沒有被要求 "修改" 就沒有察覺?

再探背後的問題:�新增 "合理" 的功能會不會也很困難? �真正的問題是否是軟體開發並沒有盡量貼近客戶認同的 "模型",只是貼近客戶要的 "結果" (規格)?

再探背後的問題:�如何照著模型開發? 如何跟客戶確認模型? 如何將模型變成規格?�

物件導向: 模擬實際世界的運作,變成電腦的理解方式並且能實際運作的科學

如果你只看結果不看過程,那就好像司機跟乘客的關係 "殊途同歸" 。

走不同的路都能到目的地,但是花費的時間,車資可能不同。

更重要的是乘客如果想要 "順路" 去某地方,很抱歉... 我走捷徑,沒辦法!!

回顧

32 of 80

(設計總結) 標示所有的狀態、操作、事件

每一筆會員資料都代表一個 "會員" 的物件,存活在你的服務當中。

為什麼從狀態機開始? 因為狀態機描述了物件被 "建立",到被 "銷毀" 的轉移過程,有中間的狀態,也有轉移的行為,非常適合拿來當作有實體資料的模型表達方式。

狀態圖的 "",代表了每個物件的 "狀態";

狀態圖的 "",代表了狀態的轉移,背後的涵義通常是有重要的動作引發了狀態轉移,代表了每個物件的 "行為";

由於狀態的轉移,是改變生命週期的大事,因此外界關注這物件的一舉一動,都會在意他的狀態是否有改變? 因此狀態的轉移,也代表了 "事件" 的發生。

模型對應到系統,分為資料、操作、事件。�1. 資料: DB 內的會員主資料表,必定有 ID + 狀態�2. 操作: Service 內主要的 API 清單�3. 事件: Service 內主要的回呼機制,WebHook

回顧

33 of 80

順序

Scenario (who / when / what)

Caller

Action

State

說明

S0-01

會員本人 (A) 尚未成為巴站的會員,在好好買網站上註冊。

會員本人 (A)

register

Unverified

註冊帳號,尚未驗證

S0-01.1

系統偵測到註冊成功的事件後,自動發出 email 送出驗證連結

系統服務 (D)

event handler

Unverified

攔截註冊成功事件,取得驗證碼送出信件

S0-02

會員本人 (A) 註冊帳號後,透過 email 驗證帳號。

會員本人 (A)

verify

Verified

驗證帳號

S0-03

會員本人 (A)買完商品,選擇到超商取貨。

成立訂單後由系統本身發送簡訊通知

系統服務 (D)

get

Verified

取得手機號碼,發送簡訊

S0-04

超商需要會員的手機末三碼及姓氏 (不須完整姓名) 。

協力廠商 (E)

get-masked

Verified

取得遮罩過的個資 (手機末三碼,遮罩過的姓名)

回顧

34 of 80

06. 將所有資訊轉成 API Spec

Actions:

POST /api/members:register

POST /api/members/{id}:verify

POST /api/members/{id}:restrict

POST /api/members/{id}:allow

POST /api/members/{id}:ban

POST /api/members/{id}:permit

POST /api/members/{id}:remove

GET /api/members/{id}

GET /api/members/{id}:reset-password

GET /api/members/{id}:verify-code

GET /api/members/{id}:masked

GET /api/members/{id}:statistics

POST /api/members/login

POST /api/members:import

Events:

state_changed

// 通常隱含在改變狀態的 action 完成時觸發

// 如果你的事件處理機制支援 topics, 則可以合併

{action}_executing

{action}_completed

// 通常不會包含所有的 action

// 主要: 改變狀態的 action

// 次要: 改變資料的 action

// 忽略: 只讀取資料的 action

回顧

35 of 80

06-1. 對照組, 採用 CRUD 設計的 API Spec

Actions (Domain Operation):

POST /api/members:register

POST /api/members/{id}:verify

POST /api/members/{id}:restrict

POST /api/members/{id}:allow

POST /api/members/{id}:ban

POST /api/members/{id}:permit

POST /api/members/{id}:remove

GET /api/members/{id}

GET /api/members/{id}:reset-password

GET /api/members/{id}:verify-code

GET /api/members/{id}:masked

GET /api/members/{id}:statistics

POST /api/members/login

POST /api/members:import

Actions (CRUD):

POST /api/members

// 建立會員資料, 包含匯入、註冊都算。

// 註冊後的狀態要自己更新,判斷該更新成何種狀態。

// 要從參數判斷該發出何種事件

GET /api/members/{id}

// 不同角色能讀取哪些資訊需要額外判斷

// 難以區分像是 login 這類需求的讀取功能。

// 你只能判斷密碼是否正確,而不能傳回密碼…

PATCH /api/members/{id}

// 太多種邏輯難以放到 PATCH 這功能內

// 難以區分停用帳號,重設密碼等等不同需求的更新

DELETE /api/members/{id}

// 同上, 以下省略 300 字..

身為開發者,你覺得哪一組 API 比較好用? 哪一組 API 開發上能正確引導你使用服務?

回顧

36 of 80

開發 AI 應用程式, 你該練習的基本功夫...

37 of 80

THINK: 如何訓練出一階魔法使?

38 of 80

AI 時代的基礎魔法: 理解 AI 怎麼處理問題

  1. API First 仍然是重要的基礎,請不要放棄他 (這才是你的服務未來的競爭力)��
  2. 升級應用程式架構,準備 AI 的位置��
  3. 了解 AI 相關的基礎元件與運作原理����
  4. 熟悉常用的 AI 應用流程與設計模式�
  • API First 仍然是重要的基礎,請不要放棄他 (這才是你的服務未來的競爭力)�// AI 時代你仍然需要 API,夠水準的 API 才能發揮 AI 的本事。基礎夠札實你才能 review AI 寫的 code
  • 升級應用程式架構,準備 AI 的位置�// LLM as a Part of Controller
  • 了解 AI 相關的基礎元件與運作原理�// 相似性的處理 ( Embed, 向量化, 相似性搜尋, 向量資料庫 … )�// 對話的處理能力 ( Prompt, Chat Completion, History & Memory, Function Calling )�// 方便你開發 AI 應用程式的開發框架 ( Semantic Kernel … )�// 挑選 & 部署正確模型的能力
  • 熟悉常用的 AI 應用流程與設計模式�// RAG�// 推薦模型

39 of 80

學習如何透過程式運用 LLM ( Large Language Models )

or call APIs

40 of 80

41 of 80

System Spec:

(format instructions)

User Input:

42 of 80

In GPTs: Instructions

In GPTs: Custom Action

// 提供 open api spec

// ( swagger )

In GPTs: User Input

// 直接對話輸入

In GPTs: Call Custom Actions (API)

// 直接對應到 Custom Action

// 生成對應的指令與參數, GPTs 直接呼叫取得結果

43 of 80

查詢是否有 30m 的空檔

新增跑步排程紀錄

結果回報: 已安排 9am 跑步

44 of 80

AI 時代的基礎魔法: 理解 AI 怎麼處理問題

重要的是 LLM 如何回應你的提問,挑選合適的模型最優先。

在真正寫 code 之前, 你可以進一步把 API Spec 抽象

步驟:

  1. 讓 AI 知道你的 API spec
  2. 告訴 AI 你想要處理的情境
  3. 觀察 AI 回應的拆解步驟是否符合你預期

重要的是 LLM 如何回應你的提問,挑選合適的模型最優先。

// ChatGPT 是個方便的好選擇

// OpenAI 提供的 Playground 工具提供更多的設定介面

在真正寫 code 之前, 你可以進一步把 API Spec 抽象

// 抽象到你能直接在 ChatGPT 直接觀察 LLM 推演過程

步驟:

  • 讓 AI 知道你的 API spec
  • 告訴 AI 你想要處理的情境
  • 觀察 AI 回應的拆解步驟是否符合你預期

45 of 80

邏輯推論:

讓 AI 告訴你他會怎麼處理

(因為 LLM 的特性) AI 必須告訴你處理過程,迫使他要完成推論,會花費更多的 token,但是結果會更精確,你也有辦法核對。

// 這不是浪費 token, 而是你沒要求他可能會偷懶

當你確認了 AI 能正確的 "運用" 這些 API 時,你再真正開始開發 API 就行了

46 of 80

產生設計規格:

列出該有哪些頁面,需要執行那些 API

列出那些事件需要訂閱,需要執行那些操作

47 of 80

Demo #3, 安德魯小舖 Copilot

// Prompt Engineering

// 需要大量 "用自然語言" 寫程式的情境

48 of 80

GenAI 雖然令人驚豔,但是現在仍然有許多缺陷待克服..

即使你選擇當今最強的模型,生成式 AI 仍然會有幻覺,會亂掰;推論能力也還不夠精確,無法保證結果完成正確...

�因此,要有對應的控制手段:

  1. 你必須決定使用 AI / API 的邊界�
  2. 你必須判定使用 AI 是否符合成本?�
  3. 你必須判定 AI 是否能夠滿足你的效能期待?�
  4. 你必須處理 AI 長期記憶的問題 (個人化,特定領域知識庫)�

即使你選擇當今最強的模型,生成式 AI 仍然會有幻覺,會亂掰; // 想想 DEMO2, 憑空生出不存在的優惠�推論能力也還不夠精確,無法保證結果完成正確...

�因此,要有對應的控制手段:

  • 你必須決定使用 AI / API 的邊界�// 有哪些要交給 AI 負責推論?�// 有哪些要交給 API 負責執行?
  • 你必須判定使用 AI 是否符合成本?�// 用 AI 執行一次 function call, 大約要 NTD $0.15�// 執行一次 AWS Lambda, 大約 NTD $0.000006
  • 你必須判定 AI 是否能夠滿足你的效能期待?�// 靠 AI 推論來執行 API,每個 API 大約要花到 1sec 以上�// 直接呼叫 API,RPS 可以輕易到 1000 以上
  • 你必須處理 AI 長期記憶的問題 (個人化,特定領域知識庫)�// 向量資料庫 + Embedding Model�// 雙塔模型: 將不同資訊擺在相同向量空間進行比較

49 of 80

AI 成為完全的 Agent 之前,先成為 Copilot …

在 AI 能 100% 成為全功能 Agent 前,都會是協作的模式 ( Copilot )。

安德魯小舖GPTs 走的是 100% 給 AI 掌控,是 Agent Mode

若要有能力控制 AI 的負責範圍,你該走的是 APP (UI) + AI 協作,是 Copilot Mode

Copilot 要能:

  1. 使用者能用正常的操作步驟, Copilot 只要能 "感知" 你在幹嘛,適時給你提示就夠了�
  2. 使用者需要協助時, Copilot 要有能力協助��
  3. 除了 API 要思考到 AI 的可用性,UI 也要能配合 AI 順利整合運作�

在 AI 能 100% 成為全功能 Agent 前,都會是協作的模式 ( Copilot )。

安德魯小舖GPTs 走的是 100% 給 AI 掌控,是 Agent Mode

若要有能力控制 AI 的負責範圍,你該走的是 APP (UI) + AI 協作,是 Copilot Mode

Copilot 要能:

  • 使用者能用正常的操作步驟, Copilot 只要能 "感知" 你在幹嘛,適時給你提示就夠了�// 需定義 prompts, 系統該持續給 LLM 什麼樣的提示內容�// 需定義 system instructions, LLM 碰到甚麼情況需需判定使用者需要協助
  • 使用者需要協助時, Copilot 要有能力協助�// 使用者須有管道, 能直接告知 LLM 需要什麼協助
  • 除了 API 要思考到 AI 的可用性,UI 也要能配合 AI 順利整合運作�// 例如: Copilot 能否幫你填完表單, 讓你確認完按送出? �// 思考: 你目前的 API / UI 架構,是否支援這種精細度的控制?

50 of 80

Demo #3, 安德魯小舖 Copilot 版

51 of 80

UI

Controller

(Domain Service)

Data

Skills (API)

Instruction

(persona)

Chat History

(short mem)

Personal Information

Knowledge

(long mem)

LLM

(Copilot)

1. 由你的邏輯判定是否讓 AI 協助

2. 由使用者決定是否向 AI 求助

3. 由你決定要賦予 AI 哪些能力

4. 由你決定 AI 的做事方式

5. 由你決定 AI 的專業知識與個人化 (對使用者)

52 of 80

示範: (1) 由你的邏輯判定是否讓 AI 協助?

// 組裝要提交的訊息 (prompt) 內容, 置入購物車的資訊

53 of 80

示範: (3) 由你決定要賦予 AI 哪些能力

// 配合開發框架的寫法, 能將 C# 原生 method 標上 prompt, 讓 LLM 進行 function calling

54 of 80

示範: (4) Instruction, AI Persona

// 在 system prompt 約定對談的格式 (前置詞), 方便後續回應訊息處理

55 of 80

THINK: 你的開發流程跟 Pipeline 是否需要改變?

Q: Prompts / Instructions, 在軟體開發內算是哪個環節?

  • Code, 歸在 DevOps / CICD 的 Pipeline? (綁定 APP)
  • Model, 歸在 Data -> Training -> Model 的 Pipeline? (綁定 Model)

Ref: DevOpsDays Taipei 2021, 大型團隊落實 CI/CD 的挑戰 - Andrew Wu

  • Code / Config / Infrastructure as Code, 都有自己的 pipeline
  • AI 的部署應該要變成第四個
  • Prompt 我認為應該算是 "Code", 他是 Application 商業應用高度相關,但是 LLM 還未成熟 & 標準,Prompt 大部分時間都必須對 LLM 特化。我選擇未來都會向 "白話文" 靠攏,這是我目前實驗都用 Chat GPT 的主要原因。現階段你要與 LLM 解耦,你就需要自己處理 ( 綁訂在 code + AI plugins 是個好方法 )

56 of 80

回顧: DevOpsDays 2021

Paul Hammant’s Blog, Provisioning, Deployment and Application Config Cycles

https://paulhammant.com/2014/08/27/provisioning-deployment-and-app-config-cycles/

AI Model

as Code

(MLOps)

57 of 80

Demo #4, 安德魯的部落格 GPTs

58 of 80

安德魯的部落格 GPTs

  • GPTs 連結 (已開放所有使用者, Free 版本有限定對話次數)https://chatgpt.com/g/g-F3ckJut37-an-de-lu-de-bu-luo-ge
  • LLM, 就像個通用知識訓練得特別好的大學生, 念了很多書,但是不見得有實做經驗,也缺乏特定領域的專業知識 (尤其是公司內)�
  • 讓 LLM 擁有你期望特定領域專業知識的方式有幾種:
    • 訓練自己的模型 (太貴)
    • 微調現成的模型 (也很貴)
    • RAG (檢索增強) // 目前最均衡的方式
    • Prompt (Context 長度有限)

因此,如果能搭配知識庫做成檢索服務,部署成獨立服務,提供 API ...

  • GPTs 連結 (已開放所有使用者, Free 版本有限定對話次數)https://chatgpt.com/g/g-F3ckJut37-an-de-lu-de-bu-luo-ge
  • LLM, 就像個通用知識訓練得特別好的大學生, 念了很多書,但是不見得有實做經驗,也缺乏特定領域的專業知識 (尤其是公司內)�
  • 讓 LLM 擁有你期望特定領域專業知識的方式有幾種:
    • 訓練自己的模型 (太貴)
    • 微調現成的模型 (也很貴)
    • RAG (檢索增強) // 目前最均衡的方式
    • Prompt (Context 長度有限)

因此,如果能搭配知識庫做成檢索服務,部署成獨立服務,提供 API ...

// 結果就是 "安德魯的部落格 GPTs" 了�// 它可以用我的文章為基礎來回答你的各種問題

59 of 80

Demo #4, 安德魯的部落格 GPTs

情境說明 (提問內容):

🕐00:00"我正在聽安德魯在 DevOpsDays Taipei 2024 的演講,他的演講都有連貫性,他提到過去有一系列談 API 設計的主題。��我想了解他過去在 DevOpsDays 演講,以及跟 API 設計有關的文章。請列出相關的清單給我"�

🕐00:45�"幫我彙整一下,安德魯這系列文章背後要表達的想法"�

🕐01:00�// 我幫大家問個問題...

60 of 80

安德魯的部落格 GPTs - 後端服務 API spec

61 of 80

AI 時代基礎能力的運用

善用 AI 的整合與開發能力

  • 知識庫整合能力;資料查詢索引能力
  • 服務整合能力
  • 提示工程 (Prompt Engineering) 的使用能力
  • 開發框架 (AI Framework) 的使用能力�

AI 基礎建設管理能力

  • AI 算力,模型部署與調配選擇的能力���
  • 數據收集,資料更新,模型微調更新的能力: ( 資料與模型應該要有獨立的 DevOps Pipeline )�

善用 AI 的整合與開發能力

  • 知識庫整合能力;資料查詢索引能力
  • 服務整合能力
  • 提示工程 (Prompt Engineering) 的使用能力
  • 開發框架 (AI Framework) 的使用能力�

AI 基礎建設管理能力

  • AI 算力,模型部署與調配選擇的能力�// 使用雲端的計算能力 ( pay by tokens )�// 自行搭建軟硬體 ( self hosting )�// 使用設備端的運算能力 ( edge device )
  • 數據收集,資料更新,模型微調更新的能力: ( 資料與模型應該要有獨立的 DevOps Pipeline )�// 模型如何部署更新? 更版、微調、重新訓練�// 知識庫如何更新? 向量資料如何隨著模型的更新而重新計算?

62 of 80

"安德魯的部落格 GPTs" 檢索流程拆解

"我正在聽安德魯在 DevOpsDays Taipei 2024 的演講...."

DevOpsDays 演講 API 設計

{

"query": "DevOpsDays 演講 API 設計",

"noResult": false,

"results": [

{

"link": "default/post-2022-10-26/81d0efa7ce7d402c9453f50df51c078d",

"index": "default",

"documentId": "post-2022-10-26",

"fileId": "81d0efa7ce7d402c9453f50df51c078d",

"sourceContentType": "text/plain",

"sourceName": "content.txt",

"partitions": [

{

"text": "這篇的內容,是我在 DevOpsDays Taipei 2022 的 Keynote 演講的主題: DevOps 潮流下的 API First 開發策略。這場次的內容,正好是我近期正在努力的方向,演講的時間有限,沒能 100% 表達我想講的內容,於是我還是用我最習慣的方式: 文章,重新來闡述一次這個主題吧。\r\nAPI First,\r\n講的是在你的開發流程內,API 應該被擺在第一順位思考的開發策略。一開始就瞄準 API 為主軸的開發方式,你會發現整個流程跟思考方式都不一樣了,這就是我這篇想要傳達的主軸。我在第一部分先花了點篇幅,說明 API 為什麼應該要 \"First\" 的理由。API\r\n是很講究事前的規劃與設計啊,有時候會讓人有跟 DevOps 闡述 \"先交付價值,尋求回饋持續改善\" 的快速循環有所衝突的錯覺。這並非是你要做出二擇一的選擇,而是在持續改善的循環中,有沒有掌握好長期的目標的差別;而 API 的設計往往就是容易被忽略的一環。\r\n因此我多準備了一段: 就是 \"架構師在敏捷團隊中該扮演的角色\",這是我在演講當下沒時間聊到的段落,我在文章內也把他補上了! 同樣的內容,除了 DevOpsDays Taipei 2022 Keynote (2022/09/16)",

"relevance": 0.66266865,

"partitionNumber": 0,

"sectionNumber": 0,

"lastUpdate": "2024-02-29T15:37:38+00:00",

"tags": {

"user-tags": [

"系列文章",

"架構師的修練",

"microservices"

],

"categories": [

"系列文章: 微服務架構"

],

"post-url": [

"https://columns.chicken-house.net/2022/10/26/apifirst/"

],

"post-date": [

"2022-10-26"

],

"post-title": [

"架構師觀點 - API First 的開發策略"

],

"post-content-type": []

}

},

]

}

LLM 彙整檢索的結果 (prompt)

--

#query: [xxxxxxx]

#facts:

[xxxxxxxxxx, 70%]

[xxxxxxxxxx, 66%]

[xxxxxxxxxx, 58%]

#answer:

63 of 80

小結

判別適合給 LLM 處理的任務

  • 無法用系統化規則處理的任務 (要說人話的,要懂人性的)
  • LLM 的發展適合直接面對這些問題

不適合給 LLM 處理維持現狀

  • 交易等必須絕對精確的運算
  • 安全機制 (必須端到端),必須在通訊層級處理 ( token ) 的問題
  • 需要高頻計算,重視計算成本

讓你的系統有足夠的能力與彈性,各自選擇你需要的部分

  • 系統邏輯應保留 Controller + LLM 的擴充空間
  • 可以開始朝向 Copilot 的操作模式思考 (進可攻退可守,使用者的操作習慣不需要改變)

64 of 80

4. 實際應用: 零售業的 AI 應用情境

// Generative AI 年會 - 2024, Happy Lee

65 of 80

實際上面對的 "商業模型" 是什麼概念?

「零售的科學」主要分享零售業的相關內容,這是一個個人部落格,全站只有我一名作者:Happy Lee(李昆謀),所有圖文也都是個人原創,花時間一點一點寫下來的,希望對大家都有所幫助。(關於作者請參考最後面)

這裡所有的內容,都是談「零售」,就算談到大數據、會員經營等議題,也都會圍繞在如何協助零售業解決問題。希望對「零售業」有興趣的朋友,可以在這些文章之中,得到對你有幫助的想法。

66 of 80

67 of 80

68 of 80

69 of 80

70 of 80

71 of 80

...... (省略 30 頁) ......

72 of 80

73 of 80

74 of 80

75 of 80

5. 總結

//

76 of 80

延伸思考

應用程式 + AI 值得投入,但是要想清楚怎麼用

���

掌握 AI 時代的基礎功夫

現在就該做的: 挑選對你有實質幫助的 AI 工具

��

應用程式 + AI 值得投入,但是要想清楚怎麼用

// 傳統的軟體架構不會消失 ( API 還是很重要 )。�// 為未來做好準備的方式是: 確保你現在的投資 在 AI 時代都能維持價值 ( 人,系統,流程 都是 )�// 例: UI 是否準備好能跟 Copilot 配合?�// 例: API 與相關資訊是否都能讓 AI 善加利用? (文件,知識庫,RAG,Tool Using,Prompt / AI Testing ?)

掌握 AI 時代的基礎功夫

// 過去: (程式設計) 資料結構 + 演算法,物件導向; (流程+文化) DevOps, CI / CD;(部署+維運) Cloud Native�// AI: LLM 相關, 相似性檢索相關, 開發框架相關, 成本 / 算力 的評估與調度能力, 提示工程, 整合能力

現在就該做的: 挑選對你有實質幫助的 AI 工具

// 盡可能用最有效率的方式,用最好的工具做事。�// 熟悉工具的運作方式,使用他之餘,也學習那個工具本身如何善用 AI ?�// 我從 GitHub Copilot 學到的東西, GitHub Copilot 比 ChatGPT 多做了什麼?

77 of 80

今天沒辦法談到的部分

AI 的進步會改變流程,也會改變架構,更會改變開發人員扮演的角色。

��

不要擔心被取代,掌握 AI 時代的基礎能力,善用 AI 加速迭代,抽象化後快速驗證。

AI 還不成熟,你還有時間準備,面對 AI 成熟的那一天到來

AI 的進步會改變流程,也會改變架構,更會改變開發人員扮演的角色。

// AI 產 Code → AI 用 API (Code) → 接下來會是什麼? ( AI 自己寫 code 給自己用? )�// LLM 擅長大量知識的彙整歸納,各種語言 (包含程式語言) 的無損翻譯。�// 缺的是產生 "設計" 想法,讓 AI 歸納應用翻譯的角色

不要擔心被取代,掌握 AI 時代的基礎能力,善用 AI 加速迭代,抽象化後快速驗證。

// 回顧: 不用寫 code 就能驗證設計的魔法�// 比起寫 code 寫的快,也要開始注意如何寫的對

AI 還不成熟,你還有時間準備,面對 AI 成熟的那一天到來

// 如果 AI 已經夠聰明,已經夠便宜,你會拿來做什麼?�// 如果算力 (GPU) 不再昂貴,不再限制你模型的部署與選擇,你會選擇如何部署?

78 of 80

心得 #1, 思考你的產品服務,未來該用 AI 強化什麼?

結帳

購物車

訂單

型錄

買什麼?

要多少錢?

你是誰?

購買紀錄

(逛街)

會員

WEB

APP

AI - Agent

(安德魯小舖GPTs)

像人一樣對話

自然語言的UX

零售系統 API

AI - Copilot

AI - Copilot

維持既有的UX

擴充對話協助

維持既有的UX

擴充對話協助

79 of 80

心得 #2, 思考你的技術架構,需要補足那些環節?

UI

Controller

(Domain Service)

Data

Skills (API)

Instruction

(persona)

Chat History

(short mem)

Personal Information

Knowledge

(long mem)

LLM

(Copilot)

1. 由你的邏輯判定是否讓 AI 協助

2. 由使用者決定是否向 AI 求助

3. 由你決定要賦予 AI 哪些能力

4. 由你決定 AI 的做事方式

5. 由你決定 AI 的專業知識與個人化 (對使用者)

80 of 80

感謝各位聆聽

# 請記得在滿意度問券給我回饋與評分

# 歡迎到 OST 對談:

13:30-14:10 ROUND 1 @ I棟數位製造區|Andrew Wu