1. Ringkasan
Dalam dunia industri yang sangat penting dan diatur secara ketat, organisasi menghadapi paradoks besar: Bagaimana cara mengadopsi AI mutakhir untuk mengoptimalkan produksi ketika kebijakan pengamanan cyber Anda mengamanatkan bahwa data Anda tidak boleh menyentuh internet publik? Intranet dan Internet publik dipisahkan secara ketat, dan tidak pernah bersentuhan. Meskipun manufaktur modern sangat membutuhkan AI prediktif untuk mencegah kegagalan peralatan yang fatal dan mengoptimalkan hasil, mengirimkan log telemetri sensitif, resep campuran logam yang dipatenkan, atau data ERP ke API cloud publik pada praktiknya tidak mungkin dilakukan. Jadi, jika data tidak dapat dipindahkan ke cloud, cloud harus dibawa ke data.
Dalam codelab ini, kita akan menghadirkan alat data dan AI tercanggih dari Google Cloud langsung ke lingkungan yang sangat aman dan terputus dengan Gemma 4 dan AlloyDB Omni.
AlloyDB Omni: Brankas Data Terbaik
Anggap AlloyDB Omni sebagai brankas berperforma tinggi. Ini adalah database dalam container tingkat perusahaan yang Anda download dan jalankan sepenuhnya di Intranet aman Anda sendiri.
- Integrasi yang Lancar: Terhubung langsung ke sensor manufaktur (seperti VIM atau mesin press berat) dan ERP lokal (seperti Oracle R12).
- Penyimpanan Siap AI: Menyimpan lembar proses rahasia dengan aman menggunakan embedding vektor untuk penelusuran AI (pgvector).
- Performa: AlloyDB jauh mengungguli PostgreSQL standar untuk workload transaksional yang berat dan pemrosesan AI analitis.
Pakar AI Lokal: Gemma, TimesFM, TabFM
Daripada menggunakan API jarak jauh, Anda dapat mendownload model open-weights dan menjalankannya secara native di hardware lokal tanpa kebocoran API.
- Gemma: LLM open-weights Google bertindak sebagai pakar R&D Anda. Gemini dapat membaca log historis dengan aman atau menganalisis resep campuran logam yang kompleks dan dipatenkan untuk memprediksi sifat mekanis.
- TimesFM (Peramal Numerik): Karena LLM terkadang dapat berhalusinasi angka, mesin berat memerlukan Model Dasar Deret Waktu khusus. TimesFM secara akurat memprediksi horizon numerik jangka panjang (hingga 16.000 titik data), membaca log getaran dan suhu untuk memperkirakan kurva kegagalan peralatan yang tepat — sepenuhnya secara offline.
- TabFM (Tabular Reasoner): Meskipun LLM menangani teks dan TimesFM menangani tren numerik, TabFM mengkhususkan diri dalam penalaran atas data tabel terstruktur. Anda dapat menjalankannya dengan aman di infrastruktur lokal untuk melakukan analisis kompleks dan menjawab pertanyaan langsung dari Data ERP atau CRM yang padat dan memiliki banyak kolom tanpa perlu menulis SQL join yang rumit.
Kasus Penggunaan
Pemeliharaan prediktif pada Mesin Tempa 1.500 Ton:
Periode nonaktif yang tidak direncanakan pada mesin besar ini menghentikan produksi, sehingga membuang banyak waktu dan bahan penting. Sebaliknya, pemeliharaan terjadwal sering kali mengganti suku cadang yang mahal terlalu dini, sehingga memboroskan anggaran. Kita perlu beralih dari pemeliharaan reaktif ke pemeliharaan prediktif tanpa merusak air-gap.

