跳至主要內容

用Claude Code做一個AI飲食營養分析Bot:從拍照辨識到條碼查詢的實作紀錄

沒想到在十多年後,因為想做飲食營養控管,所以自己利用 AI 開始做一個簡單的食品營養分析工具,能分析我每餐的飲食是否充足或過量,並提供有依據的飲食建議。

最初的雛形是基於以往曾參與「Food Open Data」倡議的經驗,我希望用最簡單的方式,拍照-->AI辨識與分析-->提供建議,然後統計一段期間的營養攝取狀況。

最初的想法

當我把我的雛形想法告訴 AI 後,Claude Code 很快的就幫我設計好雛形、教我如何申請Telegram Bot,這些步驟都寫得很清楚,整個雛形做好不用半天,我還愣住了,怎麼可能這麼簡單?難怪那些應用程式公司只把飲食營養分析當作一個「附加功能」,主要目的是蒐集其他的生理監測資料,但這些公司蒐集資料的用途,我自己在處理過美國資料經紀公司所販售的資料隱私資訊後,這是值得關心的議題,但不在此篇文章裡討論。

不過,我只專注在飲食分析項目,我覺得這個功能如果可以做好,再想想其他的。最初的想法很宏大,因為家人與自己患有慢性疾病,所以特別針對某些族群設計,但事實上,如果沒有實際的使用情境,可能也無法做出符合需求的產品。

於是我把這個Bot的使用者只鎖定在我自己的飲食分析上,那就簡單多了。

工具與環境限制

我在今年已經改用 Claude Cowork 與 Claude Code 協作,雖然 Claude Code 有一般介面版,但我大多數時間都開著終端機視窗使用 Claude Code,這樣比較能專心工作。

基於使用工具的習慣,我使用 Claude Code 開始建置,當時的模型雖然已經有Opus 4.8,但Sonnet 4.6已綽綽有餘,而後來出現的Fable 5 則用在其他專案裡。

因為只做給自己用,所以選擇最簡單的 Chatbot 形式;也因為我希望可以自由的使用而不是提供過多的個人資料給其他平台,選用 Telegram Bot,而不是台灣人常用的 LINE Bot ,而且 LINE上太多廣告,根本不想開它。

在衡量經濟現實及自我管理資料的想法後,目前這個 Bot 與資料庫只放在我的電腦裡,沒有上雲端,當電腦休眠、網路斷線時,Bot就會停止工作。

雖然只是給我自己使用,但我還是要求資料庫是加密儲存的,匯出資料時也必須加密。

台灣的飲食文化很多元

我不是開發者、也不是營養師,我自己也沒使用過其他的應用程式,所以無從理解在開發飲食營養分析應用程式的工程師們,除使用AI來分析外,有沒有實際去參考飲食營養資料?或是確認 AI 辨識出的東西是否正確?我自己就曾遇過 AI 把粽子辨識成滷雞腿、把茶葉蛋辨識成小饅頭的狀況,而錯誤的辨識結果也會影響到營養分析的結果。那使用者有沒有辦法修正辨識錯誤的結果?我把修改的功能寫進去,可修改食物名稱、份量、熱量,在昨天,我要求它能記住我每次修改後的資訊,做一次改版。

一般使用者無從得知 AI 辨識的依據是什麼,根據哪個飲食指南?資料庫?參考資料與分析出的結果可信度是多少?由於台灣有豐富多元的飲食文化,AI 能否辨識出不同國家料理的營養成份?

在 Claude 的協助下,這些問題都處理好了,我連輸入「Khichari」(印度阿育吠陀小豆粥),這個Bot 都能分析出來。

ai-diet-bot-telegram-screenshot

現在的進度

在我使用 Chatbot 的過程裡,也發現自己食用不少包裝食品,而這些食品通常都會有條碼,於那個在腦袋裡塵封十多年前的專案,又回到眼前--我能否靠掃描條碼就能取得每一份的營養成份資訊?又或是我拍下包裝上的營養成份表,我就可以直接讓 AI 取得資訊?

我把想法告訴Claude,它就開始幫我串接、寫程式、驗證,完成後再讓我實際去掃描一次條碼,並提醒我較知名的品牌比較可能有機會取得資料,但小眾的品牌就不會有。我分別測試義美與元本山的包裝食品,我有取得義美包裝食品的營養成份資訊,元本山則是無法經由條碼取得資訊,改由辨識拍攝的營養成份表取得。

食藥署的開放政府資料

由於 Claude 提醒我,台灣的包裝食品資料並不完整,尤其缺乏本地較小的廠牌的包裝食品資料。於是我想起了以前的食品安全溯源系統,但大概是更換執行團隊或什麼原因,原本的食品安全溯源網站已經不存在了,而食藥署提供「非登不可」與「非追不可」兩個平台,但都不是一般民眾會使用的介面,當我進一步再查找有無開放的API可以介接或是開放政府資料可以下載時,我在政府開放資料平台上找到「食品藥物開放資料平臺 OpenData API」網址,頁面列出的大概都是網站公告的資訊、丟在社群媒體上的懶人包,最後終於找到「食品追溯追蹤系統消費者查詢資料集」,但不是可以介接的 API,我讓Claude幫我寫入更新排程裡。

