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.