Section 6/141 menit
6. Prompt Engineering untuk On-Device Models
6. Prompt Engineering untuk On-Device Models
Karakteristik Model On-Device vs Cloud
Model Apple Intelligence yang berjalan on-device lebih kecil dari model cloud seperti GPT-4 atau Claude. Ini memiliki implikasi langsung pada cara menulis prompt:
| Aspek | Model On-Device | Model Cloud Besar |
|---|---|---|
| Ukuran konteks | Lebih terbatas | Lebih besar |
| Reasoning kompleks | Lebih terbatas | Lebih kuat |
| Bahasa alami | Sangat baik | Sangat baik |
| Format output ketat | Sangat baik (via @Generable) |
Baik |
| Kecepatan | Sangat cepat (lokal) | Lebih lambat (network) |
| Privasi | Sepenuhnya privat | Data ke server |
Teknik Prompt yang Efektif untuk On-Device
1. Instruksi yang Spesifik dan Singkat
swift
// ❌ Instruksi ambigu dan panjang
let badInstructions = """
Kamu adalah asisten yang sangat cerdas dan berpengalaman dalam berbagai bidang ilmu pengetahuan,
teknologi, seni, bisnis, dan kehidupan sehari-hari. Kamu selalu berusaha memberikan jawaban
yang komprehensif, informatif, dan berguna untuk pengguna dari berbagai latar belakang...
"""
// ✓ Instruksi spesifik dan terfokus
let goodInstructions = """
Kamu asisten belanja. Bantu pengguna membandingkan produk dan buat keputusan pembelian.
Respons maksimal 3 kalimat. Selalu sebutkan harga jika relevan.
"""
2. One-Shot dan Few-Shot Examples dalam Prompt
swift
func buildExtractionPrompt(for text: String) -> String {
// Few-shot: berikan contoh sebelum meminta model mengerjakan task
return """
Ekstrak informasi kontak dari teks. Format output sesuai yang diminta.
Contoh input: "Hubungi Budi Santoso di 0812-3456-7890 atau email budi@gmail.com"
Contoh output yang diharapkan: nama=Budi Santoso, phone=081234567890, email=budi@gmail.com
Sekarang ekstrak dari teks berikut:
"\(text)"
"""
}
3. Decomposisi Task Kompleks
swift
// ❌ Satu prompt kompleks: model on-device mungkin kesulitan
let complexPrompt = """
Analisis artikel ini, tentukan sentimen, ekstrak semua nama orang dan organisasi yang disebutkan,
buat ringkasan 100 kata, dan berikan rating kredibilitas dari 1-10 beserta alasannya.
"""
// ✓ Decomposisi menjadi beberapa langkah
class ArticleAnalyzer {
let session = LanguageModelSession()
func analyze(article: String) async throws -> ArticleAnalysis {
// Step 1: Sentimen (sederhana, cepat)
let sentiment = try await session.respond(
to: "Apa sentimen artikel ini? Jawab satu kata: positif, negatif, atau netral.\n\n\(article)"
).content.trimmingCharacters(in: .whitespaces)
// Step 2: Entitas (terstruktur via @Generable)
let entities = try await extractEntities(from: article)
// Step 3: Ringkasan (setelah konteks dibangun dari steps sebelumnya)
let summary = try await session.respond(
to: "Buat ringkasan 100 kata dari artikel yang sudah kita bahas."
).content
return ArticleAnalysis(sentiment: sentiment, entities: entities, summary: summary)
}
}
4. Constraint Output via @Guide
Lebih efektif dari mendeskripsikan format di prompt:
swift
// ❌ Format di prompt — model harus parse instruksi tekstual
let prompt = "Beri rating 1-5 dan alasan singkat. Format: Rating: X\nAlasan: Y"
// ✓ Format via @Generable — constraint di level schema
@Generable
struct Rating {
@Guide(description: "Rating dari 1 sampai 5")
var score: Int
@Guide(description: "Satu kalimat alasan rating")
var reason: String
}