運用 Gemma 4 和 AlloyDB Omni,為受監管產業提供先進 AI

1. 總覽

在受監管的重要產業中,組織面臨著巨大的矛盾:如果網路安全政策規定資料絕不能接觸公用網際網路,該如何採用先進的 AI 技術來最佳化生產流程?內部網路和公開網際網路嚴格區隔,絕不互通。雖然現代製造業迫切需要預測性 AI 來防止災難性的設備故障並提高產量,但將敏感的遙測記錄、專利合金配方或 ERP 資料傳送至公有雲 API,在實務上是不可行的。因此,如果資料無法上雲端,雲端就必須來到資料所在位置。

在本程式碼實驗室中,我們將使用 Gemma 4 和 AlloyDB Omni,直接將 Google Cloud 最先進的資料和 AI 工具,導入未連線的高度安全環境。

AlloyDB Omni:終極資料保險箱

AlloyDB Omni 就像高效能金庫,這是一款容器化企業級資料庫,可完全在您自己的安全內部網路下載及執行。

  • 完美整合:直接連結製造感應器 (例如 VIM 或重型壓機) 和本機 ERP (例如 Oracle R12)。
  • AI 專用儲存空間:使用向量嵌入 (pgvector) 安全儲存機密製程表,供 AI 搜尋。
  • 效能:無論是繁重的交易工作負載,還是分析型 AI 處理作業,效能都大幅超越標準 PostgreSQL。

本機 AI 專家:Gemma、TimesFM、TabFM

您可以下載開放權重模型,並在本機硬體上執行,不必使用遠端 API,因此不會有 API 外洩的問題。

  • Gemma:Google 的開放權重 LLM,可做為研發專家。這項工具可安全讀取歷來記錄,或分析複雜的專利合金配方,預測機械性質。
  • TimesFM (數值預測模型):LLM 有時會產生幻覺,因此重型機械需要專用的時間序列基礎模型。TimesFM 可準確預測長期數值範圍 (最多 16,000 個資料點),讀取震動和溫度記錄,預測確切的設備故障曲線,而且完全不需連上網路。
  • TabFM (表格推論模型):LLM 負責處理文字,TimesFM 負責處理數值趨勢,TabFM 則專門推論結構化表格資料。您可以在地端部署環境安全執行這項功能,直接從密集的多欄 ERP 或 CRM 資料執行複雜分析並回答問題,不必編寫複雜的 SQL join。

用途

1500 噸鍛壓機的預測性維護:

如果這類大型機具意外停機,生產作業就會中斷,浪費大量時間和重要材料。相反地,定期維護往往會過早更換昂貴零件,浪費預算。我們需要從被動維護轉為預測性維護,同時不破壞實體隔離。

b00c0159d3e6724.png

課程內容

在本程式碼實驗室中:

  1. 您將使用 AlloyDB Omni,在本機安全擷取震動和溫度感應器資料,並可新增更多參數,讓資料更貼近實際情況且更實用。
  2. 您將瞭解如何使用 Gemma 分析歷來故障記錄的趨勢。
  3. 您將建構一個系統,用於預測故障,並在 ERP 中自動模擬觸發資產管理工作訂單。

我們使用 Docker 佈建本機 LLM 和 AlloyDB Omni。這個方法的好處在於簡單:AlloyDB Omni 可以自動管理內部的 ML-Agent 程序。

需求條件

  • 對 SQL 有基本瞭解。
  • 標準 Linux VM (例如 Ubuntu 22.04) 或已安裝 Docker 的本機電腦 (macOS/Windows)。

2. 啟動本機 LLM (Gemma 4)

我們將使用 Ollama 在本機託管 Gemma。建立 Dockerfile 來設定 Ollama 執行個體:

  1. 在本機電腦的終端機中,依序執行下列指令:
mkdir -p gemma4-ollama && cd gemma4-ollama
cat << 'EOF' > Dockerfile
FROM ollama/ollama:latest
ENV OLLAMA_HOST=0.0.0.0:8080
ENV OLLAMA_MODELS=/root/.ollama
ENV MODEL=gemma4:e2b
RUN ollama serve & sleep 5 && ollama pull $MODEL
ENTRYPOINT ["ollama", "serve"]
EOF
  1. 在主機網路上建構並執行容器:
docker build -t gemma4-local .

docker run --network host -d -p 8080:8080 --name gemma4-ollama-instance gemma4-local
  1. 您可以使用下列指令進行測試:
curl -X POST http://localhost:8080/api/generate -d '{
  "model": "gemma4:e2b",
  "prompt": "Hello! Explain Gemma 4 in a few sentences."
}'

3. 安裝並啟動 AlloyDB Omni

接著,在主機網路上啟動 AlloyDB Omni 資料庫容器:

