Paket Swift Spezi LLM mencakup modul yang bermanfaat untuk mengintegrasikan fungsionalitas terkait LLM dalam aplikasi Anda. Paket ini menyediakan semua alat yang diperlukan untuk eksekusi LLM lokal, penggunaan LLM berbasis openai jarak jauh, serta LLM yang berjalan pada sumber daya kabut kabut dalam jaringan lokal.
![]() | ![]() | ![]() |
|---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
Anda perlu menambahkan paket Spezillm Swift ke aplikasi Anda di Xcode atau Paket Swift.
Penting
Jika aplikasi Anda belum dikonfigurasi untuk menggunakan Spezi, ikuti artikel SPEZI Setup untuk mengatur infrastruktur inti Spezi.
Karena Spezi LLM berisi berbagai target yang berbeda untuk fungsionalitas LLM tertentu, silakan ikuti panduan pengaturan tambahan di bagian target masing -masing dari readme ini.
Spezi LLM menyediakan sejumlah target untuk membantu pengembang mengintegrasikan LLM dalam aplikasi berbasis Spezi:
Bagian di bawah ini menyoroti pengaturan dan penggunaan dasar target spezillmlocal, spezillmopenai, dan spezillmfog untuk mengintegrasikan model bahasa dalam aplikasi berbasis spezi.
Catatan
Untuk mempelajari lebih lanjut tentang penggunaan target individu, silakan merujuk ke dokumentasi Paket DOCC.
Target memungkinkan pengembang untuk dengan mudah menjalankan model bahasa ukuran sedang (LLM) secara lokal. Modul ini memungkinkan Anda untuk berinteraksi dengan LLM yang dijalankan secara lokal melalui API berbasis murni Swift, tidak ada interaksi dengan kode tingkat rendah yang diperlukan, dibangun di atas infrastruktur target spezillm.
Penting
Spezi llm Local tidak kompatibel dengan simulator. mlx-swift yang mendasari membutuhkan mtlgpufamily logam modern dan simulator tidak menyediakannya.
Penting
PENTING: Untuk menggunakan target lokal LLM, beberapa LLM perlu menambahkan peningkatan hak batas memori ke proyek.
Anda dapat mengonfigurasi eksekusi LLM Lokal Spezi dalam SpeziAppDelegate yang khas. Dalam contoh di bawah ini, LLMRunner dari target spezillm yang bertanggung jawab untuk menyediakan fungsionalitas LLM dalam ekosistem Spezi dikonfigurasi dengan LLMLocalPlatform dari target spezillmlocal. Ini mempersiapkan LLMRunner untuk mengeksekusi model bahasa lokal.
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
} Contoh kode di bawah ini menampilkan interaksi dengan LLM lokal melalui Spezillm LLMRunner , yang disuntikkan ke Environment SwiftUi melalui Configuration yang ditunjukkan di atas.
LLMLocalSchema mendefinisikan jenis dan konfigurasi LLMLocalSession yang akan dieksekusi. Transformasi ini dilakukan melalui LLMRunner yang menggunakan LLMLocalPlatform . Inferensi melalui LLMLocalSession/generate() mengembalikan AsyncThrowingStream yang menghasilkan semua potongan String yang dihasilkan.
struct LLMLocalDemoView : View {
@ Environment ( LLMRunner . self ) var runner
@ State var responseText = " "
var body : some View {
Text ( responseText )
. task {
// Instantiate the `LLMLocalSchema` to an `LLMLocalSession` via the `LLMRunner`.
let llmSession : LLMLocalSession = runner (
with : LLMLocalSchema (
model : . llama3_8B_4bit ,
formatChat : LLMLocalSchema . PromptFormattingDefaults . llama3
)
)
do {
for try await token in try await llmSession . generate ( ) {
responseText . append ( token )
}
} catch {
// Handle errors here. E.g., you can use `ViewState` and `viewStateAlert` from SpeziViews.
}
}
}
}
Catatan
Untuk mempelajari lebih lanjut tentang penggunaan spezillmlocal, silakan merujuk ke dokumentasi DOCC.
Modul yang memungkinkan Anda untuk berinteraksi dengan model bahasa besar (LLM) berbasis GPT dari OpenAi dalam aplikasi Spezi Anda. SpeziLLMOpenAI menyediakan API berbasis Swift murni untuk berinteraksi dengan API Openai GPT, yang dibangun di atas infrastruktur target Spezillm. Selain itu, SpeziLLMOpenAI memberi pengembang bahasa spesifik domain deklaratif untuk memanfaatkan mekanisme panggilan fungsi openai. Ini memungkinkan komunikasi terstruktur, dua arah, dan andal antara OpenAI LLMS dan alat eksternal, seperti ekosistem Spezi.
Untuk menggunakan OpenAI LLMS di dalam ekosistem Spezi, Spezillm LLMRunner perlu diinisialisasi dalam Configuration Spezi dengan LLMOpenAIPlatform . Hanya setelah itu, LLMRunner dapat digunakan untuk inferensi llms openai. Lihat dokumentasi Spezillm untuk lebih jelasnya.
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
} Penting
Jika menggunakan SpeziLLMOpenAI pada macOS, pastikan untuk menambahkan hak Keychain Access Groups ke proyek XCODE yang melampirkan melalui Project_name> Penandatanganan & Kemampuan> + Kemampuan . Array grup kunci dapat dibiarkan kosong, hanya hak dasar yang diperlukan.
Contoh kode di bawah ini menampilkan interaksi dengan OpenAI LLM melalui Spezillm LLMRunner , yang disuntikkan ke Environment SwiftUi melalui Configuration yang ditunjukkan di atas.
LLMOpenAISchema mendefinisikan jenis dan konfigurasi LLMOpenAISession yang akan dieksekusi. Transformasi ini dilakukan melalui LLMRunner yang menggunakan LLMOpenAIPlatform . Inferensi melalui LLMOpenAISession/generate() mengembalikan AsyncThrowingStream yang menghasilkan semua potongan String yang dihasilkan.
import SpeziLLM
import SpeziLLMOpenAI
import SwiftUI
struct LLMOpenAIDemoView : View {
@ Environment ( LLMRunner . self ) var runner
@ State var responseText = " "
var body : some View {
Text ( responseText )
. task {
// Instantiate the `LLMOpenAISchema` to an `LLMOpenAISession` via the `LLMRunner`.
let llmSession : LLMOpenAISession = runner (
with : LLMOpenAISchema (
parameters : . init (
modelType : . gpt3_5Turbo ,
systemPrompt : " You're a helpful assistant that answers questions from users. " ,
overwritingToken : " abc123 "
)
)
)
do {
for try await token in try await llmSession . generate ( ) {
responseText . append ( token )
}
} catch {
// Handle errors here. E.g., you can use `ViewState` and `viewStateAlert` from SpeziViews.
}
}
}
}
Catatan
Untuk mempelajari lebih lanjut tentang penggunaan Spezillmopenai, silakan merujuk ke dokumentasi DOCC.
Target SpeziLLMFog memungkinkan Anda menggunakan LLMS yang berjalan pada sumber daya komputasi kabut kabut dalam jaringan lokal. Node kabut mengiklankan layanan mereka melalui MDNS, memungkinkan klien untuk menemukan semua node kabut yang melayani host tertentu dalam jaringan lokal. SpeziLLMFog kemudian mengirimkan pekerjaan inferensi LLM secara dinamis ke node kabut acak dalam jaringan lokal dan mengalirkan respons terhadap permukaannya ke pengguna.
Penting
SpeziLLMFog memerlukan SpeziLLMFogNode dalam jaringan lokal yang dihosting pada beberapa sumber daya komputasi yang benar -benar melakukan permintaan inferensi. SpeziLLMFog menyediakan paket berbasis SpeziLLMFogNode Docker yang memungkinkan pengaturan mudah dari node kabut ini. Lihat Direktori FogNode pada level root dari paket SPM serta masing -masing README.md untuk detail lebih lanjut.
Untuk menggunakan FOG LLMS di dalam ekosistem Spezi, Spezillm LLMRunner perlu diinisialisasi dalam Configuration Spezi dengan LLMFogPlatform . Hanya setelah itu, LLMRunner dapat digunakan untuk inferensi dengan FOG LLMS. Lihat dokumentasi Spezillm untuk lebih jelasnya. LLMFogPlatform perlu diinisialisasi dengan sertifikat CA root khusus yang digunakan untuk menandatangani sertifikat layanan web Node Fog (lihat dokumentasi FogNode/README.md untuk informasi lebih lanjut). Salin sertifikat Root CA dari node kabut sebagai sumber daya ke aplikasi menggunakan SpeziLLMFog dan gunakan untuk menginisialisasi LLMFogPlatform dalam Configuration spezi.
class LLMFogAppDelegate : SpeziAppDelegate {
private nonisolated static var caCertificateUrl : URL {
// Return local file URL of root CA certificate in the `.crt` format
}
override var configuration : Configuration {
Configuration {
LLMRunner {
// Set up the Fog platform with the custom CA certificate
LLMRunner {
LLMFogPlatform ( configuration : . init ( caCertificate : Self . caCertificateUrl ) )
}
}
}
}
} Contoh kode di bawah ini menampilkan interaksi dengan kabut llm melalui spezillm LLMRunner , yang disuntikkan ke Environment SwiftUi melalui Configuration yang ditunjukkan di atas.
LLMFogSchema mendefinisikan jenis dan konfigurasi LLMFogSession yang akan dieksekusi. Transformasi ini dilakukan melalui LLMRunner yang menggunakan LLMFogPlatform . Inferensi via LLMFogSession/generate() mengembalikan AsyncThrowingStream yang menghasilkan semua potongan String yang dihasilkan. LLMFogSession secara otomatis menemukan semua node kabut LLM yang tersedia di dalam jaringan lokal setelah diatur dan mengirimkan pekerjaan inferensi LLM ke sumber daya komputasi kabut, mengalirkan respons dan memunculkannya ke pengguna.
Penting
LLMFogSchema menerima penutupan yang mengembalikan token otorisasi yang diteruskan dengan setiap permintaan ke node kabut di bidang Bearer HTTP melalui LLMFogParameters/init(modelType:systemPrompt:authToken:) . Token dibuat melalui penutupan pada setiap permintaan inferensi LLM, karena LLMFogSession mungkin tahan lama dan karenanya token dapat berakhir. Pastikan bahwa penutupan dengan tepat menyimpan token untuk mencegah token yang tidak perlu menyegarkan trip bundar ke sistem eksternal.
struct LLMFogDemoView : View {
@ Environment ( LLMRunner . self ) var runner
@ State var responseText = " "
var body : some View {
Text ( responseText )
. task {
// Instantiate the `LLMFogSchema` to an `LLMFogSession` via the `LLMRunner`.
let llmSession : LLMFogSession = runner (
with : LLMFogSchema (
parameters : . init (
modelType : . llama7B ,
systemPrompt : " You're a helpful assistant that answers questions from users. " ,
authToken : {
// Return authorization token as `String` or `nil` if no token is required by the Fog node.
}
)
)
)
do {
for try await token in try await llmSession . generate ( ) {
responseText . append ( token )
}
} catch {
// Handle errors here. E.g., you can use `ViewState` and `viewStateAlert` from SpeziViews.
}
}
}
}
Catatan
Untuk mempelajari lebih lanjut tentang penggunaan Spezillmfog, silakan merujuk ke dokumentasi DOCC.
Kontribusi untuk proyek ini dipersilakan. Harap pastikan untuk membaca Pedoman Kontribusi dan Kode Etik Perjanjian Kontributor terlebih dahulu.
Proyek ini dilisensikan di bawah lisensi MIT. Lihat lisensi untuk informasi lebih lanjut.