上一篇講完「為什麼」要用生成式 AI,這篇要更具體一點:AI 說要負責「理解語意」,但具體在這個系統裡,它實際上做了什麼、又刻意不做什麼?
什麼是「呼叫一次 LLM」?
跟 LLM 互動的基本模式很單純:送一段文字(連同要它做什麼的指示)過去,它回傳一段文字——這一來一回,就是「呼叫一次」。每次呼叫都是獨立的,模型不會自己記得上一次呼叫發生過什麼事,除非把之前的內容也放進這次的輸入裡。
設計鐵律具體長怎樣
Day5 講了這個專案的設計鐵律:AI 不算營養數字。這篇要把這句話拆成程式碼裡實際發生的事——LLM 在這個系統裡,實際上只有兩種呼叫(其中第二次呼叫最多會重試一次)。

第一次呼叫:freeText → DietaryAnalysis
第二次呼叫:DietaryAnalysis + 營養計算結果 + 候選食物清單 → Menu
referencedFoodIds)、搭配一句自然語言建議什麼是「緩衝餐」?
真實食物的份數是固定值(一個便當就是固定幾份,沒辦法微調成剛好 0.3 份),AI 選完食物後,全天加總很難剛好等於目標。所以程式會指定一餐當「緩衝餐」,專門吸收這個落差:
中間所有「數字」相關的計算,全部發生在這兩次呼叫之外:BMR/TDEE/三大營養素/六大類份數目標的計算在第一次呼叫之前,試算食物的真實份數的double check計算在第二次呼叫之後。Food DB 目前還沒有介紹到,之後會再說明食物資料庫這一塊。
LLM 在這個架構裡,說到底只做兩件事:把非結構化文字變成結構化資料,以及在有限選項裡做出貼近使用者需求的選擇——這兩件事剛好都是規則邏輯很難做、但語言模型天生擅長的地方;反過來,「算數字」是規則邏輯的強項、語言模型的弱項。這條界線劃在這裡,不是隨便決定的,是刻意讓每個工具做它真正擅長的事。下一篇要介紹的是這兩次呼叫實際打去的地方——Amazon Bedrock。