當我第一眼看到食藥署開放的 API 頁面時,我只能回應「不予置評」,當初行政院的「食品雲」理想,不知道是否在2024年後就沒再延續下去?最近的食安問題,「非登不可」與「非追不可」兩個平台能提供人民什麼協助?

在我寫這篇文章的同時,Claude正在幫我整合資料(使用額度快到期的Fable 5),同時也把 7 天更新一次的頻率寫進去,也因為台灣多元的飲食文化、食品名稱,Claude 也幫我整合同義詞表等這些細微的工作項目。

目的:了解自己的飲食習慣-鈉超標

從原本只想用AI辨識分析自己的飲食資料,到後來我發現AI辨識所依據資料的來源、可信度,都在一個黑盒子裡,基於工作習慣,我需要分析結果有憑有據,為此繞了很大一圈,但這麼大一圈、介接許多資料後,還是有很多地方需要調整,例如只能約略估算食物的份量,但資料庫可能是以 100 g 為單位;便當盒裡雜亂無章擺放的菜與飯,AI也無法正確辨識份量;台灣有很多美味的小吃是不在資料庫裡,只能讓AI去估算。不過我只是給自己使用,我可以再想辦法調整。

在我實際使用幾個星期後,我看著Bot自動產出的報表,雖然有測試資料,但我會記得刪除,保留下來的資料都顯示出我攝取的鈉超標了,而經營養師檢核,都認為我的飲食已偏清淡,但還是有鈉攝取過量的問題。

結尾

昨天晚上我完成掃條碼及辨識成份資料表的功能時,我其實百感交集。當初的 FOOD OpenData,因為各種原因,似乎成為一句口號,我在當時有與其他業者聊過,想過多種應用情境,但都沒有看到產品,我不喜歡安裝無法信任的程式,也不喜歡把自己的生理資料存在一般公司的電腦裡(美其名是存在雲端)。

我一直都在鼓勵許多使用者,把你需要的東西、想要解答的問題丟進AI,它會帶著你逐步從評估、製作雛形到完成、改版……。不再受限於需要花時間等待工程師幫你做雛形,而是直接生成可以用的雛形,再依照使用情境去修改,所有的天馬行空被實現的可能機會增加了,我覺得這才是AI時代的意義。


Image by Bernadette Wurzinger from Pixabay

留言

此網誌的熱門文章

法制追不上AI:缺乏台灣AI基本法子法,公務員使用生成式AI的五大風險

昨晚看新聞,現任台北市長拋出一個政策宣示:未來公務員將配給自動化的AI工具,讓台北市政更「前進」。台北市資訊局也已快速推出 CiviClaw,目標是 2027 年讓每位公務員都能無門檻使用 AI。 這樣的政策方向讓我感到憂心。長期觀測各國個資保護規範的我清楚知道:台灣的個人資料保護主管機關至今仍是「籌備處」,尚未正式運作;《個人資料保護法》的修法呼聲雖久,AI相關條款卻付之闕如;《人工智慧基本法》已於今年1月施行,但高風險AI認定標準的子法至今仍是空白。 有網路、有 IoT 不等於智慧城市,有 AI 當然也不等於智慧城市,應該重視制度能否承接工具帶來的責任。 歐盟已明確禁止業者使用 AI 推測員工或學生的心理狀態;美國聯邦政府要求採購 LLM 時廠商必須提交模型卡與資料卡;韓國 AI 基本法的子法早已配套生效。這些都是台灣政府在推動配給公務員 AI 之前,必須正視的制度差距。 以下我與大家分享長期觀測的內容,由AI協助整理資料: 歐盟:從禁令到揭露義務的多層規制體系 歐盟的AI治理框架是由多部法律疊加起來的立體架構,最底層是2018年施行的 GDPR,處理的是個人資料如何被蒐集、儲存、使用的基礎規則,再來疊是2024年生效的《人工智慧法》(EU AI Act,下稱 AI 法),建立不同風險等級分類管理AI系統,從禁止使用到高強度監管、再到一般透明度義務,形成不同層次。最新的一層則是仍在立法程序中、但主要架構已確立的 Digital Omnibus ,試圖修補 AI 法與 GDPR 之間的規範衝突。 AI 法第50條是最直接影響生成式AI服務的條款,自2026年8月2日起全面適用。根據這條規定,凡是讓使用者與AI系統互動的業者,必須主動告知對方「正在與 AI 互動」,而不能讓人誤以為面對的是真人。AI生成的文字、影像、音訊等內容,還必須以機器可讀的格式加上標記,使平台與監管機關得以溯源辨識。與此同時,AI法第14條要求高風險AI系統必須設計成「可由自然人有效監控」的形式,確保機器的決策不會在缺乏人工審核的情況下直接作用於當事人。 AI法所稱的「高風險 AI 」,涵蓋的場景比一般想像的廣。依該法附件三列舉,生物辨識系統、關鍵基礎設施管理、教育與職業篩選、就業與人員管理、信貸與社會福利申請審核、執法、移民邊境管制,以及司法審判輔助,都在高風險範疇之內。這些場景的業者必須進...

