1. ภาพรวม
ในโลกที่มีความเสี่ยงสูงของอุตสาหกรรมที่มีการควบคุมและมีความสำคัญต่อภารกิจ องค์กรต่างๆ ต้องเผชิญกับความขัดแย้งครั้งใหญ่ นั่นคือ คุณจะนำ AI ที่ล้ำสมัยมาใช้เพื่อเพิ่มประสิทธิภาพการผลิตได้อย่างไร ในเมื่อนโยบายการรักษาความปลอดภัยทางไซเบอร์กำหนดว่าข้อมูลของคุณต้องไม่เข้าถึงอินเทอร์เน็ตสาธารณะ อินทราเน็ตและอินเทอร์เน็ตสาธารณะจะแยกออกจากกันอย่างชัดเจนและไม่มีการเชื่อมต่อกัน แม้ว่าการผลิตสมัยใหม่จะต้องการ AI แบบคาดการณ์อย่างมากเพื่อป้องกันความล้มเหลวของอุปกรณ์ที่ร้ายแรงและเพิ่มประสิทธิภาพผลผลิต แต่การส่งบันทึกการตรวจวัดระยะไกลที่มีความละเอียดอ่อน สูตรโลหะผสมที่จดสิทธิบัตร หรือข้อมูล ERP ไปยัง Cloud API สาธารณะนั้นเป็นสิ่งที่ไม่ควรทำ ดังนั้น หากข้อมูลไม่สามารถส่งไปยังระบบคลาวด์ได้ ระบบคลาวด์ก็ต้องมาหาข้อมูลแทน
ใน Codelab นี้ เราจะนำเครื่องมือ AI และข้อมูลที่ล้ำสมัยที่สุดของ Google Cloud มาใช้ในสภาพแวดล้อมที่ไม่มีการเชื่อมต่อและมีความปลอดภัยสูงโดยตรงด้วย Gemma 4 และ AlloyDB Omni
AlloyDB Omni: ตู้เซฟข้อมูลที่ดีที่สุด
ให้คิดว่า AlloyDB Omni เป็นห้องนิรภัยประสิทธิภาพสูง ซึ่งเป็นฐานข้อมูลระดับองค์กรที่อยู่ในคอนเทนเนอร์ซึ่งคุณดาวน์โหลดและเรียกใช้บนอินทราเน็ตที่ปลอดภัยของคุณเองทั้งหมด
- การผสานรวมที่ราบรื่น: เชื่อมต่อกับเซ็นเซอร์การผลิต (เช่น VIM หรือเครื่องอัดแรงดันสูง) และ ERP ในพื้นที่ (เช่น Oracle R12) โดยตรง
- พื้นที่เก็บข้อมูลที่พร้อมใช้งาน AI: จัดเก็บเอกสารกระบวนการที่เป็นความลับสุดยอดอย่างปลอดภัยโดยใช้การฝังเวกเตอร์สำหรับการค้นหาด้วย AI (pgvector)
- ประสิทธิภาพ: มีประสิทธิภาพเหนือกว่า PostgreSQL มาตรฐานอย่างมากทั้งสำหรับภาระงานด้านธุรกรรมจำนวนมากและการประมวลผลด้วย AI เชิงวิเคราะห์
ผู้เชี่ยวชาญ AI ในพื้นที่: Gemma, TimesFM, TabFM
คุณสามารถดาวน์โหลดโมเดล Open-Weights และเรียกใช้โมเดลดังกล่าวในฮาร์ดแวร์ในเครื่องได้โดยตรงโดยไม่มีการรั่วไหลของ API แทนการใช้ API ระยะไกล
- Gemma: LLM แบบโอเพนเวตของ Google ทำหน้าที่เป็นผู้เชี่ยวชาญด้านการวิจัยและพัฒนา โดยสามารถอ่านบันทึกย้อนหลังหรือวิเคราะห์สูตรโลหะผสมที่ซับซ้อนและได้รับการจดสิทธิบัตรได้อย่างปลอดภัยเพื่อคาดการณ์คุณสมบัติทางกล
- TimesFM (The Numerical Forecaster): เนื่องจากบางครั้ง LLM อาจสร้างตัวเลขที่ผิดพลาด เครื่องจักรขนาดใหญ่จึงต้องใช้โมเดลพื้นฐานอนุกรมเวลาโดยเฉพาะ TimesFM คาดการณ์แนวโน้มตัวเลขในระยะยาวได้อย่างแม่นยำ (สูงสุด 16,000 จุดข้อมูล) โดยอ่านบันทึกการสั่นสะเทือนและอุณหภูมิเพื่อคาดการณ์เส้นโค้งความล้มเหลวของอุปกรณ์ได้อย่างแม่นยำแบบออฟไลน์ทั้งหมด
- TabFM (The Tabular Reasoner): แม้ว่า LLM จะจัดการข้อความและ TimesFM จะจัดการแนวโน้มเชิงตัวเลข แต่ TabFM มีความเชี่ยวชาญในการให้เหตุผลเกี่ยวกับข้อมูลตารางที่มีโครงสร้าง คุณสามารถเรียกใช้โมเดลนี้ในองค์กรได้อย่างปลอดภัยเพื่อทำการวิเคราะห์ที่ซับซ้อนและตอบคำถามโดยตรงจากข้อมูล ERP หรือ CRM แบบหลายคอลัมน์ที่หนาแน่น โดยไม่จำเป็นต้องเขียนการรวม SQL ที่ซับซ้อน
กรณีการใช้งาน
การบำรุงรักษาเชิงคาดการณ์สำหรับเครื่องอัดขึ้นรูปขนาด 1,500 ตัน:
ช่วงเวลาที่ระบบหยุดทำงานโดยไม่ได้วางแผนไว้ในเครื่องจักรขนาดใหญ่นี้จะทำให้การผลิตหยุดชะงัก ซึ่งทำให้เสียเวลาและวัสดุสำคัญไปอย่างมาก ในทางกลับกัน การบำรุงรักษาตามกำหนดเวลามักจะเปลี่ยนชิ้นส่วนที่มีราคาแพงเร็วเกินไป ทำให้เสียงบประมาณโดยเปล่าประโยชน์ เราต้องเปลี่ยนจากการบำรุงรักษาเชิงรับเป็นการบำรุงรักษาเชิงคาดการณ์โดยไม่ทำลาย Air Gap

