1. Gemma 4 คืออะไร — สรุปสั้นๆ
Gemma 4 คือตระกูลโมเดล AI เปิดจาก Google DeepMind ปล่อยวันที่ 2 เมษายน 2026
สิ่งที่ต้องรู้:
- สร้างจากเทคโนโลยี Gemini 3 — เป็น open-weight version ของโมเดลหลักที่ Google ใช้เอง
- 4 ขนาด ตั้งแต่รันบนมือถือได้ ไปจนถึงระดับ server
- Apache 2.0 license — เปลี่ยนจาก Gemma License แบบเดิมที่มีเงื่อนไข มาเป็นเสรีเต็มรูปแบบ ใช้เชิงพาณิชย์ได้ทันทีโดยไม่ต้องให้ฝ่ายกฎหมายตรวจ
- Multimodal ตั้งแต่แกน — รับ text, image, audio ได้ในโมเดลเดียว ไม่ต้องต่อ pipeline หลายตัว
- รองรับ 140+ ภาษา รวมถึงภาษาไทย
- 31B ติดอันดับ 3 ของโลก บน Arena AI text leaderboard ด้วย Elo ~1452
บทความนี้จะพาตั้งแต่เลือกโมเดล ติดตั้ง ใช้งานแต่ละ feature ไปจนถึง fine-tuning และ deploy จริง ไม่ใช่ข่าว ไม่ใช่ overview — แต่เป็น tutorial ที่ทำตามได้ทีละขั้น
2. เลือกโมเดลไหนดี? — เปรียบเทียบ 4 ขนาด
| Model | Params (Total / Active) | Context | รับ Image | รับ Audio | RAM (Q4) | เหมาะกับ |
|---|---|---|---|---|---|---|
| E2B | 5.1B / 2.3B | 128K | ✓ | ✓ | ~3.2 GB | มือถือ, Edge, ทดลอง |
| E4B | 8B / 4.5B | 128K | ✓ | ✓ | ~5 GB | Laptop, everyday use |
| 26B A4B | 25.2B / 3.8B (MoE) | 256K | ✓ | ✗ | ~15.6 GB | Best bang-for-buck |
| 31B | 30.7B / 30.7B | 256K | ✓ | ✗ | ~17.4 GB | Maximum quality |
คำว่า "E" หมายถึงอะไร?
E ย่อมาจาก Effective — จำนวน parameter ที่ถูก activate จริงตอน inference ตัวอย่างเช่น E2B มี parameter ทั้งหมด 5.1B แต่ตอนรัน activate แค่ 2.3B ทำให้ได้คุณภาพดีกว่าโมเดล 2B ทั่วไป แต่กิน RAM ไม่ต่างกันมาก
26B A4B คือ MoE
โมเดล 26B ใช้สถาปัตยกรรม Mixture of Experts — มี expert หลายตัวแต่แต่ละ request activate แค่ ~3.8B parameters ให้คุณภาพใกล้เคียง 31B แต่ใช้ compute น้อยกว่ามาก ถ้า GPU มี VRAM จำกัดแต่ต้องการคุณภาพสูง นี่คือตัวเลือกที่ดีที่สุด
เลือกยังไง?
- ทดลอง / มือถือ / Edge → E2B
- ใช้งานวันๆ บน laptop → E4B (default ใน Ollama)
- Production ที่ต้องคุณภาพสูง VRAM จำกัด → 26B A4B
- ต้องการคุณภาพสูงสุด มี GPU เพียงพอ → 31B
3. ติดตั้ง — 5 วิธีจากง่ายสุดถึงจริงจัง
3.1 Google AI Studio (ไม่ต้องติดตั้งอะไรเลย)
วิธีที่เร็วที่สุดในการลอง Gemma 4 คือเปิด Google AI Studio แล้วเลือกโมเดล Gemma 4
- ฟรี ไม่ต้องใส่บัตรเครดิต
- รองรับทุกขนาด
- มี API key ให้เรียกผ่าน REST ได้ทันที
- Rate limit: ~15 requests/นาที สำหรับ free tier
เหมาะกับ: ทดลอง prompt, ดูคุณภาพ output ก่อนตัดสินใจรัน local
3.2 Ollama (local, ง่ายที่สุด)
Ollama คือวิธีรัน LLM บนเครื่องตัวเองที่ง่ายที่สุด รองรับ macOS, Linux, Windows
ติดตั้ง Ollama:
# macOS / Linux
curl -fsSL https://ollama.com/install.sh | sh
# หรือบน macOS ดาวน์โหลด app จาก https://ollama.com/download
รัน Gemma 4:
# Default (E4B) — เหมาะกับเครื่องที่มี RAM 8GB+
ollama run gemma4
# เลือกขนาดเฉพาะ
ollama run gemma4:e2b # เล็กสุด ~3.2GB
ollama run gemma4:e4b # default ~5GB
ollama run gemma4:26b # MoE ~15.6GB
ollama run gemma4:31b # ใหญ่สุด ~17.4GB
พอรันคำสั่งนี้ Ollama จะดาวน์โหลดโมเดล (ครั้งแรกเท่านั้น) แล้วเปิด chat prompt ให้พิมพ์คุยได้เลย
เรียกผ่าน API:
Ollama เปิด REST API ที่ port 11434 อัตโนมัติ:
curl http://localhost:11434/api/chat -d '{
"model": "gemma4",
"messages": [
{"role": "system", "content": "คุณเป็นผู้ช่วย AI ที่ตอบภาษาไทย"},
{"role": "user", "content": "อธิบาย Kubernetes แบบสั้นๆ"}
]
}'
ข้อดีของ Ollama:
- ติดตั้งง่าย คำสั่งเดียว
- รองรับ Apple Silicon ใช้ MLX อัตโนมัติตั้งแต่ v0.19+
- มี OpenAI-compatible API ที่
/v1/chat/completions - จัดการ model versions ให้
3.3 Hugging Face Transformers (Python)
เหมาะกับคนที่อยากควบคุม pipeline เองทุกขั้นตอน
ติดตั้ง:
pip install "transformers>=5.5.0" torch accelerate
ใช้งาน:
from transformers import pipeline
MODEL_ID = "google/gemma-4-E4B-it"
pipe = pipeline(
task="any-to-any",
model=MODEL_ID,
device_map="auto",
dtype="auto",
)
messages = [
{"role": "system", "content": "คุณเป็นผู้ช่วย AI ที่ตอบภาษาไทย"},
{"role": "user", "content": "อธิบายว่า Docker ต่างจาก VM ยังไง"},
]
output = pipe(text=pipe.tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
))
print(output[0]["generated_text"])
โมเดลที่มีบน Hugging Face:
google/gemma-4-E2B-it— instruct version ของ E2Bgoogle/gemma-4-E4B-it— instruct version ของ E4Bgoogle/gemma-4-26B-A4B-it— instruct version ของ 26B MoEgoogle/gemma-4-31B-it— instruct version ของ 31B
ถ้าต้องการ quantized version ดูได้ที่ Unsloth: unsloth/gemma-4-E4B-it-GGUF ฯลฯ
3.4 LM Studio (GUI desktop app)
สำหรับคนที่ไม่อยาก terminal — LM Studio เป็น desktop app ที่รัน LLM ได้ง่ายๆ
- ดาวน์โหลดจาก lmstudio.ai
- ค้นหา "gemma-4" ในแถบ Models
- เลือกขนาดที่เหมาะกับ RAM ของเครื่อง
- กด Download แล้ว Chat ได้เลย
LM Studio รองรับ GGUF format และเปิด local server ให้เรียกผ่าน API ได้เหมือน Ollama
3.5 vLLM / SGLang (production server)
สำหรับ production ที่ต้องรับ traffic จริง vLLM คือ standard
pip install vllm
# รัน server
vllm serve google/gemma-4-31B-it \
--dtype auto \
--max-model-len 65536 \
--port 8000
server จะเปิด OpenAI-compatible API ที่ http://localhost:8000/v1/chat/completions ใช้ library อะไรก็ได้ที่รองรับ OpenAI format เรียกได้ทันที
Docker version:
docker run --gpus all \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-e HF_TOKEN=$HF_TOKEN \
-p 8000:8000 \
--ipc=host \
vllm/vllm-openai:latest \
--model google/gemma-4-31B-it
vLLM จัดการ batching, KV-cache, continuous batching ให้อัตโนมัติ throughput สูงกว่ารัน Transformers ตรงๆ หลายเท่า
4. ใช้งานพื้นฐาน — Chat, System Prompt, Streaming
Prompt Format ของ Gemma 4
Gemma 4 ใช้ token format เฉพาะของตัวเอง:
<|turn>system
คุณเป็นผู้ช่วย AI ที่ตอบภาษาไทย<turn|>
<|turn>user
อธิบาย Kubernetes แบบสั้นๆ<turn|>
<|turn>model
ในทางปฏิบัติ ถ้าใช้ Ollama หรือ Transformers pipeline ไม่ต้องจัดการ format เอง — library จัดการให้ แต่ถ้าเรียก API ตรงหรือเขียน custom inference ต้องรู้ format นี้
System Prompt
Gemma 4 รองรับ system role เป็น native ไม่ต้อง hack ใส่ใน user message เหมือนโมเดลรุ่นเก่า:
messages = [
{
"role": "system",
"content": "คุณเป็น senior software engineer ที่เชี่ยวชาญ Kubernetes "
"ตอบสั้นกระชับ ให้ command ตัวอย่างเสมอ"
},
{
"role": "user",
"content": "pod ค้างอยู่ที่ CrashLoopBackOff ต้องทำยังไง"
},
]
Streaming ผ่าน Ollama API
curl http://localhost:11434/api/chat -d '{
"model": "gemma4",
"messages": [
{"role": "user", "content": "เขียน Python function หา Fibonacci"}
],
"stream": true
}'
output จะมาทีละ chunk เหมาะกับ UI ที่ต้องแสดงผลแบบ real-time
Streaming ผ่าน Python (OpenAI-compatible)
from openai import OpenAI
# ชี้ไปที่ Ollama หรือ vLLM server
client = OpenAI(base_url="http://localhost:11434/v1", api_key="unused")
stream = client.chat.completions.create(
model="gemma4",
messages=[
{"role": "system", "content": "ตอบภาษาไทย สั้นกระชับ"},
{"role": "user", "content": "อธิบาย event loop ของ Node.js"},
],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
5. Thinking Mode — ให้โมเดลคิดก่อนตอบ
Thinking Mode คือความสามารถที่ให้โมเดล คิดทีละขั้น (chain-of-thought) ก่อนจะให้คำตอบสุดท้าย เหมาะกับโจทย์ที่ต้องใช้เหตุผลซับซ้อน
วิธีเปิด Thinking Mode
ใส่ token <|think|> ไว้ที่ต้น system prompt:
<|turn>system
<|think|>คุณเป็นนักคณิตศาสตร์<turn|>
<|turn>user
ถ้า x^2 + 5x + 6 = 0 หา x<turn|>
<|turn>model
เมื่อเปิด thinking mode โมเดลจะ output ความคิดภายในก่อน:
<|channel>thought
ต้องหาค่า x จากสมการกำลังสอง
x^2 + 5x + 6 = 0
แยกตัวประกอบ: (x+2)(x+3) = 0
ดังนั้น x = -2 หรือ x = -3
<channel|>
คำตอบ: x = -2 หรือ x = -3
ใช้กับ Ollama
curl http://localhost:11434/api/chat -d '{
"model": "gemma4",
"messages": [
{
"role": "system",
"content": "<|think|>คุณเป็นผู้เชี่ยวชาญแก้ปัญหา logic"
},
{
"role": "user",
"content": "ห้องหนึ่งมีคน 3 คน คนแรกพูดจริงเสมอ คนที่สองโกหกเสมอ คนที่สามสุ่ม ถ้าถามคำถามเดียว จะรู้ได้ไหมว่าใครเป็นใคร?"
}
]
}'
ข้อสำคัญ: จัดการ thinking tokens ใน multi-turn
เวลาส่ง conversation history กลับไปให้โมเดล ต้อง strip thinking tokens ออก เอาแค่คำตอบสุดท้าย ไม่งั้นโมเดลจะสับสนกับ context เก่า
import re
def strip_thinking(response: str) -> str:
"""ลบ thinking tokens ออกจาก response"""
return re.sub(
r"<\|channel>thought.*?<channel\|>",
"",
response,
flags=re.DOTALL,
).strip()
เมื่อไหร่ควรเปิด / ปิด?
| สถานการณ์ | Thinking Mode |
|---|---|
| โจทย์คณิตศาสตร์ / logic | ✓ เปิด |
| เขียนโค้ดที่ซับซ้อน | ✓ เปิด |
| วิเคราะห์ข้อมูล | ✓ เปิด |
| Chat ทั่วไป | ✗ ปิด (เร็วกว่า) |
| Summarize ข้อความ | ✗ ปิด |
| Translate | ✗ ปิด |
เปิด thinking mode ทำให้ output ยาวขึ้นและช้าลง — ใช้เฉพาะเมื่อต้องการจริงๆ
Tip: ถ้าต้องการลด thinking tokens ลง ~20% ใส่คำว่า "คิดสั้นๆ" หรือ "think briefly" ใน system prompt
6. Function Calling — ให้โมเดลเรียกเครื่องมือ
Function Calling ทำให้โมเดลสามารถ "เรียก function" ที่เรากำหนดไว้ได้ แทนที่จะแค่ตอบเป็นข้อความ โมเดลจะ output ชื่อ function + arguments ให้เราไปเรียกจริง แล้วส่งผลลัพธ์กลับ
กำหนด Tools
Gemma 4 ใช้ token <|tool> ในการกำหนด tool:
<|turn>system
คุณเป็นผู้ช่วยที่ใช้เครื่องมือได้
<|tool>get_weather{location:string, unit:string}<tool|>
<|tool>search_database{query:string, limit:integer}<tool|><turn|>
<|turn>user
อากาศที่กรุงเทพวันนี้เป็นยังไง?<turn|>
<|turn>model
โมเดล Output Tool Call
โมเดลจะตอบกลับมาในรูปแบบ:
<|tool_call>call:get_weather{location:<|"|>Bangkok<|"|>, unit:<|"|>celsius<|"|>}<tool_call|>
ส่งผลลัพธ์กลับ
หลังจากเราเรียก function จริงแล้ว ส่งผลลัพธ์กลับด้วย <|tool_response>:
<|tool_response>response:get_weather{temperature:<|"|>32<|"|>, condition:<|"|>partly cloudy<|"|>}<tool_response|>
ตัวอย่าง Agentic Loop (Python)
import json
import requests
TOOLS = {
"get_weather": lambda location, unit="celsius": {
"temperature": 32,
"condition": "partly cloudy",
"location": location,
},
"search_database": lambda query, limit=10: {
"results": [f"Result for '{query}'"],
"count": 1,
},
}
def agent_loop(user_message: str, max_rounds: int = 5):
messages = [
{"role": "system", "content": "คุณเป็นผู้ช่วยที่ใช้เครื่องมือได้"},
{"role": "user", "content": user_message},
]
for _ in range(max_rounds):
response = requests.post(
"http://localhost:11434/api/chat",
json={"model": "gemma4", "messages": messages, "stream": False},
).json()
assistant_msg = response["message"]["content"]
# ถ้าไม่มี tool_call → ตอบเสร็จแล้ว
if "<|tool_call>" not in assistant_msg:
return assistant_msg
# Parse tool call แล้วเรียก function จริง
# (ในโค้ดจริงต้อง parse token อย่างระวัง)
func_name, kwargs = parse_tool_call(assistant_msg)
result = TOOLS[func_name](**kwargs)
# ส่งผลลัพธ์กลับแล้ววนรอบใหม่
messages.append({"role": "assistant", "content": assistant_msg})
messages.append({"role": "tool", "content": json.dumps(result)})
return "เกินจำนวนรอบที่กำหนด"
Pattern สำคัญ
- กำหนด tools ให้ชัดเจน — ชื่อ function + parameter types
- Parse tool_call — แยก function name กับ arguments
- เรียก function จริง — ฝั่ง application ทำ
- ส่งผลลัพธ์กลับ — ผ่าน tool_response
- วนรอบ — จนกว่าโมเดลจะตอบโดยไม่เรียก tool
pattern นี้คือ agentic loop ที่ทำให้โมเดลกลายเป็น AI Agent ที่คิดและลงมือทำได้
7. Image Understanding — วิเคราะห์รูปภาพ
Gemma 4 ทุกขนาดรองรับ image input ไม่ต้องต่อ vision model แยก