Yang akan Anda pelajari
Dalam codelab ini:
- Anda akan menggunakan AlloyDB Omni untuk mengambil data sensor getaran dan suhu secara aman dan lokal. Anda dapat menambahkan lebih banyak parameter untuk membuatnya lebih realistis dan berguna.
- Anda akan mempelajari cara menggunakan Gemma untuk menganalisis tren berdasarkan log kegagalan historis.
- Anda akan membangun sistem yang memprediksi kegagalan dan memicu tiruan perintah kerja Pengelolaan Aset di ERP Anda secara otomatis.
Kami mengandalkan Docker untuk menyediakan LLM lokal dan AlloyDB Omni. Keunggulan pendekatan ini adalah kesederhanaannya: AlloyDB Omni dapat otomatis mengelola proses ML-Agent internalnya sendiri.
Persyaratan
- Pemahaman dasar mengenai SQL.
- VM Linux standar (misalnya, Ubuntu 22.04) atau mesin lokal (macOS/Windows) yang telah diinstal Docker.
2. Memulai LLM Lokal (Gemma 4)
Kita akan menggunakan Ollama untuk menghosting Gemma secara lokal. Buat Dockerfile untuk mengonfigurasi instance Ollama:
- Dari komputer lokal Anda, jalankan perintah berikut di terminal, satu per satu:
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
- Bangun dan jalankan container di jaringan host:
docker build -t gemma4-local .
docker run --network host -d -p 8080:8080 --name gemma4-ollama-instance gemma4-local
- Anda dapat mengujinya menggunakan perintah:
curl -X POST http://localhost:8080/api/generate -d '{
"model": "gemma4:e2b",
"prompt": "Hello! Explain Gemma 4 in a few sentences."
}'
3. Menginstal dan Memulai AlloyDB Omni
Selanjutnya, jalankan container database AlloyDB Omni, juga di jaringan host:
docker run -d \
--name my-omni \
--network host \
-e POSTGRES_PASSWORD=omni \
gcr.io/alloydb-omni/alloydbomni:18
Jika image AlloyDB Omni tidak dapat ditemukan dari project Google Cloud Anda, coba lakukan autentikasi dengan menjalankan perintah sebelum Anda menjalankan perintah docker run di atas:
gcloud auth login
Setelah autentikasi selesai, coba jalankan kembali perintah docker run.
4. Mengaktifkan Internal ML-Agent
Secara default, fitur integrasi ML AlloyDB Omni dinonaktifkan. Kita perlu mengubah file postgresql.conf di dalam container untuk mengaktifkan proses ML-Agent internal dan mesin kueri AI.
Jalankan perintah tunggal ini untuk menambahkan flag yang diperlukan:
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"
Mulai ulang container untuk menerapkan perubahan:
docker restart my-omni
Anda dapat mulai menguji kueri dengan memulai psql menggunakan perintah:
docker exec -it my-omni psql -U postgres
5. Mengarahkan AI ke LLM Lokal
Setelah terhubung ke database melalui psql (docker exec -it my-omni psql -U postgres), Anda dapat mendaftarkan model lokal yang tidak terhubung ke jaringan. Daripada memanggil ke internet, arahkan model_request_url ke server Ollama lokal yang berjalan di port 8080.
Jalankan pernyataan SQL berikut dari prompt psql di terminal:
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'
);
Sekarang Anda dapat memanggil prediksi dengan aman dari dalam SQL:
SELECT google_ml.predict_row(
'gemma4:e2b',
'{"model": "gemma4:e2b", "prompt": "Why is the sky blue?", "stream": false}'
)->'response';
Output:

Setelah mengujinya pada kasus pengujian umum, mari kita masukkan data kasus penggunaan kita ke dalam gambaran.
6. Membuat Skema dan Menyerap Data
Sekarang, mari kita kembangkan kasus penggunaan kita dengan membuat skema dan data yang diperlukan untuk demonstrasi.
Jalankan pernyataan SQL berikut dari prompt psql di terminal:
-- ==============================================================================
-- 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;
Menjalankan pernyataan di atas satu per satu akan menghasilkan hasil berikut:

