Section 9/141 menit
9. Performance dan Context Compaction
9. Performance dan Context Compaction
Mengukur Latensi
swift
import os
class PerformanceMonitor {
private let signposter = OSSignposter()
func measureResponse(session: LanguageModelSession, prompt: String) async throws -> String {
let state = signposter.beginInterval("AI Response", id: signposter.makeSignpostID())
defer { signposter.endInterval("AI Response", state) }
let start = ContinuousClock.now
let response = try await session.respond(to: prompt).content
let elapsed = ContinuousClock.now - start
// Log ke analytics jika latensi terlalu tinggi
if elapsed > .seconds(5) {
Analytics.log("foundation_models_slow_response", parameters: [
"elapsed_seconds": elapsed.components.seconds,
"prompt_length": prompt.count
])
}
return response
}
}
Strategi untuk Prompt Panjang
swift
// Truncate konteks panjang sebelum dikirim ke model
extension String {
func truncatedForAI(maxCharacters: Int = 2000) -> String {
guard count > maxCharacters else { return self }
let truncated = prefix(maxCharacters)
return String(truncated) + "\n[... konten dipotong karena terlalu panjang ...]"
}
}
// Gunakan saat memproses dokumen besar
func summarizeLargeDocument(_ text: String) async throws -> String {
let truncated = text.truncatedForAI(maxCharacters: 3000)
let session = LanguageModelSession()
return try await session.respond(to: "Rangkum:\n\(truncated)").content
}
Context Compaction Otomatis
Foundation Models mengelola context window secara otomatis — saat context terlalu panjang, model secara internal merangkum bagian awal. Anda bisa mempengaruhi ini dengan struktur session:
swift
// Rancang conversations agar informasi penting ada di awal (instructions) bukan di tengah
let session = LanguageModelSession(
instructions: Instructions("""
Konteks penting yang harus selalu diingat:
- Pengguna: Budi Santoso, subscriber premium
- Preferensi bahasa: Indonesia
- Domain: iOS development
Jawab semua pertanyaan dengan mengacu pada konteks ini.
""")
)
// Instructions selalu ada di context window — tidak kena compaction