停不下來的更新

一直更新Blog的版型,我必須承認是一件很無聊的事,不過這次除了版型的更動外,連分類和文章內文也做了變動。 先說分類吧!在Blogger叫做Label,不過,Blogger在分類上有一些bugs,只能使用英文,以前這裡的分類大多都是中文分類,結果在link上就是一堆亂七八糟的亂碼,所以我把它改成英文,同時細分一些項目,把出版的文章和一些教學的文章分開來,雖然已經很久沒寫新的,不過既然放上來就做個分類。然而就在新舊label移轉之後,發現中文的label還會存在,而且還會出現莫名奇妙的幽靈數字,Blogger知道這是個bug,不過似乎一直沒有修復的跡象。所以在分類上就出現了如右圖一般的情況,在英文標籤裡會有文章,但是在中文標籤裡是沒有文章出現的,但奇怪的是,有些中文標籤已經不見了,然而在Beauty-Beta這個部落格裡,我也做了分類上的變動,由於以前用英文開頭的Label,所以在label的變動上倒是不用擔心會有這樣的情況。 再來是文章的內容,把以前的文章重新分類,標題前面的一些全形符號或是分類刪掉,除了一些比較特殊的,我會留著,例如壹陸壹,因為在label裡為了統一,我留著原本的E61,但人家的店名是壹陸壹,所以留下文章標題前面的中文分類,另外像是Entertainment項目裡,可能有音樂,可能有電影,就會在前面留下中文分類。 前簡單的CSS和HTML改成現在的XML,這無疑是讓我們再多學些東西,能有時間鑽研當然是好事,可是轉換後,我一直沒有時間去改,當然多半也是因為懶,到現在也是拿別人做好的版型去改配色而已,所以像裡面的設定、安裝的widget和analytics的javascript都要一個一個重新裝,上個星期幾乎每天都弄到天亮才睡,只為了整理這個blog。也因為之前在blog裡放了technorati的分類,所以還要修改以前的文章,把它們加入technorati,還有裡面的語法要更改,所以這個星期甚至下個星期都會一直收到這裡的更新訊息,對於不斷收到訊息干擾的朋友們,在這裡說聲抱歉。 在版面上因為blogger系統在feed接受上的更新,所以還有四個東西沒加進去,分別是最近的文章(Recent Post)、Comments(目前是用別人寫的widget)還有GVO的feed訂閱顯示、Beauty-Beta的訂閱顯示也都還沒放上去。 在Feed訂閱上,以前bl...

哪個應用、服務、平台可以代表台灣?

大概 2003、 2004 年,我還是個大學生,那個時候「電子商務」是一門選修課,那個時候台灣還在所謂的電子商務泡沫化中復甦,很多熱極一時的「電子商務」就像今天大家看到的 FTX 事件一樣,一點都不真實,很多執行長、總裁瞬間就失業了,也有很多投資人的錢拿不回來。 看過歷史上的鴻源事件、經歷過電子商務的虛無飄渺時期,再看到 FTX,其實也不會太驚訝。通常泡沫消散後,未來才會到來。 回到大學課堂,穿著輕便但言語犀利的老師談到當時的 Amazon 網路書店,他問大家對 Amazon網路書店的看法,那時的Amazon一直被看壞,所有的媒體都不看好它。甚至會有各種市場傳言,覺得 Amazon會被賣給哪家公司或哪家公司、網路書店會主動併購它。 最後老師說,不會,Amazon書店不會那麼輕易就垮掉,它有其代表的意義。 這個答案給了我很深的印象,我常會問自己,台灣有哪個服務會具有這樣的意義? 偶爾我會問身邊的朋友、同事,對於台灣的哪個服務,會覺得有不能輕易垮掉、要支持它的?我列一下自己所接觸過的,這個世代的應用: 通訊服務:ICQ、MSN Messenger、LINE、Cubie Messenger(台灣,已無服務)、Google Talk、WhatsApp、Telegram、Skype、Signal,還有一些台灣可能較少聽到。 社群平台:Twitter、Facebook、LinkedIn、無名小站(已停止服務,它雖然是Blog,但比較像社群)、Plurk、PTT、Dcard、Instagram、AKASHA、Pinterest Blog平台或架站:Blogger、Wordpress、Drupal 共享書籤 : HemiDemi(已沒有提供書籤服務)、美味書籤delicious 叫車服務:UBER、55688 、呼叫小黄、LINE Taxi、yoxi  當然還有很多是我沒接觸過的,請原諒我的見識不夠廣泛,忽略了哪一個平台、應用或服務。一時想到的大概就這些。有一些服務已經消失或在被併購後就消失了,我也忘了名稱,至於 TikTok 和小紅書,是我不想碰觸的應用服務。 在韓國有 Kakao,日本有 LINE、PayPay,東南亞國家有Grab,中國有自己的網路應用,那台灣呢?之前 KaKao 中斷服務,造成民生應用的線上服務也幾乎中斷,過度集中依賴在一個服務上的確是一個缺點。在和...