0Pricing
AI Agents · Pelajaran

Penerapan Agen Ringan di Perangkat Tepi

Menjalankan model kecil pada Raspberry Pi dan perangkat tepi untuk respons berlatensi rendah.

Penerapan Agen Ringan di Perangkat Tepi adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Agen AI pada Perangkat Tepi

Agen tepi berjalan langsung pada perangkat IoT atau gateway lokal — Raspberry Pi, Jetson Nano, atau PC industri — bukan di cloud. Manfaatnya: latensi lebih rendah (tanpa perjalanan pulang-pergi), tetap berfungsi saat luring, dan biaya bandwidth lebih rendah. Konsekuensinya: komputasi dan RAM yang terbatas memerlukan model yang lebih kecil dan efisien.

Memilih Model untuk Penerapan di Perangkat Tepi

Perangkat tepi tidak dapat menjalankan GPT-4o atau Claude Opus. Model kecil yang dapat berjalan pada Raspberry Pi 5 (RAM 8 GB): Phi-3-mini (3,8 miliar parameter), Gemma-2B, TinyLlama-1.1B. Jika dikuantisasi menjadi 4-bit, model-model ini memerlukan RAM 1–3 GB dan berjalan pada kecepatan 5–15 token per detik di CPU.

# Model size reference for edge selection:
EDGE_MODELS = {
    'tinyllama-1.1b-q4': {
        'params': '1.1B', 'quantization': 'Q4_K_M',
        'ram_gb': 0.8, 'tokens_per_sec_cpu': 15,
        'use_case': 'simple classification, keyword detection'
    },
    'phi-3-mini-q4': {
        'params': '3.8B', 'quantization': 'Q4_K_M',
        'ram_gb': 2.5, 'tokens_per_sec_cpu': 8,
        'use_case': 'reasoning, multi-step decisions'
    },
    'gemma-2b-q4': {
        'params': '2B', 'quantization': 'Q4_K_M',
        'ram_gb': 1.5, 'tokens_per_sec_cpu': 10,
        'use_case': 'general assistant tasks'
    }
}

for name, info in EDGE_MODELS.items():
    print(f'{name}: {info["ram_gb"]}GB RAM, '
          f'{info["tokens_per_sec_cpu"]} tok/s — {info["use_case"]}')

Menginstal Ollama pada Raspberry Pi

Ollama adalah cara termudah untuk menjalankan LLM kecil pada perangkat keras lokal. Ollama mengelola pengunduhan model, kuantisasi, dan API REST lokal yang kompatibel dengan OpenAI SDK. Satu perintah menginstalnya; perintah lain mengunduh dan menjalankan model.

# Install Ollama (run on the Raspberry Pi terminal):
# curl -fsSL https://ollama.ai/install.sh | sh

# Pull and run a model:
# ollama pull phi3:mini
# ollama serve  (starts API on localhost:11434)

# Python client — uses the OpenAI-compatible endpoint:
from openai import OpenAI

local_client = OpenAI(
    base_url='http://localhost:11434/v1',
    api_key='ollama'  # Ollama ignores this but it is required by the SDK
)

def local_inference(prompt: str, model: str = 'phi3:mini') -> str:
    response = local_client.chat.completions.create(
        model=model,
        messages=[{'role': 'user', 'content': prompt}],
        max_tokens=256,
        temperature=0.1
    )
    return response.choices[0].message.content

result = local_inference('Is temperature 45C dangerous for a server room?')
print(result)

Kuantisasi GGUF 4-Bit

GGUF (GPT-Generated Unified Format) adalah format berkas yang digunakan oleh llama.cpp dan Ollama untuk model terkuantisasi. Q4_K_M berarti kuantisasi campuran 4-bit — sekitar 75% lebih kecil daripada fp32, dengan penurunan kualitas minimal untuk tugas penalaran di perangkat tepi.

# Understanding quantisation quality levels:
QUANTISATION_GUIDE = {
    'Q2_K': {'size_multiplier': 0.25, 'quality': 'poor', 'ram': 'minimal'},
    'Q4_K_M': {'size_multiplier': 0.45, 'quality': 'good', 'ram': 'low'},
    'Q5_K_M': {'size_multiplier': 0.55, 'quality': 'better', 'ram': 'medium'},
    'Q8_0': {'size_multiplier': 0.75, 'quality': 'near-original', 'ram': 'high'},
    'F16': {'size_multiplier': 1.0, 'quality': 'original', 'ram': 'full'}
}

