Section 7/151 menit
7. Tool Calling
7. Tool Calling
Tool calling memungkinkan model memanggil kode Swift Anda untuk mendapatkan data real-time atau melakukan aksi sebelum memberikan jawaban akhir.
Mendefinisikan Tool
swift
import FoundationModels
// Tool mengambil data cuaca
struct WeatherTool: Tool {
// Nama yang dikenali model
let name = "get_current_weather"
let description = "Mengambil informasi cuaca terkini untuk sebuah kota"
// Argumen yang diberikan model ke tool — harus @Generable
@Generable
struct Arguments {
@Guide(description: "Nama kota dalam bahasa Inggris, contoh: Jakarta, Surabaya")
var city: String
@Guide(description: "Satuan suhu: celsius atau fahrenheit")
var unit: String
}
// Implementasi tool — dipanggil oleh framework saat model meminta
func call(arguments: Arguments) async throws -> ToolOutput {
// Dalam implementasi nyata: fetch dari weather API
let fakeWeather = "Cerah, \(25)°\(arguments.unit == "celsius" ? "C" : "F")"
return ToolOutput("Cuaca di \(arguments.city): \(fakeWeather)")
}
}
Session dengan Tools
swift
// Buat session dengan tools yang tersedia
let weatherSession = LanguageModelSession(tools: [WeatherTool()])
// Model akan otomatis memanggil WeatherTool jika diperlukan
let response = try await weatherSession.respond(
to: "Apakah cuaca di Bali cocok untuk surfing hari ini?"
)
print(response.content)
// Model memanggil get_current_weather(city: "Bali", unit: "celsius")
// lalu merangkai jawaban berdasarkan data cuaca yang dikembalikan
Multiple Tools
swift
struct CalendarTool: Tool {
let name = "get_calendar_events"
let description = "Mengambil jadwal/event dari kalender pengguna"
@Generable
struct Arguments {
@Guide(description: "Tanggal dalam format YYYY-MM-DD")
var date: String
}
func call(arguments: Arguments) async throws -> ToolOutput {
// Fetch dari EventKit dalam implementasi nyata
return ToolOutput("Jadwal untuk \(arguments.date): Rapat tim pukul 09:00, Makan siang pukul 12:00")
}
}
struct ReminderTool: Tool {
let name = "create_reminder"
let description = "Membuat pengingat baru untuk pengguna"
@Generable
struct Arguments {
@Guide(description: "Teks pengingat")
var text: String
@Guide(description: "Waktu pengingat dalam format HH:mm")
var time: String
}
func call(arguments: Arguments) async throws -> ToolOutput {
// Simpan ke EventKit / UserNotifications dalam implementasi nyata
return ToolOutput("Pengingat '\(arguments.text)' berhasil dibuat untuk pukul \(arguments.time)")
}
}
// Session asisten personal dengan banyak tools
let personalAssistantSession = LanguageModelSession(
tools: [WeatherTool(), CalendarTool(), ReminderTool()]
)
let response = try await personalAssistantSession.respond(
to: "Lihat jadwalku besok dan ingatkan saya 30 menit sebelum rapat pertama"
)
print(response.content)