สิ่งที่คุณจะได้เรียนรู้
ใน Codelab นี้
- คุณจะใช้ AlloyDB Omni เพื่อบันทึกข้อมูลเซ็นเซอร์การสั่นสะเทือนและเซ็นเซอร์อุณหภูมิในเครื่องอย่างปลอดภัย โดยสามารถเพิ่มพารามิเตอร์อื่นๆ เพื่อให้สมจริงและเป็นประโยชน์มากขึ้น
- คุณจะได้เรียนรู้วิธีใช้ Gemma เพื่อวิเคราะห์แนวโน้มเทียบกับบันทึกความล้มเหลวที่ผ่านมา
- คุณจะสร้างระบบที่คาดการณ์ความล้มเหลวและจำลองการทริกเกอร์ใบสั่งงานการจัดการสินทรัพย์ใน ERP โดยอัตโนมัติ
เราใช้ Docker เพื่อจัดสรรทั้ง LLM ในเครื่องและ AlloyDB Omni ข้อดีของแนวทางนี้คือความเรียบง่าย โดย AlloyDB Omni สามารถจัดการกระบวนการ ML-Agent ภายในของตนเองได้โดยอัตโนมัติ
ข้อกำหนด
- มีความคุ้นเคยกับ SQL ขั้นพื้นฐาน
- Linux VM มาตรฐาน (เช่น Ubuntu 22.04) หรือเครื่องภายใน (macOS/Windows) ที่ติดตั้ง Docker
2. เริ่ม LLM ในเครื่อง (Gemma 4)
เราจะใช้ Ollama เพื่อโฮสต์ Gemma ในเครื่อง สร้าง Dockerfile เพื่อกำหนดค่าอินสแตนซ์ Ollama ดังนี้
- จากเครื่องของคุณ ให้เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัลทีละคำสั่ง
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
- สร้างและเรียกใช้คอนเทนเนอร์ในเครือข่ายโฮสต์โดยทำดังนี้
docker build -t gemma4-local .
docker run --network host -d -p 8080:8080 --name gemma4-ollama-instance gemma4-local
- คุณทดสอบได้โดยใช้คำสั่งต่อไปนี้
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
หากไม่พบอิมเมจ AlloyDB Omni จากโปรเจ็กต์ที่อยู่ในระบบคลาวด์ Google Cloud ให้ลองตรวจสอบสิทธิ์โดยเรียกใช้คำสั่งก่อนที่จะเรียกใช้คำสั่ง docker run ด้านบน
gcloud auth login
เมื่อการตรวจสอบสิทธิ์เสร็จสมบูรณ์แล้ว ให้ลองเรียกใช้คำสั่ง docker run อีกครั้ง
4. เปิดใช้ ML-Agent ภายใน
โดยค่าเริ่มต้น ฟีเจอร์การผสานรวม ML ของ AlloyDB Omni จะปิดอยู่ เราต้องแก้ไขไฟล์ postgresql.conf ภายในคอนเทนเนอร์เพื่อเปิดใช้กระบวนการ ML-Agent ภายในและเครื่องมือค้นหา 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 ไปยังเซิร์ฟเวอร์ Ollama ในเครื่องที่ทำงานบนพอร์ต 8080
เรียกใช้คำสั่ง SQL ต่อไปนี้จากพรอมต์ psql ในเทอร์มินัล
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';
เอาต์พุต:

