Das Spezi LLM Swift-Paket enthält Module, die hilfreich sind, um LLM-bezogene Funktionen in Ihre Anwendung zu integrieren. Das Paket bietet alle erforderlichen Tools für die lokale LLM-Ausführung, die Verwendung von Remote OpenAI-basierten LLMs sowie LLMs, die auf Nebelknotenressourcen innerhalb des lokalen Netzwerks ausgeführt werden.
![]() | ![]() | ![]() |
|---|---|---|
OpenAI LLM Chat View | Language Model Download | Local LLM Chat View |
Sie müssen das Spezillm -Swift -Paket Ihrer App in Xcode oder Swift -Paket hinzufügen.
Wichtig
Wenn Ihre Anwendung noch nicht für die Verwendung von Spezi konfiguriert ist, befolgen Sie den Spezi -Setup -Artikel, um die Kern -Spezi -Infrastruktur einzurichten.
Da Spezi LLM eine Vielzahl verschiedener Ziele für bestimmte LLM -Funktionen enthält, befolgen Sie bitte das zusätzliche Setup -Handbuch im jeweiligen Zielabschnitt dieses Readme.
Spezi LLM bietet eine Reihe von Zielen, um Entwicklern dabei zu helfen, LLMs in ihre von Spezi basierenden Anwendungen zu integrieren:
Der folgende Abschnitt unterstreicht das Setup und die grundlegende Verwendung der Ziele Spezillmlocal, Spezillmopenai und Spezillmfog, um Sprachmodelle in eine Spezi-basierte Anwendung zu integrieren.
Notiz
Weitere Informationen zur Verwendung der einzelnen Ziele finden Sie in der Dokumentation des Pakets.
Das Ziel ermöglicht es den Entwicklern, einfach mittelgroße Sprachmodelle (LLMs) auszuführen. Mit dem Modul können Sie über rein schnelle APIs mit dem lokal ausgeführten LLM interagieren, wobei keine Interaktion mit niedrigem Code erforderlich ist und sich auf der Infrastruktur des Spezillm-Ziels aufbaut.
Wichtig
Spezi LLM Local ist nicht mit Simulatoren kompatibel. Die zugrunde liegende mlx-swift erfordert eine moderne Metallmetlgpuffamilie, und der Simulator liefert dies nicht.
Wichtig
Wichtig: Um das lokale LLM -Ziel zu verwenden, müssen einige LLMs das Ananspruch der Erhöhung des Speichergrenats zum Projekt hinzufügen.
Sie können die Spezi -LLM -Ausführung in der typischen SpeziAppDelegate konfigurieren. Im folgenden Beispiel ist der LLMRunner aus dem Spezillm -Ziel, das für die Bereitstellung von LLM -Funktionen innerhalb des Spezi -Ökosystems verantwortlich ist, mit der LLMLocalPlatform aus dem Spezillmlocal -Ziel konfiguriert. Dies bereitet den LLMRunner darauf vor, Sprachmodelle lokal auszuführen.
class TestAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMLocalPlatform ( )
}
}
}
} Das nachstehende Codebeispiel zeigt die Interaktion mit lokalen LLMs über den Spezillm LLMRunner , der über die oben gezeigte Configuration in die Swiftui Environment injiziert wird.
Das LLMLocalSchema definiert den Typ und die Konfigurationen der zu erwerbenen LLMLocalSession . Diese Transformation erfolgt über den LLMRunner , der die LLMLocalPlatform verwendet. Die Inferenz über LLMLocalSession/generate() gibt einen AsyncThrowingStream zurück, der alle erzeugten String ergibt.
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.
}
}
}
}
Notiz
Weitere Informationen zur Verwendung von Spezillmlocal finden Sie in der DOCC -Dokumentation.
Ein Modul, mit dem Sie mit GPT-basierten großsprachigen Modellen (LLMs) von OpenAI in Ihrer Spezi-Anwendung interagieren können. SpeziLLMOpenAI bietet eine reine schnell basierte API für die Interaktion mit der OpenAI-GPT-API, die auf der Infrastruktur des Spezillm-Ziels aufbaut. Darüber hinaus bietet SpeziLLMOpenAI Entwicklern eine deklarativen domänenspezifischen Sprache, um den OpenAI -Funktionsaufrufmechanismus zu verwenden. Dies ermöglicht eine strukturierte, bidirektionale und zuverlässige Kommunikation zwischen den OpenAI -LLMs und externen Werkzeugen wie dem Spezi -Ökosystem.
Um OpenAI LLMs innerhalb des Spezi -Ökosystems zu verwenden, muss der Spezillm LLMRunner in der Spezi Configuration mit der LLMOpenAIPlatform initialisiert werden. Erst danach kann der LLMRunner zur Inferenz von Openai LLMs verwendet werden. Weitere Informationen finden Sie in der Spezillm -Dokumentation.
import Spezi
import SpeziLLM
import SpeziLLMOpenAI
class LLMOpenAIAppDelegate : SpeziAppDelegate {
override var configuration : Configuration {
Configuration {
LLMRunner {
LLMOpenAIPlatform ( )
}
}
}
} Wichtig
Wenn Sie SpeziLLMOpenAI auf macOS verwenden, stellen Sie sicher, dass die Keychain Access Groups zum entsprechenden XCode -Projekt über Project_Name> Signing & Funktionen> + Funktionen hinzufügen. Das Array der Schlüsselbundgruppen kann leer gelassen werden, nur der Grundanspruch ist erforderlich.
Das nachstehende Codebeispiel zeigt die Interaktion mit einem Openai LLM durch die Spezillm LLMRunner , die über die oben gezeigte Configuration in die Swiftui Environment injiziert wird.
Das LLMOpenAISchema definiert den Typ und die Konfigurationen der zu ausgeführten LLMOpenAISession . Diese Transformation erfolgt über den LLMRunner , der die LLMOpenAIPlatform verwendet. Die Inferenz über LLMOpenAISession/generate() gibt einen AsyncThrowingStream zurück, der alle erzeugten String ergibt.
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.
}
}
}
}
Notiz
Weitere Informationen zur Verwendung von Spezillmopenai finden Sie in der Dokumentation der DOCC.
Mit dem SpeziLLMFog -Ziel können Sie LLMs verwenden, die auf Fog Node Computing -Ressourcen im lokalen Netzwerk ausgeführt werden. Die Nebelknoten bewerben ihre Dienste über MDNs, sodass Kunden alle Nebelknoten entdecken können, die einen bestimmten Host innerhalb des lokalen Netzwerks bedienen. SpeziLLMFog sendet dann LLM -Inferenzjobs dynamisch in einen zufälligen Nebelknoten innerhalb des lokalen Netzwerks und streamt die Antwort, um ihn auf den Benutzer zu ermitteln.
Wichtig
SpeziLLMFog benötigt einen SpeziLLMFogNode innerhalb des lokalen Netzwerks, das auf einer Computerressource gehostet wird, die tatsächlich die Inferenzanforderungen ausführt. SpeziLLMFog stellt das SpeziLLMFogNode Docker-basierte Paket bereit, das eine einfache Einrichtung dieser Nebelknoten ermöglicht. Weitere Informationen finden Sie im FogNode -Verzeichnis auf der Stammebene des SPM -Pakets sowie im jeweiligen README.md .
Um Fog LLMs innerhalb des Spezi -Ökosystems zu verwenden, muss der Spezillm LLMRunner in der Spezi Configuration mit der LLMFogPlatform initialisiert werden. Erst danach kann der LLMRunner zur Folgerung mit Nebel LLMs verwendet werden. Weitere Informationen finden Sie in der Spezillm -Dokumentation. Das LLMFogPlatform muss mit dem benutzerdefinierten Root CA -Zertifikat initialisiert werden, mit dem das Node -Webdienstzertifikat unter Vertrag genommen wurde (siehe Dokumentation FogNode/README.md für weitere Informationen). Kopieren Sie das Root CA -Zertifikat aus dem Nebelknoten als Ressource mit SpeziLLMFog in die Anwendung und verwenden Sie es, um die LLMFogPlatform innerhalb der Spezi Configuration zu initialisieren.
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 ) )
}
}
}
}
} Das folgende Codebeispiel zeigt die Interaktion mit einem Nebel LLM durch die Spezillm LLMRunner , die über die oben gezeigte Configuration in die Swiftui Environment injiziert wird.
Das LLMFogSchema definiert den Typ und die Konfigurationen der zu ausgeführten LLMFogSession . Diese Transformation erfolgt über den LLMRunner , der die LLMFogPlatform verwendet. Die Inferenz über LLMFogSession/generate() gibt einen AsyncThrowingStream zurück, der alle erzeugten String ergibt. Die LLMFogSession entdeckt automatisch alle verfügbaren LLM -Nebelknoten innerhalb des lokalen Netzwerks beim Setup, und die Versand der LLM -Inferenzjobs in die Fog Computing -Ressource, streamen die Antwort zurück und überflüssig an den Benutzer.
Wichtig
Das LLMFogSchema akzeptiert eine Schließung, die ein Autorisierungs -Token zurückgibt, das mit jeder Anfrage an den Nebelknoten im Bearer -HTTP -Feld über die LLMFogParameters/init(modelType:systemPrompt:authToken:) übergeben wird. Das Token wird durch die Schließung auf jede LLM -Inferenzanfrage erstellt, da die LLMFogSession möglicherweise lange anhält und das Token daher auslaufen könnte. Stellen Sie sicher, dass die Schließung das Token angemessen zwischengespeichert, um unnötige Token -Refresh -Roundtrips für externe Systeme zu verhindern.
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.
}
}
}
}
Notiz
Weitere Informationen zur Verwendung von Spezillmfog finden Sie in der DOCC -Dokumentation.
Beiträge zu diesem Projekt sind willkommen. Bitte lesen Sie sicher, dass Sie die Beitragsrichtlinien und den Verhaltenskodex für den Mitwirkenden zuerst lesen.
Dieses Projekt ist unter der MIT -Lizenz lizenziert. Weitere Informationen finden Sie in Lizenzen.