docker run -d \
  --name my-omni \
  --network host \
  -e POSTGRES_PASSWORD=omni \
  gcr.io/alloydb-omni/alloydbomni:18

如果系統在 Google Cloud 雲端專案中找不到 AlloyDB Omni 映像檔,請先執行下列指令進行驗證,再執行上述 docker run 指令:

gcloud auth login

驗證完成後,請再次嘗試執行 docker run 指令。

4. 啟用內部 ML-Agent

根據預設,AlloyDB Omni 的機器學習整合功能為關閉狀態。我們需要修改容器內的 postgresql.conf 檔案,啟用內部機器學習代理程式程序和 AI 查詢引擎。

執行下列指令,附加必要旗標:

docker exec -it my-omni sh -c "cat << EOF >> /var/lib/postgresql/data/postgresql.conf
omni_enable_ml_agent_process = 'on'
google_ml_integration.enable_model_support = 'on'
google_ml_integration.enable_ai_query_engine = 'on'
EOF"

重新啟動容器,以套用變更:

docker restart my-omni

您可以使用下列指令啟動 psql,開始測試查詢:

docker exec -it my-omni psql -U postgres

5. 將 AI 轉送至本機 LLM

透過 psql (docker exec -it my-omni psql -U postgres) 連線至資料庫後,即可註冊本機離網模型。請將 model_request_url 轉送至在通訊埠 8080 執行的本機 Ollama 伺服器,而非呼叫網際網路。

在終端機的 psql 提示中,執行下列 SQL 陳述式:

CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;

CALL google_ml.create_model(
    model_id => 'gemma4:e2b',
    model_request_url => 'http://localhost:8080/api/generate',
    model_provider => 'custom',
    model_type => 'generic'
);

現在,您可以直接在 SQL 中安全地叫用預測功能:

SELECT google_ml.predict_row(
    'gemma4:e2b',
    '{"model": "gemma4:e2b", "prompt": "Why is the sky blue?", "stream": false}'
)->'response';

輸出內容:

4873acf20ded9dd1.png

我們已在一般測試案例中測試過,現在來看看實際應用案例資料。

6. 建立結構定義並擷取資料

現在,我們來建立示範所需的結構定義和資料,進一步擴充應用實例。

在終端機的 psql 提示中,執行下列 SQL 陳述式:

-- ==============================================================================
-- 1. Setup the Schema for the 1500T Forging Press
-- ==============================================================================
CREATE TABLE IF NOT EXISTS forging_press_logs (
    log_id SERIAL PRIMARY KEY,
    timestamp TIMESTAMP NOT NULL DEFAULT NOW(),
    cycle_id VARCHAR(50) NOT NULL,
    hyd_pressure_bar NUMERIC(5,2),
    oil_temp_c NUMERIC(5,2),
    vib_z_rms NUMERIC(5,2)
);

-- Clean up any existing data if running multiple times
TRUNCATE TABLE forging_press_logs;

-- ==============================================================================
-- 2. Generate 1,000 Records of Simulated Data
-- ==============================================================================
-- 99% of data is 'Normal'
INSERT INTO forging_press_logs (cycle_id, hyd_pressure_bar, oil_temp_c, vib_z_rms)
SELECT
    'C-' || LPAD(i::text, 5, '0'),
    280.0 + (random() * 10 - 5), -- Pressure around 280
    42.0 + (random() * 5),       -- Temp around 42-47
    1.8 + (random() * 0.5)       -- Vib Z around 1.8-2.3
FROM generate_series(1, 990) AS i;

-- 1% of data is 'Anomalous' (Hydraulic pressure drop & vibration spike)
INSERT INTO forging_press_logs (cycle_id, hyd_pressure_bar, oil_temp_c, vib_z_rms)
SELECT
    'C-' || LPAD((990 + i)::text, 5, '0'),
    250.0 + (random() * 5),      -- Pressure dropping
    55.0 + (random() * 5),       -- Temp rising
    5.0 + (random() * 1.5)       -- High vibration
FROM generate_series(1, 10) AS i;

-- ==============================================================================
-- 3. Run the AI Prediction via AlloyDB Omni
-- ==============================================================================
-- Ensure the model is registered (assuming 'gemma4:e2b' is running locally on port 8080)
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;

DO $$ 
BEGIN
    CALL google_ml.create_model(
        model_id => 'gemma4:e2b',
        model_request_url => 'http://localhost:8080/api/generate',
        model_provider => 'custom',
        model_type => 'generic'
    );
EXCEPTION WHEN OTHERS THEN 
    -- Ignore error if model already exists
END $$;