เมื่อเราได้ทดสอบกับกรอบการทดสอบทั่วไปแล้ว มานำข้อมูลกรณีการใช้งานมาพิจารณากัน
6. สร้างสคีมาและนำเข้าข้อมูล
ตอนนี้เรามาต่อยอดกรณีการใช้งานด้วยการสร้างสคีมาและข้อมูลที่จำเป็นสำหรับการสาธิตกัน
เรียกใช้คำสั่ง SQL ต่อไปนี้จากพรอมต์ psql ในเทอร์มินัล
-- ==============================================================================
-- 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;
การเรียกใช้คำสั่งข้างต้นทีละรายการควรให้ผลลัพธ์ดังนี้

เมื่อข้อมูลพร้อมแล้ว เรามาสร้างแดชบอร์ดการบำรุงรักษาเชิงคาดการณ์กัน
7. การสร้างแดชบอร์ดไลฟ์สด
หากต้องการเห็นภาพสถาปัตยกรรมนี้อย่างแท้จริง คุณสามารถเชื่อมต่อสถาปัตยกรรมนี้กับแดชบอร์ด Python Flask ซึ่งเป็นเว็บแอปพลิเคชันได้อย่างง่ายดาย
แบ็กเอนด์ Flask ที่มีขนาดเล็กจะสตรีมการตรวจวัดระยะไกลของเซ็นเซอร์แบบเรียลไทม์ไปยังแดชบอร์ด HTML แทนที่จะเรียกใช้การค้นหา SQL ด้วยตนเอง ในระหว่างการทำงานปกติ แดชบอร์ดจะแสดงกราฟเท่านั้น
แต่เมื่อแบ็กเอนด์ตรวจพบความผิดปกติ (เช่น แรงดันลดลง) โค้ด Python จะเรียกใช้ฟังก์ชัน google_ml.predict_row() ภายใน AlloyDB ทันที AlloyDB จะส่งต่อบริบทไปยังโมเดล Gemma ในเครื่องอย่างราบรื่น และข้อมูลวิเคราะห์เชิงลึกของ AI จะปรากฏบนแดชบอร์ดแบบเรียลไทม์
💡 เคล็ดลับสำหรับ Codelab: หากต้องการออกจากคอนเทนเนอร์ฐานข้อมูลและกลับไปที่บรรทัดคำสั่งของโฮสต์ ให้พิมพ์ \q แล้วกด Enter (หรือเปิดแท็บเทอร์มินัลใหม่) จากนั้นให้เรียกใช้คำสั่งแอปพลิเคชัน Flask ด้านล่าง
หากต้องการทำสิ่งต่อไปนี้
- ไปที่สภาพแวดล้อมในการพัฒนาซอฟต์แวร์ / ตัวแก้ไขโค้ด แล้วเปิดเทอร์มินัล
- เรียกใช้คำสั่งต่อไปนี้
pip install flask psycopg2-binary
- โคลนที่เก็บโค้ดในไดเรกทอรีโปรเจ็กต์โดยเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล Cloud Shell
git clone https://github.com/AbiramiSukumaran/gemma4-alloydb-omni-demo
- ไปที่โฟลเดอร์โปรเจ็กต์
cd gemma4-alloydb-omni-demo
- เรียกใช้แอปพลิเคชัน
python3 app.py
เปิดเว็บเบราว์เซอร์หรือคลิกลิงก์ไปยังแอปที่ทำงานใน Localhost