# For edge: Q4_K_M is the sweet spot
# 7B model: 7B * 4bit/8 = 3.5 GB in Q4 vs 14 GB in F16

def estimate_vram_gb(param_billions: float, quant: str) -> float:
    multiplier = QUANT_GUIDE = {
        'Q4_K_M': 0.45, 'Q8_0': 0.75, 'F16': 1.0
    }
    return round(param_billions * multiplier.get(quant, 0.5), 2)

print(f'Phi-3-mini Q4_K_M: {estimate_vram_gb(3.8, "Q4_K_M")} GB')
print(f'Phi-3-mini F16: {estimate_vram_gb(3.8, "F16")} GB')

Mengoptimalkan Kecepatan Inferensi pada CPU

Pada perangkat tepi yang hanya menggunakan CPU, kecepatan inferensi bergantung pada jumlah utas dan penyimpanan tembolok instruksi. Tetapkan jumlah utas agar sesuai dengan jumlah inti CPU, buat instruksi sistem tetap singkat (instruksi tersebut diproses ulang pada setiap pemanggilan jika tidak disimpan dalam tembolok), dan kelompokkan kueri berulang jika memungkinkan.

import os
import time

# Ollama environment variables for performance tuning
# Set before starting the Ollama service:
# OLLAMA_NUM_PARALLEL=1  (single request at a time on small devices)
# OLLAMA_MAX_LOADED_MODELS=1  (only keep one model in RAM)

def timed_inference(prompt: str, client, model: str = 'phi3:mini') -> dict:
    start = time.time()
    response = client.chat.completions.create(
        model=model,
        messages=[{'role': 'user', 'content': prompt}],
        max_tokens=128
    )
    elapsed = time.time() - start
    text = response.choices[0].message.content
    tokens = len(text.split())  # approximate
    return {
        'text': text,
        'elapsed_s': round(elapsed, 2),
        'approx_tps': round(tokens / elapsed, 1)
    }

result = timed_inference('Classify: temperature=45C, normal range 18-30C. Action?',
                         local_client)
print(result)

Arsitektur Hibrida Tepi dan Awan

Arsitektur yang optimal menggunakan model tepi untuk keputusan yang cepat dan berisiko rendah (klasifikasi, logika ambang), lalu menyinkronkan data ke model awan untuk keputusan yang kompleks, jarang terjadi, atau berisiko tinggi. Agen tepi mengantrekan kueri kompleks dan mengirimkannya saat konektivitas memungkinkan.

import anthropic
import time

class HybridAgent:
    def __init__(self, edge_client, cloud_api_key: str):
        self.edge = edge_client  # Ollama local client
        self.cloud = anthropic.Anthropic(api_key=cloud_api_key)
        self.pending_cloud_queries = []

    def decide(self, context: dict) -> str:
        # Fast path: edge model for simple binary decisions
        simple_prompt = (
            f'Sensor: {context}. '
            'Respond with exactly one word: NORMAL or ALERT.'
        )
        edge_result = self.edge.chat.completions.create(
            model='phi3:mini',
            messages=[{'role': 'user', 'content': simple_prompt}],
            max_tokens=5
        ).choices[0].message.content.strip()

        if edge_result == 'ALERT':
            # Queue complex analysis for cloud
            self.pending_cloud_queries.append(context)

        return edge_result

    def sync_to_cloud(self):
        """Call when online connectivity is available."""
        for ctx in self.pending_cloud_queries:
            result = self.cloud.messages.create(
                model='claude-opus-4-5', max_tokens=512,
                messages=[{'role': 'user', 'content':
                    f'Full analysis of: {ctx}'}]
            )
            print('Cloud analysis:', result.content[0].text[:100])
        self.pending_cloud_queries.clear()

Antrean Luring untuk Sinkronisasi Awan

Agen tepi sering beroperasi di lingkungan dengan konektivitas yang terputus-putus. Simpan sementara kueri, pembacaan sensor, dan log tindakan secara lokal, lalu kirimkan ke awan saat konektivitas pulih. Gunakan basis data SQLite sebagai penyangga lokal.

