iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
AI & Data

AI 營養師 + Web3 數位健康護照系列 第 19

Day19. 用 Flask 規劃 AI 營養顧問的專案架構 Ep .7:加入 Google Gemini API,分析使用者提供的資料

  • 分享至 

  • xImage
  •  

今天的任務就是要將使用者在 index.html 提供的資料,經過 Gemini 分析後,顯示在 result.html

示意流程圖

https://ithelp.ithome.com.tw/upload/images/20251014/20129220Eqv2XUqzjd.jpg

本日重點

  • 認識 Google Gemini API 及其適用場景
  • 如何串接 Gemini API 至 Flask 應用進行資料分析
  • 使用 Gemini 進行健康資料語意理解與建議產生的步驟
  • 範例:串接、傳遞與解析 Gemini API 回應
  • Gemini AI 在個人化健康管理應用的創新價值

一、準備工作

1. 目前的專案架構:

AI_Nutri_Project/
├── app.py                # Flask 應用程式主程式
├── credentials.json      # Google OAuth 憑證
└── templates/
    ├── index.html        # 輸入/首頁 UI
    └── results.html      # 分析結果 UI

由於 app.py 目前已經有個 Google Fit 了,如果 Gemini 再搬進去的話,有點兒擠...

  • 增加一個 services 資料夾(服務層)

與 Google Fit 相關的寫在 google_fit_service.py;與 Google Gemini 相關的寫在 gemini_service.py

AI_Nutri_Project/
├── app.py                 # Flask 應用程式主程式
├── credentials.json       # Google OAuth 憑證
├── services/              # 服務層
│   ├── gemini_service.py  # 處理 Gemini API 呼叫、JSON 處理
│   └── google_fit_service.py # 處理 Google Fit OAuth & 數據獲取
│
└── templates/             # UI
  • 再增加一個 config 資料夾(配置相關檔案)

可以用來放 Gemini 的 Api Key,以及 Google Fit 的憑證 credentials.json

2. 調整後的專案架構

AI_Nutri_Project/
├── app.py                  # Flask主程式
├── config/                 # 金鑰設定
│   ├── .env                # GEMINI_API_KEY
│   └── credentials.json    # Google Fit憑證
├── services/
│   ├── gemini_service.py   # Gemini串接/JSON處理
│   └── google_fit_service.py
└── templates/
    ├── index.html          # 用戶首頁
    └── results.html        # 結果頁UI


二、開工~

第一步:安裝和配置環境依賴

請確認目前的 Python 環境中安裝了所有必要的函式庫:

pip install google-genai pillow python-dotenv

第二步:設定 API 金鑰 (.env & app.py)

  1. 在 .env 檔案中加入 GEMINI_API_KEY:
# .env
GEMINI_API_KEY="YOUR_GEMINI_API_KEY"
  1. 修改 app.py 檔案(載入環境變數並設定配置):
import os
from dotenv import load_dotenv
from flask import Flask

load_dotenv() # 載入 .env 檔案

def create_app():
    app = Flask(__name__)
    # 將 API Key 載入到 app.config 中
    app.config['GEMINI_API_KEY'] = os.environ.get("GEMINI_API_KEY") 
    # ... 
    return app

第三步:編輯 gemini_service.py 檔案

import os
from google.genai import Gemini

# 讀取 API Key(建議用 dotenv)
gemini_api_key = os.environ.get("GEMINI_API_KEY")

# 初始化 Gemini 客戶端
client = Gemini(api_key=gemini_api_key)

def analyze_nutrition(user_input):
    try:
        # 準備要送出的 JSON 資料(可根據專案規劃調整欄位)
        payload = {
            "question": user_input["question"],
            "food_image_url": user_input.get("food_image_url", "")
        }
        # Gemini API 串接(假設官方用 analyze 方法)
        response = client.analyze(data=payload)
        # 通常回傳也是 JSON(請參考官方docs)
        result = response.json()
        return {"summary": result.get("summary", "無重點"),
                "nutrients": result.get("nutrients", {}),
                "advice": result.get("advice", [])}
    except Exception as e:
        # 簡明 error handling
        return {"summary": "API出錯,請稍後再試", "nutrients": {}, "advice": [str(e)]}

資料格式說明

  1. 輸入
user_input = {
  "question": "今天午餐熱量多高?",
  "food_image_url": "https://xxx.com/photo.jpg"
}

  1. 回傳
{
  "summary": "今日午餐熱量偏高,蛋白質足夠。",
  "nutrients": {"calories": 805, "protein": 32, "fat": 35},
  "advice": ["多喝水", "明天加蔬菜"]
}


第四步:執行專案

  1. 開啟終端機,確認是在專案根目錄下
  2. 下指令 python app.py

https://ithelp.ithome.com.tw/upload/images/20250929/20129220VtCJkAggla.jpg


三、延伸閱讀


上一篇
Day18. 用 Flask 規劃 AI 營養顧問的專案架構 Ep .6:Vibe Coding 有風險,寫程式需謹慎,部署前請詳閱資安說明書。
下一篇
Day20. 只是為了流行才用 MCP(模組上下文協議)協作嗎?一起來看「春秋戰國時代」如何實現 MCP~
系列文
AI 營養師 + Web3 數位健康護照38
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言