ข้อมูลที่แสดงในแดชบอร์ดไลฟ์สด
แอปพลิเคชัน Flask ทำหน้าที่เป็นแดชบอร์ดการตรวจสอบแบบเรียลไทม์สำหรับเครื่องอัดขึ้นรูปขนาด 1,500 ตัน โดยแสดงภาพวิธีที่ระบบที่แยกออกจากเครือข่ายและออฟไลน์โดยสมบูรณ์จัดการกับการบำรุงรักษาเชิงคาดการณ์ ดังนี้
- สตรีมการตรวจวัดระยะไกลอย่างต่อเนื่อง: แดชบอร์ดจะแสดงบันทึกการสั่นสะเทือน (มม./วินาที) และแรงดันไฮดรอลิก (บาร์) แบบเรียลไทม์ โดยอัปเดตแบบไดนามิกเพื่อจำลองการทำงานในโรงงานที่กำลังดำเนินอยู่
- ความผิดปกติของฐานข้อมูลแบบเรียลไทม์: เมื่อเซ็นเซอร์ลดลงต่ำกว่าเกณฑ์ (เช่น แรงดันลดลงต่ำกว่า 260 บาร์) แบ็กเอนด์ Python จะแจ้งเหตุการณ์และเรียกใช้ฟังก์ชัน
google_ml.predict_row()ภายใน AlloyDB Omni ทันที - การวินิจฉัย AI ที่แปลเป็นภาษาท้องถิ่น: AlloyDB Omni จะส่งต่อบริบทแบบเรียลไทม์ไปยังโมเดล Gemma 4 ในเครื่องของคุณ Gemma ทำหน้าที่เป็นผู้เชี่ยวชาญด้านอุตสาหกรรมในองค์กร โดยวิเคราะห์ข้อมูลการตรวจวัดและพิมพ์การแจ้งเตือนจากการวินิจฉัย (เช่น "คำเตือน: ความดันลดลงและการสั่นสะเทือนสูงบ่งชี้ว่าซีลไฮดรอลิกอาจทำงานล้มเหลว") บนแดชบอร์ดโดยตรง
- ไม่มีการรั่วไหล: การประมวลผล ฐานข้อมูล กราฟ และการให้เหตุผลของ AI ทั้งหมดจะดำเนินการบนโฮสต์ในเครื่องของคุณโดยสมบูรณ์ โดยไม่จำเป็นต้องเชื่อมต่ออินเทอร์เน็ต
8. เส้นทางสู่เวอร์ชันที่ใช้งานจริง
หากต้องการปรับขนาดสถาปัตยกรรมนี้จากต้นแบบในเครื่องไปเป็นการติดตั้งใช้งานในโรงงานระดับที่ใช้งานจริงโดยไม่ลดทอนความปลอดภัยแบบ Air-gapped คุณสามารถเลือกจากเส้นทางการติดตั้งในองค์กรแบบมาตรฐาน 2 เส้นทางต่อไปนี้
VM เวอร์ชันที่ใช้งานจริงและ Bare-Metal (ไม่มีคอนเทนเนอร์):
สำหรับสภาพแวดล้อมที่ไม่ต้องการใช้คอนเทนเนอร์หรือนโยบายความปลอดภัยกำหนดให้ต้องผสานรวมกับระบบปฏิบัติการโฮสต์อย่างลึกซึ้ง คุณสามารถติดตั้งใช้งานโดยใช้แพ็กเกจ RPM ของ AlloyDB Omni อย่างเป็นทางการ การติดตั้งใช้งานนี้จะช่วยให้คุณได้รับประสิทธิภาพที่มีเวลาในการตอบสนองต่ำ การปฏิบัติตามข้อกำหนดของ SELinux และความพร้อมใช้งานสูง (HA) แบบอัตโนมัติไปยัง RHEL หรือ Rocky Linux VM ในเครื่องโดยตรงแบบออฟไลน์ทั้งหมด โดยมี AlloyDB Omni Red Hat RPM Orchestrator เป็นตัวช่วย
Production Kubernetes & HA:
หากโครงสร้างพื้นฐานของโรงงานใช้การจัดการภายใน คุณสามารถติดตั้งใช้งาน AlloyDB Omni ใน Kubernetes ได้ เมื่อใช้ AlloyDB Omni Kubernetes Operator อย่างเป็นทางการ คุณจะสามารถทำให้คลัสเตอร์ฐานข้อมูลที่มีประสิทธิภาพใช้งานได้ในรูปแบบที่ประกาศไว้ พร้อมด้วยแบบจำลองสแตนด์บายแบบซิงโครนัส การสำรองข้อมูลในเครื่องแบบอัตโนมัติ และปลายทางแบบอ่านอย่างเดียวโดยเฉพาะ
9. ยินดีด้วย
สำหรับอุตสาหกรรมการผลิตด้านการป้องกันและอุตสาหกรรมที่แยกออกจากเครือข่ายภายนอก (Air-gapped) เช่นนี้ ตัวเลือกไม่ได้จำกัดอยู่แค่ระหว่างการรักษาความปลอดภัยที่เข้มงวดกับนวัตกรรมทางเทคโนโลยีอีกต่อไป การติดตั้งใช้งานฐานข้อมูลที่ใช้คอนเทนเนอร์ โมเดลพร็อกซีเฉพาะทาง และ AI แบบโอเพนเวตบนฮาร์ดแวร์ที่มีอธิปไตยจะช่วยให้คุณเปลี่ยนโรงงานให้กลายเป็นศูนย์กลางการคาดการณ์อัจฉริยะได้ โดยที่ยังคงรักษาความปลอดภัยทางดิจิทัลไว้ได้อย่างสมบูรณ์