import sqlite3
import json
from datetime import datetime

DB_PATH = '/home/pi/agent_buffer.db'

def init_buffer_db():
    conn = sqlite3.connect(DB_PATH)
    conn.execute("""
        CREATE TABLE IF NOT EXISTS sync_queue (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            type TEXT NOT NULL,
            payload TEXT NOT NULL,
            created_at TEXT NOT NULL,
            synced INTEGER DEFAULT 0
        )
    """)
    conn.commit()
    conn.close()

def buffer_for_sync(record_type: str, payload: dict):
    conn = sqlite3.connect(DB_PATH)
    conn.execute(
        'INSERT INTO sync_queue (type, payload, created_at) VALUES (?, ?, ?)',
        (record_type, json.dumps(payload), datetime.utcnow().isoformat())
    )
    conn.commit()
    conn.close()

def flush_to_cloud(cloud_fn):
    conn = sqlite3.connect(DB_PATH)
    rows = conn.execute(
        'SELECT id, type, payload FROM sync_queue WHERE synced=0 LIMIT 100'
    ).fetchall()
    for row_id, r_type, payload in rows:
        cloud_fn(r_type, json.loads(payload))
        conn.execute('UPDATE sync_queue SET synced=1 WHERE id=?', (row_id,))
    conn.commit()
    conn.close()
    print(f'Synced {len(rows)} records to cloud')

if __name__ == '__main__':
    import os, tempfile
    DB_PATH = os.path.join(tempfile.gettempdir(), 'agent_buffer_demo.db')
    init_buffer_db()
    buffer_for_sync('sensor_reading', {'temp': 22.5})
    flush_to_cloud(lambda t, p: print(f'Synced to cloud: {t} -> {p}'))

Memantau Kesehatan Agen Tepi

Perangkat tepi dapat menjadi terlalu panas, kehabisan RAM, atau mengalami kemacetan inferensi model. Terapkan pemantau kesehatan yang memeriksa suhu CPU, RAM yang tersedia, dan latensi inferensi, lalu menerbitkan metrik kesehatan ke awan.

import subprocess
import psutil  # pip install psutil

def get_edge_health() -> dict:
    cpu_percent = psutil.cpu_percent(interval=1)
    ram = psutil.virtual_memory()
    disk = psutil.disk_usage('/')

    # Read CPU temperature (Raspberry Pi specific)
    try:
        temp_output = subprocess.check_output(
            ['vcgencmd', 'measure_temp'], text=True
        )
        cpu_temp = float(temp_output.strip().replace("temp=", "").replace("'C", ""))
    except Exception:
        cpu_temp = -1.0  # not available on non-Pi hardware

    return {
        'cpu_percent': cpu_percent,
        'cpu_temp_c': cpu_temp,
        'ram_used_pct': ram.percent,
        'ram_available_mb': round(ram.available / 1024 / 1024),
        'disk_used_pct': disk.percent,
        'timestamp': datetime.utcnow().isoformat()
    }

health = get_edge_health()
print('Edge health:', health)

Penyimpanan Tembolok Inferensi untuk Agen Tepi

Model tepi lambat; simpan respons dalam tembolok untuk input yang identik. Untuk tugas klasifikasi sensor, perintah yang sama (misalnya, "temperature=23.5, classify") sering berulang. Tembolok kamus sederhana dengan TTL menghindari panggilan inferensi yang tidak perlu.

from datetime import datetime, timedelta
import hashlib

class InferenceCache:
    def __init__(self, ttl_seconds: int = 60):
        self.ttl = timedelta(seconds=ttl_seconds)
        self._cache: dict = {}  # hash -> {'result', 'expires'}

    def _key(self, prompt: str) -> str:
        return hashlib.md5(prompt.encode()).hexdigest()

    def get(self, prompt: str):
        key = self._key(prompt)
        entry = self._cache.get(key)
        if entry and datetime.utcnow() < entry['expires']:
            return entry['result']
        return None

    def set(self, prompt: str, result: str):
        key = self._key(prompt)
        self._cache[key] = {
            'result': result,
            'expires': datetime.utcnow() + self.ttl
        }

cache = InferenceCache(ttl_seconds=60)