Setelah data siap, mari kita lanjutkan ke pembuatan dasbor pemeliharaan prediktif.
7. Membangun Dasbor Live Streaming
Untuk benar-benar memvisualisasikan arsitektur ini, Anda dapat dengan mudah menghubungkannya ke dasbor Python Flask yang merupakan aplikasi web.
Alih-alih menjalankan kueri SQL secara manual, backend Flask yang ringan akan menstreaming telemetri sensor live ke dasbor HTML. Selama operasi normal, dasbor hanya akan memetakan grafik.
Namun, saat backend mendeteksi anomali (misalnya, penurunan tekanan), kode Python akan langsung memicu fungsi google_ml.predict_row() di dalam AlloyDB. AlloyDB meneruskan konteks dengan lancar ke model Gemma lokal Anda, dan insight diagnostik AI muncul di dasbor secara real-time.
💡 Tips Codelab: Untuk keluar dari container database dan kembali ke command line host, ketik \q dan tekan Enter (atau buka tab terminal baru). Kemudian, lanjutkan untuk menjalankan perintah aplikasi Flask di bawah.
Untuk melakukannya:
- Buka lingkungan pengembangan / editor kode Anda, lalu buka terminal
- Jalankan perintah berikut
pip install flask psycopg2-binary
- Buat clone repositori kode di direktori project Anda dengan menjalankan perintah berikut di Cloud Shell Terminal:
git clone https://github.com/AbiramiSukumaran/gemma4-alloydb-omni-demo
- Buka folder project:
cd gemma4-alloydb-omni-demo
- Jalankan aplikasi:
python3 app.py
Buka browser web atau klik link ke aplikasi yang berjalan di localhost Anda.

Yang Ditampilkan Dasbor Live Streaming
Aplikasi Flask berfungsi sebagai dasbor pemantauan real-time untuk Mesin Press Tempa 1.500 Ton, yang memvisualisasikan cara sistem yang sepenuhnya offline dan terisolasi menangani pemeliharaan prediktif:
- Continuous Telemetry Stream: Dasbor ini memetakan log getaran (mm/dtk) dan tekanan hidraulis (bar) secara real-time, yang diperbarui secara dinamis untuk menyimulasikan operasi lantai pabrik yang aktif.
- Anomali Database Langsung: Saat sensor turun di bawah nilai minimum (misalnya, tekanan turun di bawah 260 bar), backend Python akan menandai peristiwa tersebut dan segera memanggil fungsi
google_ml.predict_row()di dalam AlloyDB Omni. - Diagnosis AI yang Dilokalkan: AlloyDB Omni meneruskan konteks real-time ke model Gemma 4 lokal Anda. Gemma bertindak sebagai pakar industri lokal, menganalisis telemetri dan mencetak peringatan diagnostik (misalnya, "Peringatan: Penurunan tekanan dan getaran tinggi menunjukkan potensi kegagalan segel hidraulis") langsung di dasbor.
- Tanpa Kebocoran: Semua komputasi, database, grafik, dan penalaran AI dijalankan sepenuhnya di host lokal Anda tanpa memerlukan konektivitas internet.
8. Jalur ke Produksi
Untuk menskalakan arsitektur ini dari prototipe lokal ke deployment lantai pabrik tingkat produksi tanpa mengorbankan keamanan air-gapped, Anda dapat memilih dari dua jalur penginstalan lokal standar:
VM Produksi & Bare-Metal (Non-Dalam Container):
Untuk lingkungan yang tidak mendukung containerization atau yang memerlukan integrasi mendalam dengan sistem operasi host berdasarkan kebijakan keamanan, Anda dapat melakukan deployment menggunakan paket RPM AlloyDB Omni resmi. Dengan bantuan orchestrator RPM Red Hat AlloyDB Omni, deployment ini menghadirkan performa latensi rendah, kepatuhan SELinux, dan Ketersediaan Tinggi (HA) otomatis langsung ke VM RHEL atau Rocky Linux lokal Anda sepenuhnya secara offline.
Kubernetes Produksi & HA:
Jika infrastruktur pabrik Anda menggunakan orkestrasi lokal, Anda dapat men-deploy AlloyDB Omni di Kubernetes . Dengan memanfaatkan Operator Kubernetes AlloyDB Omni resmi, Anda dapat secara deklaratif men-deploy cluster database yang tangguh dengan replika standby sinkron, pencadangan lokal otomatis, dan endpoint hanya baca khusus.
9. Selamat!
Untuk manufaktur pertahanan dan industri dengan air-gap, pilihannya bukan lagi antara keamanan yang ketat dan inovasi teknologi. Dengan men-deploy database dalam container, model proxy khusus, dan AI open-weights di hardware kedaulatan, Anda dapat mengubah lantai pabrik menjadi pusat kecerdasan prediktif, sekaligus menjaga benteng digital Anda tetap utuh.