-- Query the most recent 5 potentially anomalous records and ask Gemma for an analysis
SELECT 
    cycle_id,
    hyd_pressure_bar,
    vib_z_rms,
    google_ml.predict_row(
        model_id => 'gemma4:e2b',
        request_body => json_build_object(
            'model', 'gemma4:e2b',
            'stream', false,
            'prompt', 'You are an industrial engineer. Analyze this sensor data from a 1500T forging press: Pressure=' || hyd_pressure_bar || ' bar, Vibration=' || vib_z_rms || ' mm/s. Normal pressure is ~280 bar and normal vibration is ~2.0 mm/s. Does this indicate a hydraulic failure? Answer in one short sentence.'
        )
    )->>'response' AS ai_analysis
FROM 
    forging_press_logs
WHERE 
    hyd_pressure_bar < 260 OR vib_z_rms > 4.5
ORDER BY 
    timestamp DESC
LIMIT 5;

逐一執行上述陳述式後,應會得到以下結果:

e8fabd49e72c225e.png

資料準備就緒後,就可以開始建構預測性維護資訊主頁了!

7. 建構直播資訊主頁

如要真正以視覺化方式呈現這個架構,您可以輕鬆將其連結至 Python Flask 資訊主頁,這是一個網頁應用程式。

輕量 Flask 後端會將即時感應器遙測資料串流至 HTML 資訊主頁,不必手動執行 SQL 查詢。正常運作時,資訊主頁只會繪製圖表。

但如果後端偵測到異常狀況 (例如壓力下降),Python 程式碼就會立即觸發 AlloyDB 中的 google_ml.predict_row() 函式。AlloyDB 會將脈絡資訊順暢轉送至本機 Gemma 模型,AI 的診斷洞察資訊也會即時顯示在資訊主頁上。

💡 程式碼實驗室提示:如要退出資料庫容器並返回主機指令列,請輸入 \q 並按下 Enter 鍵 (或開啟新的終端機分頁)。接著,請執行下方的 Flask 應用程式指令。

步驟如下:

  1. 前往開發環境 / 程式碼編輯器,然後開啟終端機
  2. 執行下列指令
pip install flask psycopg2-binary
  1. 在 Cloud Shell 終端機執行下列指令,將程式碼存放區複製到專案目錄:
git clone https://github.com/AbiramiSukumaran/gemma4-alloydb-omni-demo
  1. 前往專案資料夾:
cd gemma4-alloydb-omni-demo
  1. 執行應用程式:
python3 app.py

開啟網路瀏覽器,或點選連結,前往在 localhost 執行的應用程式。

db2249f5d7f87d4c.png

直播資訊主頁代表的意義

Flask 應用程式是 1500 噸鍛壓機的即時監控資訊主頁,可視覺化呈現完全離線、實體隔離的系統如何處理預測性維護:

  • 持續遙測串流:資訊主頁會繪製即時震動 (mm/s) 和液壓 (bar) 記錄,並動態更新,模擬實際廠區作業。
  • 即時資料庫異常狀況:當感應器數值低於門檻 (例如壓力低於 260 bar),Python 後端會標記事件,並立即呼叫 AlloyDB Omni 內的 google_ml.predict_row() 函式。
  • 本機 AI 診斷:AlloyDB Omni 會將即時情境轉送至本機 Gemma 4 模型。Gemma 扮演地端部署工業專家的角色,分析遙測資料,並直接在資訊主頁上顯示診斷快訊 (例如「警告:壓力下降和高震動表示液壓密封可能故障」)。
  • 零外洩:所有運算、資料庫、圖表和 AI 推論作業,完全在本機主機上執行,不需網際網路連線。

8. 正式版群組路徑

如要將這個架構從本機原型擴充至正式環境等級的工廠部署,同時不犧牲實體隔離安全性,可以選擇兩種標準地端部署安裝方式:

正式環境 VM 和裸機 (非容器化):

如果環境不適合容器化,或安全性政策要求與主機作業系統深度整合,您可以使用官方 AlloyDB Omni RPM 套件部署。在 AlloyDB Omni Red Hat RPM 自動調度管理工具的協助下,這項部署作業可直接在本機 RHEL 或 Rocky Linux VM 上,提供低延遲效能、SELinux 法規遵循和自動化高可用性 (HA),而且完全離線。

正式環境 Kubernetes 和高可用性:

如果工廠基礎架構採用本機自動調度管理,您可以在 Kubernetes 部署 AlloyDB Omni。使用官方 AlloyDB Omni Kubernetes Operator,您就能以宣告方式部署強大的資料庫叢集,並具備同步待命副本、自動本機備份和專屬唯讀端點。

9. 恭喜!

對於國防製造業和這類實體隔離產業,不必再在嚴格安全性和技術創新之間取捨。在主權硬體上部署容器化資料庫、專用 Proxy 模型和開放權重 AI,就能將工廠廠房轉變為智慧型預測中心,同時完整保留數位護城河。