LiteRT-LM'nin Swift API'si, büyük dil modellerini iOS ve macOS uygulamalarına yerel olarak entegre etmenize olanak tanır. Çoklu format, araç kullanımı ve GPU hızlandırma (Metal aracılığıyla) gibi özellikler tam olarak desteklenir.
Giriş
Bir modeli başlatmak ve mesaj göndermek için Swift API'yi kullanma örneğini aşağıda bulabilirsiniz:
import LiteRTLM
// 1. Initialize the Engine with your model
let config = try EngineConfig(
modelPath: "path/to/model.litertlm",
backend: .gpu, // Use .cpu() for CPU execution
cacheDir: NSTemporaryDirectory()
)
let engine = Engine(engineConfig: config)
try await engine.initialize()
// 2. Start a new Conversation
let conversation = try await engine.createConversation()
// 3. Send a message and print the response
let response = try await conversation.sendMessage(Message("What is the capital of France?"))
print(response.toString)
Başlarken
Bu bölümde, LiteRT-LM Swift API'nin uygulamanıza nasıl entegre edileceğiyle ilgili talimatlar verilmektedir.
Swift Package Manager (SPM)
LiteRT-LM'yi Swift Package Manager'ı kullanarak Xcode projenize entegre edebilirsiniz.
- Projenizi Xcode'da açın ve File > Add Package Dependencies... (Dosya > Paket Bağımlılıkları Ekle...) seçeneğine gidin.
- Paket deposu URL'sini girin:
https://github.com/google-ai-edge/LiteRT-LM - Uygulama hedefinize eklemek için LiteRTLM kitaplığını seçin.
Package.swift kullanarak bir paket geliştiriyorsanız bunu bağımlılıklarınıza ekleyin:
dependencies: [
.package(url: "https://github.com/google-ai-edge/LiteRT-LM", from: "0.12.0")
]
Core API Kılavuzu
Bu bölümde, motor başlatma, görüşme yönetimi ve mesaj gönderme dahil olmak üzere LiteRT-LM Swift API'yi kullanmayla ilgili temel bileşenler ve iş akışları ayrıntılı olarak açıklanmaktadır.
Engine'i başlatma
Engine, model yükleme, kaynak ayırma ve yaşam döngüsü yönetimini gerçekleştirir.
import LiteRTLM
let engineConfig = try EngineConfig(
modelPath: "path/to/your/model.litertlm",
backend: .gpu, // Use .gpu for Metal hardware acceleration
maxNumTokens: 512, // Size of the KV-cache
cacheDir: NSTemporaryDirectory() // Writable directory for compilation cache
)
let engine = Engine(engineConfig: engineConfig)
try await engine.initialize()
Görüşme oluşturma
Conversation, sohbet geçmişini, sistem talimatlarını ve örnekleyici yapılandırmalarını yönetir.
// Configure custom sampling parameters
let samplerConfig = try SamplerConfig(
topK: 40,
topP: 0.95,
temperature: 0.7
)
// Create the conversation config with system instructions
let config = ConversationConfig(
systemMessage: Message("You are a helpful assistant."),
samplerConfig: samplerConfig
)
let conversation = try await engine.createConversation(with: config)
Mesajlar Gönderme
Modelle eşzamanlı veya eşzamansız (akış) olarak etkileşimde bulunabilirsiniz.
Senkronize Örnek
let response = try await conversation.sendMessage(Message("Hello!"))
print(response.toString)
Zaman uyumsuz (Akış) Örneği
let message = Message("Tell me a long story.")
for try await chunk in conversation.sendMessageStream(message) {
// Output response chunks in real-time
print(chunk.toString, terminator: "")
}
print()
Çok Formatlılık
Görsel veya ses özelliklerini kullanmak için motor başlatma sırasında özel arka uçları yapılandırdığınızdan emin olun.
let engineConfig = try EngineConfig(
modelPath: "path/to/multimodal_model.litertlm",
backend: .gpu,
visionBackend: .cpu(), // Enable CPU vision executor
audioBackend: .cpu(), // Enable CPU audio executor
cacheDir: NSTemporaryDirectory()
)
let engine = Engine(engineConfig: engineConfig)
try await engine.initialize()
Görüntü Girişi (Vision)
Resmi yol veya ham bayt olarak sağlama:
let imagePath = Bundle.main.path(forResource: "scenery", ofType: "jpg")!
let message = Message(contents: [
Content.imageFile(imagePath),
Content.text("Describe this image.")
])
let response = try await conversation.sendMessage(message)
print(response.toString)
Ses Girişi
Ses yolu sağlama:
let audioPath = Bundle.main.path(forResource: "recording", ofType: "wav")!
let message = Message(contents: [
Content.audioFile(audioPath),
Content.text("Transcribe this recording.")
])
let response = try await conversation.sendMessage(message)
print(response.toString)
🔴 Yeni: Çoklu Jeton Tahmini (MTP)
Çoklu jeton tahmini (MTP), kod çözme hızlarını önemli ölçüde hızlandıran bir performans optimizasyonudur. GPU/Metal arka uçlarını kullanan tüm görevler için evrensel olarak önerilir.
MTP'yi kullanmak için motoru başlatmadan önce deneysel işaretlerde spekülatif kod çözmeyi etkinleştirin.
import LiteRTLM
// Opt into experimental APIs to configure MTP
ExperimentalFlags.optIntoExperimentalAPIs()
ExperimentalFlags.enableSpeculativeDecoding = true
let engineConfig = try EngineConfig(
modelPath: "path/to/model.litertlm",
backend: .gpu,
cacheDir: NSTemporaryDirectory()
)
let engine = Engine(engineConfig: engineConfig)
try await engine.initialize()
Araçları tanımlama ve kullanma
Swift yapılarını, modelin mantık yürütmek için otomatik olarak çağırabileceği araçlar olarak tanımlayabilirsiniz.
Toolprotokolüne uyun.@ToolParamözellik sarmalayıcısını kullanarak parametreleri bildirin.run()yöntemini uygulayın.
import LiteRTLM
// 1. Define your custom tool
struct GetCurrentWeatherTool: Tool {
static let name = "get_current_weather"
static let description = "Get the current weather for a location."
@ToolParam(description: "The city and state, e.g. San Francisco, CA")
var location: String
@ToolParam(description: "The temperature unit to use (celsius or fahrenheit)")
var unit: String = "celsius"
func run() async throws -> Any {
// Call your weather API here
return [
"location": location,
"temperature": "22",
"unit": unit,
"condition": "sunny"
]
}
}
// 2. Register the tool in your conversation configuration
let config = ConversationConfig(
tools: [GetCurrentWeatherTool()]
)
let conversation = try await engine.createConversation(with: config)
// 3. The model will invoke the tool automatically if needed
let response = try await conversation.sendMessage(Message("What is the weather in Paris right now?"))
print(response.toString)