def cached_edge_inference(prompt: str, client) -> str:
    cached = cache.get(prompt)
    if cached:
        print('Cache hit')
        return cached
    result = local_inference(prompt, client)
    cache.set(prompt, result)
    return result

Daftar Periksa Penerapan

Sebelum menerapkan agen tepi ke lingkungan produksi, pastikan hal-hal berikut: model muat di RAM yang tersedia dengan cadangan 20%, latensi inferensi memenuhi kebutuhan respons peristiwa, penyangga luring telah diuji, pemantauan kesehatan menerbitkan metrik, dan mulai ulang otomatis saat terjadi kerusakan telah dikonfigurasi.

# systemd service file for auto-restart (save as /etc/systemd/system/edge-agent.service)

SYSTEMD_SERVICE = '''
[Unit]
Description=IoT Edge Agent
After=network.target ollama.service
Requires=ollama.service

[Service]
User=pi
WorkingDirectory=/home/pi/edge-agent
ExecStart=/usr/bin/python3 /home/pi/edge-agent/agent.py
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
'''

# Enable:
# sudo systemctl enable edge-agent
# sudo systemctl start edge-agent
# sudo journalctl -u edge-agent -f  (follow logs)

print('Deployment checklist:')
checklist = [
    'Model RAM fits with 20% headroom',
    'Inference latency < response time requirement',
    'Offline SQLite buffer tested',
    'Health metrics publishing to cloud',
    'systemd auto-restart configured'
]
for item in checklist:
    print(f'  [ ] {item}')

Penyiapan Perangkat Keras Raspberry Pi

Sebelum menerapkan perangkat lunak, siapkan perangkat keras. Raspberry Pi 5 dengan RAM 8 GB adalah spesifikasi minimum yang direkomendasikan untuk menjalankan Phi-3-mini. Aktifkan pembagian memori GPU, nonaktifkan swap (karena mempercepat keausan penyimpanan flash), dan konfigurasikan IP statis untuk akses jarak jauh yang andal.

# Raspberry Pi setup notes (run manually over SSH):
# sudo raspi-config -> System -> GPU Memory -> 256
# Disable swap to protect SD card:
# sudo dphys-swapfile swapoff && sudo dphys-swapfile uninstall

def check_available_ram_mb():
    try:
        with open('/proc/meminfo') as f:
            for line in f:
                if line.startswith('MemAvailable'):
                    return int(line.split()[1]) // 1024
    except FileNotFoundError:
        return None

ram_mb = check_available_ram_mb()
if ram_mb is None:
    print('Could not read /proc/meminfo on this OS — simulated Pi reading: MemAvailable ~ 850 MB')
else:
    print(f'Available RAM: {ram_mb} MB')

Uji Pengetahuan

Apa arti kuantisasi Q4_K_M bagi model bahasa?

Rangkuman: Penerapan Agen Ringan di Tepi

Yang dibahas dalam pelajaran ini:

  • Pemilihan model: Phi-3-mini, Gemma-2B, TinyLlama untuk perangkat tepi; kuantisasi Q4_K_M
  • Ollama: server LLM lokal dengan API yang kompatibel dengan OpenAI pada port 11434
  • Arsitektur hibrida: model tepi untuk keputusan cepat, awan untuk analisis kompleks
  • Penyangga luring: antrean SQLite yang dikirim ke awan saat tersambung kembali
  • Tembolok inferensi: tembolok TTL menghindari inferensi berulang untuk perintah yang identik
  • Penerapan: layanan systemd untuk mulai ulang otomatis saat terjadi kerusakan

Kursus berikutnya: Pasar Agen dan Sistem Pengaya.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penerapan Agen Ringan di Perangkat Tepi” gratis?

Ya — teks lengkap “Penerapan Agen Ringan di Perangkat Tepi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Penerapan Agen Ringan di Perangkat Tepi”?

Menjalankan model kecil pada Raspberry Pi dan perangkat tepi untuk respons berlatensi rendah. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Penerapan Agen Ringan di Perangkat Tepi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Protokol MQTT untuk Integrasi Agen
  2. Pemrosesan Data Deret Waktu dalam Agen
  3. Respons Otomatis terhadap Peristiwa Sensor
  4. Penerapan Agen Ringan di Perangkat Tepi
← Kembali ke AI Agents